Für manche Programmierer stellt das Erlernen einer neuen Programmiersprache eine unnötige Übertreibung dar. Sie fragen sich, warum es überhaupt notwendig ist, eine weitere Sprache zu lernen.
Gibt es nicht schon genug Sprachen?
Reichen die bestehenden Werkzeuge nicht aus?
Andererseits gibt es die unermüdlichen Entdecker, die jede Gelegenheit nutzen, um Neues auszuprobieren und dabei auf verborgene Schätze stoßen. Das Lernen an sich ist für sie ein Ziel, und es bedarf keiner großen Überredungskunst, um sie davon zu überzeugen, ihre Wochenenden mit der Entwicklung eines konsolenbasierten Kartenspiels in einer neuen, unbekannten Sprache zu verbringen.
Egal, welcher Gruppe man angehört, eines ist sicher: Wir alle wollen unsere Zeit mit Dingen verbringen, die eine vielversprechende Zukunft haben.
Für diejenigen, die traditionelle Sprachen bevorzugen, hat ihre bevorzugte Programmiersprache bereits eine starke Dynamik und wird auch weiterhin eine gute Zukunft haben. Ich möchte sie daran erinnern, dass ihre jetzige, ausgereifte Entwicklungsumgebung einst als „unmodern“ galt und nicht von vielen genutzt wurde. Und so ist es auch heute: Neue Technologien werden entwickelt, um neue Probleme zu lösen oder die Entwicklung zu vereinfachen.
Wenn eine neue Technologie dies in ausreichendem Maße tut, besteht eine gute Chance, dass sie weiterhin Aufmerksamkeit erregt und sich an die Spitze setzt. Und wenn das passiert, möchte man nicht zurückbleiben. 🙂
Und für diejenigen, die sich gerne mit den neuesten Technologien beschäftigen, sei eine Warnung ausgesprochen: Spaß als Programmierer ist wichtig, aber man sollte darauf achten, seine Energie nicht ziellos zu verschwenden.
Sicher, Brainfuck ist eine unglaublich verdrehte, rätselhafte und amüsante Sprache, aber es ist unwahrscheinlich, dass man davon profitiert, wenn man sie ernsthaft verfolgt. Man sollte sich für etwas Neues, Vernünftiges und auf solidem Fundament entscheiden.
Wie die Sprachen ausgewählt wurden
Die Wahl der richtigen Programmiersprache kann eine schwierige Aufgabe sein, insbesondere wenn man neue Sprachen im Hinblick auf zukünftige Karrierechancen und Zufriedenheit in Betracht zieht. Jeder Entwickler einer Sprache ist überzeugt, dass er die perfekte Sprache erschaffen und alle Probleme gelöst hat. Wie soll man da eine Auswahl treffen?
Für diesen Artikel habe ich mich auf einige Parameter konzentriert, um die Auswahl einzugrenzen.
Veröffentlichungsdatum
Ich habe gezielt Sprachen vermieden, die sehr neu sind.
Mit „neu“ meine ich Sprachen, die zum Zeitpunkt des Verfassens dieses Artikels weniger als 5-6 Jahre alt sind, insbesondere diejenigen, die noch keine stabile Version erreicht haben (z. B. Version 1.0). Dies schließt leider einige echte Juwelen wie Crystal aus, aber ich hoffe, dass ich eines Tages auf ihren Erfolg zurückblicken und darüber berichten kann. 🙂
Ein Code-Beispiel in Crystal („Fast wie C, elegant wie Ruby“)
Meiner Meinung nach sind 5-12 Jahre der ideale Zeitraum, in dem sich eine Sprache stabilisiert und weitere Verbesserungen vorgenommen werden. Natürlich gibt es Ausnahmen von dieser Regel, die gegebenenfalls berücksichtigt werden.
Dieser Punkt ist eigentlich eine Selbstverständlichkeit, wird aber oft ignoriert, wenn wir uns auf etwas Neues freuen. Für viele ist die Unterstützung durch ein großes Unternehmen ein sicherer Hinweis auf Erfolg, aber das ist nicht immer der Fall.
Zwar haben Apples Objective-C und jetzt Swift aufgrund ihres geschlossenen Ökosystems Erfolg gehabt, doch die von Facebook unterstützten Sprachen D und Hack (meiner Meinung nach eine unansehnliche Version einer bereits unansehnlichen Sprache) sind kaum mehr als Experimente.
Die ideale Kombination wäre eine Sprache, die von einem großen, stabilen Unternehmen unterstützt wird und an Popularität gewinnt (wie React).
Aber der Kern der Sache ist die Community. Wenn eine Sprache nicht genügend Aufmerksamkeit erregt und es nicht genügend Entwickler gibt, die sie lernen und verbreiten, wird sie es nicht aus ihrem GitHub-Grab schaffen.
Das schließt etablierte, faszinierende Sprachen wie Racket und Erlang aus, da ihre Wachstumskurve flach geblieben ist.
Fokussierter, klar definierter Alleinstellungsmerkmal
Das dritte Kriterium ist ein klar definiertes Ziel für die Sprache. Eine bessere Version von PHP, die Namensprobleme behebt und in natives PHP kompiliert wird, ist für mich zum Beispiel nicht ausreichend.
Die Vorteile sind zu gering, um die Umstellung für alle zu rechtfertigen. Aus diesem Grund kann ich Versuche wie CoffeeScript und viele andere ähnliche Sprachen, die nach JavaScript kompilieren, nicht berücksichtigen.
Ehrlich gesagt, ich bin gezwungen, reine Syntaxverbesserungen sofort abzulehnen. Die Geschichte hat gezeigt, dass Nützlichkeit über die Freundlichkeit siegt, wenn es um Sprachen geht. Wenn sich also alle neuen Sprachen nur auf eine angenehmere Erfahrung konzentrieren, werden sie es, befürchte ich, nicht in diese Liste schaffen.
Klare, konsistente Syntax
Ja, ich weiß. Ich habe gerade gesagt, dass die Syntax keine Rolle spielt. Genauer gesagt, habe ich gesagt, dass „reine Syntaxverbesserungen“ keine Rolle spielen. Dennoch bleibt die Syntax einer der wichtigsten Faktoren für die Produktivität und Wartbarkeit von Programmierern, daher ist sie etwas, das ich hier berücksichtigen werde.
Zusammen mit der Syntax kommt die Idee der Konsistenz. Die Benennung von Funktionen, die Strukturierung von Modulen usw. sind wichtige Dinge, die eine Sprache nicht falsch machen darf. Wir haben 2018, und ein weiteres PHP-ähnliches Sprachdesign wäre eine Schande für uns alle. Beginnen wir also ohne weiteres mit unseren Top-5-Empfehlungen.
1. Julia
Für die Wissenschaftler am MIT waren die verfügbaren Sprachen für Data Science bestenfalls ein Kompromiss. Trotz ihrer Klarheit und Popularität fehlten Python native Konstrukte für die Arbeit mit Datenobjekten. Da es sich um eine interpretierte Sprache handelt, war Python für sie auch langsam (nicht die Bibliotheken, wohlgemerkt, da sie hauptsächlich in C geschrieben sind).
Aber die vielleicht größte Hürde war das umständliche Parallelitätsmodell und das Fehlen eines parallelen Rechenmodells, wobei letzteres ein Grundpfeiler im Supercomputing ist.
Als Ergebnis wurde Julia geboren.
Julia erreichte ihre stabile Veröffentlichung am 29. September 2018, nur wenige Tage vor dem Verfassen dieses Artikels (was für ein Timing!). Hier ist, was die offizielle Website über ihre Fähigkeiten zu sagen hat:
Julia zeichnet sich durch numerische Berechnungen aus. Ihre Syntax ist ideal für Mathematik, viele numerische Datentypen werden unterstützt, und Parallelität ist sofort verfügbar. Julias Multiple Dispatch eignet sich hervorragend für die Definition von Zahlen- und Array-ähnlichen Datentypen.
Syntaxtechnisch kann Julia als eine Kombination aus Python und C betrachtet werden. Ja, es ist wahrscheinlich das erste Mal, dass eine Sprache diese beiden Eigenschaften anstrebt und erfolgreich umsetzt.
Um es einfach auszudrücken: Julia ist extrem schnell und erzwingt keine strenge Typisierung. Hier sind einige Benchmarks:
Die offiziellen Julia-Benchmarks
Wie man sehen kann, ist Julia etwas schlechter als C, lässt aber Java und Python weit hinter sich. Und was für eine Augenweide Julia auch bietet!
Hier ist die Implementierung einer Funktion zur Berechnung der Hypotenuse eines rechtwinkligen Dreiecks:
Zusammenfassend lässt sich sagen, dass, obwohl der Großteil des Julia-Ökosystems stark auf mathematische Aufgaben ausgerichtet ist, ich glaube, dass sie eine glänzende Allzweck-Zukunft hat.
Es ist meines Wissens die erste Sprache, die erstklassige Unterstützung für paralleles Rechnen bietet, daher wird es nicht überraschen, dass sie in den Bereichen Web und IoT immer beliebter wird.
2. Rust
Wenn Sie die neuen Versionen des Firefox-Browsers ausprobiert haben, wissen Sie, dass es nach jahrelanger Arbeit so aussieht, als könnten sie Chrome einige Marktanteile abnehmen.
Wenn sich der Browser leicht und zügig anfühlt und schnell rendert, ist das alles der von Mozilla speziell entwickelten Sprache zu verdanken: Rust.
Zu sagen, dass Rust eine glänzende Zukunft hat, ist eine Untertreibung; die Sprache ist bereits ein riesiger Erfolg, und wenn Sie noch nichts davon gehört haben, liegt es daran, dass ihr Anwendungsbereich spezialisiert und ihr Ziel beängstigend ist: C++ zu ersetzen! Ja, wir haben endlich eine Sprache, die das nicht nur kann, sondern bereits tut.
Für Leute, die von den überladenen Design- und Speicherverwaltungsherausforderungen von C++ frustriert sind, kommt Rust wie ein Hauch frischer Luft.
So sieht ein Rust-Programm aus:
Prägnant und elegant, wie ich finde. Rust folgt dem funktionalen Programmieransatz, der Ihren Code besser zusammensetzbar macht, und es gibt keine objektorientierten Hierarchien, mit denen Sie kämpfen müssen.
Was gibt Rust also den Mut, C++ anzugreifen? Es ist das neue Speichermodell. Anstatt sich auf den alten new()/delete()-Tanz zu verlassen, führt Rust die Idee des Besitzes ein.
Anstatt Speicher direkt zuzuweisen und darauf zuzugreifen, „leihen“ sich Rust-Variablen voneinander, wobei der Compiler strenge Einschränkungen auferlegt. Das Gesamtkonzept ist zu komplex, um es in wenigen Worten zu erklären, also schauen Sie sich die offizielle Dokumentation an, um mehr zu erfahren.
Der Punkt ist, dass dies zu 100 % Speichersicherheit führt, ohne dass ein Garbage Collector erforderlich ist, was eine große Sache ist.
Rust hat die Welt der Systemprogrammierung im Sturm erobert. Es wird bereits auf einigen Plattformen unterstützt, unterstützt Browser und Rendering-Engines, ersetzt schnell C/C++-Code in Produktionssystemen und wird zum Schreiben von Betriebssystemen verwendet.
Sicher, es ist nicht jedermanns Sache, einen weiteren Browser oder Gerätetreiber zu erstellen, aber Rust breitet sich bereits auf andere Bereiche aus. Wir haben bereits mehrere voll funktionsfähige, blitzschnelle Webframeworks in Rust, und es werden immer mehr Anwendungsbibliotheken entwickelt.
Ehrlich gesagt, wenn Sie an einer aufregenden Zukunft interessiert sind, ist Rust die perfekte Sprache, und jetzt ist ein perfekter Zeitpunkt. Rust ist ein Flugzeug, das gestartet ist, aber es ist noch Zeit, an Bord zu gehen, während es zu den Sternen aufbricht!
Lernen Sie Rust von Dmitri Nesteruk.
3. Elixir
Unter den Sprachen, die sich auf die Zufriedenheit der Entwickler konzentrieren, ist der erste Platz dauerhaft für Ruby reserviert. Es ist eine Sprache, die sich wie Poesie liest und genügend Abkürzungen hat, um die kognitive Belastung um ein Vielfaches zu reduzieren.
Kein Wunder also, dass das Rails-Framework weiterhin die Full-Stack-Entwicklung für ernsthafte Entwickler und Startups dominiert. Aber nicht jeder war mit Rails zufrieden, insbesondere einer seiner Kernentwickler – José Valim. Ich denke, der Schöpfer selbst erklärt die Entstehung dieser Sprache am besten in einem Interview:
Es ist eine lange Geschichte, aber ich werde versuchen, sie kurz und bündig zu machen. Im Jahr 2010 arbeitete ich daran, die Leistung von Rails bei der Arbeit mit Mehrkernsystemen zu verbessern, da unsere Maschinen und Produktionssysteme mit immer mehr Kernen ausgeliefert werden. Die ganze Erfahrung war jedoch ziemlich frustrierend, da Ruby nicht das richtige Werkzeug zum Lösen von Nebenläufigkeitsproblemen bietet. Das war der Zeitpunkt, an dem ich begann, mich mit anderen Technologien zu beschäftigen, und ich verliebte mich schließlich in die Erlang Virtual Machine.
Ich fing an, Erlang mehr und mehr zu verwenden, und mit zunehmender Erfahrung bemerkte ich, dass mir einige Konstrukte fehlten, die in vielen anderen Sprachen verfügbar sind, einschließlich funktionaler. Das war der Zeitpunkt, an dem ich mich entschied, Elixir zu erstellen, als Versuch, verschiedene Konstrukte und hervorragende Werkzeuge auf die Erlang-VM zu bringen.
Und siehe da, Elixir wurde geboren!
So wie Scala die Java-Sprache verbessert, aber auf dieselbe virtuelle Maschine (JVM) abzielt, nutzt Elixir die jahrzehntealte, bewährte virtuelle Maschine von Erlang.
Eine Diskussion über Erlang würde den Rahmen dieses Artikels sprengen, aber das Wichtigste, was man wissen sollte, ist, dass es das bestgehütete Geheimnis der Telekommunikationsbranche ist: Wenn unsere Telefonnetze viel zuverlässiger sind als unsere webbasierten Systeme, ist das alles dank Erlang.
Einfacher ausgedrückt bedeutet es Folgendes: Wenn Sie ein Echtzeitsystem wie einen Chat entwickeln, ist Elixir viel weniger RAM-intensiv und stabiler als Ruby (oder PHP, Python und Java).
Eine Maschine, die unter Ruby maximal 10.000 gleichzeitige Verbindungen erreicht, kann mit Elixir problemlos 200.000 Verbindungen verarbeiten und hat immer noch genügend RAM, um 2D-Spiele auszuführen!
Elixir-Code-Snippet
In Bezug auf die Syntax kopiert Elixir schamlos Ruby, und sein dominantes Web-Framework Phoenix kopiert schamlos Rails. Das finde ich auch gut, denn zusammen mit Laravel, Grails, Masonite usw. erreichen wir einen Punkt, an dem alle Sprachen Rails-ähnliche Frameworks haben, die den Umstieg erleichtern können. Manche mögen sich über den „Mangel an Originalität“ lustig machen, aber ich beschwere mich zumindest nicht.
Letztendlich ist Elixir eine der Technologien, die erfrischend, angenehm und verdammt praktisch sind. Mehrere Ruby-basierte Unternehmen (und sogar solche, die nicht auf Ruby basieren) wechseln zu Elixir, und große Unternehmen wie Pinterest setzen es in der Produktion mit äußerst zufriedenstellenden Ergebnissen ein.
Viele glauben, dass Node.js ein provisorischer Versuch der Parallelität war und bald durch Elixir ersetzt werden wird. Ich muss sagen, ich stimme dem zu. 🙂
4. Kotlin
Bei der I/O 2017 ließ Google eine Bombe auf die ahnungslose Menge los. Das Unternehmen gab offiziell bekannt, dass Kotlin die primäre Sprache für die Android-Entwicklung ist, und dies hat Schockwellen durch die Branche geschickt.
Nun, dass Google aktiv versucht hat, Java zu ersetzen, ist nach einer Klage von Oracle nicht überraschend; die Einführung von Kotlin war jedoch etwas unerwartet, und es besteht immer noch eine gute Chance, dass Google bald mit seiner eigenen virtuellen Maschine auf den Markt kommen wird. Im Moment erfreut sich Kotlin jedoch eines Aufschwungs.
Kotlin wurde von JetBrains entwickelt, einem Unternehmen, das vor allem für seine Suite hervorragender Code-Editoren bekannt ist. Einer davon, IntelliJ IDEA, bildet die Grundlage von Android Studio. Die Designziele von Kotlin sind Sicherheit, Prägnanz und 100 % Interoperabilität mit Java.
Vor allem arbeitet der Kotlin-Compiler hart daran, alle Nullzeiger-Ausnahmen zu beseitigen, die in der Java-Welt so häufig vorkommen. Außerdem nimmt er die sprichwörtliche Ausführlichkeit von Java deutlich ab, was für viele eine Erleichterung sein wird.
Hier ist ein schöner Codevergleich zwischen Java und Kotlin:
Bildnachweis: hype.codes
Der Kotlin-Code ist deutlich kürzer und hat eine viel geringere kognitive Belastung.
Aber eines sollten wir klarstellen: Es ist äußerst unwahrscheinlich, dass Kotlin Java ersetzen wird, obwohl es schnell zu einem beliebten Favoriten wird. Ich glaube, dass kleine bis mittelgroße Teams in zehn Jahren nicht weiter als Kotlin suchen werden, während große Unternehmen Java nur aus Legacy-Gründen weiterhin verwenden werden.
Kotlin hat jedoch eine vielversprechende Zukunft, da es alles kann, was Java kann, sich mit Java-Code kombinieren lässt, ohne dass es jemand bemerkt, und viel angenehmer ist!
5. TypeScript
Gott weiß, dass ich mich bei dieser Wahl zurückhalten musste! Alles in mir schrie „Elm! Elm!“, aber egal wie revolutionär seine Ideen sind oder wie genial die Syntax ist, Elm gilt noch nicht als Mainstream-Alternative für Frontend-Arbeiten. 🙁 Aber kommen wir zum Mainstream: TypeScript.
JavaScript ist wie wilde Beeren: unansehnlich und geschmacklos, aber man muss es ertragen, wenn man im Dschungel der Frontend-Entwicklung überleben will. Es gab viele Versuche, es zu ersetzen (und höchstwahrscheinlich wird der neue WebAssembly-Standard erfolgreich sein), aber was wirklich alle Aufmerksamkeit auf sich zog, war das von Microsoft entwickelte Superset.
Es gibt gute Gründe, warum Sie von TypeScript gehört haben: Angular war das erste Framework, das es ab Version 2 unterstützte, und die Leute haben es schnell bemerkt. Das liegt daran, dass TypeScript der berühmtesten Programmiersprache der Welt einige dringend benötigte und fantastische Superkräfte verleiht.
Ja, es ist endlich möglich, nativen JavaScript-Code zu schreiben, ohne seine Geburtswehen zu erleiden und es zu verfluchen!
Hier sind die Verbesserungen, die TypeScript mit sich bringt:
✓ Starke Typisierung: Endlich ist eine Zeichenkette keine Zahl und eine Zahl kein Objekt, das kein leeres Array ist!
✓ Typüberprüfung zur Kompilierzeit: Wenn Ihr Code korrekt kompiliert wird, ist er mehr oder weniger garantiert frei von JavaScript-Laufzeitfehlern.
✓ Klassen und Module: Ja, Klassen sind Standard in ES6, aber sie sind zusammen mit einem ordentlichen Modulsystem auch in TypeScript enthalten.
✓ Typinferenz: Bei komplexen Typen kann der Typ vom Compiler leicht ermittelt werden, was Ihnen einige Kopfschmerzen erspart.
✓ Async/await: Die Async/await-Schlüsselwörter und -Muster sind grundlegend, also kein Herumspielen mehr mit Promises und Callbacks!
Namensräume, Generics, Tupel. . . Ich könnte endlos weitermachen, aber es sollte ausreichen, um zu sagen, dass TypeScript eine der schlechtesten Entwicklungserfahrungen in eine der besten verwandelt.
TypeScript-Code-Snippet
Die Auswirkungen von TypeScript sind nicht zu leugnen. Es verdrängte ähnliche Versuche wie Googles Dart aus dem Rennen (obwohl es durch Flutter, ein mobiles Entwicklungsframework, ein Comeback versucht) und öffnete JS-Entwicklern die Augen für die Vorteile stärkerer Typen.
Infolgedessen haben bedeutende Bibliotheken wie React, D3, Vue (sogar jQuery!) jetzt eine TypeScript-Version, und in den besten Softwareunternehmen auf der ganzen Welt wird der gesamte JavaScript-Code als TypeScript-Code geschrieben. TypeScript-Header sind jetzt auch für Node.js verfügbar (ehrlich gesagt, wenn Node seine Geschichte der Parallelität verbessern und seine lausige Speicherverwaltung beheben kann, wird das ewig dauern).
Vielleicht überrascht es Sie zu erfahren, dass der Erfinder von Node.js nach seiner öffentlichen Reue über seine Schöpfung an einer neuen Laufzeit arbeitet (derzeit gibt es keine offizielle Website, sondern nur das GitHub-Repository), die TypeScript als Hauptsprache hat.
Die beste Nachricht? TypeScript ist eine einfach zu erlernende Sprache mit erheblichen Vorteilen für die Zukunft. Wenn Sie ein erfahrener JavaScript-Entwickler sind, können Sie in zwei Tagen genug TypeScript lernen, um Ihren gesamten bestehenden Code zu portieren!
Fazit und Haftungsausschluss
Bestimmte Sprachen erfreuen sich ebenso großer Beliebtheit wie die in diesem Artikel genannten, wurden aber aus verschiedenen Gründen nicht in die Liste aufgenommen. Hier ist ein kurzer Überblick:
- Golang: Bereits als Mainstream-Sprache etabliert, wenn auch nicht besonders beliebt. Ich glaube, dass Golang zum jetzigen Zeitpunkt mehrere Konkurrenten hat, die seinen Marktanteil niedrig halten werden.
- R: R ist unter Datenwissenschaftlern bereits sehr beliebt und wird Anwendungsentwickler wahrscheinlich nicht besonders ansprechen. Außerdem dürfen wir nicht vergessen, dass Bibliotheken für maschinelles Lernen langsam in allen wichtigen Sprachen Einzug halten (sogar PHP hat sie jetzt!), also müssen Sie nur noch etwas warten. 🙂
- Swift: Apple hat sein Ökosystem fest im Griff, und Swift ist die einzige dort verfügbare Sprache. Früher war Objective C das Nonplusultra, so wie jetzt Swift. Ich halte das für Betrug und weigere mich daher, es hier aufzunehmen. 😀
Die Zukunft ist immer ungewiss, und eine Möglichkeit, seine Karriere voranzutreiben, besteht darin, sich an dem festzuhalten, was bereits funktioniert, und sich nicht „ablenken“ zu lassen. Wenn Sie dies tun, sind Java, PHP, Python, Ruby usw. hervorragende Sprachen, bei denen Sie bleiben sollten. Für einige von uns ist das Normale jedoch nicht genug. Sie wollen hinausgehen und die Zukunft erkunden und alles auf die Zukunft setzen. Wenn Sie in die letztere Kategorie fallen, sollte eine dieser fünf Sprachen ganz oben auf Ihrer To-do-Liste stehen.
Wenn Sie letztendlich versuchen, eine Sprache zu beurteilen, lassen Sie sich nicht von der Anstrengung überwältigen, denn es ist gar nicht so viel. Wenn Sie bereits einige Programmiersprachen beherrschen, können Sie jede dieser Sprachen innerhalb von maximal zwei Monaten lernen, wenn Sie 5-6 Stunden pro Woche investieren. Die Gewinne und finanziellen Vorteile, die in der Zukunft erzielt werden können, sind jedoch um ein Vielfaches höher.
Habe ich hier eine wichtige Sprache übersehen? Oder habe ich vielleicht etwas an den hier aufgeführten Sprachen falsch dargestellt? Wenn ja, hinterlassen Sie bitte einen Kommentar und helfen Sie mir, mich zu verbessern. 🙂