__deets__ hat geschrieben:Also da scheinst du in einer sehr speziellen Ecke des Softwareentwicklungskosmos zu residieren.
Wahrscheinlich schon, denn die meisten meiner "Objekte" sind echte, darunter einige, die mit Sicherheit die Lebenszeit der virtuellen überdauern (z.B. Bäume).
Natürlich hängen an diesen Objekte dran, die sich gelegentlich ändern, je nach Vorschriften/Regeln etc. Aber auch das hält sich in Grenzen.
__deets__ hat geschrieben:Denn dein Vergleich mit Auto-Konstruktion hinkt in meinen Augen sehr, und ist auch der Grund dafuer, warum viele Leute nicht verstehen, wieso Softwareentwicklung eine dermassen schlecht planbare Kunst ist - statt schoen ingenieurswissenschaftlich Standardloesungen fuer Standardkomponenten zu verschrauben.
Vor ca. 15 Jahren habe ich mich mal mit Metriken zur Berechnung des zu erwartenden Entwicklungsaufwandes beschäftigt. Es geht schon, aber den Aufwand betreibt halt keiner mehr, weil alles schnell gehen muss. Es wird eher grob ins Blaue geschätzt, als wirklich vorher die TippelTappelTour Lastenheft - Pflichtenheft - Lastenheft - Pflichtenheft ... durchzugehen, nicht zuletzt, weil Softwareprojekte oft ausgeschrieben werden müssen. Oft wird dann soviel geliefert, wie zu diesem Preis gefertigt werden kann. Den Rest macht die 90/10- Regel (90% des Aufwandes schafft man in 10% der Zeit, für die restlichen 10% benötigt man 90% der Zeit. Wenn man also 45% des Aufwandes bezahlt bekam, kann man 90% + 35/90*10% liefern, also in etwa 94%. Die restlichen versteckt man dann dahinter, dass der Kunde sich etwas anders überlegt hat und muss sie nie umsetzen oder bekommt sie indirekt bezahlt.
Mein Glück ist, wie gesagt, dass ich in die Konzeptionsphase eingebunden war, so dass einerseits ich schneller begreifen konnte, was erwartet wurde, und andererseits der Kunde gleich eine Aufwandsabschätzung mitbekommen konnte. Aber jetzt bin ich sowieso in einer anderen Situation. Ich programmiere nur noch für mich, gewissermaßen zum Spaß, um meine Arbeit effektiver zu machen. Ich beschaffe Informationen aus Daten, die nur aus den Ecken herausgekratzt werden können. Meine Projekte sind jetzt keine eigentlichen Software- Projekte mehr. Dennoch lassen sich die meisten Dinge nur effizient lösen, wenn man algorithmisch an die Sache herangeht.
Und daher brauche ich einen Satz spezifisches Werkzeug, das ich schnell zu einem Roboter bauen kann, der quasi die Eingangsdaten besorgen, mit Datenbankdaten verschneiden und die Ausgangsdaten herausbrechen kann. Die Aufgabenstellungen sind immer unterschiedlich, die benutzten "Schnittstellen" im weiteren Sinne aber meist die gleichen, wenn auch oft unterschiedliche Aspekte zum Tragen kommen.
__deets__ hat geschrieben:Der Grund liegt in meinen Augen darin, dass die Konnektivitaet deutlich geringer ist - eine Kupplung haengt an einer Seite am Motor, und an der anderen am Getriebe. Aber niemals am Schiebedach. In der Softwareentwicklung ist das jedoch gang & gaebe.
Na ja, bei mir halt nicht. Um bei dem Modell zu bleiben: Es ist für mich kein Problem, das Auto zum fliegen zu bringen, schließlich habe ich es ja selbst gebaut. Mein Problem ist, dass ich Himmel und Erde von anderen benutze. Da brauche ich nur wenige Schnittstellen, die Farbe des Himmels und die Temperatur sind mir egal, dafür muss ich aber unkompliziert auf die Position der Wolken zugreifen können, und zwar immer wieder und eigentlich immer nur die Wolken. Falls mich Hubschrauber je interessieren sollten, müsste ich meine Schnittstelle zum Himmel erweitern.
So habe ich im Grunde über Jahre entwickelt, das war kein Problem. Und selbst, wenn ich meine Himmel- Schnittstelle nur alle 3 Jahre benutzt habe, musste ich keine Dokumentation lesen, weil die Schnittstelle selbsterkärend und selbstüberwachend war. Letzteres bekomme ich bei Python halt nicht, ist aber auch nicht so schlimm. Ich muss jetzt eben lernen, wie ich mir meine Werkzeuge mit python so baue, dass ich sie immer wieder so benutzen kann, wie ich sie benötige.
__deets__ hat geschrieben:Wenn dein Job hauptsaechlich aus DB-Entwurf besteht - da bin ich bei dir. Unser Datenmodell hat sich verhaeltnismaessig wenig entwickelt in den letzten Jahren.
Noch nicht einmal Entwurf, sondern nur mit komplexen Auswertungen.
__deets__ hat geschrieben:Aber wenn man etwas anderes als nur simpelste Masken zur Betrachtung & Bearbeitung vorsieht - dann kann man schon mal gezwungen sein, fuer die Integration eines neuen Payment Anbieters weite Teile des Codes umzuwerfen, weil der Seitenfluss nicht mehr derselbe ist - ohne dabei einen Fehler beim urspruengliche Konzept gemacht zu haben. Gab halt noch kein PayPal.
Genauso hat die Einfuehrung von Hardware statt reinen Software Verkaeufen inklusive der Notwendigkeit, Vorbestellungen aufzugeben, abzuarbeiten, zu widerrufen, Einfluss auf all den bestehenden Code, und da muss dann schon nachgebessert werden.
Mit anderen Worten: das Auto lernt schwimmen und fliegen, und ist kein Auto mehr, sondern ein FliWaTüt, und das natuerlich nicht durch Neukonstruktion, sondern refactoring.
Das ist schon richtig, in solchen Fällen ändert sich das Design ständig. Ich habe keine Ahnung, ob man dafür dann irgend etwas wie agile Programmierung oder extreme programming benutzen sollte, aber dazu habe ich auch nur mal was gelesen, ich habe es nie gebraucht.