Longread

WAS IST
SOFTWARE?

Software ist in aller Munde, Software Engineering gilt als die Schlüsseldisziplin schlechthin, Software „eats the world“. In diesem Beitrag erklären wir, was Software eigentlich ist, dass Software viel mehr ist als Computerprogramme, warum das Erstellen von Software nicht so einfach ist und was Software mit KI und Maschinenlernen zu tun hat.
Download pdf
Porträtfoto von Prof. Dr. Alexander Pretschner, Vorsitzender des bidt-Direktoriums. Foto: bidt/Diane von Schoen
AUTOR
Prof. Dr. Alexander Pretschner
Inhaber des Lehrstuhls für Software- und Systems Engineering an der TUM, wissenschaftlicher Direktor von fortiss, Vorsitzender des bidt-Direktoriums

Unsere Sicht auf Software besteht aus vier Teilen: Im ersten Teil erklären wir über die Analogie des Kuchenbackens, was ein Programm ist und wie Programme im Computer ausgeführt werden. Im zweiten Teil übertragen wir diese Ideen auf echte Programme. Im dritten Teil zeigen wir, wie Programme und Maschinenlernen zusammenhängen. Schließlich zeigen wir im vierten Teil, dass ein einzelnes Programm immer nur ein kleines Stück Funktionalität ist und dass der Bau großer Systeme neben dem Programmieren deswegen noch ganz andere Probleme birgt, die das Software Engineering adressiert.

Der Text ist entstanden in enger Kooperation von fortiss, bidt, dem Lehrstuhl für Software und Systems Engineering und dem Venture Lab Software Engineering/AI der TU München. Zielgruppe sind interessierte Laien.

INHALT

Teil I
Was sind Programme?

Kuchenrezepte sind Algorithmen

Kuchenbacken hat so viel mit Software zu tun, dass wir kaum mehr benötigen, um die zentralen Ideen von Software zu erklären. Kuchenrezepte beschreiben, welche Zutaten in welcher Reihenfolge wie verarbeitet werden, bis am Ende der Kuchen fertig ist: Eier, Zucker und Butter verrühren, Mehl und Backpulver hinzufügen, den Teig kneten und dann bei 160 Grad für 30 Minuten backen. Es gibt die Zutaten, die einzelnen Zubereitungsschritte und am Ende einen Kuchen. Außerdem braucht es Hilfsmittel, die vielleicht gar nicht im Rezept stehen: Mixer, Rührschüssel und Backofen. Es gibt außerdem die Autorin und den Autor des Rezepts. Es gibt die einzelnen Schritte im Rezept, nämlich vermengen, rühren, warten und backen. Und es gibt Sie, die Bäckerinnen und Bäcker, die diese einzelnen Schritte hintereinander ausführen und sicherstellen, dass jedem Schritt das Ergebnis des vorherigen Schritts zur Verfügung gestellt wird. Damit haben wir die wesentlichen Konzepte schon zusammen.

In der Softwarewelt sind die Zutaten die sogenannten Eingaben. Der Kuchen ist die Ausgabe. Rezepte findet man in Backbüchern, die in der Informatik Bibliotheken heißen. Das Rezept beschreibt einen sogenannten Algorithmus. Algorithmen sind schrittweise Vorschriften, wie Eingaben in Ausgaben überführt werden. Wenn Algorithmen so aufgeschrieben werden, dass sie von einem Computer ausgeführt werden können, nennt man sie Programme. Programme sind Software. Autorin oder Autor des Rezepts ist die Programmiererin oder der Programmierer. Die Küchengeräte sind die sogenannte Hardware. Und Sie als Bäckerinnen und Bäcker sind ein zusätzliches, besonders wichtiges Stück Hardware: Sie sind der sogenannte Prozessor, den man oft auch CPU (central processing unit) nennt. Der Prozessor führt die einzelnen Schritte des Programms aus, so wie Sie die einzelnen Schritte des Rezepts befolgen.

Von Ihrer Küche zur Bäckerei

Das war es schon! Zumindest in der Analogie haben Sie jetzt verstanden, was ein Programm tut und wie es auf der Hardware abläuft. Zur Übung wollen wir diese Grundidee jetzt einmal übertragen, bevor wir uns echten Programmen widmen: Stellen wir uns eine vollautomatische Bäckerei vor, die unterschiedliche Kuchen backen kann. Bevor Sie weiterlesen, überlegen Sie bitte kurz selbst, was Eingaben, Ausgaben und Hardware sind. Gleich vorab: Programm und Prozessor zu identifizieren ist hier etwas schwieriger. Haben Sie’s?

