Wie programmiert man eigentlich?

Wenn Du lernen möchtest zu programmieren, so interessiert Dich vermutlich, wie das Programmieren selbst eigentlich abläuft.

Benötigte Programme

Programme eingeben

Dass ein Programm als Text eingegeben wird, ist vermutlich bekannt. Entsprechend benötigt man ein Programm, um Quelltexte einzugeben. Dies kann entweder ein Editor sein, oder auch eine Entwicklungsumgebung. Den Unterschied erkläre ich gleich. Eine Entwicklungsumgebung, auch IDE genannt, bringt in jedem Fall ebenfalls einen Text-Editor mit.

Im Texteditor beschreibst Du nun, was der Computer machen soll, indem Du Dein Problem immer weiter aufteilst, bis Du kleine, beschreibbare Happen hast. Es ist vergleichbar mit einem Lego-Haus, das Du Dir vorstellst. Du nimmst das Haus in Gedanken auseinander und beschreibst Legostein für Legostein. Wenn Du alles richtig gemacht hast, fügen sich alle Steine zu dem Haus zusammen, das Du Dir vorgestellt hast.

Programme ausführbar machen

Als nächstes benötigen wir die eigentliche Programmiersprache, die den Quelltext liest. Dieses Programm wird in der Regel Compiler oder Interpreter genannt. Wenn die Programmiersprache eine ausführbare Datei erzeugt, dann handelt es sich um eine kompilierende Programmiersprache (z.B. C++), wird das Programm hingegen sofort ausgeführt und ist ohne die Programmiersprache nicht lauffähig, so handelt es sich um einen Interpreter (z.B. PHP).

Wird das Programm interpretiert, so liest sich der Interpreter Deinen Quelltext Wort für Wort durch und führt die Befehle aus. Ein Compiler hingegen übersetzt Deine Befehle in Maschinensprache, also in das Format, das der Computer wirklich versteht. Deswegen werden Compiler im Deutschen auch 'Übersetzer' genannt.

Große Programme

Wer große Programme schreibt, der wird nicht nur eine Quelltextdatei schreiben, sondern eine ganze Menge. Große Programme werden normalerweise mit kompilierenden Sprachen erzeugt, dabei muss jeder einzelne Quelltext in Maschinensprache übersetzt werden. Wenn man nun viele Quelltexte hat, ist dies zu aufwendig, um es von Hand zu machen, daher wurden sogenannte Buildsysteme erfunden, also „Bauprogramme“, die aus Deinen vielen Quelltexten ein ausführbares Programm bauen.

Eine Entwicklungsumgebung kombiniert in der Regel den Editor und ein einfaches Buildsystem in einem Programm. Solange man aber noch übt, reicht ein einfacher Texteditor ebenfalls aus und wenn man später große Programme schreibt, benutzt man häufig auch eigenständige Buildsysteme.

Diese Buildsysteme nehmen Dir die Arbeit ab, jeden Quelltext einzeln von Hand zu kompilieren. Ein kompilierter Quelltext liegt anschließend als sogenannte Objekt-Datei vor. Darin ist Dein Programm bereits in Maschinensprache enthalten, aber Dein Betriebssystem weiß noch nicht, was es damit anfangen soll.

Hierbei hilft ein Programm, das sich Linker nennt. „Linker“ ist Englisch und heißt soviel wie „Verknüpfer“. Es macht aus all den Objektdateien eine einzige, ausführbare Datei und beschreibt dem Betriebssystem, welches der erste Legostein ist, der aufgebaut werden soll.

Der Linker wird heutzutage häufig schon vom Compiler gerufen, aber so ist das übliche Prozedere, wie man von einem Quelltext zu einem ausführbaren Programm kommt.

Bibliotheken

Computer existieren nun seit vielen Jahren und natürlich muss man nicht bei jedem Programm das Rad neu erfinden. Die meisten Programme auf Deinem Rechner sehen sich ähnlich, sie haben gleichartige Knöpfe, befinden sich in ähnlich aussehenden Fenstern. Ein Betriebssystem ist nichts anderes als eine große Menge an Funktionen, die man in seinen Programmen benutzen kann. So muss man sein Fenster nicht selbst zusammenbasteln, sondern man bittet das Betriebssystem diese Aufgabe zu erledigen.

Diese Funktionen werden teilweise mit dem Betriebssystem mitgeliefert, teilweise bekommt man sie im Internet oder als Treiber zu den jeweiligen Geräten mitgeliefert. Eine Grafikkarte bietet beispielsweise Funktionen, um 3D-Grafiken in Echtzeit darzustellen. Damit die 3D-Grafik funktioniert, muss man die dafür notwendigen Funktionen auf dem Computer installieren: den Grafikkartentreiber.

