Folge 10

Programmiersprachen – Besteck oder Stäbchen?

„Sprachen sind Werkzeuge, die für verschiedene Anwendungen besonders gut oder besonders schlecht sind. Es wird keine Sprache geben, die einfach alle ersetzt.“

Herzlich willkommen zu „Querverlinkt – Technik über dem Tellerrand“! Nach unserem letzten Podcast wollten wir euch in der heutigen Folge eigentlich die IT-Trends der nächsten Jahre präsentieren. Dazu gibt es eine kleine Planänderung, aber natürlich mit einem nicht minder spannenden Thema. Heute wollen wir euch aber in die Welt der Softwareentwicklung entführen. Auch wenn man es nicht unmittelbar sieht, Software umgibt uns jeden Tag und sie wird mit Hilfe von Programmiersprachen erstellt. Aber was ist eine Programmiersprache überhaupt? Wie viele Sprachen gibt es? Und worin unterscheiden sie sich? Das erklären wir euch heute und versuchen euch einen kleinen Überblick über diese komplexe Thematik zu verschaffen. Programmiersprachen, Besteck oder Stäbchen?

Wir wünschen gute Unterhaltung!

Transkription

Thomas Sinnwell: Herzlich willkommen zum neuen Podcast. Heute geht es um Programmiersprachen. Warum geht’s heute um Programmiersprachen? Einfach deshalb, weil uns Software umgibt. Sieht man oft nicht so, aber die meisten technischen Systeme werden heute durch Software gesteuert. Und um die herzustellen, brauche ich Programmiersprachen. Diejenigen unter uns, die einen Programmierkurs in der Schule hatten oder Berührpunkte im Studium mit Programmiersprachen hatten, haben eigentlich eine ganz gute Vorstellung dann, was eine Programmiersprache ist. Aber auch für die werden wir vielleicht noch ein paar interessante Aspekte besprechen. Und der Rest der Menschheit, weiß vielleicht nicht allzu viel drüber. Wir wollen aufklären. Ich habe mir dazu Verstärkung eingeladen. Heute zu Gast Dr. Patrick Michel. Viele Studenten haben Programmiersprachen durch den Patrick nahegelegt bekommen. Patrick sei doch so nett und stell dich bitte vor.

 

Dr. Patrick Michel: Hallo! Mich hat das Thema Programmierung schon seit der Kindheit wirklich fasziniert und ich habe das direkt als Anlass genommen, um nach der Schule das Thema zu studieren. Habe dann in Kaiserslautern promoviert und war als Mitarbeiter viel in der Lehre involviert. Habe gerade auch den Erstsemestern in Eingangsveranstaltungen Programmierung nähergebracht. Und bin jetzt die letzten acht Jahre mittlerweile schon als Senior Softwareentwickler tätig im professionellen Bereich. Von daher ist das Thema für mich eins, welches ich schon die letzten 30 Jahren mit mir nehme und immer wieder gerne darüber rede und auch im Alltag gern anwende.

 

Thomas Sinnwell: Super! Vielen Dank! Dann können wir auch gleich einsteigen und klären vielleicht mal die zentrale Frage: Was ist denn eine Programmiersprache?

 

Dr. Patrick Michel: Bei einer Programmiersprache geht’s letztendlich darum, einem Computer verständlich beizubringen, was er machen soll, was er berechnen soll, welchen Beitrag er für ein Softwaresystem im Ganzen leisten soll. Und so eine Programmiersprache muss dementsprechend formal genug sein, dass ein Computer sie auch verstehen kann. Das sind keine Freiheiten, wie zum Beispiel in der Umgangssprache in der Grammatik erlaubt sind, die sind in einer formalen Grammatik, wie man sie für Programmiersprachen benutzt, also nicht erlaubt.

 

Thomas Sinnwell: Du sprichst jetzt gerade Grammatik an. Und das ist ja schon mal ein Teil, die Syntax, die eine Programmiersprache prägt. Und dann habe ich natürlich noch die Semantik.

 

Dr. Patrick Michel: Da geht’s dann darum, was das Programm tatsächlich tut, wenn man es ausführt, welche Ausführungssemantik das Programm hat. Die Syntax sagt, was darf ich niederschreiben, was ist erlaubt. Und die Semantik sagt, was tut es, wenn ich es ausführe.

 

Thomas Sinnwell: Bevor wir hingehen und versuchen in diese vielen Programmiersprachen ein bisschen Ordnung reinzubringen, können wir vielleicht kurz noch thematisieren, was denn alle Programmiersprachen gemeinsam haben. Und das sind ja doch so Dinge wie Ein- und Ausgabe, Variablen, Funktionen, Methoden, Objekte. Da werden wir später noch ein bisschen mehr zu sagen. Befehle, Operatoren, sowas wie Plus und Minus, und Kontrollflusselemente.

 

