Eines der größten Probleme bei der Erklärung, was ich in meinem Ausbildungsberuf den ganzen Tag so anstelle, ist die Tatsache, dass viele Leute gar nicht so genau wissen, was Programmierung überhaupt ist.

„Du sitzt also den ganzen Tag vor dem Computer und tippst merkwürdiges Zeug vor dir her?“ Ja und auch nein! Denn so „merkwürdig“ ist das eigentlich gar nicht…

Die Entwicklungsumgebung

Bei der Programmierung geht es darum, Lösungsanweisungen für Maschinen verständlich zu erstellen. Hierfür benötigt ein Softwareentwickler zum einen eine Programmiersprache und zum anderen eine Umgebung zum Erstellen der Software, also sozusagen eine Software zum Erstellen von Software. Diese Entwicklungsumgebungen können unterschiedlich umfangreich sein. Es gibt zum Beispiel sogenannte Editoren, welche relativ unspektakulär sind. Mit einem Editor kann ich im Wesentlichen Dateien erstellen, lesen und ändern. Alleine also ziemlich ungeeignet, um komplexe Software herzustellen. Ich brauche also noch ein paar mehr „Werkzeuge“ in meiner Entwicklungsumgebung (IDE = integrated development enviroment), die mir den Alltag beim Programmieren etwas erleichtern. Im Folgenden werde ich ein paar mögliche Werkzeuge vorstellen. Für Beispiele werde ich mich dabei an Eclipse bedienen. Diese IDE ist unter anderem nützlich, um mit der Sprache Java zu entwickeln. Zunächst brauche ich sowas wie einen Übersetzer, der mir meinen Quelltext, also das was ich programmiere, in Maschinensprache übersetzt. Dieses Werkzeug nennt sich „Compiler“. Warum mein Quelltext in eine maschinenverständliche Sprache übersetzt werden muss, dazu später mehr.

Fehlererkennung

Als nächstes brauche ich eine Art Fehlererkennung. Der Compiler, der mich zusätzlich schon während des Programmierens auf syntaktische Fehler hinweist, um das lästige Fehlersuchen zu minimieren. Er unterstreicht dabei die Fehlerhafte Stelle rot und markiert die Zeile zusätzlich mit einem roten Ausrufezeichen am Rand des Editors. Nun hab ich schon ein nützliches Werkzeug, welches mich durch den Entwicklungsprozess begleitet. Zusätzlich unterstützt mich eine Entwicklungsumgebung mit „Highlighten“. Das bedeutet in diesem Fall, dass mir auf dem Bildschirm durch farbliche Unterlegung der Kontrast zwischen unterschiedlichen Elementen deutlicher gemacht wird.
Beispiel
Wenn mein Programm am Ende eine grafische Oberfläche für den Benutzer haben soll, benötige ich außerdem noch ein Hilfsmittel zum Erstellen einer GUI (graphical user interface).
Nun sorgt der Compiler für einen fehlerfreien Quelltext welcher dann in Maschinensprache übersetzt werden kann. Anschließend kommen noch ein Binder und ein Lader ins Spiel. Der Binder fügt die Maschinencodefragmente, mit relativen Adressen, zu einem ausführbaren Programm zusammen. Der Lader wandelt die relativen Adressen in absolute Adressen um und lädt das Programm in den Arbeitsspeicher.
Diagramm

Programmiersprachen

Es gibt hunderte verschiedene Programmiersprachen. Oder eher gesagt es gibt hunderte Sprachen, welche uns das Programmieren erleichtern. Denn wie wir ja jetzt gelernt haben, muss jeder Quelltext in Maschinencode umgewandelt werden. Doch warum eigentlich? Kann ich nicht einfach direkt in der Sprache der Maschinen programmieren? Generell ist das möglich. Allerding ist Maschinencode für den Menschen nur sehr schwer zu lesen, da dieser aus einer Folge von 0 und 1 besteht. Also aus Binärcode. Doch es gibt Entwickler, die genau das tun.
Supercoder

Natürlich sehen die Tastaturen der jeweiligen Entwickler nicht so aus wie auf dem Bild. Auch hier gibt es eine etwas leichtere Lösung. Die sogenannten Assemblersprachen.

Maschinennahe Programmiersprachen/Assembler

Maschinennahe Programmiersprachen haben einen Befehlsvorrat, der im Wesentlichen von den Instruktionen der Prozessoren abhängt. Jedes Programm wird auf den Prozessor, auf dem es später laufen soll, „maßgeschneidert“. Das bedeutet, dass wenn ich die Prozessorart wechsle, ich mein Programm ebenfalls anpassen muss. Ein Maschinenbefehl kann zum Beispiel für die Übertragung von Daten zwischen verschiedenen Speicherbereichen im Arbeitsspeicher zuständig sein oder für die Inbetriebnahme von Ausgabegeräten. Er besteht aus zwei Angaben:
• Die auszuführende Tätigkeit (Operation)
• Werte und/oder Speicherstellen (Operanden)
Um Maschinenbefehle für den Menschen lesbar zu machen, wende ich dann eine Assemblersprache an. Mit ihrer Hilfe kann ich die Befehle mit Kürzeln darstellen. Dieses Verfahren nennt sich auch Mnemonic.
Hier ein kleines Beispiel:
MOV BL, 5 //Lädt die Zahl 5 in das Register BL.
ADD BL, 2 //Addiert den aktuellen Wert im Register BL mit 2

