Jürgen Dankert: Meine Meinung zum Thema ...

Welche Programmiersprache sollte man lernen?

Vorbemerkung

Die erste Fassung dieses Textes wurde im Jahr 1996 geschrieben. Er ist mehrfach aktualisiert worden, die letzte Änderung wurde 2014 verfasst. Natürlich kann es bei einem solchen Thema immer nur eine subjektiv gefasste Meinung sein.

Fortran-Programm
Man sieht den Programmen die Sprache des Quellcodes nicht an:
Dies hier wurde im guten alten Fortran programmiert, ...

Es geht um die Frage, WELCHE Programmiersprache derjenige lernen sollte, der sich dazu entschlossen hat, Algorithmen zu programmieren. Die Frage, OB man eine Programmiersprache lernen muss, um Programme zu erzeugen, wird weiter unten im Abschnitt "Einfluss der Entwicklungsumgebung" kurz behandelt, denn man kann durchaus Programme ohne die Kenntnis einer Programmiersprache erzeugen.

Früher war es einfach

Früher (in den 60er und 70er Jahren des vorigen Jahrhunderts) war es einfacher: Man fing mit Basic an, Ingenieure und Naturwissenschaftler lernten Fortran, Wirtschaftswissenschaftler Cobol, in der Lehre wurde Pascal favorisiert, wer betriebssystem-spezifische Probleme bearbeitete, bevorzugte C. Für eine kleinere Gruppe von Programmierern waren Spezialsprachen wie Lisp und Prolog besonders geeignet, in den achtziger Jahren begann mit Smalltalk das objektorientierte Programmieren.

Für alle speziellen Anforderungen gab es die geeignete höhere Programmiersprache. In der Weiterentwicklung der einzelnen Sprachen wurde stets versucht, die Stärken der anderen Sprachen zu übernehmen, so dass man schließlich mit vielen Sprachen eigentlich alles programmieren konnte.

Trends in Vergangenheit und Gegenwart

Es gab immer Trends und zum Teil sogar schwierig zu begründende Modeerscheinungen in der Programmiersprachen-Welt, auch mancher "frühe Tod" ist kaum verständlich (wo ist die sehr schöne Sprache Algol geblieben, wo die von einem besonders großen Computer-Hersteller besonders protegierte Sprache PL/1?).

Für die steile Karriere der Sprache C in den 90er Jahren, nachdem sie vorher fast ausschließlich in der Unix-Welt zu Haus war, mag die Tatsache verantwortlich gewesen sein, dass erfolgreiche Betriebssysteme (z. B. Unix und Windows) selbst in C geschrieben sind und diese Sprache deshalb das Zusammenspiel des Anwenderprogramms mit dem Betriebssystem besonders unterstützt.

Dass C++ sich so extrem stark verbreitete, mag vor allen Dingen zwei Gründe gehabt haben: Die objektorientierte Programmierung ist sicher eine ausgezeichnete Alternative zu den traditionellen Programmiertechniken, für große Software-Projekte auch wohl die einzige Möglichkeit, die Programme sowohl effektiv schreiben als auch warten zu können (und objektorientierte Vorgehensweisen sind auch in vielen anderen Wissenschaftsbereichen erfolgreich). Zum anderen enthält C++ den kompletten Sprachumfang von C, so dass für die Programmierer ein "gleitender Übergang" möglich war und alle C-Routinen und C-Bibliotheken weiter verwendet werden konnten.

Auf keinen Fall darf man aber C++ als ein "erweitertes C" ansehen. Man muss in jedem Fall die objektorientierte Programmierung konsequent realisieren, wenn man die Vorteile dieser Sprache nutzen will.