Dr. Patrick Michel: Wenn man das Ganze gruppiert in die zwei größten Bereiche der Programmierung, dann ist das die Definition von Datenstrukturen, wie repräsentiere ich Daten im Programm. Und dann die Algorithmen, wo ich dann mit diesen Daten etwas tue. Das ist eigentlich bei allen Programmiersprachen der Kern des Ganzen. Und je nach Paradigma ist das eine oder das andere ein bisschen mehr ausgeprägt.

 

Thomas Sinnwell: Schönes Stichwort, Paradigma. Und da kommen wir schon nahtlos zum Thema Klassifikation von Programmiersprachen. Da kann man ganz unterschiedliche Kriterien heranziehen. Sehr naheliegend ist, dass man diese nach Anwendungsgebieten unterscheidet. Ist das jetzt ein naturwissenschaftliches Thema? Geht es vielleicht um KI? Es geht auch um die Historie: wie sind sie entstanden? Und da gibt es richtige Entwicklungszweige in den Programmiersprachen. Dann gibt es den Punkt Programmiersprachen-Generationen. Und es gibt den Punkt Programmierparadigmen. Das sind für mich persönlich die beiden Dinge, über die wir noch ein bisschen intensiver sprechen sollten. Aber man kann natürlich auch den Verbreitungsgrad betrachten oder auch solche Aspekte wie, wie schwierig ist es, eine Sprache zu erlernen. Aber steigen wir vielleicht einfach mal ein mit dem Aspekt Generationen von Programmiersprachen. Und die Programmiersprachen der ersten Generation, das sind Maschinensprachen. Das sind die Sprachen, die als nativer Binärcode auf Prozessoren ausgeführt werden. Der Umfang und die Syntax dieser Maschinenbefehle, die sind ja letztendlich durch den Befehlssatz des Prozessors definiert. Und das ist also sehr prozessorspezifisch, was die dann können und wie dann ein Befehlssatz aussieht. Und was da letztendlich an Code vorliegt, das ist Binärcode, das ist letztendlich eine Folge von Nullen und Einsen, und das ist erst mal extrem schlecht lesbar. Und das war jetzt für mich persönlich mein Einstieg zum Thema Programmieren. Ich habe ja Elektrotechnik studiert, keine Informatik. Und in Mikroprozessortechnik beschäftigt man sich halt relativ lange mit Prozessorarchitekturen und deren Befehlsätze und dann kommt erst das Programmieren über die Assembler-Programmierung. Dann wären wir auch schon bei der Programmiersprache der zweiten Generation, aber da bin ich nicht drüber hinausgekommen. Und Assembler-Sprachen sind Programmiersprachen, die einem Befehlsvorrat einer bestimmten Prozessorarchitektur ausgerichtet sind. Das ist natürlich sehr spannend und dann kommen wir zu den, aus meiner Sicht, eigentlichen Programmiersprachen, wenn wir die dritte, vierte und fünfte Generation betrachten. Aber das möchte ich dann dem Profi überlassen.

 

Dr. Patrick Michel: Bei der dritten Generation reden wir von den sogenannten Hochsprachen. Gerade im Kontrast sind Assembler- oder Maschinensprache sehr, sehr architektur- und CPU-spezifisch. Bei Hochsprachen bewegt man sich weg von der konkreten Technik, ein bisschen mehr in die Domäne des Entwicklers, fügt Abstraktionsmittel hinzu. Man kriegt die Möglichkeit komplexere Datenstrukturen zu definieren, aufzubauen auf den primitiven Daten, die man hat. Man hat auch bei den Algorithmen plötzlich die Möglichkeit zu abstrahieren. Man kann Subroutinen definieren, die man wiederverwenden kann. Also man macht wirklich einen großen Schritt weg von der konkreten Maschine in die Welt der eigentlichen Programmierung, das, was man auch als Programmierer besser ausdrücken kann. Das ist so die dritte Generation. Da kann man auch noch weiter unterteilen, aber ich denke, das …

 

Thomas Sinnwell: Da können wir später auch noch mal draufkommen. Wir sollten auf alle Fälle noch über das Stichwort Typisierung sprechen.

 

Dr. Patrick Michel: Typisierung ist eine Sache, die bei den ersten zwei Generationen quasi gar nicht vorlag. Man muss sich vorstellen, Computer sind alles nur Nullen und Einsen und sowohl die Hardware als auch das Betriebssystem gibt da überhaupt keine Einschränkung, was man damit repräsentieren kann, ob das jetzt Zahlen, Zeichenketten oder Bilddaten sind. Vollkommen frei, was ja auch ein schöner Vorteil ist. Das heißt aber auch, ich muss als Programmierer quasi aufpassen, dass Daten, die ich als Zahl ablege, dann nachher auch wieder als Zahl interpretiere, wenn ich es lese. Wenn ich das nicht mache, wenn ich das zum Beispiel als Zeichenkette interpretiere, dann mache ich einen sogenannten Typfehler. Und meistens ist das ungewollt und hat verheerende Auswirkungen. Und dementsprechend gibt es die Typisierung, die genau dafür da ist, um das in den Griff zu kriegen.

 

