„Hallo, Amigo!“

„Hallo, Bilaabo!“

„Heute erzähle ich Ihnen, wie Programme normalerweise entwickelt werden.“

„Im 20. Jahrhundert, als die moderne IT noch in den Kinderschuhen steckte, schien jeder zu glauben, Programmieren sei wie Konstruktion oder Fertigung.“

„Normalerweise lief es ungefähr so:“

Der Kunde würde erklären, welche Art von Programm er brauchte – was es tun sollte und wie es es tun sollte.“

Wirtschaftsanalysten hörten ihm zu und erstellten auf der Grundlage dessen, was er sagte, eine vollständige Liste der Programmanforderungen.“

„Dann würden Projektmanager diese Anforderungen in Aufgaben aufteilen und auch festlegen, welcher Programmierer welche Aufgabe und in welcher Reihenfolge erledigen würde.“

„Dann machten sich die Programmierer an die Arbeit. Manchmal arbeiteten sie mehrere Jahre(!).“

„Als sie fertig waren, wurde das Programm den Testern übergeben.“

„Die Tester gingen alle Anforderungen des Programms durch, um sicherzustellen, dass sie implementiert wurden und das Programm so funktionierte, wie es sollte.“

„Wenn etwas schief ging, protokollierten die Tester die Fehler und schickten sie an die Programmierer.“

„Dann würden die Programmierer die Fehler beheben und das korrigierte Programm an die Tester zurücksenden. Und der Zyklus würde sich wiederholen.“

„Nachdem die Hauptfehler behoben waren, wurde das Programm dem Kunden übergeben.“

„So ist es wirklich gelaufen?“

„Natürlich habe ich vieles vereinfacht, aber das kommt der bisherigen Vorgehensweise ziemlich nahe.“

„Und die Fertigstellung eines Projekts kann tatsächlich anderthalb bis zwei Jahre dauern?“

„Wenn die Entwicklung eines Projekts sehr lange dauerte, wurde es manchmal in separate Versionen aufgeteilt. Alle drei bis sechs Monate mussten Entwickler einen bestimmten Teil der Programmfunktionalität erstellen, ihn testen, alle Fehler beheben und ihn der Öffentlichkeit zeigen Kunde."

„Erstens, damit er seine Eindrücke teilen kann. Und zweitens, was noch wichtiger ist, damit er weiterhin für die Entwicklung des Programms bezahlt.“

„Weiter zahlen?“

„Damals dauerte die Entwicklung oft 2-3 Mal länger als geplant. Und weil Programmierer oft auf Stundenbasis bezahlt wurden, wurde das Programm 2-3 Mal teurer. Außerdem verringerte sich auch der Nutzen. Immerhin das, was der Kunde heute will.“ für 100.000 US-Dollar wird in drei Jahren möglicherweise nicht mehr benötigt – vor allem nicht zum dreifachen Preis.“

„Haben Kunden oft die Zahlung verweigert?“

„Ja. Später haben sie begonnen, Strafen in den Vertrag aufzunehmen, aber das hat die Situation nicht verbessert. Die Softwareentwicklung zog sich immer weiter hin. Und niemand konnte etwas dagegen tun, selbst wenn er wollte.“

"Aber warum?"

„Nun, erstens weiß man in der Planungsphase noch zu wenig. Am Anfang konnte meist niemand vorhersagen, mit welchen Problemen die Programmierer konfrontiert werden.“

„Aber erfahrene Programmierer hätten alles vorhersehen können, oder?“

„Sehen Sie, dass Programmieren ein einzigartiger Beruf ist?“

„Ein gewöhnlicher Arbeiter verrichtet häufig immer wieder die gleiche Arbeit. Uhrmacher stellen Uhren her, Köche kochen, Lehrer unterrichten, Ärzte behandeln usw.“

„Jeder dieser Profis macht im Grunde Tag für Tag das Gleiche. Dadurch werden sie in ihrer Arbeit immer besser.“

„Beim Programmieren ist der Ansatz anders. Sobald ein Programmierer jeden Tag vor der gleichen Aufgabe steht, schreibt er eine Funktion, ein Modul oder ein Programm, um sie auszuführen, und kommt nie wieder darauf zurück.“

„Jeder Programmierer löst normalerweise jede Aufgabe einmal in seinem Leben.“

„So etwas wie Wissenschaftler oder Konstrukteure, die Dinge erfinden.“

„Ah. Nun, was ist die wichtigste Rolle in einem Projekt?“

„Hmm, wie soll ich das antworten? Es ist leicht zu sagen, welches das Wichtigste ist, aber das Unwichtigste zu identifizieren, ist schwierig.“

Die Hauptaufgabe eines Testers ( Qualitätssicherung , QA )  besteht darin, den Status eines Programms zu überwachen und Fehler umgehend zu melden. Je mehr und früher ein Tester Fehler findet, desto mehr können behoben werden.  Ein  guter Tester hat mehr Einfluss auf die Produktqualität Ein guter Programmierer tut es .

„Warum können Programmierer ihre eigenen Programme nicht testen? Wissen sie schließlich nicht besser als Tester, was funktioniert und was nicht?“

