Kategorien
Allgemein Infrastruktur Programmieren

Programmieren – was ist das eigentlich?

Im Rahmen von Schule, Ausbildung und der allgemeinen Digitalisierung wird oft darüber gesprochen, dass man „Programmieren“ oder „Coden“ oder „Entwickeln“ lernen sollte. Software-Entwickler:innen hätten die besten Berufschancen, werden von viele Firmen gesucht, meistens gut bezahlt und ausserdem hätte „alles“ in der Zukunft damit zu tun. Das „Verständnis für Programmierung“ ist bereits heute eine der wichtigsten Kompetenzen von Arbeitnehmer:innen. Nicht nur grosse Industrieunternehmen benötigen Personen, die entwickeln und programmieren, auch und gerade Klein- und Mittelständische Unternehmen haben Bedarf. Seit Beginn der Corona Pandemie vor mehr als einem Jahr boomen beispielsweise Online-Shops, App-Entwicklung und Tools um ein Arbeiten von Zuhause zu ermöglichen. Weltweit gibt es heute etwa 25 Millionen Personen, die Software entwickeln. Das entspricht 0.35 Prozent der Weltbevölkerung oder anders ausgedrückt: von 3,000 Personen entwickelt (nur) eine Software!

Da stellen sich natürlich Fragen wie:

  • Was ist Programmieren überhaupt?
  • Wie lerne ich das?
  • Wann lerne ich das am Besten?

Hardware

Um sich dem Thema zu nähern sollten wir uns kurz mit „Maschinen“ beschäftigen. Auch heute haben die meisten existierenden Maschinen einen einzigen dominierenden Zweck. Dazu drei Beispiele:

  1. Mit einer Maschine namens „Heizung“ lässt sich die Wohnung erwärmen. Man stellt sie an und es wird warm. Wenn es warm genug ist, stellt man sie wieder aus.
  2. Die „Wasserhahn-Maschine“ versorgt uns mit Wasser. Man schaltet das Wasser in der Dusche an und steht gewissermassen im Regen. Wenn man vorher die „Wasserheizung-Maschine“ angeschaltet hat, ist es ein warmer oder sogar heisser Regen.
  3. Die „Beleuchtungsmaschine“ im Haus besteht aus Lampen, die man mit einem Schalter an- oder ausschalten kann. Der Schalter verbindet zwei Kabel und unterbricht, je nach Stellung, den Stromfluss. Es gibt dabei genau zwei Zustände: Licht an und Licht aus.

Wenn niemand etwas an- und ausschaltet, passiert nichts. Die „Beleuchtungs-Maschine“, die „Wasserhahn-Maschine“ und die „Heizung-Maschine“ sind zwar physisch vorhanden, solange aber niemand einen Schalter betätigt und damit der Maschine signalisiert, was sie tun soll, passiert nichts.

Die universelle Maschine

Auch ein Computer ist so eine Maschine. Ohne die Betätigung von Schaltern passiert gar nichts. Im Gegensatz zu den obigen Beispielen, die einen klaren Einsatzzweck haben, ist dieser Zweck beim Computer nicht klar definiert. Er ergibt sich aus den Schalterstellungen des Computers. Die Schalter in der Computer-Hardware heissen Transistoren. Ein Computer, Tablet oder Smartphone verfügt heutzutage über Milliarden dieser Schalter, die sehr schnell einzeln an- und ausgeschaltet werden können.

By Max Roser, Hannah Ritchie – https://ourworldindata.org/uploads/2020/11/Transistor-Count-over-time.png, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=98219918

Software

All diese Maschinen, die Hardware, sind in der Lage, mindestens einen Befehl auszuführen und dadurch eine Aufgabe zu erledigen. Es bedarf aber jemand, der den jeweiligen Schalter betätigt. Bei der Dusche ist es meistens noch der Mensch. Bei Heizungen sind es meist Programme und Lichtschalter können heute auch auf Bewegung oder das Smartphone reagieren. Gesteuert werden sie durch Software, die stellvertretend für den Menschen die Schalter bedient.
Die Bedienung ist insofern kompliziert, da die Schalter sehr klein sind und dadurch eben nicht „per Hand“ betätigt werden können.

Von der Softwareseite aus gesehen, heissen die Schalter Bits. Ein Bit hat den Wert 0 oder 1. Strom fliesst, oder eben nicht, Lampe brennt oder eben nicht. Programmierung ist nun die Kunst, die Schalter so zu betätigen, dass Aufgaben erledigt werden.

Mathematik

Um mit den diesen Schaltzuständen überhaupt etwas anfangen zu können, müsste man sie mit den gebräuchlichen Zahlenzeichen (0-9) verknüpfen. Genau das tat Gottfried Wilhelm Leibnitz im Jahr 1697. Er erfand das binäre Zahlensystem!

Das binäre Zahlensystem in einem ersten Entwurf von Gottfried Wilhelm Leibniz, 1697

Was kann man mit vielen Schaltern machen?

Mit den Schaltern (0/1) kann man im binären Zahlensystem dezimale Zahlen darstellen.