Thomas Sinnwell: Also die dann den Typ der Daten beschreibt?

 

Dr. Patrick Michel: Genau! Das heißt, primitiv fängt man an normalerweise mit ganzen Zahlen, Fließkommazahlen, Buchstaben und Zeichenketten. Das sind die primitiven Typen, wie ich sie im Speicher ablegen kann. Und aus denen konstruiere ich mir dann, in den Hochsprachen zumindest, mit Strukturen oder später Klassen und Objekten halt komplexere Daten.

 

Thomas Sinnwell: Da müssen wir unbedingt noch drauf zu sprechen kommen. Wie sieht‘s denn jetzt mit der vierten und fünften Generation aus?

 

Dr. Patrick Michel: Bei der vierten Generation, das sind die sogenannten domänenspezifischen Sprachen, die also einen ganz fokussierten Anwendungszweck haben. Zum Beispiel, um mit einer Datenbank zu reden oder auch im Betriebssystem-Umfeld für Shell-Skripte zum Beispiel. Das sind ganz fokussierte Sprachen, die einen fokussierten Anwendungszweck haben und als Kontrast zu den allgemeinen Programmiersprachen, in denen man erst mal keine besondere Ausrichtung hat. Und die fünfte Generation schließlich wären die Logiksprachen, wo man davon weggeht der Maschine genau zu sagen was sie tun soll, sondern man beschreibt nur, was das Ergebnis sein soll. Aber lässt quasi komplett offen, wie das Programm dahinkommt. Das klingt erst mal ein bisschen magisch. In der Logik-Programmierung beschreibt man quasi die Welt einfach durch Invarianten, die die Welt erfüllen sollen und man beschreibt das Ergebnis mit Formeln. Dann kann das Programm selber versuchen, eine Lösung dafür zu finden. Von der Laufzeit her ist das nicht besonders schnell, aber es ist natürlich eine sehr elegante Art ein Problem zu beschreiben und zu lösen. Eine gängige Anwendungsdomäne sind die KIs, also die Künstliche Intelligenz, bei denen ich nicht genau sagen will, wie die KI zu einem Entschluss kommt. Das ist ja genau das, was die KI für mich machen soll. Das heißt, den Weg, den beschreibe ich nicht, sondern nur das Ergebnis.

 

Thomas Sinnwell: Gut! Machen wir dann weiter in der Klassifikation und betrachten die Programmierparadigmen. Schweres Wort. Zuerst mal den Aspekt Imperativ. Patrick, kannst du da ein bisschen was zu sagen?

 

Dr. Patrick Michel: Das ist noch sehr nah angelegt an dem, was man in Assembler auch gemacht hat, das heißt, ein Schritt nach dem anderen. Man sagt dem Programm genau, was es nacheinander abarbeiten soll, welche Anweisungen man macht, welche Berechnungsvorschriften man macht. Was dazugekommen ist zu Assembler, sind die Abstraktionsmöglichkeiten, wo man ganze Blöcke von Programmen zusammenfassen kann zu einer Prozedur und wiederaufrufen kann. Aber es ist im Grunde noch sehr nah an der Prozessarchitektur orientiert. Und so gesehen auch der natürlich erste Schritt der Hochsprachen.

 

Thomas Sinnwell: Anschließend die nächste Klasse, objektorientiert.

 

Dr. Patrick Michel: Da kommen zwei Sachen zusammen. Das eine ist, dass man die Objektorientierung als Konzept eingeführt hat, dass man sagt: Man betrachtet Programme als interagierende Objekte, die für sich stehen und diese senden sich gegenseitig Nachrichten. Das ist ein Programmierparadigma. Gleichzeitig hat man auch in der Weiterentwicklung der Sprache, um sowas zu unterstützen, neue Konzepte eingeführt. Zum Beispiel, dass man Datenstrukturen und Algorithmen auf Datenstrukturen zusammen in Klassen definiert. Das strukturiert den Code unglaublich. Es ist ein schönes Mittel zur Modularisierung, zur Kapselung von Dingen. Aus meiner Sicht sind das aber zwei verschiedene Dinge. Das war eine Sache, die mir im Studium noch gar nicht so richtig klar war. In Vorlesungen hört man, dass das zwei verschiedene Dinge sind. Und Java zum Beispiel als objektorientierte Sprache hat viele von diesen Programmierkonzepten eingeführt, ist aber, was jetzt die reine Idee der Objektorientierung angeht, noch nicht den letzten Schritt gegangen. Da kommen Sprachen wie Scala ins Spiel oder auch Frameworks wie Acer und Actoren. Jeder Actor ist im Grunde das, was in der Objektorientierung ein Objekt sein sollte. Es steht für sich, kapselt seinen Zustand. Actoren tauschen Nachrichten untereinander asynchron aus, welches die Grundidee der Objektorientierung ist.

 

