Was ist das denn? Ein Crash Kurs in 4 Minuten Lesezeit als Entscheidungshilfe für die Technologieauswahl in Softwareentwicklungsprojekten?! – Natürlich nicht, das perpetuum mobile gibt es schließlich auch nicht. Dieser Artikel richtet sich auch nicht an Techies, sondern gibt Projektleitern auf der fachlichen Seite in einem Softwareprojekt eine erste grobe Orientierung. Das sollte erlauben, die IT-technischen Begrifflichkeiten grob einzuordnen. Der technologische deep dive ist ja dann ohnehin Aufgabe der technischen Seite im Projekt.
Der Anspruch, alle Programmiersprachen zu kennen (geschweige denn: zu beherrschen) ist selbst für Entwickler ein Anspruch, der sich nicht mehr einlösen lässt. Noch Mitte der 1990er wurden eine Hand voll Programmiersprachen aktiv verwendet; heute gibt es Dutzende, eine Übersicht in Wikipedia vermittelt eine Ahnung davon: Liste von Programmiersprachen.
Die wichtigsten Programmiersprachen im Überblick
Java ist gegenwärtig die sicherlich am häufigsten gebrauchte Programmiersprache. Vorteil: Java ist plattformunabhängig, läuft also auf Linux, Unix, Windows undsoweiter. Java ist objektorientiert, erlaubt die vergleichsweise einfache Entwicklung großer komplexer Programme. Auch für Anfänger geeignet, schon allein deshalb, weil es weltweit eine riesige Community gibt. Bekannte in Java geschriebene Programme sind zum Beispiel: SAP, Minecraft (Spiel), Teile von OpenOffice, Großteil der Apps für Android Smartphones; auch in vielen kleinen Prozessoren wird Java verwendet, z.B. im Auto, Backofen, Mikrowelle, TV, etc.
Die Sprache C hat eine lange Historie, wurde bereits in den 1970ern entwickelt. Es ist eine sehr maschinennahe Sprache, damit auch sehr performant. Eingesetzt wird diese Sprache vor allem im Maschinenbau, Automobilindustrie oder anders gesprochen: Bei embedded systems. Wer das Graphikbearbeitungsprogramm GIMP kennt, das ist etwa in C geschrieben.
Im Gegensatz zu C ist die Sprache C++ wieder eine objektorientierte Sprache. Im Vergleich zu Java erlaubt diese Sprache mehr Freiheiten, ist aber auch schwerer zu lernen und zu beherrschen. Genau wie C wird C++ auch in der maschinennahen Programmierung eingesetzt, C++ weist eine hohe Performanz auf. Firmen wie Google, Facebook und Apple nutzen die Sprache gerne, außerdem findet sich C++ etwa in folgenden bekannten Produkten: Firefox, Google Chrome, Adobe Reader, Skype, Filezilla, VLC Player, 7zip, Notepad++. Die Ironie will, dass die Java Virtual Machine (hierauf läuft der Java-Code) auch in C++/C geschrieben ist!!
Bleiben wir bei den Sprachen mit C. Die Sprache C# (sprich: C Sharp) ist eine jüngere Programmiersprache, sie wurde in 2001 entwickelt, und zwar von Microsoft. Objektorientiert. Hinweis: C / C++ sind in der Performanz besser, aber bietet einige Annehmlichkeiten. Bekannte Programm in C# sind etwa Sharepoint, die Entwicklungsumgebung Visual Studio, und der Großteil der Apps im Windows Store. Auch Anwendungen wie die IT Automatisierung Flowster oder ayehu.
Schauen wir uns zwischendurch Werkzeuge für Internetanwendungen an. Beginnen wir mit JavaScript. Damit lässt sich die Benutzeroberfläche von Webseiten dynamisch gestalten. Typisches Einsatzgebiet ist der Bereich eCommerce, aber auch die FrontEnds von Apps. Für JavaScript gibt es im Übrigen unzählige Frameworks, die das Entwickeln enorm beschleunigen und vereinfachen.
Eine Sprache, die ebenfalls in den Bereich Web gehört, ist PHP. Während JavaScript aber bei der Benutzeroberfläche eingesetzt wird (der Client), steuert PHP die Datenverarbeitung/-berechnung auf dem (Web)Server. PHP ist meist Grundlage von Content-Management-Systemen wie WordPress.
Einige sehr alte Programmiersprachen wiederum werden noch heute eingesetzt. Dazu zählen etwa die Assemblersprachen. Es handelt sich um maschinennahe Sprache, die jeweils die verfügbaren Befehlssätze einer spezifischen Computer-/Prozessorarchitektur nutzt. Das heißt aber auch: Ein Assemblerprogramm muss man beim Wechsel von einem Computersystem auf ein anderes Computersystem angepasst werden. Man findet Assembler heute noch bei Großrechnern (IBM Mainframe), im Bereich Wearables oder auch im Bereich Computerspiele, wo Programmteile in Assembler eingesetzt werden, um spezifische Prozessorcharakteristika (wie etwa Erweiterungen) auszunutzen.
Ebenfalls eine sehr alte Sprache (seit Ende der 1950er Jahre), die noch immer eingesetzt wird, ist COBOL. COBOL ist in der Wirtschaft und Verwaltung (u.a. bei Finanzbehörden) verbreitet. Kleine Randnotiz: Die ehemalige SPD-Familienministerin Renate Schmidt war einst Softwareentwicklerin, und zwar in Assembler und COBOL.
Auch eine sehr beliebte Sprache ist Python, die man vor allem im Bereich Maschinenlernen, Datenanalyse und auch Webdesign findet. Google und Facebook beispielsweise setzen die Sprache gerne ein.
Im Bereich der Webentwicklung findet man außerdem: Kotlin. Oder (entwickelt in den späten Achtzigerjahren).
Abschließend noch ein paar Sprachen im Umfeld von KI und Big Data: Für die (statistische) Datenanalyse von Big Data wird sehr gerne auf R zurückgegriffen. Für den Bereich KI und für die Implementierung von Algorithmen findet sich häufig MATLAB. Die seltener anzutreffende Sprache Haskell wird genutzt, um mathematische Algorithmen abzubilden. Und FORTRAN wird zur Programmierung technisch-wissenschaftlicher Anwendungen genutzt.
Was man als Projektleiter der fachlichen Seite als nicht-technisches Kriterium bei der Auswahl der Programmiersprache (bzw. Skriptsprache) – und natürlich generell von genutzter Technolologie – achten muss: Wie in vielen anderen Bereichen des Lebens gibt es Moden in der Softwaretechnologie. Da gibt es auch Eintagsfliegen, und das ist für die Wartbarkeit einer Software ein wichtiges Thema. Denn wenn es in 10 Jahren keine Entwickler mehr für eine Mode-Sprache gibt, die nur einen kurzen Hype erlebt hat, dann stellt das Anwender vor ein Problem. Ein Beispiel für eine Sprache, die heute zu den Dinosauriern zählt: Delphi: Entwickelt Mitte der 1990er Jahre, zeitweilig sehr beliebt bei Entwicklern, man konnte schnell Applikationen hochziehen. Heute spielt Delphi keine Rolle mehr. Softwareapplikation in Delphi werden auf andere Technologien migriert.
Die wichtigsten Frameworks im Überblick
Zunächst eine kurze Begriffsklärung. Frameworks bieten dem Softwareentwickler ein Programmiergerüst an, das die Entwicklungsarbeit erleichtert, beschleunigt und – letztlich – kostengünstiger macht. Der Entwickler kann innerhalb des Frameworks auf vorgefertigte Funktionen, Klassenbibliotheken, Programmierschnittstellen, genormte Schnittstellen zu Datenbanken oder Dienstprogramme / Services zugreifen.
Eines der meistgenutzten Frameworks ist das .NET Framework, das für Desktop- und Webanwendungen genutzt werden kann. Für die Ursprungsversion gilt, dass diese nur unter dem Betriebssystem Windows läuft. Die Variante .NET Core, eine Open Source Variante, gilt diese Einschränkung nicht mehr.
Im Bereich Webentwicklung sind etwa folgende Frameworks populär: Symfony für PHP, Ruby on Rails, Django für Python und Play und Struts für Java. Vue.js gewinnt gerade an Popularität.
Angesichts der Vielzahl an verfügbaren Frameworks ist es interessant zu verstehen, nach welchen Kriterien sich Entwickler (bzw. Softwarehäuser) für das eine oder andere Framework entscheiden – oder überhaupt für die Nutzung eines Framework optieren. Wer sich aktuell (Frühjahr 2019) in der Entwicklergemeinde umhört, der verfolgt im Bereich FrontEnd-Webentwicklung etwa eine Konkurrenz zwischen dem Framework Angular und React (Letzteres ist eigentlich nur eine Bibliothek, trotzdem steht es in diesem Fall im Wettbewerb mit Angular). Angular ist ein OpenSource-Projekt, angeführt durch Google. React wird von Facebook entwickelt.
Wer als Entwickler mit der Skriptsprache JavaScript vertraut ist, dürfte zu React tendieren; wer gerne mit TypeScript arbeitet, hat ein gutes Argument für Angular. Für beide Technologien spricht etwa, dass hinter beiden große Unternehmen (Google und Facebook) stehen, jeweils große Entwickler-Communities und damit eine hohe Investitionssicherheit.
Lizenzrechtlich ergeben sich wiederum gewaltige Unterschiede, nämlich Unsicherheiten bezüglich React. Tatsächlich hatte sich Facebook für einige Zeit vorbehalten, die Lizenz bei Patentstreitigkeiten zurückzunehmen; diese Policy wurde zwar abgemildert, aber Stand heute gilt noch immer, dass derjenige seine Lizenz verliert, der gegen Facebook einen Patentstreit anfängt.
Angular bietet als Framework natürlich umfangreiche vorgefertigte Komponenten und erlaubt damit eine sehr schnelle Entwicklung. Gleichzeitig gilt: Dieses Programmiergerüst ist – metaphorisch gesprochen – ein wenig wie ein Korsett: Es bietet weniger Freiheiten, ist in manchen Punkten restriktiver. Kurz: Entwicklungsgeschwindigkeit gegen Flexibilität.
React demgegenüber ist ja tatsächlich nur eine Bibliothek, wobei gilt: Entwickler nutzen in der Regel ein Set von Bibliotheken, das in Summe ebenfalls einem Framework entspricht. Unterschied: Dieses Set an Bibliotheken müssen sich Entwickler selbst erarbeiten/zusammenstellen und auch die Kompatibilität untereinander (etwas nach Updates) sicherstellen.
Mehr dazu auf diversen Diskussionsforen im Internet …
Nachtrag: Effiziente Sprachen, Modeerscheinungen und die Problematik von proprietären Sprachen
Wenn sich Unternehmen fragen, in welcher Programmiersprache eine Unternehmenssoftware entwickelt werden sollte, damit sich auch in 10 Jahren noch eine ausreichende Anzahl von Softwareentwicklern findet, der wird mit Java oder C# keinen Fehler machen. Eine ähnliche Frage stellen sich übrigens auch die Programmierer selbst: Welche Sprache(n) sollen sie lernen, damit das aufgebaute Knowhow auch noch in 10 Jahren relevant ist? – Natürlich sind Programmiermethoden in vielen Sprachen vergleichbar, das Erfahrungswissen wird beim Wechsel von einer Programmiersprache zur nächsten nicht grundsätzlich entwertet; aber es dauert etwa ein Jahr, bis man (auch als Java-Programmierer) in Scala richtig fit ist. Darum ist das eine berechtigte Frage.
Jeder Softwareentwickler weiß, dass einige Sprachen und Frameworks noch lange gefragt sein werden (Java, Javascript, C#, PHP, SQL, Unix), andere wiederum reiten auf einer Modewelle und sind in 10 Jahren möglicherweise kaum mehr namentlich bekannt (das JavaScript-Framework der Woche, NoSQL, R, TypeScript, VueJS). Es gibt im Übrigen den sogenannten TIOBE-Index, der die Popularität von Programmiersprachen in ein Ranking bringt, man kann hier die Popularitätskurven der verschiedenen Sprachen gut verfolgen.
Abbildung: TIOBE-Index: Long-Term History (Datenabruf am 15.02.2020)
Softwareentwickler können sich das auch nicht immer aussuchen: Wer bei Google arbeitet, wird mit Go arbeiten, bei der Arbeit an Webapplikationen wird Angular eingesetzt (OpenSource-Projekt, das von Google angeführt wird). Wer bei Apple arbeitet, der programmiert höchstwahrscheinlich mit Swift oder Objective-C. Hier gilt: “Wes Brot ich ess, dessen Lied ich sing“. Eigentlich naheliegend. Diese proprietären Sprachen haben (für Programmierer) natürlich den Nachteil, dass sie sich mit dem Expertentum in einer solchen Sprache nur im Ökosystem eines Digitalkonzern bewegen können; wer Swift programmiert, macht sich – in gewisser Weise – abhängig von Apple. Einer ähnlichen Kritik sind auch Programmiersprachen ausgesetzt, die „plattformgebunden“ sind: Ein Programm in Delphi (dessen Tage ohnehin gezählt sind) lässt sich nicht auf Linux migrieren. Ist halt so. Und auch C# hat noch eine Reihe von Abhängigkeiten zum Betriebssystem von Windows, viele Bibliotheken funktionieren nur dort. Dem stehen übrigens die sogenannten „freien Sprachen“ gegenüber. Also, Maxima statt Matlab.
Wenn man mit den „alten Hasen“ aus der Programmierung spricht, dann erntet man bei vielen neuen Sprachen wie Python oder Ruby viel Stirnrunzeln. Sprachen wie Assembler zählen nach wie vor den effizientesten Sprachen überhaupt. Dagegen verschwenden Sprachen wie Python oder Ruby Rechenzeit – was heute niemandem mehr richtig auffällt, weil Rechner immer leistungsfähiger geworden sind und Effizienz mit Hardware-Tuning erzielt wird. Aber gerade die „alten Hasen“ meinen, dass Assembler zum grundsätzlichen Handwerkszeug dazu gehört, denn es geht einher mit einem tieferen Verständnis für den Rechner, den Aufbau, die Funktionsweise. Auch wenn man dann im Softwareprojekt kein Assembler einsetzt, hilft das erworbene Wissen dennoch, auch in Hochsprachen effizienteren Code zu schreiben.