| Software | Software

Software

Software sind Programme, die auf Hardware ablaufen. Programme überführen Eingabedaten in Ausgabedaten, beispielsweise die Suchanfrage „bidt“ in eine Menge relevanter Webseiten, eine ungeordnete Liste in eine sortierte Liste, die Entfernung zum voranfahrenden Fahrzeug in Bremsimpulse, u. a. den elektrischen Widerstand des Lungengewebes in Stromstöße in einem Herzschrittmacher usw.

Software verbindet drei wesentliche Konzepte: Berechnung, Kommunikation und Speichern jeweils auf der Basis von Daten. Die Hardware ermöglicht die Berechnung durch den sogenannten Prozessor, Kommunikation durch Netzwerke und Datenhaltung sowie den Zugriff auf Daten durch den Speicher.
Eine ausführliche Beschreibung von Software findet sich hier:

Berechnung

Die Überführung von Ein- in Ausgabedaten kann auf unterschiedliche Art und Weise geschehen. Traditionell wird die Lösung des Problems dieser Transformation durch eine Menge einzelner, sehr präziser Schritte erzielt. Algorithmen beschreiben diese Schritte abstrakt. Wenn die Schritte eines Algorithmus in einer Programmiersprache verfasst werden, sodass ein Computer sie „verstehen“ kann, dann nennt man sie Programm. Dabei gibt es verschiedene Ebenen. Der Algorithmus zur Anzeige von Resultaten für eine Internetsuche beinhaltet u. a. einen Schritt, der die Ergebnisse sortiert. An anderer Stelle wird durch einen Algorithmus beschrieben, wie das Sortieren funktioniert – beispielsweise dadurch, dass im ersten Schritt das kleinste Element gesucht wird, im zweiten Schritt das zweitkleinste usw. Für jeden dieser Schritte muss wieder ein Algorithmus existieren, der feststellen kann, ob ein Element kleiner ist als ein anderes. Am Ende der Kette stehen elementare Schritte wie „Addition von 1“ und „Ist gleich null“, die direkt von der Hardware (genauer: dem Prozessor) zur Verfügung gestellt werden. Software basiert also auf der Idee, ein Problem in Teilprobleme zu zerlegen, also in einzelne Schritte, und diese einzelnen Schritte stellen dann wieder Probleme dar, die ihrerseits durch einzelne Schritte gelöst werden. Die wesentliche Aufgabe von Softwareingenieuren besteht darin, ein großes Problem so lange in kleinere Probleme zu zerlegen, bis für diese jeweils direkt eine Lösung programmiert werden kann. Den Vorgang der Ausführung dieser Schritte nennt man Berechnung – „to compute“ heißt ja auch berechnen, und die historischen „Computer“ waren Menschen, die Berechnungen durchführten. Wie genau Software und Hardware sowie Programme und Algorithmen zusammenhängen, beschreiben wir hier.

Eine andere Art der Überführung von Ein- und Ausgaben erfolgt durch das sogenannte Maschinenlernen. Da werden die einzelnen Schritte nicht genau beschrieben, weil man entweder das Problem nicht genau fassen kann oder die Lösung des Problems durch einzelne Schritte nicht adäquat ist. Ein Beispiel ist das Problem der Erkennung eines Fußgängers. Es stellt sich heraus, dass die Beschreibung durch einzelne Schritte faktisch unmöglich ist, etwa „Gibt es einen Kopf?“, „Gibt es einen Rumpf?“, „Gibt es Beine?“ usw. Das liegt daran, dass es zu viele unterschiedliche Möglichkeiten gibt: Fußgänger können in Gruppen auftauchen, Taschen tragen, Fahrräder schieben, Mützen tragen, stehen oder rennen usw. In solchen Fällen bietet es sich an, beispielbasiert zu verfahren. Hier wären das große Mengen von Bildern mit einer expliziten Angabe, ob sich darauf ein Fußgänger befindet. Wie genau das funktioniert, beschreiben wir hier, und legen dar, warum das nicht immer so einfach ist und auch nicht immer funktioniert.