Die Eingaben sind die Auswahl, etwa die Nummer, eines spezifischen Rezepts und die entsprechenden Zutaten. Ausgaben sind die fertigen Kuchen. Die Hardware besteht hier neben (großen!) Backöfen, Rührgeräten und Mixern aus Eieraufschlagmaschinen, Förderbändern, Verpackungsmaschinen und so weiter. Die werden übrigens alle ihrerseits individuell von speziellen Programmen gesteuert, die auf Prozessoren in diesen Maschinen ablaufen.

Jetzt wird es ein bisschen komplizierter: Das Zusammenspiel der einzelnen Hardwarekomponenten muss je nach gebackenem Rezept unterschiedlich koordiniert werden. Das erledigen in diesem Fall nicht mehr Sie als Bäckerin oder Bäcker, denn hier wird ja der ganze Backvorgang automatisiert. Stattdessen erledigt das jetzt ein Steuerungscomputer (der Prozessor), auf dem wieder ein spezielles Programm abläuft, nämlich ein Steuerungsprogramm. Dieses Programm steuert in Abhängigkeit des zu backenden Rezepts schrittweise Eieraufschlagmaschine, Rührgerät, Förderbänder und so weiter in der richtigen Reihenfolge an. So stellt es sicher, dass die einzelnen Stationen der Bäckerei beziehungsweise des Backvorgangs das jeweils richtige Zwischenprodukt zur richtigen Zeit geliefert bekommen. Die Algorithmen, die ursprünglich nur die Rezepte waren, werden jetzt also in Programmform um Steuerungsbefehle für die verschiedenen Maschinen, also unsere Bäckereihardware, erweitert.

Software

Die Idee der Umwandlung von Ein- in Ausgaben unter Verwendung von Hard- und Software ist sehr mächtig, weil damit sehr viele Abhängigkeiten beschrieben werden können. Ich finde es interessant, dass sich auch viele Mechanismen unseres Körpers so beschreiben lassen. Für die Regulierung des Blutzuckers etwa schüttet, stark vereinfacht gesagt, die Bauchspeicheldrüse in Abhängigkeit des aktuellen Blutzuckers kontinuierlich mehr oder weniger Insulin aus: Wenn aufgrund einer Mahlzeit der Blutzucker steigt, wird mehr Insulin ausgeschüttet; dadurch verringert sich der Blutzuckerspiegel; was wiederum eine Verringerung der Insulinausschüttung zur Folge hat. Wenn zu wenig Zucker im Blut ist, wird Glukagon ausgeschüttet, was die Leber zur Freigabe von Zucker anregt. Das System „Blutzuckermanagement“ hat also eine Schleife, weil die Ausgabe (Insulin, Glukagon) direkt die Eingabe (Blutzucker) beeinflusst. Ganz ähnlich ist es im Herzen. Noch stärker vereinfachend, führt ein erhöhter Sauerstoffbedarf der Muskeln durch körperliche Betätigung zu einer Erhöhung der Herzfrequenz; dadurch erhöht sich die Sauerstoffmenge, die den Muskeln pro Zeiteinheit zur Verfügung gestellt wird; irgendwann ist hinreichend viel Sauerstoff verfügbar, und die Herzfrequenz wird nicht weiter erhöht. Die Mechanismen, die diese sogenannten Regelkreise verwalten, kann man durchaus als Programme verstehen, wenngleich nicht im Sinn einer Folge von Programmschritten.

Das Phänomen einer Schleife von Aus- zu Eingaben finden wir in vielen Maschinen. Klimaanlagen messen die Zimmertemperatur; öffnen bei zu hoher Temperatur Ventile, um Kühlflüssigkeit fließen zu lassen; dadurch verringert sich die Zimmertemperatur; das führt nach einer gewissen Zeit dazu, dass die Ventile weniger Kühlflüssigkeit transportieren; wodurch dann durch die Außentemperatur die Zimmertemperatur wieder steigt; und so weiter. Die Funktionalität, die diese Regelungsfunktion übernimmt, wird durch Programme implementiert.

Was ist nun Software? Software sind Programme, die auf einem oder mehreren Computern ausgeführt werden. Programme wie Excel oder Ihr Mailprogramm sind Software, die auf einem Computer im Sinn von Desktop, Laptop, Tablet oder Smartphone ausgeführt wird. Programme wie die Google-Suche, Facebook oder Instagram laufen zu einem Teil auf Ihrem Laptop oder Ihrem Smartphone, um Ihnen Interaktionen zu ermöglichen. Gleichzeitig wird deren Funktionalität, also die tatsächliche Durchführung einer Suche oder das Zur-Verfügung-Stellen von Suchergebnissen, Bildern oder Nachrichten durch ein Zusammenspiel von mehreren, oft Tausenden von Computern ermöglicht. Die Existenz dieser Computer bleibt uns dabei meist vollständig verborgen.

