Im Laufe einer Entwickler-Karriere lernt man selten nur eine Programmiersprache. Von den generellen Trends, über neue Anforderungen, oder Neugier - immer wieder probieren Programmierer neue Plattformen aus, und bleiben dann am Ende vielleicht ganz bei Ihnen.
In diesem Beitrag reflektiere ich über die Sprachen, welche ich in meiner bisherigen Zeit als Entwickler benutzt habe und wohin vielleicht noch die Reise geht. Er zielt primär auf neuere Entwickler, aber vielleicht findet sich der eine oder andere Veteran der Branche auch wieder.
Die Einstiegsdroge
Für viele junge Entwickler (wie mich) ist die "Einstiegsdroge" die Webentwicklung mit PHP und MySQL (bekannt auch als LAMP-Stack). Trotz der vielen Kritik welche die beiden Technologien immer einstecken müssen gibt es einige Gründe, warum diese für Neulinge ein einfacher Einstieg sind der häufig gewählt wird.
Beginnen wir mit der Einstiegshürde. Für jemand der noch keine Erfahrung in der Entwicklung von Software hat, können selbst kleine Probleme unüberwindbare Hürden darstellen. Wie richtet man einen Webserver ein? Was ist dieses Linux? Warum brauche ich das alles?
Einzelne Hürden beim Lernen sind durchaus in Ordnung, wenn diese schnell erklimmt werden können. Ständige Frustration führt jedoch zu einem schnellen Halt allen Lernerfolgs und kann auch langfristig zur ständigen Demotivation führen - und damit vielleicht sogar einen Wechseln der Fachrichtung oder Branche.
Mit XAMPP gibt es seit Jahrzehnten ein Paket, welches viele Probleme auf einen Schlag und bequem löst: Ein Webserver, die Skriptsprache und eine Datenbank aus einer Hand, was nur installiert oder entpackt werden muss. Dazu ein Editor der Wahl und schon kann mit einem der tausenden Tutorials anfangen. Man braucht nicht einmal eine Shell öffnen.
Für mich war damals auch von Vorteil, dass es die PHP-Dokumentation in einer Offline-Variante gab, welche zu einer Zeit ohne ständiger Internetverbindung ein Retter in vielen Situationen war. In vielen Stunden im Dachboden der Großeltern ackerte ich mich durch das gesamte Handbuch, was mir nicht nur einen Überblick über die Sprache sondern auch exotische Features brachte. Vor allem letzteres ist später von Vorteil, wenn man mit Legacy-Code arbeitet, der für älteren Versionen der Sprache geschrieben wurde.
PHP ist eher "passiert" als gezielt entwickelt worden, was man anhand der vielen Altlasten und dem Murks in der Standardbibliothek. Ich muss hierzu nicht weiter ausführen, da andere bereits mehr als genug darüber geschrieben haben.
Gleiches kann man über MySQL sagen, was häufig im gleichen Atemzug wie PHP genannt wird. Praktisch, einfach, aber nicht wirklich durchdacht: Funktionalitäten die bei anderen Datenbanken Standard sind fehlen (z. B. Schema-Änderungen innerhalb Transaktionen), sinnlose oder falsche Daten sind in Ordnung (mein Favorit ist "0000-00-00 00:00:00") und mehrfach hatte ich in privaten und beruflichen Projekten Datenverluste aufgrund korrupter Tabellen durch Fehler in der Datenbank selbst.
Beide Projekte lernen jedoch kontinuierlich aus ihren Fehlern, fügen Ideen aus anderen Sprache hinzu oder korrigieren Fehler aus vergangenen Tagen. Nichtsdestotrotz würde ich heute kein Projekt mehr auf dieser Plattform starten - schlicht weil ich bessere Alternativen in meiner Werkzeugkiste habe.
Aufgrund der Menge an Unternehmen die heute PHP einsetzen und dem großen und aktiven Ökosystem ist PHP/MySQL für junge Entwickler sicherlich eine gute Basis ihre Karriere zu starten.
Mit der Zeit entwickelt man sich weiter, probiert andere Sprachen und Ökosysteme aus. Die neu gelernten Ideen kann man mit bisherigem verknüpfen um seine Fähigkeiten zu verbessern, oder man geht weiter und lässt das Alte ganz hinter sich zurück.
Neue Welten
Seit geraumer Zeit arbeite ich primär mit Python als Programmiersprache und PostgreSQL als Datenbank. Die Unterschiede zu PHP/MySQL sind größer als ich anfangs erwartet hätte.
Als erstes merkt man in Python, dass die Sprache klarer strukturiert ist. Viele Dinge die man erwartet funktionieren einfach und es gibt nur weniger Fallstricke und weniger Syntax zu lernen. Durch den Zwang einer sauberer Einrückung ist Code generell besser lesbar.
Readability counts. - Zen of Python
Andererseits kann es anfangs auch frustrierend sein, da Python strikter arbeiten als PHP:
- Undefinierte Variable? Exception!
- Kaputtes UTF-8? Exception!
- Element in einer Hashmap fehlt? ... Ihr seht was ich meine.
Durch die striktere Verarbeitung von Code lernt man jedoch langsam, präziser und korrekter zu arbeiten. Unterbewusst fängt man an sich zu fragen: "Wo könnte mein Programm kaputt gehen, und wie verhindere ich das?". Mit zunehmender Erfahrung werden die Fehler weniger, und die Programme stabiler.
Bald fängt man auch an, die zusätzlichen Möglichkeiten zu entdecken und zu nutzen. Mit PHP ist man effektiv auf Webentwicklung beschränkt, Python kennt kaum Grenzen. Egal ob GUI-Anwendungen, Server-Dienste oder kleine Wartungsskripte - mit Python geht (fast) alles.
Manches davon geht zwar auch mit PHP, aber bei weitem nicht so elegant oder effizient. Ohne Threads keine responsiven GUI-Anwendungen. Und aufgrund des allgemeinen Mindset von Webanwendungen ("am Ende wird alles automatisch aufgeräumt") lecken viele Bibliotheken Speicher, was für lange laufende Dienste irgendwann tödlich sein kann.
Natürlich darf man bei all dem Lob und Hype nicht auch die Vorteile anderer Plattformen vergessen. PHP hat ein ungeschlagen einfaches Deployment: Hochladen der Dateien per FTP - während man sich bei Python und Freunden mit Anwendungsservern, Reverse Proxys und ähnlichem beschäftigen muss.
Hello Perl!
Durch meine Beschäftigung bei Tramino bin ich in die Welt von Perl gerutscht. Dadurch dass Perl der spirituelle Vorgänger von PHP ist, ähneln sich die Sprachen in vielen Punkten und es ist dadurch einfacher, erste Erfolge zu erzielen.
Ähnlich wie bei PHP hat mir die Lektüre von Modern Perl geholfen, schnell ins Thema hineinzufinden und auch eher selten genutzte Funktionen zu lernen.
Perl hat den Ruf, Code mit erstaunlich schlechter oder kryptischer Qualität zu produzieren, soweit dass dies schon ein Sport geworden ist. Das mag sein, ist aber so auch für jede Community (außer vielleicht Python) möglich. In Perl kann man durchaus Gülle in den Editor werfen - oder mit konsequenten Regeln ordentlichen und wartbaren Code produzieren der viele Jahre ohne Probleme läuft.
Perls Stärken sind vor allem seine starke und flexible Regex-Engine, die auch von vielen anderen Sprachen adaptiert wurde (PCRE), und dank der flexiblen Sprachregeln kann effektiver und kompakter Code geschrieben werden - praktisch wenn Kunden im Nacken sitzen und sofort ein Feature wollen.
Der größte Nachteil ist heutzutage, dass das Paketsystem für Module ziemlich antik ist und viele Module im (sehr umfassenden) CPAN hoffnungslos veraltet oder komplett verlassen sind.
Alles wird JS
Das wohl größte Wachstum aller Sprachen legt mittlerweile JavaScript hin, primär durch die extrem niedrige Einstiegshürde und die überall verfügbare Plattform: den Browser. Der nächste Große Schub kam durch NodeJS, womit man JS nun wirklich überall ausführen konnte.
Ich persönlich habe eine gewisse Hassliebe mit JavaScript: Ich mag seine Einfachheit und die Möglichkeiten der Plattform, aber die Sprache selbst hat so viele Fallstricke auf die ich selbst als erfahrener Entwickler immer wieder darüber stolpere.
Durch meine Arbeit bei Tramino entwickle ich nahezu täglich JavaScript-Anwendungen: Egal ob kleine Skripte für Webseiten um Bilder zu animieren, oder komplexe Anwendungen wie eine Unterkunftssuche oder gar Desktop-Anwendungen.
Besonders spannend ist es zu sehen, wie sich die Plattform in nur wenigen Jahren entwickelt hat. In einer Zeitspanne von 15 Jahren sind wir von DHTML für animierte Schneeflocken über jQuery zu viel dynamischeren Webseiten heute mit React zu Web-Anwendungen statt Web-Seiten.
Für junge Entwickler ist JS nun fast schon ein Muss, manche Propheten sagen bereits die Weltherrschaft für JS voraus.
Und noch viel weiter
Seit gut über einem Jahr beschäftige ich mit Rust, einer Systemprogrammiersprache welche vor allem unter der Schirmherrschaft von Mozilla entsteht. Diese ist das komplette Gegenteil von dem, mit was ich bisher gearbeitet habe: Statische Typisierung, keine Objektorientierung und ein extrem strikter Compiler.
Letzteres ist ein bisschen wie beim Sprung von PHP zu Python: Es ändert die Art, wie du denkst.
A language that doesn't affect the way you think about programming, is not worth knowing. - Alan Perlis
Obwohl ich noch keine größeren Rust-Projekte im produktiven Einsatz habe, hat alleine das Lernen der Sprache (und ich bin noch am Anfang!) die Weise geändert, wie ich in anderen Sprachen entwickle und wie Probleme angehe.
Fazit
Die Sprache welche man am Anfang seiner Karriere als erstes lernt hat zwar einen enormen Einfluss auf Denkweisen und Möglichkeiten, bestimmt jedoch nicht alleine die gesamte Zukunft eines Entwicklers.
Lebenslanges lernen ist das Mantra unserer Zeit, was bei Programmierern durch die kürzeren Lebenszyklen von Technologien besonders wichtig ist. Wobei COBOL wohl auch gerade wieder sehr gefragt ist ;-)