Thomas Sinnwell: Schauen wir mal, ob wir nachher noch ein bisschen Zeit haben, über die ein oder andere Sprache im Detail zu sprechen. Du hast gerade Scala erwähnt, und das, finde ich, ist eine sehr interessante Sprache. Da kann man sicherlich auf das eine oder andere Thema zurückkommen. Aber machen wir hier den Punkt erst mal fertig. Und dann wäre für mich nach objektorientiert, der Aspekt funktional wichtig. Man könnte es natürlich auch drehen und mit funktional starten und dann objektorientiert.

 

Dr. Patrick Michel: Wir hatten ja gerade schon Scala erwähnt. Das ist ein Beispiel für eine Sprache, die auch funktionale Paradigmen mit drin hat. In der funktionalen Programmierung an sich ist es so, dass die Funktion, wie es schon im Namen ist, natürlich einen hohen Stellenwert hat. Insbesondere kann ich auch Funktionen als Werte übergeben, das heißt, ich kann andere Routinen aufrufen und statt als Parameter einfach nur eine Zahl oder eine Zeichenkette zu übergeben, kann ich Funktionen übergeben. Das ist eins der Alleinstellungsmerkmale von der funktionalen Programmierung. Was aber auch deutlich zu merken ist, ist der Schritt noch mal weiter weg von der Architektur. Man redet weniger darüber, wo eigentlich mein Speicher liegt und wo wird er angelegt, wann wird er freigegeben. Das regelt im Grunde alles die Sprachsemantik für mich.

 

Thomas Sinnwell: Ich habe ja auch keine Zuweisung von Werten zu Variablen.

 

Dr. Patrick Michel: Genau! Da hat man einfach mal gesagt, dieser Nebeneffekt, den man hat, wenn man bestehende Variablen verändert, das nimmt man jetzt einfach aus der Sprache raus. Das ist auch eine der gängigen Klassifikationen von Paradigma, dass man sagt, ein Paradigma ist eigentlich eine Einschränkung von Programmiermodellen. Ich mache es mir also selber ein bisschen schwieriger, ich schränke ein, was ich tun kann, mit der erhofften Wirkung, dass ich letztendlich bessere Programme habe, die schöne Eigenschaften haben, dass sie zum Beispiel keine Typfehler enthalten, dass sie eleganter sind, verständlicher zu lesen. Eigentlich ist ein Paradigma oft eine Einschränkung, weil die Sprachen alle gleich mächtig sind. Also alle allgemeinen Programmiersprachen sind sogenannt Turing vollständig. Das heißt, mit denen kann ich alles theoretisch berechnen. Das heißt, es gibt keine Sprache, die ein weiteres Sprachmittel hat, mit dem mehr machen kann, alle sind erst mal gleich mächtig. Eigentlich geht’s darum: Wie möchte ich mein konkretes Programm schreiben? Wie viele Möglichkeiten möchte ich mir geben? Bei Assembler habe ich noch alle Freiheiten der Welt, mit allen Nachteilen, die das nach sich zieht. Und mit jedem Paradigma füge ich quasi eine neue Idee hinzu, wie es mir so einschränken kann, dass meine Programme zielgerichteter gefunden werden, schöner sind, bessere Eigenschaften haben.

 

Thomas Sinnwell: Und wie sieht es bei dem letzten Paradigma aus? Logisch?

 

Dr. Patrick Michel: Genau! Da gehe ich dann noch einen Schritt weg von der konkreten Ausführung, wie ich vorhin angedeutet hatte. Dass ich nicht mehr sage wie ich es überhaupt berechnen soll, sondern nur noch mein Ergebnis beschreibe. Skizziere, wie soll das aussehen, welche Eigenschaften soll das haben. Aber ich beeinflusse gar nicht mehr, wie das Programm oder wie der Computer nachher wirklich auf das Ergebnis kommt. Das kann auch heißen, dass manche Fragen keine Antwort haben und das Programm beliebig lange läuft. Kann halt ein Nebeneffekt davon sein.

 

Thomas Sinnwell: Dann möchte ich noch auf einen weiteren Punkt zu sprechen kommen, und zwar Compiler-Sprachen und Interpreter-Sprachen. Da gibt’s ja auch, das ist zumindest meine Wahrnehmung, öfter mal Verständnisschwierigkeiten, was das genau ist und was die Vor- und Nachteile sind. Ich denke, gerade im Kontext von Java ist das auch ein ganz spannender Punkt.

 

