Warum nutzen wir welche Programmiersprache?
Welche Programmiersprachen bietet der Markt eigentlich?
Der Markt ist reich gesät mit unterschiedlichen Sprachen und es kommen stetig neue dazu. Manche Sprachen entsprechen jedoch eher dem Anforderungsprofil eines Webhosters als andere. Werfen wir doch einfach mal einen Blick auf die Sprachen, die am Markt verfügbar sind:
- PHP
PHP ist ein Urgestein in der Webentwicklung und ein zentraler Bestandteil unseres aktuellen Kundencenters. Unsere Lieblings-Content Management Systeme TYPO3, WordPress, Joomla! und Co. basieren alle auf der serverseitigen Programmiersprache, die auch 2021 weiterhin aktuell gehalten wird und Updates bekommt. Als plattformunabhängige Open-Source Sprache ist PHP eine solide Wahl, die mit einer umfangreichen Dokumentation und einer großen Community punkten kann. Aufgrund des Alters sind einige Bereiche aber wild gewachsen und nicht zwangsläufig von Grund auf durchdacht. Die Sprache schleppt einiges an Altlasten mit sich rum und leidet unter der "Wäre doch cool, wenn..."-Mentalität. - Python
Python ist wahnsinnig beliebt und gerade für Anfänger eine gute Wahl, weil die Syntax leicht verständlich ist und es sich ein bisschen so anfühlt als würde man Englisch sprechen. Aufgrund der Vielseitigkeit wird Python oftmals auch das "Schweizer Taschenmesser" unter den Programmiersprachen genannt, weil sie sich für so viele Zwecke einsetzen lässt. Data Science, Webserver, Scripting und Machine Learning sind definitiv starke Bereiche der Sprache. Dazu kommt, dass wir auch hier eine Plattformunabhängigkeit vorfinden und die Sprache open source ist. Die Einfachheit und Einsteigerfreundlichkeit bringen aber nicht nur Vorteile mit sich. Python kommt ohne Typisierung daher, was im professionellen Umfeld für Fehleranfälligkeit sorgt. Typisierung soll Laufzeitfehlern bei der Programmierung vorbeugen und bildet die Basis für Qualität und Sicherheit bei der Softwareentwicklung. - C / C++
Wer Performance sagt, muss auch C / C++ sagen. Diese maschinennahen Sprachen sind äußerst schnell, sehr hardwarenah und mächtig, weshalb viele große Anwendungen darauf basieren. Zum Beispiel wurde der Linux Kernel mit C geschrieben. Die hardwarenahe Schreibweise ermöglicht eine optimale Nutzung der Computerhardware, bringt aber im Gegenzug auch Nachteile mit sich. Die Syntax ist weniger leicht zu durchdringen und Funktionen wie z.B. die Speicherverwaltung, die in anderen Sprachen bereits implementiert ist, müssen von Hand erledigt werden. Die Komplexität bringt ebenfalls eine Anfälligkeit für Sicherheitslücken mit sich. - Java
"Write once, run anywhere". Das ist das Motto der Sprache Java, was bedeuten soll, dass die kompilierte Version eines Programms auf allen Systemen, die Java unterstützen, lauffähig ist. Java bietet einen stark objektorientierten Programmieransatz und kommt mit einer hohen Typisierung daher. Quellcode, der mit Java geschrieben wurde, muss vor seiner Laufzeit erst kompiliert werden und die Software wird auf der JVM (Java virtual machine) ausgeführt. Hier punkten Sprachen wie C oder C++ mit mehr Geschwindigkeit, da diese direkt auf der Hardware ausgeführt werden. - Javascript (Node.js mit Typescript)
Javascript erfreut sich riesiger Beliebtheit. Im Gegensatz zu Java wird Javascript interpretiert ausgeführt und reduziert die Zeit, die für das Kompilieren benötigt wird. Zudem werden Teile des Codes auf dem Client ausgeführt, was dafür sorgt, dass der Server entlastet wird. Javascript in seiner Ursprungsform arbeitet ohne Typisierung und funktioniert ähnlich wie Python. In beiden Sprachen verwaltet die Sprache selbst, was der Programmierer in eine Variable steckt, weshalb wir TypeScript einsetzen, wo die Typisierung für Javascript/Node.js on top gesetzt wird. Mit Node.js sind wir in der komfortablen Situation, dass wir die gleiche Sprache im Frontend und Backend verwenden können. Mehr dazu kannst du im Blog-Beitrag "Was ist eigentlich Node.js" lesen. - GoLang
Die Sprache mit dem Gopher als Maskottchen wird von Google-Mitarbeitern weiterentwickelt. Sie wurde aus der Unzufriedenheit mit aktuellen Computersystemen entwickelt – und zwar mit Blick auf skalierbare Netzwerkdienste, Cluster- und Cloud Computing. Syntaktisch ist Go an C angelehnt und hat sich auf die Fahne geschrieben, so performant zu arbeiten wie C und dabei die Usability von Python oder Javascript anzubieten. Der Programmierer muss sich nicht mehr selbst um die Speicherverwaltung kümmern, da Go hierfür einen Garbage Collector einsetzt, der diese Aufgabe erledigt.
Womit coden unsere Entwickler?
Ein Großteil der Entwicklungszeit fließt momentan in das neue Kundencenter, aber auch das aktuelle Kundencenter muss gewartet und gepflegt werden, wo größtenteils PHP zum Einsatz kommt. In den letzten Wochen waren z.B. Anpassungen an der Besucherauslastungsanzeige notwendig. Im Frontend wurden die Oberflächen und Komponenten mit Angular (Javascript) umgesetzt. Die Daten für die Oberfläche werden im Backend von einem Go-Service aufbereitet und zur Verfügung gestellt. In der neuen Hosting-Welt setzen wir derzeit ausschließlich Node.js und Go zur Programmierung der Microservices ein. Viele Wege führen im Endeffekt nach Rom, aber Go und Node.js (mit TypeScript) bieten uns Plattformunabhängigkeit und eine Top-Performance, die wir bei der Verarbeitung der täglichen Datenmengen gut gebrauchen können. Damit wir eine hohe Code-Qualität und Zuverlässigkeit sicherstellen können, sind beide Sprachen Typensicher. Beide Vertreter sind"Next Generation"-Backend Plattformen, die im Trend weiter zulegen und die derzeitigen Urgesteine Java und PHP ablösen.
Wie unterscheiden sich Node.js und Go kurz und knapp?
- Go bietet mehr Geschwindigkeit als Node, weil Node zur Laufzeit interpretiert wird und Go im Vorfeld kompiliert wird.
- Typescript hat den Vorteil, dass wir im Frontend und Backend auf die gleiche Sprache zurückgreifen können.
- Unser Entwickler Maik empfindet subjektiv, dass TypeScript die schönere Best-Practice bietet (z.B. bei der Benennung von Variablen).
Wie entscheiden wir, wann ein Service in GoLang oder Node.js programmiert wird?
Prinzipiell gibt es keine Richtlinien, die besagen, dass ein Service in der einen oder anderen Sprache geschrieben werden muss. In unseren Teams gibt es Entwickler, die es bevorzugen, mit Go zu programmieren und andere, bei denen die Vorlieben bei einer anderen Sprache liegen. Persönliche Präferenz spielt hier sicherlich eine Rolle. Dennoch gibt es Gründe, die den Ausschlag geben können, welche Sprache genutzt wird. Generell kann man festhalten, dass sich beide Sprachen nicht ohne Grund großer Beliebtheit erfreuen und sich – je nach Aufgabe – die eine oder andere Sprache als etwas besser herauskristallisiert.
- Nebenläufigkeit
In Go wird Nebenläufigkeit über "Goroutinen" erreicht, wodurch mehrere Funktionen oder Methoden gleichzeitig abgearbeitet werden können. Sollte das eine Anforderung sein, würde Go einen Vorsprung haben, da Node.js single-threaded ist und die Aufgaben nacheinander abgearbeitet werden. - Skalierbarkeit und Geschwindigkeit
Bei der Entwicklung von Go wurde darauf geachtet, dass Skalierbarkeit kein Thema ist. So bietet Go eine einfache Implementierung von Threads, wohingegen Node.js nur single-threaded arbeitet. Auf dem Papier hat Go immer die Nase vorn, aber in einer Produktivumgebung (Datenbankverbindungen, Netzwerkkommunikation) funktionieren beiden Sprachen prima und ähnlich schnell. - Error-Handling
Das Error-Handling unterscheidet sich bei beiden Sprachen. Go setzt auf explizites Error Handling, während Node.js den bewährten "throw-catch" Ansatz fährt.
Werden wir irgendwann die Sprachen wechseln?
Sind diese Sprachen nun für immer in Stein gemeißelt? Nein, das auf gar keinen Fall! Unser System ist grundsätzlich darauf ausgelegt, mehrere Programmiersprachen zu unterstützen. Gerade durch gRPC wird diese Flexibilität erreicht. Je nachdem, welche Sprache wir einsetzen wollen, benötigen wir einen EventStore-Client, der mit dem EventStore kommunizieren kann. Protocol Buffers ermöglicht es uns, die gesendeten Messages in viele Programmiersprachen zu übersetzen bzw. umzuwandeln. Nicht zu verachten wäre allerdings der Aufwand, der notwendig wird, um die Utilities, die wir für TypeScript und Go entwickelt haben, auch für andere Sprachen nutzen zu können. Diese Utilities sind kein Must-Have, sie erleichtern und vereinfachen aber die Entwicklungsarbeit.
Kommentare
Wisst ihr schon, wann ihr node.js auf euren Servern anbieten werdet?
Viele Grüße aus dem Marketing-Team
Noch unerwähnt blieb eine relativ neue Alternative, die vor allem für PWAs sehr interessant ist: Flutter mit Dart.
Flutter hat gerade mit den letzten Updates enorme Performance im Web anzubieten und eine mobile / native Nutzererfahrung, die sich nur schwer mit Node.js realisieren lässt.
Wenn SEO vernachlässigt werden kann und mehr Wert auf Typ-Konsistenz, Animationen und Nutzererfahrung gelegt wird, ist Flutter mit der Programmiersprache Dart das Framework unserer Wahl. Zusätzlich hat man hier noch den Vorteil, dass man mit der gleichen Codebase eine App für Web, iOS, Android, Windows und Mac exportieren kann.
Wer hier noch mehr erfahren möchte, dem empfehle ich diese Seite über App-Entwicklung mit Flutter von M-to-B: https://m-to-b.com/App-Entwicklung