2018-01-25 digital life Design vs. Implementierung Unterschiedliche Faehigkeiten bei der Softwareentwicklung Wie kann man erwarten, dass ein beliebiger Programmierer ein or- dentliches Fachwissen in *allen* Belangen der Softwareentwicklung habe? Man nimmt ja auch keinen beliebigen Handwerker und laesst den ein ganzes Haus bauen. Es ist naemlich hoechst unwahrscheinlich, dass er sich gleichzeitig gut auskennt in: Architektur, Statik, Bau- logistik, Maurerarbeiten, Zimmermannsarbeiten, Stuckateursar- beiten, Fussbodenlegerei, Gas, Wasser, Scheisse, Elektrik, In- neneinrichtung, optischem Design, Sicherheitstechnik, usw. Das ist offensichtlich unrealistisch. Bei der Softwareentwicklung ist es aber allzu oft der Normalfall! Dabei sind die Unterschiede zwischen dem Bau von Haeusern und dem Bau von Software gar nicht so gross: o Fuer Haeuser haben normale Menschen grossteils ein Gefuehl, waehrend Software grossteils abstrakt und unsichtbar ist. (Darum muss man Diagramme des Abstrakten malen!) o Wenn Haeuser einstuerzen, koennen Menschen sterben; wenn Software zusammenbricht, verliert man hoechstens Daten, Geld und Nerven. o Die Baubranche ist sehr viel aelter als die Informatik. o Gebaeude leben tendenziell laenger als Programme. Aber selbst wenn man die Unterschiede maximal ausdehnt, bleibt weiterhin unverstaendlich, warum in der Informatik ein Softwarearchitekt gut implementieren koennen muss, warum ein Ausprogrammierer gut designen koennen muss, warum ein Sicherheitsexperte etwas von Softwarestatik verstehen muss, warum ein Refactoringprofi alle Deploymentaspekte verstehen muesste. Diese Aufgaben und die Anforderungen zu ihrer Bewaeltigung sind so unterschiedlich! Es ist schon ein Gluecksfall, wenn jemand in einigen Bereichen davon gut ist. Zumindest an den Randbereichen tut sich schon etwas. Man hat grossteils verstanden, dass Sicherheitsfragen nur von Sicherheitsexperten ordentlich beantworten werden koennen. Man hat auch verstanden, dass Programmierer keine guten User- Interfaces designen koennen und dass sie auch keine gute Anwen- derdokumentation schreiben koennen. Aber schaut man in Richtung Code, so werden die Bereiche Architektur/Software-Design und Implementierung/Refactoring meist von den gleichen Personen uebernommen, oft von Alleinentwicklern. Dabei erfordern Design und Implementierung unterschiedliche Kenntnisse, unterschiedliche Faehigkeiten und unterschiedliche Betrachtungswinkel. Des Weiteren wird in der Ausbildung und im Studium der Bereich Design/Architektur vernachlaessigt. Dabei besteht eine grosse Wichtigkeit in der Stimmigkeit eines Softwaredesigns: Es muss aus einem Guss sein. Wenn Programmierer in einem Projekt wechseln, so ist es wichtig, dennoch einen einheitlichen Coding-Style zu haben. Um ein Viel- faches wichtiger als gleichartige Implementierung ist aber gleichartiges Design, gleichartige Architektur, gleichartige grundsaetzliche Denkmodelle. Hierauf wird aber wenig geachtet, weil das Design ueberhaupt viel zu wenig explizit beachtet wird -- es passiert bloss nebenbei. Das ist ein Fehler. Bei der Entwicklung von Autos gibt es auch einen Chefdesigner, der darauf achtet, dass alle Entwicklung zueinander passt, dass das Endprodukt stimmig ist. Er ist die Entsprechung zum Architek- ten im Hausbau, bei dem alle Faeden zusammenlaufen und dessen Aufgabe es ist, das grosse Ganze im Blick zu halten, waehrend die meisten anderen primaer auf ihre Teilprobleme fokussiert sind. Wie kann jemand gleichzeitig gut orchestrieren und gut Solist sein? Es gibt nur wenige, die dieses komplette Umschalten ihrer Perspektive zu den richtigen Zeiten und im richtigen Masse schaf- fen, und fuer die ist das eine grosse Belastung. -- Irrsinnig, dies aber als Normalfall in vielen Projekten zu erfordern. Das ist das Heimwerkerbastelniveau, und weit entfernt von Profes- sionalitaet. http://marmaro.de/apov/ markus schnalke