Dr. Patrick Michel: Angefangen hat es mit dem Compiler, mit den kompilierten Sprachen. Da ist die Idee, dass in dem Moment in dem man den Schritt von der Maschinesprache zur Hochsprache macht, braucht man im Grunde ein anderes Programm. Man braucht ein Programm, welches man vorher schon entwickelt hat, dass diese Sprache liest und in die Maschinensprache übersetzt, damit es wieder ausführbar wird. Also auch auf dem modernsten Computer ist weiterhin nur der Befehlssatz vom Computer ausführbar und alles andere muss ich vorher übersetzen, kompilieren. Bei den sogenannten Skript-Sprachen, das ist der Überbegriff für interpretierte Sprachen, spart man sich den Zwischenschritt, das erst zu übersetzen in Maschinensprache und dann auszuführen, sondern man hat beides in einem Programm. Der Interpreter liest das Programm und führt es im selben Moment aus.

 

Thomas Sinnwell: Das ist jetzt auch im Bereich der Webentwicklung sehr en vogue.

 

Dr. Patrick Michel: Genau! Das heißt, man kann auch einfach ein kleines Programmfragment schreiben und direkt ausführen und hat nicht den Overhead.

 

Thomas Sinnwell: Und sieht dann auch gleich, was passiert.

 

Dr. Patrick Michel: Genau! Das wird zum Beispiel von Microsoft gerne dann Makros genannt in der Office Suite. Also alles, bei dem sogar der Endanwender in der Lage ist, kleine Programme zu schreiben, die werden dann direkt ausgeführt. Das ist der Bereich der Skriptsprachen oder interpretierten Sprachen, mit dem offensichtlichen Vorteil. Kompilierung hat den Riesenvorteil, dass der Compiler sich ein bisschen Zeit lassen kann, das Programm zu analysieren und zu gucken, ob alles korrekt ist und auch optimieren kann. Also Optimierung ist natürlich ein Riesenfeld in der Kompilierung. Das heißt, da kann man es sich leisten, dass der Compiler mal ein bisschen länger läuft, und wenn er mit dem optimierten Endergebnis kommt, dann kann ich das zur Laufzeit hocheffizient ausführen.

 

Thomas Sinnwell: Also jetzt, wenn man da noch mal zurückspringt auf die Programmiersprache, wäre C++ da ein sehr prominentes Beispiel für eine Compilersprache?

 

Dr. Patrick Michel: Genau! C, C++, das sind die hardwarenahen hochoptimierten Sprachen, bei denen ich direkt Maschinencode generieren will. Mit dem Nachteil, dass ich halt für jede Architektur einen anderen Compiler brauche, der diese als Output auch entsprechend generieren kann.

 

Thomas Sinnwell: Und das wäre dann auch schon gerade die nahtlose Überleitung zur Java-Welt. Und das ist auch spannend.

 

Dr. Patrick Michel: Bei Java hat man eine sogenannte virtuelle Maschine, für die man kompiliert. Das heißt, die Java-Programme werden übersetzt in Bytecode, der für keine konkrete Architektur direkt ausführbar ist. Und man kombiniert das Ganze mit einem Programm, was entsprechend architekturspezifisch entwickelt werden muss, für die Java Virtual Machine, die diesen Bytecode wieder ausführen kann. Also so gesehen hat man das Beste von beiden Welten, man kann den Compiler schon hardwareunabhängig schreiben und man kann ihn kompilieren, man kann optimieren, man kann den Schritt auf die ganzen Endplattformen entsprechend getrennt gehen und kann für jede Plattform, die eine JVM hat, also eine Java Virtual Machinehat, das Programm dann auch ausführen. Insbesondere natürlich auf mobilen Endgeräten, im Browser, überall wurde direkt Java verwendet. Man geht da manchmal schon einen Schritt zurück. Aus dem Browser ist zum Beispiel Java eigentlich auch mittlerweile wieder raus. Da hat mittlerweile JavaScript komplett übernommen. Java ist eine mächtige Sprache und da hatte man dann mehr mit Security zu kämpfen, als es dann letztendlich wert war. Aber man hat gesehen, man hat diesen Ansatz am Anfang versucht voll auszuschlachten.

 

Thomas Sinnwell: Gut! Ich denke jetzt haben wir es geschafft Programmiersprachen mal so ein bisschen zu gruppieren, zu strukturieren, zu klassifizieren. Ich möchte jetzt noch auf einen Aspekt zu sprechen kommen: alte Programmiersprachen. Es gibt ja unheimlich viele. Und man könnte ja auf die Idee kommen: Ach! So alte Sprachen, da braucht man sich gar nicht mehr mit zu beschäftigen. Da finde ich COBOL ganz spannend. Das wurde 1960 entwickelt und das ist immer noch ganz stark bei Banken und in der Verwaltung zu finden. Und ich nehme mal an, du kannst mir verraten, warum das so ist.

 