Binäres SystemDezimales System
11
102
113
1004

Bytes

Um eine einfache Struktur zu haben, beschloss man, immer Achtergruppen von Schaltern zu betrachten und nannte jede Gruppe ein Byte. Ein Byte kann 2 hoch 8 (256) Schaltzustände annehmen und damit beispielsweise die meisten gebräuchlichen Buchstaben, Ziffern und Sonderzeichen darstellen. Man legte im ASCII-Code einfach per Beschluss fest, welchen Wert, welches Zeichen erhält.

Binäres SystemDezimales System (256 Schaltzustände) ASCII-Code
0100000165A
0110000197a
0110001098b
0110001199c

Nach diesem System wird der Text „Hallo Welt“ im Binärcode folgendermassen dargestellt: 01001000011000010110110001101100011011110010000001010111011001010110110001110100

Programmiersprachen

Für einen Menschen ist diese Darstellung in Binärcode schwer lesbar, für einen Computer aber nicht. Nehmen wir an, wir wollen ein A „schalten“, so müssten wir dem Computer irgendwie klar machen, dass wir dieses Muster benötigen: 01000001.

Ganz praktisch wird das über eine Tastatur zur Eingabe und einen Bildschirm zur Kontrolle der Eingabe ermöglicht. Man tippt tatsächlich auf festgelegte Schalter (Tasten) und bildet aus den erzeugten Buchstaben einen Befehl. Wenn man fertig ist, tippt man auf „Ausführen“ (Enter-Taste). Der Befehl wird übermittelt und der Computer tut etwas.
In diesem Fall liefert er eine Antwort

Befehl: whoami
Antwort: hagengraf

Das lässt sich auch ganz praktisch in deinem Novatrend Hosting Paket nachvollziehen.

Rufe einfach im cPanel das Terminalfenster auf und gib den entsprechenden Befehl ein.

Befehl: whoami – Antwort: seafoll1

Ist das jetzt programmieren?

Oberflächlich gesehen ist das durchaus programmieren. Du bringst die universelle Maschine Computer dazu, etwas zu tun. Du schickst die Buchstaben whoami (011101110110100001101111011000010110110101101001) an den Computer und erhältst vom Computer ein Ergebnis: 0111001101100101011000010110011001101111011011000110110000110001 (seafoll1).

Wenn du genauer hinschaust, merkst du aber, dass du „nur“ einen bereits existierenden Befehl (whoami) benutzt hast. Richard Mlynarik hat ein Programm geschrieben, das mit den Buchstaben whoami aufgerufen wird und in den Tiefen des Computers nachschaut, unter welchem Benutzernamen du angemeldet bist. Richard ist also in diesem Fall der Programmierer und du nutzt das Programm.

Das Programm whoami besteht aus 90 Zeilen und ist in der Programmiersprache C geschrieben. Es steht unter einer Open Source Lizenz und du kannst dir den Quellcode ansehen:

https://github.com/coreutils/coreutils/blob/master/src/whoami.c

Ausser der Programmiersprache C gibt es hunderte anderer Sprachen (Liste der Programmiersprachen) um Programme zu schreiben.

Im folgenden Screenshot wird der Unterschied zwischen Programmierer und Benutzer deutlicher. Der Programmierer benötigt einen Editor zum Erstellen des Quellcodes in einer Programmiersprache. Der Quellcode wird von einem Compiler oder Interpreter in Binärcode übersetzt und kann vom Benutzer aufgerufen werden.

Von VÖRBY – Text in ‚Programmiersprache‘ (Wikipedia), Copyrighted free use, https://commons.wikimedia.org/w/index.php?curid=45575391

Programmiersprachen verfolgen unterschiedliche Konzepte, sind meistens abstrakt und auf den ersten Blick eher schwer verständlich. Daher unterteilt man sie auch in Generationen. Je höher die Generation, desto weniger kommt man mit dem eigentlichen Quellcode in Berührung. Die Erstellung von Programmen geht schneller. Je niedriger die Generation, desto mühseliger wird die Entwicklung, der Code wird jedoch extrem schnell ausgeführt.

  1. Generation: binärer Code (10110000 01100001)
  2. Generation: Assemblersprachen
  3. Generation: höhere Sprachen (BASIC, C, Java)
  4. Generation: anwendungsbezogene Sprachen (SQL, Oracle, Low- und No-Code Sprachen)
  5. Generation: gestatten das Beschreiben von Sachverhalten/ Problemen – Künstliche Intelligenz (KI) (PROLOG)

Sprachen wie Python, PHP, Ruby und Perl sind so etwa als 3.5te Generation einzuordnen.

Höhere Generationen bieten einen niederschwelligen Zugang und so können mehr Personen „programmieren“ lernen. Die Entwicklung von No-Code Plattformen (in der 4. Generation) ermöglicht es Anwendungssoftware über grafische Benutzeroberflächen und Konfigurationen zu erstellen.

Verständnis für Programmierung

