Find’ ich toll. Vor allem als Konter auf andere
Da schließt du vielleicht von dir auf andere. Und das Beispiel „DB ohne primary key“ war ein Suggestivbeispiel, das ich aus meinem Websuchergebnis zu ~„bad practices SQL“ kopiert hatte. Gewusst hätte ich das nicht. Und das mit dem NOT IN
noch viel weniger. Aber wenn mir morgen jemand die Aufgabe hinwirft: „Hier, erstell’ mal eine SQL-DB, und frag’ dann alle Kunden ab, die noch kein Produkt bezahlt haben“, dann mache ich das eben. Da wird dann eine Table "customers"
rauskommen, vermutlich ohne primary key, und wenn stack overflow (oder schlimmer: irgendein Blog post, oder noch schlimmer: irgendeine Anleitung) sagt, dass man das so machen kann, wird da bei der Abfrage ein WHERE customer NOT IN buyers
vorkommen. Und derjenige, der das morgen warten muss, wird entsetzt aufschreien: „Welcher Stümper hat denn das verbockt?! Wir müssen die komplette DB neu erstellen, und die ganze Abfragelogik ändern!“. Und mit ist das dann egal. Was ich gemacht habe, hat ja „„funktioniert““, und ich muss meine Zeit nicht mit der Wartung des Mists verschwenden, den ich da verzapft habe. Die Zeit verschwenden andere. Die Kosten für die durch unprofessionelle Arbeit verursachten Zeitaufwände habe ich nicht zu tragen, und genaugenommen können diese Kosten nichtmal beziffert werden. Nach mir die Sintflut.
(Irgendwo ist da gerade Ironie und Sarkasmus reingerutscht…)
Aber das gehört überall dazu. Und wie aufwändig ist es, das alles zu lernen? Ich meine, richtig - nicht so, dass man es erstmal falsch macht, und dann von einem Kollegen gesagt bekommen muss: „Hey, mach’ hier mal nen outer join“, um dann mit Google nach „How to outer join“ und StackOverflow durch irgendwelche Implementierungsversuche zu stolpern.
Und wenn in einem Projekt dann Java, Maven, Spring Boot, Neo4J, Solr, Kafka, Flink, Angular, TypeScript, Jenkins und Docker zusammenkommen, kann man das dann alles „angemessen beherrschen“? Wenn man es nicht kann, wie lange dauert es, bis man sich eingearbeitet hat? (Rhetorische Frage. Wozu einarbeiten, wenn es Google+SO gibt).
Natürlich: Was auch immer man da (dann ggf. zum ersten mal) macht, es wird nicht gut sein. Wenn man sich mit Angular beschäftigen will, dann arbeitet man ein Tutorial durch, erstellt mal ein TicTacToe damit, spielt ein bißchen rum, liest anderen Code und Best Practice Guides. Wenn man das einfach machen muss, macht man irgendwelchen Mist, über den sich der Nachfolger ärgert. Kann es sein, dass ich einfach eine Form von Verantwortungsbewußtsein habe, die andere nicht haben?
Wie, etwa ein Purist, der nur ein Gebiet beherrscht? Vielleicht hat auch keiner die Eier, „„zuzugeben““: „Ich bin Experte für ein bestimmtes Thema“. Vielleicht traut sich keiner, zuzugeben, dass es auch Dinge gibt, mit denen man sich nicht auskennt? Wer nicht alles kann, hat ja quasi schon versagt. Jeder muss die Fassade des Universalisten aufrecht erhalten. (Das funktioniert aber nur bedingt. Eine Bedingung ist, dass man nur mit solchen Leuten zu tun hat. Blender durchschauen sich nicht gegenseitig.).
Ich bin jedenfalls überzeugt, dass ein Team von 10 Leuten, die sich in ihrem Fach auskennen, weit bessere Ergebnisse erzielen kann, und das auch weit schneller (und damit im Endeffekt billiger), als 10 Leute, bei denen jeder alles macht, und sich in jedes Thema gerade so weit einarbeitet, dass er den größten Mist, den sein Kollege am Tag vorher gemacht hat, erkennen und zu anderem (nicht notwendigerweise kleinerem!) Mist refactoren kann, so dass es mal wieder läuft.
Ööhhh… nein?! Es geht ja nicht um „platzende“ Programme. Das ist eine falsche Wahrnehmung oder Annahme, die mir schon oft begegnet ist. Es ist nicht so, dass etwas „platzt“ und dann „kaputt“ ist. Natürlich gibt es das für jede Instanz eines Programms: Da fliegt dann eine Exception, und man muss die beheben und neu starten. Aber wenn dann eine andere Exception fliegt, oder einzelne Funktionen ~„irgendwie nicht richtig funktionieren“, oder die Umsetzung eines Trivial-Features mehrere Wochen dauert, dann merkt man, dass das alles Symptome eines Prozesses sind. Und diesen Prozess würde ich nicht damit vergleichen, dass etwas „platzt“, sondern dass man sich in Morast festfährt oder in Treibsand versinkt. Alles geht immer langsamer. Alles wird immer aufwändiger. Alles wird immer schlechter. Und früher war alles besser
(Nochmal: Die Aufwände kann man nicht beziffern oder vergleichen. Innerhalb der IT kann man praktisch kein ROI definieren. Suggestiv: Es wird Zeit für Bugfixing allokiert, und das ist zu wenig, und die Frage, warum es so viele Bugs gibt, stellt niemand…)
Es mag programmiererischer Weltschmerz sein, oder Idealismus, aber … vielleicht mal die Frage, an diejenigen, die „Software entwickeln“: Glaubt ihr nicht, dass ihr viel effizienter arbeiten könntet, wenn ihr euch nicht so viel mit ~„dem ganzen Drumherum“ (und insbesondere den Fehlern, die andere verursacht haben) beschäftigen müßtet?
Etliche Abstraktionsebenen höher: Unsere gesamte Zivilisation ist erst durch Aufgabenteilung (d.h. die Spezialisierung einzelner) entstanden, sogar erst dadurch möglich geworden. Aber in der IT ist das irgendwie andersrum? Lötkolben, anyone?
EDIT: Schwer, da was profunderes als List of failed and overbudget custom software projects - Wikipedia zu finden. Wer gibt es schon gerne zu?