Code

Code

Zur Beantwortung der Frage, welche Programmiersprachen ich beherrsche, fehlen zwei relevante Definitionen, denn was ist mit Programmiersprache gemeint und wie ist Können definiert? Daher unterhalte ich hier eine alphabetisch sortierte, aktuelle Liste mit Programmiersprachen, mit denen ich in den letzten Jahren gearbeitet habe und was ich damit gemacht habe. Dabei liste ich auch einige Sprachen, die nicht direkt als Programmiersprache gesehen werden, jedoch trotzdem relevant sind.

Programmiersprachen

Es sind hier nur Sprachen gelistet, mit denen ich mich längere Zeit beschäftigt habe. Verhältnismäßig kurze Ausflüge in Schule, Studium und Privatleben in Assembler, Delphi, Haskell, Lua, NXC, Perl, Ruby, Scala, Turbo Pascal, VHDL und Visual Basic zähle ich nicht dazu.

awk

awk ist eine Skriptsprache, die fast in jeder Unix- oder Linux-Distribution zu finden ist. In Kombination mit sed in Shell Skripten oder Makefiles können mit awk Informationsströme überarbeitet oder umformatiert werden. Daher kommt awk häufig zum Einsatz, wenn es darum geht CSV-Dateien zu verarbeiten oder auszuwerten.

Ich benutzte awk, wenn ich mit dem pipes-and-filters-Muster arbeite und zum Beispiel händisch erfasste Experimentdaten mit den Ausgaben von Programmen vergleiche. Hierfür habe ich mir ein auf einem Makefile, Shellskript und awk basiertes System entwickelt, welches aus vorliegenden Skripten, HTML-Templates und CSV-Daten automatisch eine Dokumentationswebseite zusammenstellt, wie es im Falle meines Bachelorprojektes erforderlich war.

Sämtliche Tabellen, Diagramme, Diagrammbeschriftungen und Usage-Beschreibungen der Skripte auf der Dokumentationswebseite werden automatisch erstellt, beziehungsweise mit Hilfe von awk in HTML umformatiert.

C/C++

Bei C und C++ handelt es sich um grundlegende Sprachen für die System- und Anwendungsprogrammierung. Im Zuge meines Informatikstudiums hatte ich das Glück einen ausgiebigen Programmierkurs in C/C++ bei einer sehr engagierten Dozentin zu besuchen. Zusätzlich zu dem Kurs gab es das Hardwarepraktikum, wo wir mit C FPGAs auf Robotern programmiert haben und ein Projekt, bei dem mit NXC ein Lego Mindstorms NXT programmiert wurde. Das Abschlussprojekt im Programmierkurs, eine indexbasierte Suchmaschine für Textdateien, ist leider mein erstes und bisher letztes größeres Projekt in dieser Programmiersprache geblieben.

C#

Bei C# handelt es sich um eine objektorientierte Programmiersprache von Microsoft. Im Zuge meines Informatikstudiums musste ich in einem per „Zufall“ zusammengewürfelten Team ein Softwarepraktikum absolvieren, bei dem es darum ging innerhalb von vier Monaten ein komplexes Echtzeitstrategiespiel zu entwerfen und umzusetzen. Als Technologien standen Microsofts Visual Studio, XNA und C# zur Verfügung. Im Team war ich Spieledesigner, Autor, Leveldesigner, Systemarchitekt und Programmierer.

Clojure

Bei Clojure handelt es sich um einen Lisp-Dialekt, der auf der Java Virtual Machine ausgeführt werden kann. Diese funktionale Programmiersprache bietet nicht nur eine einfache Unterstützung für nebenläufige Programmierung, sondern auch ein mit Lisp vergleichbares Makrosystem.

Clojure habe ich in meiner Zeit als HiWi in der AG Bioinformatik & Systembiologie an der Universität Ulm kennengelernt und dazu verwendet, ein System aus Makros zur Generierung und Auswertung eines speziellen Typs von neuronalen Netzen, so genannte Echo State Networks, zu entwickeln

CSS

Bei CSS handelt es sich um eine deklarative Sprache zur Gestaltung von Dokumenten. Im Zusammenspiel mit HTML gehört CSS zu den Grundlagen zur Darstellung von Webseiten im Internet. Daher habe ich in der Internet AG zum ersten Mal Kontakt mit CSS und habe die Entwicklung von CSS weiter verfolgt.

