Gute Kommunikation ist der #1 Erfolgsfaktor in Softwareprojekten. Hierbei geht es vor allem um eine gelungene Kommunikation von Projektleitern (mit Domainwissen) mit dem Team von Softwareentwicklern. Das gilt ganz unabhängig von der Projektmanagementmethode für das Entwicklungsprojekt: Ob Scrum, Domain Driven Design oder ob Wasserfall-Methode.
Zentral für die Softwareentwicklung ist der Begriff des Algorithmus. Für den Entwickler mag der Begriff selbstverständlich zu sein, für einen Großteil der Bevölkerung gilt das nicht. So schreiben die Autoren des Buches Titelverteidiger. Wie die deutsche Industrie ihre Spitzenposition auch im digitalen Zeitalter sichert: „90 Prozent der in Deutschland lebenden Menschen haben zum Beispiel keine genaue Vorstellung, was sich hinter einem Algorithmus verbirgt und wozu er im Alltag dient (…)“.
Dabei ist das gar nicht so schwer: Der Lieblingsautor des Silicon Valley, Yuval David Harari, liefert in seinem Bestseller Homo Deus eine präzise Definition: „An algorithm is a methodical set of steps that can be used to make calculations, resolve problems and reach decisions. An algorithm isn’t a particular calculation, but the method followed when making the calculation.“. Im Bereich der Mathematik wäre ein Algorithmus also eine Methode, um etwa ein Optimierungsproblem zu lösen. Aber auch ein Kochrezept ist in diesem Sinne ein Algorithmus: Es ist eine Anleitung in mehreren Schritten, um zu einem (befriedigenden) Ergebnis zu kommen.Ein Programmiercode ist genau das: Eine methodische Abfolge von Schritten, um eine Aufgabe zu lösen. Hierfür muss diese Aufgabe strukturiert werden, und eben diese strukturierte Denkweise, dieses analytische Denkmuster prägt das Denken von Softwareentwicklern. Hieraus ergeben sich all jene Fragen, die im Verlauf eines Softwareentwicklungsprojektes (möglichst am Anfang!) zu klären sind:
Was ist der Ausgangspunkt, was ist das Ziel? Was kann (sollte) die Ausführung des Algorithmus auslösen? Welche Daten werden weitergegeben? Woher weiss ich, dass alles nach Plan läuft – oder eben nicht (Prozesskontrolle)? Welche Anforderungen an das Timing gibt es, welche Interaktionen mit anderen Systemen?
Wenn ein Algorithmus ein Methode ist, um eine bestimmte Aufgabe zu lösen, dann gilt auch: Jede Aufgabe lässt sich in Teilaufgaben / Unteraufgaben zerlegen. Muss beispielsweise innerhalb eines Softwareprogramms eine Liste alphabetisch sortiert werden, dann ist eben diese „Sortierung“ auch eine Aufgabe, die einen Algorithmus erfordert. Wer ein Informatikstudium durchläuft, der lernt zahlreiche bewährter Algorithmen auswendig; die das Rad muss ja nicht für jedes Programm neu erfunden werden. Nachfolgend und abschließend stelle ich einmal zwei Algorithmen vor, die ein Informatikstudent so oder ähnlich typischerweise kennen lernt:
Missionare und Kannibalen: Drei Missionare und Kannibalen befinden sich am Westufer eines Flusses. Sie haben ein Kanu, das zwei Personen aufnehmen kann, und alle müssen den Fluss überqueren, um zum Ostufer des Flusses zu gelangen. Es darf nie mehr Kannibalen als Missionare am selben Ufer des Flusses geben, sonst essen die Kannibalen die Missionare. Zudem muss das Kanu mindestens eine Person an Bord haben, um den Fluss zu überqueren. Welche Überquerungsreihenfolge bringt alle erfolgreich ans andere Ufer?
Stellen Sie sich vor, Sie haben eine Landkarte von Australien, die Sie nach Staat/Territorium einfärben möchten. Keine zwei aneinandergrenzenden Regionen sollen dieselbe Farbe haben. Können Sie die Regionen mit nur drei unterschiedlichen Farben einfärben?
Die zwei Beispiele sind folgendem Buch entnommen: Algorithmen in Python, von David Kopec.Zum Weiterlesen
Programmierer verstehen für erfolgreiche Kommunikation: Introvertiertheit
Erfolgsrezept für die Entwicklung Sicherer Software
Executive Summary: Die wichtigsten Programmiersprachen, Frameworks