Hatte ich eigentlich schon erwähnt, dass ich bei Tech-Talk immer sofort einschlafe?
Das ist wie beim stricken
Im Grunde sind die Probleme überall gleich, unterscheiden sich aber im Komplexitätsgrad. Man kann sich da durchaus eine Analogie zum Stricken zusammen stricken. So gesehen ist ein Strickpullover also das Gleiche wie ein Taschenrechner. Dem Computer muss man nur eben ganz genau sagen was er zu tun hat, da er selbst nun mal nicht denken kann.
Das setzt dann voraus, dass man ein Problem, und sei es noch so gering, komplett verstanden haben muss um es in eine Software umzusetzen. Das nennt sich dann "Anforderungen".
Ich habe ganz bestimmte Anforderungen an meinen Strickpullover.
- An das oder die Muster (wenn der Pullover mehrere Strickmuster kombinieren soll)
- An die Form (V- oder Rundausschnitt,...)
- An die Passform (körpernah oder eher weit, ...)
- An die Farbe oder die Farben
- An die Größe
- Wie trage ich den Pullover (über dem T-Shirt oder direkt auf der Haut? Tragegefühl?)
Und bestimmt noch viele weitere Fragen die alle beantwortet werden müssen bevor man überhaupt loslegt mit dem Stricken. Menschen die bereits ihr Leben lang stricken machen das mehr oder weniger intuitiv. Anfänger (so wie ich mit Ruby on Rails) müssen erstmal das Stricken erlernen.
Solche Anforderungen werden dann auch noch untergliedert in "funktional" oder "nicht funktional". Auch ziemlich wichtig bei der Lösung von Problemen.
- Funktional: der Pullover muss ein Zopfmuster haben, rot sein, einen V-Ausschnitt haben. Auch wenn das keine "Funktionen" im herkömmlichen Sinne sind, so sind das doch explizite Merkmale welche der Pullover aufweisen soll.
- Nicht funktional: der Pullover muss flauschig und angenehm zu tragen sein.
Nimmt man jetzt mal die simple Aufgabe einer Addition (1 + 1 = 2) und Division (1 / 2 = 0,5) zweier Zahlen und nennen es "Taschenrechner" sieht das so aus:
- Der Taschenrechner muss zwei Werte W1 und W2 addieren können und das Ergebnis ermitteln
- Der Taschenrechner muss zwei Werte W1 und W2 dividieren können und das Ergebnis ermitteln
- Bei der Division wird W1 durch W2 geteilt
- W1 und W2 müssen nummerisch sein (der Benutzer kann ja auch Buchstaben eintippen)
- Der Taschenrechner muss Fließkommaberechnungen durchführen können (Computer unterscheiden zwischen Ganz- und Fließkommazahl)
- Der Taschenrechner muss korrekt runden (da gibt es unterschiedliche Verfahren mit unterschiedlichen Ergebnissen je nachdem, wo der Taschenrechner eingesetzt werden soll)
- Fehleingaben durch den Benutzer müssen signalisiert werden (Fehlermeldung)
- Der Taschenrechner soll den Benutzer bei der Eingabe der Werte optimal unterstützen (User Experience, Ergonomie, Zugänglichkeit)
Hier höre ich jetzt mal auf. Aus diesen funktionalen und nichtfunktionalen Anforderungen werden dann konkrete Aufgaben erzeugt welche dann wiederum in Arbeitspakete münden. Man stelle sich jetzt einfach nur mal einen ungleich komplexeren Vorgang vor. Zum Beispiel eine Sprachsteuerung oder die Steuerung eines AKWs. Oder das selbstfahrende Auto.
Eine Software zu entwickeln ist also nicht nur "programmieren" sondern auch ein Problem, und sei es noch so komplex, vollständig bis ins kleinste Detail zu zerlegen, zu erfassen und zu verstehen und dann in Funktionen adaptieren zu können. Und am Schluss muss das Ganze ja auch noch getestet werden bevor es beim Benutzer landet. Aufgrund der Komplexität kann ein Entwickler auch bei, oberflächlich betrachtet, simplen Funktionen wie 1 + 1 = 2 jede Menge Fehler machen.
Allein eine Software daraufhin zu prüfen ob sie zugänglich ist, ist ein aufwändiger (und auch teurer) Vorgang:
https://www.w3.org/Translations/WCAG20-de/