Höhere Programmiersprachen

Um komplexe Anwendungsprogramme zu schreiben, verwende ich als Entwickler „höhere Programmiersprachen“. Diese sind prozessorunabhängig und besitzen eine festgelegte Syntax (die Menge aller zugelassenen Aussagen), als auch eine Semantik (die Bedeutung der zulässigen Ausdrücke).
Höhere Programmiersprachen sind zum Beispiel Java, C# und Natural. Die Auswahl der Sprache obliegt mir als Entwickler. Sie sollte nach Möglichkeit im Bezug zur Art der Problemstellung getroffen werden. Es gibt keine Sprache, die für alle Probleme als die „optimalste“ gilt. Außerdem kommt es auf die Vorkenntnisse und die Erfahrung des Entwicklers an. Die verschiedenen Arten von Problemen kann ich verschiedenen Paradigmen zuordnen, welche ich im Folgenden beschreiben werde. Für eine betriebliche Anwendung sollte ich als Beispiel auf das Paradigma der imperativen Programmierung zurückgreifen.

Imperative Programmierung

Hier stehen die komplexen Anweisungen, wie zum Beispiel das Kopieren von Speicherinhalten, das Lesen von Dateien oder das Versenden von Datenblöcken über ein Netzwerk, an den Rechner im Vordergrund. Ich sage hierbei meinem Rechner genau, was er auszuführen hat. Das Ziel ist es, möglichst effizient Gebrauch von der von-Neumann-Architektur zu machen.

Von-Neumann-Architektur

In der heutigen Zeit werden imperative Programmiersprachen am häufigsten eingesetzt. Zu ihnen gehören die prozeduralen und die objektorientierten Sprachen. Prozedural bedeutet, dass ich eine Folge von Anweisungen zusammenfasse. Diese kann ich dann an anderen Stellen wieder aufrufen oder über Programmbibliotheken sogar völlig anderen Programmen zur Verfügung stellen. Dadurch spare ich Zeit und vor allem auch Arbeit. Bei der Objektorientierung fasse ich Daten und Methoden als Objekte zusammen. In meinem nächsten Fachartikel werde ich im Detail auf die Objektorientierung eingehen.

Funktionale Programmierung

Bei der funktionalen Programmierung geht es darum, komplexe Sachverhalte durch mathematische Funktionen darzustellen. Es ist besonders einfach, generischen Programmcode zu erstellen, da es oft nicht notwendig ist, die Beschaffenheit der Datenobjekte zu berücksichtigen. Basis der funktionalen Programmierung ist das von Alonzo Church erfundene Lambda-Kalkül (1941). Dieses erlaubt mir, vollständige Ausdrücke separat auszuwerten. Das ist der wichtigste Vorteil im Gegensatz zur imperativen Programmierung. Beispiele für eine funktionale Programmiersprache ist F#, eine Sprache von Microsoft für das .NET Framework.

Logische Programmierung

Das Paradigma der logischen Programmierung basiert auf der einfachen, mathematischen Logik. Komplexe Zusammenhänge werden mit Hilfe von mathematischen Fakten und Regeln festgelegt bzw. dargestellt. Das ermöglicht Rückschlüsse auf diverse Zusammenhänge in unterschiedliche Richtungen:
Peter ist der Vater von Klaus. Klaus ist der Vater von Max.
-> Logischer Rückschluss: Peter ist der Großvater von Max.
Ein Beispiel ist die Programmiersprache Prolog, welche 1971 von Alain Colmerauer entwickelt wurde.

Nun, das war eine kurze und grobe Einführung in die Programmierung und die Themen, mit denen ich mich fast täglich beschäftige. Falls dir dieser Einblick gefallen hat, dann schau doch mal bei meinem Fachartikel über „Arrays und Listen“ vorbei. Ein Artikel, der sich etwas genauer mit Java befasst.

Was ist Programmierung?

6 Gedanken zu „Was ist Programmierung?

  • 25. Januar 2018 um 20:39
    Permalink

    Sehr guter Artikel
    informativ und fundiert
    Weiter so

    Antworten
  • 7. Februar 2018 um 10:42
    Permalink

    Sehr guter Artikel. Herzlichen Glückwunsch.
    Verstehe nur nicht, warum alle Java-Entwickler so auf Eclipse abfahren. Ist meiner Meinung nach eine schreckliche IDE.
    Aber vom Inhalt her, Top Artikel!

    Antworten
  • 7. Februar 2018 um 10:43
    Permalink

    Schön geschriebener Einführungsartikel, der auch Menschen, die noch nie im Leben programmiert haben, unseren Alltag ein wenig näher bringt und die ersten Fachbegriffe verständlich erläutert. Aus gewissen Gründen gefällt mir übrigens auch das Headerbild sehr gut :).

    Antworten
    • 7. Februar 2018 um 11:33
      Permalink

      Vielen Dank, für das positive Feedback! 🙂
      Das Buch ist für mich ein treuer Begleiter geworden! 😀

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.