Dr. Patrick Michel: Einige der ersten Hochsprachen, die haben schon für ihre Domäne, für die sie gedacht waren, einiges sehr richtig gemacht. Damals wurde auch sehr erfolgreich sehr viel Code damit entwickelt. Die heutige Aktualität hat im Prinzip zwei große Gründe. Das eine ist, es gibt einfach eine riesige Code-Basis, gut funktionierender Code, den man nicht einfach so ersetzen kann. Andererseits haben die Sprachen besondere Unterstützung, zum Beispiel bei COBOL, für die betriebswirtschaftlichen Programme mit präziser Unterstützung für Rechnen mit Währungen, wo man auf zwei Nachkommastellen rechnet. Da darf man keine Fehler machen, weiß ja jeder, der damit zu tun hat. Und die Sprachen können das sehr präzise ausführen und dementsprechend wird das immer noch benutzt. Neuentwicklungen versucht man natürlich ein bisschen einzuschränken, weil es wird immer schwieriger, Leute zu finden, die das können. Man sagt in der Branche so schön, wenn man viel Geld verdienen will, lernt man die Sprachen, nicht die aktuellen, weil da die Leute gesucht werden.

 

Thomas Sinnwell: Ja gut, wir hatten im Unternehmen kontakt zu einer anderen etwas älteren Sprache, zu Fortran. Das war übrigens Fortran 77, die erste Hochsprache, die ich erlernen durfte an der Hochschule, als ich im letzten Jahrhundert mal studiert hatte. Und da findet man ja gerade im Industriebereich Fortran 4 und Fortran 77 auch noch relativ häufig. Und auch gerade da gibt’s auch viele Portierungsprojekte, wo es drum geht, diesen alten Code noch mal zu verstehen. Da hilft‘s halt, wenn man die Sprache kennt und um das Ganze dann in eine aktuellere Sprache zu portieren, für die man da noch mehr Leute findet, die sich auch damit auskennen. Und das fand ich auch sehr bemerkenswert, weil Fortran ist ja 1957, glaube ich, entwickelt worden und ist nach wie vor noch vorzufinden.

 

Dr. Patrick Michel: Man muss natürlich sagen, auch wenn in der Historie manche Sprachen deutlich älter sind als andere, also Java ist sicherlich moderner zum Beispiel als C oder C++, wurden die Sprachen wie C und C++ doch kontinuierlich weiterentwickelt und da gibt’s moderne Standards von. Und dadurch, dass sie sich in ihrem Paradigma und ihrer Anwendung halt so stark unterscheiden, gibt’s für auch diese Sprachen immer noch genügend Anwendungen, sinnvolle Anwendungen, sodass die ihre Daseinsberechtigung haben. Also da würde ich sagen, die sind eigentlich gleichberechtigt, das sind Werkzeuge, die man zur richtigen Zeit halt verwendet.

 

Thomas Sinnwell: Wie lernt man am besten eine Programmiersprache?

 

Dr. Patrick Michel: Das ist wie bei den meisten Dingen, solange man sich dafür interessiert und einfach Learning by Doing macht, es einfach ausprobiert. Das ist eigentlich der beste Ansatz. Man findet ja heutzutage, gerade im Internet, auch haufenweise Einführungen, Tutorials, Webseiten, die das interaktiv machen. Es war nie so einfach an gutes Lernmaterial zu kommen. Aber letzten Endes einfach ausprobieren, einfach machen.

 

Thomas Sinnwell: Spielt das aus deiner Sicht eine Rolle, welche Sprache man sich zuerst raussucht, um sie zu erlernen?

 

Dr. Patrick Michel: Im Grunde nicht, es hängt ein bisschen von den eigenen Vorlieben ab. Also manch einer mag es gerne, wenn grafisch etwas passiert. Das man auch was sieht, wenn man irgendwas macht, dass man direkt den Effekt vor Augen hat. Dann gibt’s natürlich Sprachen, die da näher dran sind. Aber im Grunde auch hier würde man es gar nicht einschränken wollen.

 

Thomas Sinnwell: Es gibt einige Programmiersprachen, die ein sehr ausgeprägtes Ökosystem haben. Was heißt das für die Praxis? Wie ist das zu bewerten?

 

Dr. Patrick Michel: In der Praxis ist es so, dass die Sprache Ausführungssemantik, Paradigmen, alles was wir bisher so diskutiert haben hat, aber das ist die eine Hälfte der Medaille. Die andere ist natürlich, wie viel Bibliotheken existieren da schon für diese Sprache? Von was kann ich schöpfen? Weil nicht jeder, der Software entwickelt, kann neu anfangen. Man muss sich solche Sachen auch dazukaufen oder einfach aus dem Open-Source-Bereich dazu nehmen. Und das ist natürlich sehr relevant.

 

Thomas Sinnwell: Du sprachst jetzt auch von Bibliotheken. Was kann man sich darunter vorstellen?

 

Dr. Patrick Michel: Na gut! Das fängt bei einfachen Datenstrukturen an. Es gibt in der Informatik einige klassische Datenstrukturen, die man gerne zur Entwicklung benutzt. Die möchte ich nicht jedes Mal neu entwickeln, sondern da möchte ich auf eine Bibliothek zurückgreifen. Aber es geht auch um ganz praktische Sachen, wenn ich ein Bild einlesen will, im konkreten Format, dann kann ich mich entweder mit der Formatspezifikation auseinandersetzen oder ich nehme eine Bibliothek, die es einfach laden kann, die das schon implementiert hat. Dann kann ich mir das sparen.

 

