Das Thema Programmiersprachen ist umstritten… Wie viel haben wir nicht schon über die Vorzüge bestimmter Programmiersprachen gehört? Diese Diskussion ist mindestens ebenso alt wie die über die Vorzüge der Texteditoren Emac und Vim oder Tabulatoren und Leerzeichen. Ich habe sogar schon einmal eine Schlägerei miterlebt, die das Problem aber auch nicht zu lösen vermochte.
Bleibt die Frage: Welche Programmiersprache sollte man nutzen? Dabei geht es nicht nur um Ästhetik, denn wenn Sie die falsche Wahl treffen, wird sich das irgendwann rächen.
Viele Programmierer, vor allem die schlauen, haben sämtliche Sprachen ausprobiert, die die Menschheit bisher entwickelt hat. Dabei sind sie zu dem Schluss gekommen, dass viele tatsächlich ihren Zweck erfüllen. Anschließend haben sie sich in ein neues Abenteuer gestürzt und eine eigene Programmiersprache entwickelt. Die meisten dieser Genies verdrängen die wahren Gründe für ihr Unternehmen: Das Schreiben einer Programmiersprache macht einfach Spaß. Meist wurden neue Programmiersprachen von einzelnen Personen initiiert. So etwa APL von Kenneth E. Iverson, C von Dennis Ritchie, C++ von Bjarne Stroustrup, Java von James Gosling, kdb+/q von Arthur Whitney, LISP von John McCarthy, Perl von Larry Wall, Python von Guido van Rossum usf. Dennoch verdanken sie ihren Erfolg den konzertierten Anstrengungen der jeweiligen Entwickler-Communities.
Wir leben im Zeitalter der Data Science und des Maschinenlernens. Das Hauptziel der Data Scientists besteht im Aufdecken versteckter Zusammenhänge im Datensatz – eine Kollektion von Beobachtungen und Werten – dabei kann es sich um Aktienkurse, medizinische Aufzeichnungen oder Schadensforderungen an Versicherungen handeln. Geschwindigkeit und Komfort sind dabei von zentraler Bedeutung. Die Syntax von Python ist kurz und prägnant und dennoch natürlich und verständlich. Von daher verwundert es kaum, dass Python oft das Mittel der Wahl für Data Scientists ist.
Viele Algorithmen des Maschinenlernens sind leicht einzusetzen, aber schwierig zu implementieren. Für einen Data Scientist wäre es naiv und zeitverschwendend sie selbst zu implementieren. Manche Dinge sollte man den Experten überlassen. Normalerweise kommen die Algorithmen zusammen mit wiederverwertbaren Bibliotheken. Python ist für die Fülle ihrer Bibliotheken bekannt, die von der großen Community von Programmierern zusammengestellt wurden. So hilft NumPy beim Umgang mit multidimensionalen Reihen, SciPyfor mit linearer Algebra und wissenschaftlichen Aufgaben, Matplotlib bei Visualisierung, Pandas bei Zeitreihen (und die meisten Finanzdaten kommen aus diesem Bereich), Kerasfor bei neuralen Netzwerken – um nur wenige zu nennen. In Data Science gibt es für Python nur wenig Konkurrenz. Eine Ausnahme stellt vielleicht R dar, die für ihre exzellenten statistischen Büchereien bekannt ist.
Softwareingenieure, die große, robuste, industrielle Software-Systeme entwickeln, werden an diesem Punkt sicherlich kritisieren: Aber Python ist langsam und unsicher! Langsam, weil der Global Interpreter Lock (GIL) gleichzeitig vor vielfältigen Bedrohungen schützt. Unsicher, weil Python dynamisch und nicht statisch geschrieben wird und ihr die Checks fehlen, die vor dem Schreiben eines unsinnigen Codes schützen. Dieser laissez-faire-Ansatz ist als „Duck-Typing“ bekannt, was auf einen Satz des Dichters aus Indiana James Whitcomb Riley zurückgeht: „Wenn ich einen Vogel sehe, der wie eine Ente geht, wie eine Ente schwimmt und wie eine Ente quakt, dann nenne ich diesen Vogel Ente.“
Dazu würden Python-Anhänger sagen: Das stimmt zwar, aber Python ist die beste Sprache, um eine Verpackung rund um Bibliotheken zu schreiben, die in anderen Sprachen verfasst wurden, sie ist sicherer und leistungsstärker, sie wird also oft als „Klebstoff“ verwendet, um die Programmierung zusammenzuhalten.
Tatsächlich stellen die Stärken von Python gleichzeitig auch ihre Schwächen dar. Die obsessive Typsicherheit von Mitgliedern der C-Sprachfamilie wie C++, Java und C# machen sie schwerfälliger für Data Science und schnelles Prototyping, aber sie erleichtert die Entwicklung von langweiligen, robusten, aber oft auch schönen Systemen, die gut unter Produktionsstress funktionieren.
Nichts schlägt C++ in Geschwindigkeit außer vielleicht das rohe C selbst, aber seine Geschwindigkeit gibt es nicht kostenlos: die komplexe, arbeitsintensive Fehlerbeseitigung der Speicherplatzzuteilung. Obgleich ich selbst ein C++-Programmierer bin, würde ich Java oder C# einsetzen, wenn es nicht um Tradingsysteme mit geringen Latenzzeiten geht.
Für Data Science bei unseren Tradinglösungen verwenden wir normalerweise Python. Die Modelle sind prototypisch, kalibriert und in Python getestet. Anschließend werden die Ergebnisse dem Produktionssystem übermittelt, das in Java implementiert ist. Diese Aufteilung zwischen Python, R und der C-Familie ist in quantitativen Teams weit verbreitet. Die Erschaffer der Programmiersprache Julia versuchen die Vorteile von Python bzw. R für Data Science und Prototyping sowie Java ähnliche Sprachen für die Produktion zu kombinieren. Dies stellt eine noble und herausfordernde Anstrengung dar und wir schauen sie uns mit Interesse an.
Allerdings gibt es auch andere Programmiersprachen, die ein guter Data Scientist kennen sollte. Eine davon ist kdb+/q. Bei q handelt es sich um die eigentliche Programmiersprache und bei kdb+ um die Datenbank, die darauf aufbaut. Kdb+/q ist alternativlos, wenn ein Data Scientist in riesige – zehn und mehr Millionen von Datensätzen – einen Sinn hineinbekommen möchte. Sie wird auch für die Datenerfassung in Umfeldern genutzt, wo die Daten in Realtime verarbeitet werden müssen wie etwa beim Trading.
Auch gibt es praktische Aspekte, die bei der Wahl einer Programmiersprache beachtet werden müssen und bei denen es sich nicht um ästhetische Fragen handelt. Obgleich man relativ wenig Zeit benötigt, um die Syntax der Sprache zu erlernen, braucht man viel Zeit und Übung, bis man sie beherrscht. Damit ähnelt das Programmieren ein wenig dem Schachspiel: Die Spielregeln zu lernen, ist einfach, das Meistern des Spiels schwierig. Bis dahin empfiehlt es sich, bei Python zu bleiben oder auf ein Wunder zu hoffen.