Neuigkeiten über die Zukunftsrichtung von Wing Helper

Nachrichten von den Machern von Wing Helper
Antworten
Benutzeravatar
alex.pozgaj
Beiträge: 1643
Registriert: Di 29. Sep 2015, 21:21
Wohnort: Wien
Kontaktdaten:

Neuigkeiten über die Zukunftsrichtung von Wing Helper

Beitrag von alex.pozgaj » So 19. Mai 2019, 16:35

Hallo,

wie Ihr schon wisst, in der Version 1.5.0 haben wir den Flügel so gut wie abgeschlossen. Die noch offenen Punkte auf der Wunschliste sind sehr fortgeschrittene Funktionen - diese will ich natürlich auch irgendwann mal angehen, als nächstes ist jetzt aber der nächste Schritt im Fokus: die Rumpfdefinition!

Erlaubt mir bitte an dieser Stelle etwas auszuholen und ein paar Worte über den Prozess der Softwareentwicklung zu sagen.

Was auf einer gelungenen Programmoberfläche einfach aussieht, besteht im Hintergrund aus einer riesigen Menge an zum Teil komplizierten Code. Dieser Code ist organisiert in Module, oder funktionale Einheiten, die alle perfekt ineinander greifen müssen. Um diese Einteilung der Funktionalitäten in Module zu bewerkstelligen, muss man sich möglichst genau überlegen, was eigentlich die Aufgabe ist, wie diese in einzelne Schritte eingeteilt werden soll, in welcher Reihenfolge diese Schritte auszuführen sind, wie die Daten intern zu halten sind, welches Modul welche Informationen an welches andere Modul weiter geben muss, und noch 100 weitere wichtige Fragen. Hinzu kommen dann die sogenannten nicht-funktionellen Anforderungen: welche Performance kann ich beim ausführenden Rechner voraussetzen, welche Betriebssysteme will ich unterstützen und in welchen Versionen, welche Benutzergruppe soll mit dem Programm zurechtkommen können. Zu guter letzt kommen dann auch noch die Anforderungen, die nach Aussen hin gar nicht sichtbar sind: wie gut wartbar soll das Programm sein, wie gut erweiterbar soll es sein, und welche Anforderungen stelle ich an die allgemeine Qualität so wie Flüssigkeit der Bedienung, Absturzsicherheit, Widerstandsfähigkeit gegen Angriffe aus dem Internet (hauptsächlich wichtig für Webbasierende Anwendungen), und so weiter.

Je mehr davon man sich dann vornimmt, desto komplizierter und aufwendiger ist es, das Programm auch zu schreiben. Klar, man kann sagen "das Programm soll schnell sein, flüssig in der Bedienung, keine Resourcenanforderungen an den Rechner stellen, erweiterbar, möglichst frei von Fehlern, soll auf allen Betriebssystemen laufen, den Anforderungen der Anfänger und Profis gleichermassen gerecht werden, und darüber hinaus auch noch Kaffee kochen", umsetzbar wird so eine eierlegende Wollmilchsau allerdings nicht sein (vor allem de letzte Punkt wäre schwierig :) )

Ich bin stolz, viele der oben genannten Punkte im Wing Helper in den letzten mehr als 6 Jahren ziemlich gut umgesetzt zu haben. Die aufwendigste Erweiterung bis jetzt waren die elliptischen Flügelformen: manche ziemlich am Anfang der Entwicklung getroffene Entscheidung mussten umgeworfen werden, ohne dabei etwas zu zerstören. Das ist vergleichbar mit Fundamentaustausch nachdem das Haus schon fertig gebaut ist. Gute Softwarefirmen machen das manchmal mit ihren Produkten, das passiert allerdings äusserst selten - die meisten "wurschteln einfach weiter" und kleben immer weitere neue Funktionen dazu, egal ob sie dazu passen oder nicht, weil die Kosten für einen Fundamentaustausch in der Regel exorbitant sind. Das ist der Grund warum manche viele gute Programme mit der Zeit immer schlechter werden.

Ein Fundamentaustausch bedeutet meistens, dass man viel Zeit und Arbeit investieren muss, bis man dann am Ende wieder dort ist, wo man angefangen hat - allerdings wieder gut darauf vorbereitet, weitere neue aufregende Funktionen zu implementieren. Vorausgesetzt natürlich der Umbau gelingt, denn wenn man dann nach 2 Jahren Umbau mit etwas da steht, was *schlechter* funktioniert und auch nicht wirklich so erweiterbar ist wie man sich das gedacht hat, ist es der Super-GAU. Wing Helper steht nicht unter dem Druck Profit machen zu müssen, es ist ein Produkt, welches von Liebe und Engagement der wenigen beteiligten lebt. Dass man dann vor solchen potenziell tödlichen Änderungen Respekt hat ist sicherlich verständlich.