Die Funktionalität Ihres Autos wird in großen Teilen ebenfalls durch Programme zur Verfügung gestellt. In einem Auto finden sich häufig mehr als 100 Computer, auf denen ganz unterschiedliche Programme ablaufen. Diese steuern, wie beschleunigt und gebremst wird, wie der Scheibenwischer funktioniert oder wie Sie Ihren Sitz bewegen. Software steuert eigentlich alle Geräte in unserer unmittelbaren Umgebung. Weil man diese Computer, auf denen die entsprechenden Programme ausgeführt werden, nicht sieht und sie üblicherweise in Maschinen verbaut sind, heißen solche Systeme eingebettete Systeme. Und weil diese Programme unmittelbar auf Reize aus der physikalischen Umwelt reagieren und diese physikalische Umwelt umgekehrt auch beeinflussen können (Temperatur, Abstand und so weiter), gleichzeitig aber als Software gewissermaßen virtuell im Cyberspace existieren, nennt man sie auch cyberphysikalische Systeme. Solche Systeme können beliebig groß und komplex sein, etwa die Raumstation ISS, aber auch sehr klein, etwa eine Lichtsteuerung im Wohnzimmer, die einfach nur kontinuierlich auf die äußeren Lichtverhältnisse reagiert. Ingenieurinnen und Ingenieure arbeiten heute daran, immer zahlreichere Systeme auf ganz unterschiedlichen Größenskalen zu bauen und im Sinn der Kommunikation zwischen Systemen miteinander zu vernetzen. Die Idee der Vernetzung vornehmlich kleinerer Systeme kennen Sie unter dem Schlagwort Internet der Dinge, das uns etwa die Automatisierung und Vernetzung von Licht, Herd, Heizung, Energieversorgung und Bewässerung im Smart Home und Smart Garden ermöglicht. Dass das Sicherheits- und Privatheitsprobleme birgt, ist ganz klar, führt aber an dieser Stelle zu weit.

Heutzutage betrachten Ingenieurinnen und Ingenieure in interdisziplinären Projekten in der Regel übrigens nicht mehr allein die genannten technischen Systeme, sondern sogenannte soziotechnische Systeme, in denen dem Zusammenspiel verschiedener technischer Systeme auch menschliche Akteure hinzugefügt werden. Ein schönes Beispiel ist ein hybrider Verkehr, in dem sowohl von Menschen gesteuerte als auch autonome Fahrzeuge gleichzeitig existieren und aufeinander reagieren müssen. Und weil Menschen unerwartete oder „unlogische” Dinge tun – wenn etwa Kinder mit Kreide die Straße bemalen –, müssen Programme dafür ausgelegt sein, dass ihnen auch Eingaben zur Verfügung gestellt werden, die von Programmiererinnen und Programmierern nicht vorhergesehen waren.

Hardware

Programme werden auf Computern ausgeführt. Programme und Computer, also Software und Hardware, verhalten sich wie Geist und Körper beim Menschen. Die Hardware von Computern besteht neben dem Prozessor noch aus anderen Komponenten, die die oben genannten zentralen Aufgaben erledigen. Neben dem Prozessor, der die Berechnungen ausführt, gibt es zunächst Hardware für die Datenhaltung. Daten werden im Speicher abgelegt, auf der Festplatte, auf USB-Sticks und zunehmend auch in der Cloud. Über Anschlüsse ans Netzwerk erfolgt dann die Kommunikation mit anderen Computern, die wir in diesem Beitrag aus Platzgründen sehr stiefmütterlich behandeln. Neben Prozessor, Speicher und Netzwerkanschluss besteht ein Computer noch aus weiteren Geräten, die wir genau wie Prozessor, Speicher und Netzwerkanschluss oben schon als Hardware bezeichnet haben: Bildschirm, Fingerabdrucksensor, Temperatursensor, Batterie, Kamera, Tastatur, Lautsprecher, Mikrofon, Kabel und so weiter. Insgesamt übernimmt Software unter Verwendung dieser Hardware also die Aufgaben Berechnung, Kommunikation, Verwaltung und Speichern von Daten sowie Wechselwirkungen mit der Umwelt.

Ein- und Ausgaben sind Daten

Beim Kuchenbacken sind Eingaben die Zutaten und Ausgaben die fertigen Kuchen. Programme hingegen empfangen als Eingaben Daten und liefern als Ausgabe ebenfalls Daten. Auch die Zwischenergebnisse der einzelnen Schritte sind Daten. Es gibt Programme wie die Internetsuche, Ihr Mailprogramm oder Ihren Herd, bei denen Sie die Möglichkeit haben, etwas über die Tastatur, per Sprache oder per Gestik einzugeben, nämlich eine Suchanfrage oder eine Nachricht. Diese Programme zeigen Ihnen dann auf einem Bildschirm etwas an.