Auch wenn mir CSS seit vielen Jahren vertraut ist, verlasse ich mich häufig auf schon fertige Designs oder CSS Frameworks wie YAML als Grundlage. Der Grund hierfür ist, dass sich unterschiedlichen Browser besonders bei der Formatierung anders verhalten und auch noch eigene Erweiterungen für CSS mitbringen. Die Anpassung von Webseitendesigns an möglichst viele Browser erfordert also ein aktuelles Spezialwissen, welches durch die Kenntnis von CSS alleine nicht abgedeckt werden kann.

HTML

Bei HTML handelt es sich nicht um eine Programmiersprache, sondern um eine Auszeichnungssprache, wie auch der Name Hypertext Markup Language schon sagt.

Diese Sprache ist eine der Grundlagen des Internet, da sämtliche Webseiten damit formatiert werden. Daher gehörte HTML 3 zu den ersten Grundlagen, die ich in der Informatik AG in der Schule gelernt habe. Privat habe ich mir anschließend die Unterschiede zu HTML 4, HTML 5 und XHTML beigebracht und wende diese Auszeichnungssprachen seither regelmäßig an, wenn ich Templates für meine Webanwendungen entwerfe, oder Designs für CMS mit den vorgegebenen Standards kompatibel mache.

Java

Java ist eine objektorientierte Programmiersprache, welche auf einer virtuellen Maschine plattformübergreifend ausgeführt werden kann. Die Sprache ist Bestandteil vieler Informatik-Lehrveranstaltungen, in denen Problemlösungen in Java präsentiert und auch als Lösung in Übungsblättern und Klausuren erwartet werden.

Mein größtes Java-Projekt im Bachelorstudium war die selbstständige Erstellung eines Plugins mit GUI für die Bildverarbeitungs- und Bildbearbeitungssoftware ImageJ im Zuge meines Informatik-Studiums.

Im Masterstudium habe ich im Zuge eines Softwarepraktikums eine etwas komplexere Webanwendung zur Einbindung von Web-Office-Anwendungen und verschiedener entfernter Dateisysteme in Java entwickelt.

JavaScript

JavaScript ist eine Skriptsprache, die ursprünglich zur Manipulation von HTML und CSS, sowie zur Interaktion mit dem Benutzer von Webseiten entwickelt wurde. Inzwischen gibt es auch Serveranwendungen und Desktopprogramme, die JavaScript verwenden. Ziemlich bekannt wurde JavaScript mit AJAX, was eine Technik beschreibt, wobei mit JavaScript dynamisch Inhalte vom Server nachgeladen oder abgefragt werden.

Zu meinen Anfängen in der Erstellung von Webseiten stand ich ziemlich bald vor dem Problem, dass es beim Erstellen von Bildergalerien mit reinem HTML und CSS sich ständig wiederholende Elemente gab. Da mich das störte kaufte ich mir ein Buch zu JavaScript und schrieb meine erste DHTML Anwendung: eine Bildergalerie.

Diese wurde sehr bald durch eine PHP-Anwendung ersetzt und diese wiederum durch die Joomla!-Erweiterung Ponygallery ML (heute JoomGallery), wo ich mich eine Zeitlang unter anderem um den JavaScript-Code gekümmert habe.

Inzwischen gibt es auch Frameworks wie MooTools und JQuery und neue Standards wie HTML 5, mit denen die Entwicklung von interaktiven Elementen auf Webseiten bedeutend einfacher geworden ist. Damit gehört JavaScript zu der Skriptsprache, die ich schon am längsten in meinem Repertoire habe und auch über die Jahre immer wieder eingesetzt habe.

LaTeX

\LaTeX ist weniger eine Programmiersprache, als eine Software. Im wesentlichen können damit logisch ausgezeichnete Texte wie MARKDOWN_HASH055fdd300845945c950c8414fdf6b743MARKDOWN_HASH abhängig von den verwendeten Teilprogrammen, Plugins und Stilvorlagen in PDF, HTML, PostScript und weitere Formate umgewandelt werden. Es handelt sich bei \LaTeX also um ein professionelles Textsatzsystem (genauer: um die Erweiterung des professionellen Textsatzsystems \TeX).

Ich verwende \LaTeX regelmäßig zum Erstellen von Versuchsprotokollen, Lösungen von Übungsblättern, Briefen, Präsentationen oder Abschlussarbeiten, wie meiner Bachelorarbeit. Gelegentlich verwende ich es auch hier im Blog zur Darstellung einer Formel, oder um LaTeX in der Eigenschreibweise \LaTeX darzustellen.

Lisp

Bei Lisp handelt es sich um eine komplette Sprachfamilie, mit einigen Dialekten. Anwendung findet (fand?) Lisp hauptsächlich in der künstlichen Intelligenz.