Inkrementelle Änderungen am Fundament sind da schon weniger risikobehaftet, und die habe ich im Wing Helper schon sehr oft auch vorgenommen - die oben erwähnten elliptischen Flügeln haben den bisher grössten Umbau nach sich gezogen. Solche inkrementelle Änderungen bewirken dann allerdings oft, dass manche der grundlegenden Anforderungen (siehe oben) immer schlechter eingehalten werden können. Das Haus steht noch, es gibt keinen Luftzug, Kamin funktioniert und die Leitungen sind gut, die anfangs angestrebte Perfektion wird aber abgeschwächt und weitere inkrementelle Änderungen immer schwieriger und aufwendiger. Fängt man mit einem Einfamilienhaus an, wird daraus nie ein Wolkenkratzer, egal wie super das Haus anfangs gebaut wurde.

An einem Punkt im Leben eines jeden Programms muss man sich also entscheiden: alles neu machen, mit dem ganzen Aufwand und mit dem ganzen Risiko, oder aber eine andere Lösung suchen.

Die letzten Monate habe ich mit den Gedanken und mit Experimenten verbracht, mit Probeänderungen an Wing Helper Fundamenten, um zu überprüfen, ob die Rumpfdefinition dazu gebaut werden kann, oder ob ich sie lieber in ein eigenes Programm auszulagern soll. Das Ergebnis liegt jetzt vor: die notwendigen Änderungen am Wing Helper wären so weitreichend und tiefgreifend, dass daraus niemals ein rundes und stimmiges Produkt entstehen könnte. Darüber hinaus müsste ich einige weitere interne Funktionalitäten einbauen, welche kaum einen echten Vorteil bringen, dafür allerdings Unmengen an Zeit verschlingen würden. Zu guter letzt: egal wie gut mir der Umbau gelingt, die Anforderungen an Rechnerkapazitäten würden definitiv steigen, was für viele Wing Helper Benutzer sehr unangenehm wäre - nicht jeder hat den neuesten Rechner zu Hause stehen.

Auf Grund dieser Überlegungen und Experimente habe ich mich entschieden, den Rumpf nicht als Zusatzfunktion in den Wing Helper einzubauen, sondern als neues, eigenständiges Programm umzusetzen. Dabei werde ich die komplette (komplexe) Infrastruktur des Wing Helper wiederverwenden können, was eine riesige Hilfe sein wird und vieles an der Entwicklung des neuen Programms vereinfachen und verschnellern wird. Bezogen auf oben genannte Überlegungen wäre das dann die "Option 3": weder alles neubauen, mit ungewissem Ausgang, noch inkrementelles Erweitern, sondern neue Funktionalität auslagern. Das macht aus noch einem Grund Sinn: der Flügel und der Rumpf sind sehr unterschiedliche Konstruktionen, die auch unterschiedliche Arbeitsabläufe nach sich ziehen. Die Aufteilung wird mir ermöglichen, die Rumpfdefinition umzusetzen, ohne dabei Rücksicht auf die für den Flügel benötigte Annahmen und Einschränkungen nehmen zu müssen.

Das war jetzt etwas lang, ich bitte um Verständnis dafür. :) Ich hoffe, dass ich Euch einen guten Einblick in die Welt der Softwareentwicklung und -pflege geben konnte.

Langer Rede kurzer Sinn: es wird ein neues Programm geben, mit dem Namen "Fuse Helper" (Arbeitstitel - für Vorschläge bin ich offen). Von der Bedienphilosophie und vom prinzipiellen Aufbau her wird das Programm sehr stark an Wing Helper angelehnt sein und sich nur dort unterscheiden, wo dieser Unterschied auf Grund der Aufgabenstellung auch sinn macht.

Das war keine einfache Entscheidung, weil jetzt einiges an Arbeit vor mir liegt, bevor die ersten Ergebnise gezeigt werden können. Nichtsdestotrotz, ich bin erleichtert, die Entscheidung getroffen zu haben, weil ich endlich weiss, wo die Reise hin geht, und weil die Gefahr gebannt ist, auf Grund der neuen Funktionalität die bestehende zu schwächen.

Was jetzt aktuell passiert ist die Aufteilung der bestehenden Funktionalität in separat kompilierbare Module, die dann von beiden Programmen (Wing Helper und Fuse Helper) verwendet werden können (grafische Funktionen, mathematische Bibliothek, DXF Export, usw). Das ist hauptsächlich mechanische Arbeit, die ist zwar etwas aufwendig, bringt aber auf lange Sicht Vorteile in der Pflege beider Programme.

Wenn das mal fertig ist, erstelle ich ausgehend vom Wing Helper Code und dieser ausgelösten Module den neuen Code für den Fuse Helper, und die konkrete Entwicklung geht weiter!

Ich halte Euch am Laufenden! :)


LG, alex.
Aleksandar Pozgaj
Wing Helper e.U.

Antworten