„Ein guter Programmierer ist einfach nicht in der Lage, ein guter Tester zu sein. Ein Programmierer weiß wirklich gut, wie das Programm funktioniert, also verwendet er oder sie es immer auf eine bestimmte Art und Weise. Im Gegensatz zu normalen Benutzern, die das Programm so verwenden, wie sie möchten.“ "

„Außerdem testen Tester nicht, was noch nicht funktioniert. Der Tester testet die Funktionalität oder Teile des Programms, von denen der Programmierer sagt, dass sie bereits nahezu perfekt funktionieren.“

„Und wenn der Tester jede Menge Fehler in dieser Funktionalität findet und der Programmierer sie behebt, dann kommt das Produkt tatsächlich der Perfektion näher.“

Die Hauptaufgabe eines Programmierers ( S oftware  Developer Engineer  ,  EntwicklerSDE ) besteht darin, neue Funktionen zu implementieren. Oder einfacher gesagt, die ihm oder ihr zugewiesenen Aufgaben auszuführen. Wenn Programmierern Aufgaben mit neuen Funktionen zugewiesen werden , sie führen sie aus. Wenn ihnen Fehler zugewiesen werden, beheben sie Fehler.“

„Aber manchmal gibt es anspruchsvollere Aufgaben, zum Beispiel die Entwicklung der Architektur für das Programm oder Teile davon. Je besser die vorgeschlagene Architektur, desto einfacher wird es, Dinge in Zukunft zu erledigen.“

„Das Problem ist, dass die Architektur ganz am Anfang ausgewählt werden muss, aber erst mitten in der Entwicklung klar ist, ob man die richtige Architektur gewählt hat.“

„Wenn die Architektur außerdem erfolgreich ist und das Programm großartig wird, wird der Kunde sie wahrscheinlich als Grundlage für neue Versionen des Programms verwenden wollen.“

„Das ist es, worauf ich hinaus will.“

„Für welche Architektur Sie sich auch entscheiden, es wird immer eine Reihe von Änderungen, Ergänzungen und neuen Funktionen geben, die die Architektur nicht berücksichtigt.“

„Hier ist ein gutes Beispiel.“

„Ein Kunde bittet Sie, ein fünfstöckiges Gebäude zu bauen, also entwerfen Sie eine Architektur und bauen das Haus.“

„Dann bittet der Kunde darum, eine weitere Geschichte hinzuzufügen, und dann noch eine und so weiter.“

„Aber die Wände im Erdgeschoss waren nicht für so viel Gewicht ausgelegt, ebenso wenig wie das Fundament. Also muss alles erneuert werden.“

„Aber was ist, wenn der Kunde nach der Fertigstellung des fünfstöckigen Gebäudes sofort entscheidet, dass er ein 50-stöckiges Gebäude haben möchte?“

„Es wäre einfacher, die bestehende Struktur abzureißen und alles von Grund auf neu aufzubauen…“

„Aber zum Thema Architektur habe ich einen Rat für Sie.“

„Die Architektur einer Anwendung muss in erster Linie flexibel sein, was bedeutet, dass Sie nicht bei Null anfangen müssen, wenn Sie sich entscheiden, die Hälfte der Anwendung neu zu erstellen. Diese Art von Architektur wird normalerweise als flexibel und modular bezeichnet .

Die Hauptaufgabe des Projektmanagers besteht darin, Entscheidungen zu treffen. Der Projektmanager ist derjenige, der das große Ganze sieht und Entscheidungen auf der Grundlage dieser Perspektive trifft.“

„Angenommen, während der Entwicklung wird klar, dass eine bestimmte Aufgabe nicht wie geplant abgeschlossen werden kann. Der Projektmanager kann dann:“

a)  versuchen, mit dem Kunden zu verhandeln, um die Aufgabe zu ändern“

b)  der Aufgabe mehr Zeit widmen“

c)  erfahrenere Programmierer aus anderen Projekten hinzuziehen.“

„Und es gibt noch viele andere Möglichkeiten.“

„Jede Option erfordert, dass Sie etwas opfern, und die Aufgabe des Managers besteht darin, die Gesamtverluste aus diesen Opfern zu minimieren.

„Nehmen wir zum Beispiel an, Konkurrenten stehlen den Hauptprogrammierer, indem sie ihm doppelt so viel Geld anbieten.“

„Der Projektmanager kann:“

a)  nichts tun. Der Programmierer wird gehen und das Projekt wird wahrscheinlich ins Hintertreffen geraten und Strafen nach sich ziehen.“

b)  sein Gehalt verdoppeln. Dann wollen auch alle anderen im Team Gehaltserhöhungen. Wenn Sie allen mehr Geld geben, steigen die Kosten des Projekts und es könnte unrentabel werden.“

c)  eine andere Option, die Ihnen einfällt.“

"Ich verstehe."

„Mit einem schlechten Projektmanager verlängert ein gutes Team normalerweise ein Projekt, aber nicht immer.“

„Ein guter Manager mit einem Team aus durchschnittlichen Programmierern wird ein Projekt fast immer schneller abschließen als ein schlechter Manager mit einem Team aus hervorragenden Programmierern.“

"Ich verstehe."

„Okay, machen wir eine kurze Pause, dann geht es weiter.“