Nachdem ich mir Clojure beigebracht habe, hatte ich das Glück in der vorlesungsfreien Zeit an einen Intensivkurs zu Common Lisp teilzunehmen. Gelegentlich verwende ich Emacs Lisp zur Modifikation meines Lieblingseditors, oder Scheme in Guile und ScriptFu.

Matlab

Bei Matlab handelt es sich um eine kommerzielle Software mit eigener IDE und einer C ähnlichen Sprache.

Im Zuge meiner Bachelorarbeit habe ich mich erstmals mit Matlab beschäftigt und grundlegende Prozeduren zur Verarbeitung, Analyse und Visualisierung von Bewegungsdaten im XML-Format entwickelt.

Auch im Zuge von Vorlesungen wie Bildverarbeitung konnte ich Matlab zur Entwicklung von typischen Algorithmen in dem Bereich einsetzen.

Maple

Bei Maple handelt es sich um ein Computeralgebrasystem, welches ich über mehrere Jahre hinweg im Mathematikunterricht eingesetzt habe.

Da wir dabei sich häufig wiederholende Codezeilen hatten, habe ich mir über den Unterricht hinaus grundlegende Programmierfähigkeiten selbst angeeignet und durfte für zwei Schulstunden unseren Lehrer vertreten, um dies auch meinen Klassenkameraden beizubringen. Während dem Studium habe ich Maple hin und wieder eingesetzt um meine Lösungen für Physik- und Matheübungsblätter zu überprüfen. Inzwischen verwende ich für solche kurzen Überprüfungen aber lieber Wolfram Alpha.

OCaml

Bei OCaml handelt es sich um eine Programmiersprache aus der ML Familie, welche beim Kompilieren recht effizienten Maschinencode erzeugen kann.

Es ist nicht übertrieben zu behaupten, dass ich mit OCaml richtig zu programmieren gelernt habe. Dies geschah während eines Praktikums in der AG Bioinformatik & Systembiologie der Universität Ulm, bei dem ich ein Programm zur Berechnung eines Booleschen Netzwerks schreiben durfte.

PHP

Bei PHP handelt es sich um eine Skriptsprache, die häufig zur Erstellung von Webanwendungen verwendet wird. Nachdem meine erste, auf DHTML basierende Bildergalerie mir immer noch zu unflexibel war, habe ich meine ersten Experimente mit PHP durchgeführt. Seither verwende ich diese Programmiersprache regelmäßig zur Erstellung von Webanwendungen oder Erweiterungen von CMS wie Contao, Joomla! und WordPress.

Python

Bei Python handelt es sich um eine häufig als Skriptsprache verwendete Programmiersprache mit Unterstützung mehrerer Paradigmen zur Programmierung.

Kennen gelernt habe ich Python in einer Grundvorlesung in meinem Informatikstudium, habe sie jedoch hauptsächlich für kleine Skripte und zum automatischen Auslesen von Daten auf Webseiten eingesetzt.

R

Bei R handelt es sich um eine weitgehend kompatible, freie Implementierung der Programmiersprache S zum statistischen Rechnen. Meinen ersten Kontakt mit R hatte ich in einer Bioinformatik Einführungsvorlesung, wo simple Probleme mit R gelöst wurden.

Danach habe ich R gelegentlich zur Erstellung von Diagrammen verwendet und im Zuge meiner Beschäftigung mit dem Thema Datenanalyse wieder neu entdeckt. Infolgedessen basiert die Umsetzung meines Bachelorprojektes, bei dem Bewegungsdaten im XML-Format ausgewertet wurden, hauptsächlich auf R.

Shell

Die Linux Shell –auch Kommandozeile oder Terminal genannt– bietet eine vollwertige Skriptsprache. Daher eignen sich Shellskripte zur Automatisierung von Aufgaben und wird von mir regelmäßig eingesetzt.

Viele der GUI basierten Programme unter Linux bieten zusätzlich einen Kommandozeilenmodus an, mit dem ich zum Beispiel die mit Inkscape erstellten Vektorgrafiken für meine Bachelorarbeit automatisch in PDF-Dateien zur Verwendung in \LaTeX umgewandelt habe.

Bei der Skriptsprache awk habe ich beschrieben, wie ich ein automatisiertes System zur Erstellung einer Dokumentationswebseite auf Basis eines Makefiles, Shellskripten und awk erstellt habe.

Aber auch Shellskripte zum automatischen Aktualisieren einer CMS-Installation via GitHub, Erstellen eines Spiegels einer Webseite, oder zum Abgleich von Benutzeraccounts zwischen mehreren CMS Installationen habe ich schon mit Shellskripten erstellt.