Kommunikation

Die Zerlegung eines Problems in kleinere, einfacher zu lösende Probleme bedeutet direkt, dass die einzelnen Lösungen der unteren Ebenen miteinander verknüpft werden müssen. Dazu müssen die einzelnen Lösungsbausteine orchestriert werden. Historisch lief auf einem Computer ein Programm ab. Heute laufen auf einem Computer viele Programme ab, und ein Programm läuft auf vielen Computern ab. Die Internetsuche beispielsweise verbindet ein Laptop oder Smartphone, auf dem die Suche formuliert wird, mit den Computern, die diese Suchanfrage an einen Computer schicken, der die Suche ausführt. Die Bereitstellung der für die Suche relevanten Daten erledigen Zehntausende Computer, die gleichzeitig das Internet nach Webseiten durchforsten und deren Inhalte für die Suchfunktionalität aufbereitet werden. Dazu müssen alle diese Maschinen miteinander kommunizieren. Ein ähnliches Phänomen findet man im Auto, in dem heute ca. 100 Computer gleichzeitig unterschiedliche Aufgaben wahrnehmen: den Motor ansteuern, Bremsen, die Entfernung zum voranfahrenden Auto messen, Scheiben wischen, Medien streamen, Sitze verschieben usw. Eine Gesamtfunktionalität wie „Internetsuche“ oder Autofahren“ wird also durch unterschiedliche Programme ermöglicht, die gleichzeitig auf mehreren Computern ablaufen.

Daten und Speicher

Das Wort „Berechnung“ suggeriert sprachlich, dass Ein- und Ausgabedaten einfache Zahlen sind. Historisch war das auch so. Daraus wurden dann im Laufe der Zeit Listen von Zahlen und Tabellen mit Zahlen. Zahlen kann man auch verwenden, um Buchstaben zu beschreiben, etwa eine 65 für den Buchstaben A, 66 für den Buchstaben B usw. So kann man dann Wörter in Suchanfragen und in Webseiten beschreiben. Zahlen kann man auch verwenden, um Bilder zu beschreiben, etwa jeden Bildpunkt durch seine Position im Bild sowie seine Farbe und Helligkeit. Auch Sprache kann man letztlich durch Zahlen beschreiben. Bilder kann man dann mit Text kombinieren; Bilder kann man auch aneinanderreihen und mit Sprache zu Filmen werden lassen.

Daten sind also, wie Programme auch, strukturiert und bestehen jeweils aus kleineren Bestandteilen. Damit ein Programm Eingabedaten verarbeiten kann, müssen diese Daten zur Verfügung gestellt werden. Das passiert im sogenannten Speicher, neben dem Prozessor und der Kommunikationstechnik ein weiteres entscheidendes Stück Hardware. Es gibt sehr unterschiedliche Arten von Speicher. SD-Disks oder USB-Sticks sind Speicher, die ihren Inhalt nicht verlieren, wenn es keine Stromversorgung gibt. Dafür sind sie vergleichsweise langsam im Zugriff. Es gibt auch eine viel schnellere Form des Speichers, den Programme u. a. für Zwischenergebnisse verwenden, der aber gelöscht wird, sobald kein Strom mehr anliegt. Daten kann man nun auf sehr unterschiedliche Art und Weise sowohl im flüchtigen als auch im nicht flüchtigen Speicher ablegen. Wie genau man das tut, hat einen enormen Einfluss darauf, wie viel Speicher man benötigt und wie schnell der Zugriff ist.

Forschung

Das bidt-interne Projekt „Ethik in der agilen Softwareentwicklung“ befasst sich mit den ethischen Aspekten der Entwicklung von Software und hat zum Ziel, eine normativ wünschenswerte Ausgestaltung von Softwaresystemen zu ermöglichen.