Thomas Sinnwell: Oder, wenn ich statistische Operationen ausführen möchte, wenn ich Graphen darstellen will.

 

Dr. Patrick Michel: Genau!

 

Thomas Sinnwell: Für all diese Aufgabenstellungen gibt’s ja dann, ich sag mal, schon vorgefertigten Code und das ist dann eine Bibliothek.

 

Dr. Patrick Michel: Genau! Es gibt also Domänen, wo das wirklich sehr weit ausgeprägt ist. Zum Beispiel im Bereich der Künstlichen Intelligenz, da ist Python zum Beispiel relativ weit vorne als Sprache mit sehr vielen Bibliotheken, die einfach schon da sind. Und das macht Python die erste Wahl, wenn man in diesem Bereich etwas entwickeln möchte.

 

Thomas Sinnwell: Aber der ein oder andere wird sich natürlich die Frage stellen: Was soll ich lernen? Was ist denn im Moment en vogue? Und da kann man sich natürlich im Internet bedienen und findet da auch viele Top Ten Listen. Diese unterscheiden sich nach dem Kriterium, das herangezogen wird, um die Top Ten Reihenfolge festzulegen. Und wenn man unterschiedliche Listen vergleicht, springen einem doch drei Sprachen ins Auge, die dann auf Platz eins sind. Jetzt bei RedMonk ist das JavaScript. Dann findet man Java auch auf Platz eins oder auch Python. Das sind ja jetzt doch Dinge, die sich auch mit unserer Wahrnehmung ganz gut decken. Und ich sag mal, C++ ist nicht allzu weit weg, egal in welcher der einzelnen Listen man jetzt nachschaut.

 

Dr. Patrick Michel: Man merkt, dass es in den gängigsten Sprachen eine gute Abdeckung von verschiedenen Paradigmen gibt. Wir haben Python als dynamisch getypte Sprache und Java als statisch getypte Sprache. JavaScript ist im heutigen Umfeld, im Web-Umfeld natürlich stark im Kommen und wird in jedem Browser eingesetzt. Das heißt, auch das ist natürlich mittlerweile eine der verbreiteten Sprachen überhaupt. Wir setzen zum Beispiel noch viel C++ ein, einfach für die hardwarenahe, sehr effiziente Programmierung. Mit Scala haben wir noch mal eine dedizierte Sprache für die funktionale Programmierung. Wobei man auch sagen muss, funktionale Programmier-Konstrukte halten immer mehr Einzug in die anderen Sprachen. Also Java zum Beispiel hat auch seit Version 8 Funktionen höherer Ordnung, welche normalerweise Teile der funktionalen Programmierung gewesen wären.

 

Thomas Sinnwell: Dann kann man an der Stelle zusammenfassen, dass Programmiersprachen auch unterschiedliche Stärken haben oder auch Anwendungsschwerpunkte, bei denen man sie sinnvollerweise einsetzen sollte. Und es gibt nicht DIE Programmiersprache, die alles erschlägt.

 

Dr. Patrick Michel: Genau! Im Grunde ist es sogar so, dass wenn eine neue Sprache auf den Markt kommt, die irgendwas besonders gut macht, dann ist es meistens, durch ein neues Paradigma mit einer neuen Einschränkung, die es für ein Anwendungszweck besonders gut macht, und sobald sich die Sprache durchsetzt, wird dann der Ruf lauter: Kann ich nicht damit auch alles andere machen? Wenn die Sprache doch so schön ist, kann ich dann nicht vielleicht, wenn ich da noch ein, zwei Features hinzufüge, vielleicht alles damit machen. Das ist aber genau der falsche Ansatz, denn die Sprachen sind Werkzeuge, die für verschiedene Anwendung besonders gut oder besonders schlecht sind. Es wird keine Sprache geben, die einfach alle ersetzt. Das geht genau gegen das Prinzip.

 

Thomas Sinnwell: Das greift letztendlich auch den Titel der Podcast-Folge auf, da geht’s ja um Programmiersprachen, so mit dem Untertitel „Besteck oder Stäbchen?“. Und mit Stäbchen kann ich natürlich eine ganze Menge sehr universell erschlagen, es wird schwer, ein Schnitzel zu schneiden. Umgekehrt, wenn ich das Besteck benutze und ich habe jetzt gerade die Gabel, dann ist es auch spannend, eine Nuss aufzuspießen. Da bin ich dann wiederum mit meinen Stäbchen durchaus im Vorteil. Zum Schluss möchte ich dir noch eine persönliche Frage stellen: Was ist denn deine Lieblings-Programmiersprache und warum?

 