Diese Funktionen werden als Paket in einer Datei geliefert, die man „Bibliothek“ nennt. Unter Windows sind dies in der Regel die .dll-Dateien. DLL steht für „Dynamic Link Library“. Es sind also Funktionen, die dynamisch mit dem Programm verknüpft werden. Dynamisch bedeutet, dass diese Funktionen ausgetauscht werden können - so wie man die Grafikkarte in einem Computer austauschen kann und dann andere Treiber installiert. Wenn das Programm startet, fragt es nach den Grafikkartentreibern und hat so Zugriff auf die Funktionen, die es für 3D-Grafik benötigt, egal welche Grafikkarte in dem Computer verbaut wurde.

Das Programmieren selbst

Fehler finden

Wenn man eine Programmiersprache lernt, so lernt man zum einen die Sprache, also die Vokabeln und die Grammatik wie man eine Anweisung korrekt formuliert, so dass der Computer sie auch versteht. Aber es gibt einen weiteren Aspekt, der gerne übersehen wird: Man muss lernen, dass man einem Computer zwar grammatikalisch korrekte Anweisungen geben, die man so aber gar nicht gemeint hat. Wenn Du ein Haus bauen möchtest, dann versteht ein Computer nicht Deinen Wunsch ein Haus zu bauen, sondern er führt nur die Anweisungen aus, die Du ihm gegeben hast. Wenn Du ihm sagst, er soll Stein auf Stein bauen, dann bedeutet das nicht, dass er ein Haus baut. Es kann auch sein, dass nur ein Schutthaufen entsteht. Oftmals sind es nur kleine Details, die zwischen dem gewünschten Ergebnis stehen und dem was man stattdessen bekommen hat. Es gilt also zu lernen, dass man sich zum einen sehr genau und explizit ausdrücken muss und zum anderen Strategien zu finden, herauszufinden was der Computer verstanden hat und warum das etwas anderes ist, als man selbst formulieren wollte. Diese Fähigkeit ist vermutlich der aufwändigere Teil beim Programmieren lernen. Allerdings ist dies eine Fähigkeit, die sich nicht auf eine einzige Programmiersprache bezieht, sondern ganz allgemein auf alle Sprachen - auch in der Kommunikation mit Deinen Mitmenschen.

Freundlicherweise gibt es allerdings auch Programme, die Dich auf Fehler aufmerksam machen und Dir wertvolle Hinweise geben können. Nichtsdestotrotz wird das Finden der Fehler immer mindestens eine genauso große Herausforderung bleiben, wie das Schreiben eines guten Programms.

Mit anderen zusammenarbeiten

Wenn die Programme größer werden, arbeitet man in der Regel nicht mehr alleine und hat das Problem, dass man die Quelltexte untereinander austauschen muss. Auch für dieses Problem gibt es Helfer: die sogenannten Versionsverwaltungssysteme. Hier laufen alle Quelltexte zu einem zentralen Punkt zusammen und jeder Beteiligte kann sich die Quelltexte, die jemand anderer geändert hat, hier wieder abholen. Auch proggen.org ist so ein Knoten für Projekte, die von den Usern von proggen.org entwickelt werden.

Veröffentlichen

Schlussendlich möchte man sein Programm auch veröffentlichen. Hierfür muss man sein ausführbares Programm mit allen benötigten Konfigurationsdateien und allem, was das Programm so braucht in ein Paket packen und dieses Paket verteilen. Das Verteilen übernimmt heutzutage häufig das Internet. Das Paket kann ein ZIP-Archiv sein, aber eben auch etwas komfortabler ein Installationspaket, das wie unter Linux über eine Paketverwaltung automatisch installiert werden kann oder eine sogenannte Applikation wie unter MacOS, die man nur auf die Festplatte verschieben braucht oder etwas aufwendiger - wie unter Windows üblich - ein Setup, das alle benötigten Dateien auf die Festplatte kopiert. Für solche Setups gibt es allerdings sehr einfache Programmiersprachen und wieder eigene Compiler, die alle benötigten Dateien mit dem Installationsprogramm verknüpfen, das anschließend als die bekannte 'setup.exe' verteilt wird und Dein Programm auf einen Windows-Computer installiert.

Finito

Das war's - wenn Du hier angekommen bist, ist ein vollständiges Programm entwickelt und veröffentlicht worden. Es wird vielleicht einige Zeit dauern, bis Du hier angekommen bist. Das sollte Dich jedoch nicht demotivieren, denn es bedeutet, dass man sich über Jahre mit einem Computer beschäftigen kann, ohne dass man beginnt, wie am Fließband Arbeiten zu wiederholen. Es gibt immer Neues zu lernen und zu entdecken.

Viel Spaß beim Lernen!