Bei einem Auto, einer Waschmaschine, einer Heizung oder einer automatisierten Bäckerei reagiert das Programm außerdem auf Reize aus seiner physikalischen Umwelt: Der adaptive Tempomat erkennt Autos vor Ihnen, die Waschmaschine reagiert auf Wasserstände und die Heizung auf Temperaturen und so weiter. Die entsprechenden Eingabedaten werden über sogenannte Sensoren zur Verfügung gestellt. Sensoren sind beispielsweise Thermometer, Kameras oder Radar. Sie übersetzen Zusammenhänge in der echten Welt, wie die Temperatur, vorausfahrende Autos oder Wasserstände, in Daten, die dann von Programmen verarbeitet werden können. Im Unterschied zu Ihrem Mailprogramm ist die Ausgabe eines Programms in der Waschmaschine oder im Auto nicht (nur) auf einer Anzeige abzulesen. Die Ausgabedaten können stattdessen auch in Effekte in der physikalischen Umwelt übersetzt werden: Beschleunigen oder Bremsen, Wasser abpumpen, Gasbrenner einschalten und Wasser erhitzen. Programme sind also überall.

Wer was wie macht: Funktionen, Algorithmen und Programme

Wir haben gesehen, dass Rezepte, Algorithmen und Programme einzelne Schritte beschreiben und damit festlegen, wie Eingaben in Ausgaben überführt werden. Für Sie als Bäckerinnen und Bäcker sind diese einzelnen Schritte wesentlich. Ich halte es nun für möglich, dass Ihre Kinder im Unterschied zu Ihnen nicht an diesen einzelnen Schritten interessiert sind, sondern nur am Kuchenessen selbst, also der Ausgabe. Nehmen wir weiter an, dass Ihre Kinder heute Lust auf Marmorkuchen haben, aber der Kühlschrank leer ist. Dann müssen die Kinder einkaufen gehen und sich deswegen auch für die Zutaten interessieren, also die Eingaben. Wenn man das Verhältnis von Ein- zu Ausgaben beschreiben will, ohne jedoch die einzelnen Schritte zu erklären, nennt man das Funktion. Funktionen kennen Sie: Die Addition beispielsweise ist so eine Funktion mit zwei Summanden als Eingabe und der Summe als Ausgabe. Wenn Sie im Kopf addieren, denken Sie gar nicht mehr darüber nach, wie man das macht – die einzelnen Schritte interessieren Sie nicht! Aber wie macht das eine Maschine? Das ist genau die Aufgabe des Programms. Ein Programm beschreibt ganz einfach, wie eine Funktion ausgerechnet wird.

Der Zusammenhang zwischen Funktion, Algorithmus und Programm ist so wichtig, dass ich ihn noch einmal zusammenfassen möchte. Die Funktion beschreibt nur den Zusammenhang von Ein- und Ausgabe, ohne genau zu sagen, wie die Ausgabe berechnet wird. Ein Algorithmus definiert die Schritte, mit denen diese Funktion ausgerechnet werden kann. Und das Programm ist die Beschreibung eines Algorithmus in einer für die Maschine verständlichen Form. Mit der Unterscheidung von „was“ und „wie“ kann man auch sagen, dass die Funktion das Problem beschreibt (was?) und der Algorithmus und das Programm die Lösung (wie?).

Programmiersprachen

Ein Programm ist, wie ein Kuchenrezept, ein Stück Text. Wenn man etwas aufschreibt, muss man dafür eine Sprache finden. Informatikerinnen und Informatiker haben deswegen Programmiersprachen entwickelt. Ein Programm besteht aus mehreren „Sätzen“ in dieser Programmiersprache. Jeder Satz hilft dabei, Schritt für Schritt die Eingabe in die Ausgabe zu überführen.

Es gibt sehr viele Programmiersprachen, so wie es viele natürliche Sprachen gibt. Wenn Sie eine Fremdsprache beherrschen, ist Ihnen vielleicht schon einmal aufgefallen, dass sich bestimmte Sachverhalte in dieser Sprache eleganter formulieren lassen als im Deutschen und umgekehrt. Genau das ist der Grund für die Vielzahl an Programmiersprachen, denn dort ist es genauso: Bestimmte technische Schritte in der Umwandlung von Ein- und Ausgaben lassen sich in der einen Programmiersprache besser beschreiben als in einer anderen. Vielleicht können Sie sich vorstellen, dass ein Programm, das die Oberfläche Ihres Mailprogramms darstellt, leichter in einer Sprache zu schreiben ist, in der man über „Fenster“ und „Knopf“ und „Mauszeiger“ sprechen kann, als in einer, die die Entfernung zum voranfahrenden Fahrzeug in einen Befehl zum Bremsen überführt. Probieren Sie doch einmal die Programmiersprache Scratch aus, die besonders gut zum Interagieren mit Figuren in Ihrem ersten eigenen Computerspiel geeignet ist. In Scratch werden die „Sätze“ übrigens durch bildliche Symbole gebildet, das geht also auch.