Mir hilft das Bild mit den Schaltern ungemein. Es erinnert mich daran, dass man theoretisch durch verschiedene Schalterstellungen unendlich viele Zustände herstellen kann, die dann wiederum unendlich viele Aufgaben erledigen können. Diese theoretische Unendlichkeit enthält auch die Möglichkeit einer immer währenden Skalierung. Wenn eine Ebene erstellt worden ist, kann mit der nächsten Ebene begonnen werden.

Auch wenn das ein wenig erschreckend für manch einen klingt, Programmierung ist ein Baustein für eine wachstumsorientierte Welt. Unendliche Schalterstellungen bieten unendliche Möglichkeiten. Besonders deutlich wird dieser Zusammenhang, wenn man sich den Stromverbrauch von „programmierten“ Kryptowährungen ansieht. Der Stromverbrauch spielt in diesen Systemen „nur“ als begrenzender Faktor eine Rolle. Das ist insofern interessant oder auch, je nach Blickwinkel, gefährlich, weil der immense Bedarf an Elektrizität dafür sorgen wird, dass diese langfristig aus nachhaltigen Quellen kommen muss/wird. Die weltweiten fossilen Reserven zur Energieproduktion werden nicht ausreichen! Damit kann Programmierung auch die Voraussetzung für eine nachhaltige Nutzung begrenzter Ressourcen sein.

Aber zurück zu etwas viel Einfacherem. Content Management Systeme wie WordPress, Joomla und Drupal könnte man meines Erachtens durchaus als No-Code Plattformen betrachten. Also Programmiersprachen der 4. Generation. Es lassen sich damit individuelle Websites erstellen, ohne mit dem Quellcode in Berührung kommen zu müssen. Das Charmante an diesen Systemen ist, dass man, wenn das will aber auch durchaus mit Quellcode in Berührung kommen kann. Man könnte am Core Quellcode mitarbeiten und auch (individuelle) Erweiterungen programmieren (und evtl. verkaufen). In diesem Fall wechselt man einfach die „Generation“ und geht zurück zu den vorherigen Sprachgenerationen.

Und an dieser Stelle wird das Verständnis für Programmierung wieder wichtig und sichtbar. Wann benutze ich für welches Projekt welche Sprache und warum? Ausser den technischen Fragen umfasst Programmierung auch soziale und gesellschaftliche Komponenten und natürlich Verantwortungsbewusstsein für das, was man da „zusammencodet“. Sie ermöglicht auch Geschäftskonzepte, die auf verschiedenen Ebenen einprogrammiert werden und überhaupt erkannt werden müssen.

Wenn man sich beispielsweise Facebook anschaut, die sozialen, gesellschaftlichen und politischen Implikationen, die mit dieser Software verbunden sind, dann wird dir wahrscheinlich relativ schnell deutlich, was ich mit Verantwortungsbewusstsein meine.

Je abstrakter und skalierbarer Projekte wie WordPress, Facebook oder die Krypto-Protokolle werden, umso mehr Verständnis für die zugrunde liegenden Strukturen wird benötigt. Ohne dieses Verständnis ist es kaum möglich, auch nur ansatzweise die Zusammenhänge zu verstehen und gezielt Richtungen zu verfolgen.

Vielleicht am Ende noch ein kleiner Gedankengang zur Beruhigung bevor dir das Hirn platzt. Auch heute werden „nur“ Binärcodes zwischen Computern verschickt. Man könnte das auch mit vielen kleinen Schaltern, also theoretisch durchaus „manuell“ machen! Nur die Anzahl der realen Kombinationmöglichkeiten und der darauf basierenden Abstraktionsebenen erhöht sich permanent.

Hier ist ein Video von jemandem, der solche Regelungen und Schalterstellungen auch noch manuell sehr erfolgreich macht!

Fazit

Programmieren ist eine abstrakte Tätigkeit, die mit vielen, vielen Schaltern zu tun hat. Die Ergebnisse sind skalierbar und die Möglichkeiten scheinbar unendlich.

Wie und wo fängt man an programmieren zu lernen?

Das Beispiel mit dem whoami Befehl ist ein guter Anfang. Wenn du die Sache interessant findest und weiter verfolgst, lernst du beinahe automatisch Programmieren. Es ist ein wenig so, wie du Fotos anders betrachtet, nachdem du mal mit Photoshop gearbeitet hast. Wenn dir programmieren Spass macht, wirst du wahrscheinlich nie wieder aufhören ständig neue Dinge zu entdecken.

Wenn es dir keinen Spass macht solche abstrakten Räume zu erforschen, dann sollte dir zumindest klar sein, dass alle Systeme, die dich heute und morgen umgeben, mit der Programmierung von Software zu tun haben.

Es ist daher äusserst hilfreich zu wissen, wie man grundsätzlich programmiert und das lernt man meines Erachtens am besten beim Programmieren 🙂


tl;dr: Es ist hilfreich zu wissen, wie man programmiert, auch wenn man gerade nicht programmiert.

Von hagengraf

Ich erstelle bequeme und benutzerfreundliche Orte in virtuellen und physischen Umgebungen.

3 Antworten auf „Programmieren – was ist das eigentlich?“

Kommentar verfassen