Java-Applet
... und dies ist ein Java-Applet, eingebunden in eine
HTML-Datei (http://www.tm-interaktiv.de/Rahmen2D/)

Es folgte Java, propagiert als "Internet-Sprache". Java ist konsequent objektorientiert, ein "Schlupfloch" zu den klassischen Programmiertechniken (wie in C++ durch die Einbindung von C) gibt es nicht. Mit Java war es erstmals möglich, aufwendige und komplizierte Algorithmen als "Java-Applets" in den HTML-Code von Internetseiten einzubinden. Java ist deshalb bis heute eine der meistbenutzten Programmiersprachen.

Nach dem ersten Release von Java (1995) sind fast alle Modifikationen älterer Sprachen und alle neuen Sprachen dem Trend gefolgt, "internettauglich" zu sein. Mit der Sprache C# wurde zum Beispiel von Microsoft eine Sprache bereit gestellt, die die Konzepte von C, C++ und Java aufgriff. In der Apple-Welt ist das objektorientierte Objective-C bis heute der populärste Vertreter. Diese Sprache enthält (wie C++) alle Elemente von C, entlehnt aber die objektorienten Elemente aus der Sprache Smalltalk.

Wie die genannten Sprachen wurden alle nachfolgenden Sprach-Entwicklungen davon geprägt, wie die interaktive Arbeit im Internet realisiert werden kann. Exemplarisch sei hier die sehr erfolgreiche Sprache PHP genannt (auch 1995 erstmals veröffentlicht, brauchte aber einen längeren "Anlauf" bis zum Erfolg als Java).

HTML, CSS, JavaScript, PHP

HTML ("Hypertext Markup Language") ist die Sprache, in der Internetseiten geschrieben sind. Sie ist als "Auszeichnungssprache" nur zur Strukturierung von Dokumenten gedacht (Absätze, Blöcke, Einbinden von Bildern usw.) mit der Besonderheit, auf andere Seiten verweisen zu können (Links). HTML ist vom Charakter her nicht vergleichbar mit den oben genannten Sprachen.

Während für die ersten Versionen von HTML das Layout der Seiten im HTML-Text festgelegt wurde, erfolgte schon sehr bald eine Trennung von Layout und Inhalt. Das Layout wird in so genannte CSS-Dateien ("Cascading Style Sheets") ausgelagert. Wer sich also mit HTML befassen will, sollte gleichzeitig CSS lernen.

Das Erlernen von HTML (einschließlich CSS) ist vergleichsweise sehr einfach (im Vergleich zum Erlernen der oben genannten Sprachen). Es entstehen auf diesem Weg "statische Internetseiten", die genau das anzeigen, was mit der Auszeichnungssprache HTML definiert wird.

Mit der Einführung des "Document Object Models" (DOM) kam "Dynamik" in die Internetseiten hinein: Der Betrachter einer Seite am Browser konnte (zum Beispiel durch Mausklick) Teile der Seite verändern. Nun war für den Hersteller einer Webseite auch Programmieren angesagt. Von den zahlreichen Hilfsmitteln dafür braucht wohl heute nur noch JavaScript genannt zu werden (Achtung, JavaScript und das oben genannte Java sind extrem unterschiedliche Sprachen).

Ein wesentlicher weiterer Schritt war die Einführung "dynamischer Webseiten", die der SERVER erst in dem Moment erzeugt, wenn die Seite angefordert wird. Die Informationen, die dafür benötigt werden, entnimmt der Server aus Datenbanken (und dem Link, mit dem die Seite angefordert wird). Die Systeme, mit denen die Datenbanken gepflegt und das Layout der zu generierenden Seiten festgelegt wird, sind so genannte "Content Management Systems" (CMS).

Als Beispiel für ein CMS (es gibt unüberschaubar viele) sei hier das beliebte TIPO3 genannt. Zur Handhabung eines CMS ist die Kenntnis einer Programmiersprache in der Regel nicht erforderlich. Die klassischen Anwendungen für CMS sind Internet-Verkaufsportale.

PHP-Programm
Auch dieser Grafik sieht man nicht an, dass sie mit einem PHP-Programm erzeugt wurde
(http://www.juergendankert.de/TM-interaktiv/Rechner/Taschenrechner.php)

Auch für die dynamischen Webseiten, die auf dem Server erzeugt werden, gibt es eine ganze Reihe unterschiedlicher Techniken, wie sie programmiert werden (und der Server muss mit entsprechend installierter Software in der Lage sein, diese Programme interpretieren zu können). Exemplarisch sei hier die besonders weit verbreitete objektorientierte Sprache PHP genannt. Programme in dieser Sprache bestehen - vereinfacht ausgedrückt - aus "normalen" HTML-Anweisungen und PHP-Anweisungen, aus denen der PHP-Interpreter zum Zeitpunkt des Aufrufs aus den aktuellen Informationen (z. B. aus einer Datenbank) HTML-Anweisungen (auch zum Beispiel JavaScript-Code) generiert und das Ergebnis (wie eine "normale" HTML-Seite) an den Browser sendet.

Im Extremfall kann ein PHP-Programm ausschließlich aus HTML-Anweisungen bestehen, wie es ein Facebook-Nutzer (Facebook ist in PHP programmiert) dann bemerkt, wenn er für eine "Seite" (früher "Fanpage") zusätzliche Seiten in HTML programmiert, diese aber vor dem Hochladen zur PHP-Seite umbennen muss.

Der Einfluss der Entwicklungsumgebungen

Die Entwicklungsumgebung ist eine Sammlung von Programmen, die den Programmierer bei seiner Arbeit unterstützt. So genannte "Integrierte Entwicklungsumgebungen" (IDE, Abkürzung für "Integrated Development Environment") haben immer stärker die eigentliche Programmierung beeinflusst, zum Teil sogar ersetzt. Die wichtigsten Komponenten einer Entwicklungsumgebung sind der Editor, ein Compiler oder Interpreter, ein Linker, ein Debugger und Funktionen, die Teile des Quelltextes automatisch erstellen bzw. Hilfe bei der Codierung anbieten.

C++-Programm
C++-Programm "MTHAREA2", erzeugt mit
der Entwicklungsumgebung "MS-Visual-Studio"

Das auch (oder gerade) bei Hobby-Programmierern in den 80er und 90er Jahren beliebte "Borland Turbo Pascal" gehörte zu den ersten kommerziell erfolgreichen Entwicklungsumgebungen. In den 90er Jahren ging der Trend zu "Visuellen Entwicklungsumgebungen", das "Microsoft Visual Studio" zum Beispiel ist noch heute sehr weit verbreitet. Mit diesen Umgebungen entfernte sich der Programmierer immer mehr von der eigentlichen Programmiersprache. Man definiert nur noch, was das Programm machen soll, und überlässt der Entwicklungsumgebung das eigentliche Schreiben des Programmcodes.

Für das "Mobile application development" (Programmierung von Apps für Smartphones, Tablets, ...) stehen heute unzählige Entwicklungsumgebungen zur Verfügung, die zum Teil proprietär sind (z. B. "iOS SDK" für Apple-Geräte oder "Android" für Geräte mit diesem Betriebssystem), es gibt aber auch Entwicklungsumgebungen für plattformübergreifende App-Entwicklung.

"Nur ein paar Mausklicks, und man hat ein komfortables Programmgerüst." Dabei werden viele Zeilen Code automatisch erzeugt, das Programm ist prinzipiell komplett, es kann eine ausführbare Version erzeugt und gestartet werden, der Programmierer selbst hat bis zu diesem Punkt noch gar nicht programmiert. Die unendliche Mühsal früherer Jahre, die Programmierung der Kommunikation mit dem Benutzer (Bildschirm, Tastatur, Maus, Drucker, ...) ist weitgehend vorbereitet, und auch viele weitere Schritte werden von der Entwicklungsumgebung nach einem Dialog mit dem Programmierer automatisch in Programmcode umgesetzt. Ist das Programmieren einfacher als früher? Keineswegs, weniger mühsam durchaus, speziell in den Passagen, die eher Routinearbeiten sind. Und es sind die objektorientierten Programmiersprachen, die zur Unterstützung durch die Entwicklungsumgebung besonders geeignet sind. Dass es durchaus möglich ist, objektorientiert mit einer Entwicklungsumgebung zu arbeiten, die den eigentlichen Programmcode dann in einer beliebigen Sprache erzeugt, ist unbestritten und sollte deshalb manchen verbissenen Streit um die "beste" Programmiersprache entkrampfen.

Für das Erzeugen von Internetseiten sind die Angebote der Provider besonders verlockend: "Nur wenige Mausklicks von der eigenen Homepage entfernt!" Der Zusatz lautet meistens noch: "Keine HTML-Kenntnisse erforderlich!" Alles richtig, aber vor einer Entscheidung sollte man noch den folgenden Abschnitt lesen.

Die Entscheidung jedoch für oder gegen eine Programmiersprache sollte unbedingt im Zusammenhang mit der Entscheidung für oder gegen eine Entwicklungsumgebung gekoppelt werden.

Und welche Sprache soll man nun lernen?

Diese Frage war schon immer schwierig zu beantworten. Die Antwort wird stets subjektiv beeinflusst sein, und die Gefahr des "Glaubenskrieges" zwischen den Anhängern der einzelnen Sprachen kann niemals ausgeräumt werden. Es wird auch immer ein Glaubenskrieg bleiben, weil es den objektiv urteilenden Ratgeber nicht geben kann, denn dieser müsste mit den unterschiedlichen Sprachen und Entwicklungsumgebungen jeweils intensive Erfahrungen haben.

Mit dem Schreiber dieser Zeilen, der über Assembler, Algol, Basic, Pascal und Fortran zu C, C++, Java und PHP kam, lässt sich ein Glaubenskrieg nicht mehr führen. Aber auch meine Meinung ist natürlich subjektiv geprägt.

Wenn es nicht äußere Zwänge (z. B. ein Lehrer oder ein Professor, der einfach bestimmt, welche Sprache zu lernen ist) oder sonstige besondere Gründe gibt, die für die Wahl einer bestimmten Programmiersprache sprechen, sollte man sich heute folgende Fragen beantworten:

Die "Erfinder" der Programmiersprache Java haben diese als "einfach zu erlernen" bezeichnet. Diese Aussage kann wohl nur mit dem Zusatz "..., wenn man vorher schon objektorientiert programmiert hat" akzeptiert werden. Dass das objektorientierte Programmieren einfach ist, weil es "die Denkweise unterstützt, die man aus dem Umgang mit den Objekten im täglichen Leben gewöhnt ist", wird zwar auch gern behauptet, aber kaum von denjenigen bestätigt, die es tatsächlich erlernen wollen. Wer C++ lernt, hat dann einen nicht zu unterschätzenden Vorteil und kann sich auf die Besonderheiten der objektorientierten Programmierung konzentrieren, wenn er C kann.

Doppelpendel
Die Bewegung des Doppelpendels
wurde mit Matlab berechnet

An der Frage, ob sich bereits der Anfänger der Unterstützung einer komfortablen Entwicklungsumgebung bedienen sollte, können sich die Gemüter der Lehrenden heftig erhitzen. Ich beantworte diese Frage (wenn man sich für C++ oder Java entschieden hat) schon deshalb mit "ja", weil sich der Spaß an der faszinierenden Tätigkeit des Programmierens möglichst schnell einstellen sollte. Wer das Programmieren ernsthaft erlernen will, merkt ohnehin sehr schnell, dass er ohne solides Basiswissen und Training nicht sehr weit kommt.

Für diejenigen, die auf die oben genannte Frage, ob man bereits mit einer anspruchsvollen Software gearbeitet hat, mit "Ja" geantwortet haben, bisher aber nur im Dialogbetrieb, soll noch eine spezielle Empfehlung abgegeben werden. Typische Beispiele dafür sind Naturwissenschaftler und Ingenieure, die an einer Software wie Matlab (ist nur eine Beispiel, es gibt auch leistungsfähige andere Systeme) kaum vorbeikommen. Aber auch die unendlich vielen Tabellen-Erzeuger mit einem Programm wie Excel, die maximal eine Sortierfunktion genutzt haben, sollten wissen, welche anspruchsvollen Programme mit Excel geschrieben werden können. Die Empfehlung lautet in diesem Fall, dass ein Einstieg in die Programmierung mit dem bereits vertrauten System sicher besonders schnell funktioniert. Natürlich ist man mit dem Ergebnis der Programmierung auf die benutzte Software beschränkt, aber man lernt das Erzeugen eines Algorithmus, und das hilft gegebenenfalls auch beim Einstieg in eine andere Programmiersprache.

Und wie lautet der Ratschlag für den Anfänger?

Mein Rat für den "neutralen Anfänger", der weder durch Vorkenntnisse, Vorgaben und spezielle Ziele beeinflusst ist, fällt im Jahr 2014 nun ganz anders aus als noch vor wenigen Jahren. Dabei hat das Argument, dass sich Spaß und Erfolg möglichst schnell einstellen sollten, an Gewicht wesentlich zugenommen. Und natürlich ist der Stellenwert des Zusammenspiels "Programmiersprache - Internet" stetig gewachsen.

Auf HTML-Kenntnisse sollte man auf keinen Fall verzichten, weil man auch ohne Vorkenntnisse in der Lage ist, eine HTML-Datei zu erzeugen, die von einem Browser angezeigt werden kann, um sich dann Schritt für Schritt in die Sprache einzuarbeiten. Dabei kann man sich zunächst auf einen kleinen Ausschnitt beschränken. Im Internet findet man unzählige Tutorials, mit denen man sehr schnell zu ersten Erfolgen kommt. Darin findet man auch die Einführung in CSS, womit man sich zunächst auch nur in geringem Umfang vertraut machen muss.

Mit HTML-Kenntnissen hat man den unschätzbaren Vorteil, dass man sich bei den meisten interessanten Webseiten im Browser den HTML-Quelltext anzeigen lassen kann. Dort sieht man, wie andere das codiert haben, was der Browser anzeigt. Man sollte nur beachten, dass die direkte Übernahme des Codes eine Copyright-Verletzung sein könnte (aber es gilt wohl stillschweigend immer noch das schöne "Open source agreement" aus den frühen Tagen des Internets, mir ist jedenfalls kein Fall bekannt, dass jemand den Copyright-Schutz seines HTML-Codes eingeklagt hätte).

Das Ansehen des HTML-Codes sollte man gleich einmal mit dieser Seite, die gerade gelesen wird, ausprobieren: In den Browsern "Mozilla Firefox" bzw. "Google Chrome" findet man rechts oben das Zeichen Ξ, das nach Anklicken ein Menü öffnet. In "Mozilla Firefox" kommt man über "Entwicklerwerkzeuge | Seitenquelltext anzeigen" bzw. in "Google Chrome" über "Weitere Tools | Quelltext anzeigen" zum HTML-Quelltext der aktuellen Seite. Auch wenn man noch nicht viel von dem versteht, was da zu sehen ist, kann man ahnen, dass zwischen den "HTML-Tags" <head> und </head> organisatorische Anweisungen stehen und zwischen den Tags <body> und </body> alles das zu finden ist, was der Browser anzeigen soll. Als wichtigste Information sollte man registrieren, dass alles offen zugängig ist, auch die für die Formatierung (Farben, Schriftart, Überschriften, Absätze, ...) zuständige Datei proglang.css, deren Quelltext nach einem Klick auf den Dateinamen auch zu sehen ist.

Rotation ändern:  

JavaScript lautet meine Empfehlung für alles das, was mit einfachem HTML nicht realisierbar ist. JavaScript ist keine objektorientierte Sprache (immerhin "objektbasiert"), was das Erlernen vereinfacht. Mit JavaScript können beliebig komplizierte Algorithmen realisiert werden.

Die nebenstehend zu sehende Animation ist ein Beispiel dafür. Sie wurde komplett mit JavaScript realisiert: Grafik, Definition der Körper, umfangreiche Berechnungen der Lage der Körper im Raum, Projektion der 3D-Objekte in die Zeichenebene, die Entscheidungen, welche Teile welcher Flächen von anderen überdeckt werden, die zeitliche Veränderung der Lage der Körper und die mögliche Interaktion des Betrachters durch Anklicken der Felder unter der Grafik, um die Rotation zu ändern.

Der für HTML genannte Vorteil, dass man sich im Browser den Quellcode, den andere Programmierer erzeugt haben, anzeigen lassen kann, gilt auch für JavaScript. Darüber hinaus gibt es zahlreiche freie Bibliotheken mit JavaScript-Routinen, die man einbinden kann. Der Autor dieser Zeilen stellt zum Beispiel mehrere JavaScript-Bibliotheken zur Verfügung, mit denen die nebenstehend zu sehende Animation programmiert wurde. Wenn man sich (wie oben beschrieben) den HTML-Text dieser Seite anzeigen lässt, findet man genau die beiden eingebundenen Dateien platonbucky.js und CanvasGI.js, die man sich durch Anklicken auch anzeigen lassen kann. Der Anfänger wird als Information einerseits entnehmen, dass recht komplizierte Aufgaben realisierbar sind, andererseits den freien Zugang zum JavaScript-Text erkennen, der zum Beispiel problemlos die Übernahme der tanzenden Körper auf die eigene Homepage gestattet.

Mit der Kombination HTML, CSS, JavaScript ist man gegenwärtig sehr gut gerüstet, unabhängig davon, für welche Plattform man programmieren möchte. Dem Anfänger kann bei dieser Kombination eine recht "steile Lernkurve" versprochen werden, die durch den Spaß unterstützt wird, der sich einstellt, weil man auf jeder Stufe ein lauffähiges Produkt erstellen kann.

Nicht zu unterschätzen ist der Vorteil, dass man eigentlich keine Hilfsmittel benötigt, die auf dem eigenen Computer nicht ohnehin verfügbar sind. Die HTML-, CSS- und JavaScript-Dateien sind einfache Text-Dateien, an deren Namen man nur die Endungen .html, .css bzw. .js anhängen muss und die mit jedem Editor oder mit Wordpad zu erzeugen sind. Empfehlenswert ist natürlich ein spezieller Editor, der zum Beispiel die Syntax der Sprachen unterstützt. Dafür möchte ich hier keine Empfehlungen geben. Man suche im Internet zum Beispiel mit den Stichworten "Editor html" oder "Editor javascript", und man findet zahllose (zum größten Teil freie) Editoren.

Ein weiterer gewaltiger Vorteil ist, dass man keinen Übersetzer (Compiler) oder Interpreter benötigt. Der auf dem eigenen Computer installierte Web-Browser genügt, um die eigenen Programme zu testen.

Zum Schluss noch ein didaktisch zwiespältiger Hinweis

Natürlich kann nur die Einarbeitung in HTML, CSS und JavaScript mit einem Tutorial empfohlen werden, das mit den Grundlagen beginnt und danach in sinnvoller Reihenfolge die weiteren Themen behandelt. Aber weil die Werbebotschaft der Provider "Nur ein paar Mausklicks von der eigenen Homepage entfernt" so verlockend klingt, soll hier noch eine Kompromisslösung für den Anfänger erwähnt werden:

Man kopiert dich den Quellcode dieser Seite in einen Editor, löscht fast alles (bis auf ein Gerüst, das man selbst verwenden kann), speichert die Datei auf dem eigenen Computer zum Beispiel unter myhomepage.html ab und lädt diese Datei in den eigenen Browser. Dann erkennt man bei einem Vergleich zwischen Quelltext und Darstellung der Seite im Browser einige Zusammenhänge zwischen HTML-Code und und Ergebnis, und dann kann es Schritt für Schritt weitergehen.