SQL

Bei SQL handelt es sich um eine Datenbanksprache zur Arbeit mit relationalen Datenbanken. Da Tabellen einer SQL-Datenbank Bestandteil der meisten Webanwendungen ist, hatte ich in den letzten Jahren auch regelmäßig damit zu tun. Durch die Vorlesung Datenbanken und Informationssysteme im Informatik Grundstudium habe ich dann noch einmal einen tieferen Einblick in SQL bekommen.

XML

Bei XML handelt es sich nicht um eine Programmiersprache, sondern um eine Auszeichnungssprache, wie auch der Name Extensible Markup Language schon sagt und vielen weiteren Technologien.

Im Zuge der Datenverarbeitung habe ich ständig mit Daten im XML-Format zu tun, sei es bei der Erstellung einer validen Bestellung für eine Verwaltungssoftware via Webformular, oder der Verarbeitung von mehreren hundert Megabyte großen XML-Dateien mit Experimentdaten

In einer Vertiefungsvorlesung zum Thema XML Technologien und einem begleitenden praktischen Projekt habe ich mich auch ausgiebig mit DTD, XSLT, XPath, XQuery, XML Schema, Web-Services, RDF und SPARQL beschäftigen können.

Editoren und IDEs

Da ich häufig danach gefragt werde, welche Editoren ich denn verwende, hier eine kleine Übersicht.

Eclipse

Ich bin kein großer Fan von Eclipse, wurde aber im Laufe meines Studiums immer wieder dazu gezwungen die IDE zu verwenden. Als IDE zur Entwicklung von Java bevorzuge ich NetBeans vor Eclipse, was aber eine rein subjektive Entscheidung ist, da sich auf meinen Systemen NetBeans einfach besser integriert und stabiler läuft.

Emacs

Emacs ist mein absoluter Lieblingseditor für bisher alle Programmiersprachen mit Ausnahme von Java.

gedit

gedit ist quasi der Standard Texteditor unter Gnome. Da ich meinen Emacs inzwischen ziemlich auf meine Bedürfnisse konfiguriert habe, ist es ab und zu erfrischend einen anderen Editor aufzumachen, um einen anderen Blick auf den Quellcode zu bekommen. Daher arbeite ich zwischendurch auch ganz gerne mal mit gedit.

Matlab

Habe ich schon bei den Programmiersprachen beschrieben und ist hier nur der Vollständigkeit halber gelistet.

Meld

Bei Meld handelt es sich nicht um einen klassischen Editor, sondern um ein Werkzeug um Dateien, Ordner oder Revisionen eines VCS zu vergleichen. Mit seiner Syntaxhervorhebung erledige ich Templateanpassungen, den Abgleich von Konfigurationsdateien mit den Standardwerten oder das Zusammenführen von Konflikten am liebsten mit Meld.

NetBeans

Wenn ich mit einer grafisch basierten IDE arbeite (und nicht mit Emacs), oder Java entwickle, dann ist NetBeans meine Wahl vor Eclipse. Es fühlt sich einfach angenehmer an, darin zu entwickeln, als mit Eclipse, ist also eine rein subjektive Entscheidung.

Vim

Wenn ich sowieso schon auf der Kommandozeile unterwegs bin und schnell eine Datei bearbeiten oder ein Shellskript erstellen möchte, dann ist Vim eindeutig der Editor meiner Wahl.

Visual Studio

Im Zuge des Softwarepraktikums in meinem Informatik Studiums mussten wir ein komplexes Echtzeitstrategiespiel entwerfen und umsetzen. Dies musste mit Visual Studio, XNA und C# geschehen. Da ich im Zuge des Softwarepraktikums mehrere tausend Zeilen Code geschrieben und editiert habe, kenne ich mich inzwischen auch mit Visual Studio aus, auch wenn ich die IDE seither nicht wieder verwendet habe.

Webanwendungen

Anwendung Administration Entwicklung
Contao
Joomla
WordPress
Gallery 3
Piwik
Confixx
phpMyAdmin

Weitere Technologien

GIT

Persönlich verwende und entwickle ich mit GIT schon seit Jahren und ziehe es SVN vor, da ich unter anderem auch häufig mal ohne Internetverbindung im Zug entwickle.

SVN

Im Zuge meines Informatikstudiums wurde für sämtliche Projekte SVN eingesetzt. Je nach Projekt habe ich selbst dann auch SVN verwendet, oder mich via git-svn mit dem Server verbunden.