Dr. Patrick Michel: Das ist eine gute Frage. Ich habe ein besonderes Faible für Haskell. Da haben wir heute noch gar nicht drüber gesprochen. Haskell ist eine funktionale Programmiersprache, die sehr rigoros einige Programmierparadigmen umsetzt. Es macht sehr viel Spaß damit zu programmieren. Ist allerdings auch, sagen wir, in der Praxis aufgrund des Ökosystems leider noch nicht so durchgesetzt, wie man es gerne hätte. Gerade durch Scala, welche aus der Teilmenge der schönen funktionellen Sprachen und auch in der Praxis einen tolle Alternative schafft.

Thomas Sinnwell: Ein gutes Ökosystem dann noch mitbringt.

 

Dr. Patrick Michel: Genau!

 

Thomas Sinnwell: Besten Dank für dein Statement, für deine Antwort. Und ich hoffe, es ist uns heute gelungen, einen kleinen Überblick über das Thema Programmiersprachen zu geben. Mehr Informationen findet ihr in den Shownotes. Gerne darf sich der ein oder andere auch bei Patrick Michel bewerben.

Bis zum nächsten Mal! Tschüss!

 

Dr. Patrick Michel: Tschüss!

 

So! Das war‘s mal wieder von uns für heute. Wir hoffen, wir konnten euch die Welt der Softwareentwicklung ein Stück näherbringen und vielleicht auch die Neugier auf mehr wecken. Denn es gibt eine Fortsetzung zum Thema in unserem nächsten Podcast. Dann sprechen wir nämlich über Designkonzepte in der Softwareentwicklung. Ein Konzept davon ist Domain Driven Development. Und wenn ihr wissen wollt, was das ist, schaltet einfach ein. Wie immer haben wir weiterführende Links zur aktuellen Folge für euch in den Shownotes und wenn ihr Lust auf mehr habt, dann freuen wir uns natürlich, wenn ihr uns abonniert. Die nächste Folge erscheint dann am 1. Juli, wie immer am ersten Donnerstag im Monat. Reinhören lohnt sich! Wir freuen uns auf euch!

Ihre Cookie-Einstellungen

Technisch notwendige (essenzielle) Cookies

Informationen zu den einzelnen Cookies

  • Mehr anzeigen

    Technisch notwendige (essenzielle) Cookies

    Notwendige Cookies helfen dabei, eine Webseite nutzbar zu machen, indem sie Grundfunktionen wie Seitennavigation und Zugriff auf sichere Bereiche der Webseite ermöglichen. Die Webseite kann ohne diese Cookies nicht richtig funktionieren.

    Name fe_typo_user
    Anbieter consistec.de
    Zweck Sichert die Anti-Spam-Maßnahmen bei Benutzen des Kontaktformulars
    Ablauf Session
    Typ HTTP
    Name conCookieSettings
    Anbieter consistec.de
    Zweck Speichert die Zustimmung zu Cookies
    Ablauf 30 Tage
    Typ HTTP
    Name mtm_consent_removed
    Anbieter consistec.de
    Zweck Wird von Piwik Analytics Platform (matomo) genutzt, um festzustellen, dass dem Tracking widersprochen wurde.
    Ablauf 1 Monat
    Typ HTTP
  • Mehr anzeigen

    Statistiken

    Statistik-Cookies helfen Webseiten-Besitzern zu verstehen, wie Besucher mit Webseiten interagieren, indem Informationen anonym gesammelt und gemeldet werden.

    Name matomo.php
    Anbieter consistec.de
    Zweck Erfasst Statistiken über Besuche des Benutzers auf der Website, wie z. B. die Anzahl der Besuche, durchschnittliche Verweildauer auf der Website und welche Seiten gelesen wurden.
    Ablauf Session
    Typ HTTP
    Name _pk_id#
    Anbieter consistec.de
    Zweck Erfasst Statistiken über Besuche des Benutzers auf der Website, wie z. B. die Anzahl der Besuche, durchschnittliche Verweildauer auf der Website und welche Seiten gelesen wurden.
    Ablauf 1 Jahr
    Typ HTTP
    Name _pk_ses#
    Anbieter consistec.de
    Zweck Wird von Piwik Analytics Platform (matomo) genutzt, um Seitenabrufe des Besuchers während der Sitzung nachzuverfolgen.
    Ablauf 1 Tag
    Typ HTTP
    Name _pk_testcookie..undefined
    Anbieter consistec.de
    Zweck Wird von Piwik Analytics Platform (matomo) genutzt, um zu überprüfen, ob der verwendete Browser Cookies unterstützt.
    Ablauf Session
    Typ HTTP
    Name _pk_testcookie.#
    Anbieter consistec.de
    Zweck Wird von Piwik Analytics Platform (matomo) genutzt, um zu überprüfen, ob der verwendete Browser Cookies unterstützt.
    Ablauf Session
    Typ HTTP