QLineEdit und anderes

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
BlackJack

@the_real_noob: Ich bin kein Befürworter des unkonventionellen Wegs. Und wer hat Java zum konventionellen Weg erklärt‽ Bitte versuch nicht die allgemeine Kritik an Deinem Vorgehen *damit* abzubügeln! Auch in Java und ganz ”konventionell” ist es falsch mit Entwurfsmustern um sich zu werfen die gar nicht gebraucht werden. Ausserdem würde ich eine eher agile Programmierung auch nicht als unkonventionell bezeichnen, denn das ist auch in Java üblich. KISS (Keep It Simple and Stupid) und YAGNI (You Ain't Gonna Need It) sind Akronyme die ich in der Java-Welt kennengelernt habe. Auch als Gegenreaktion zu den Theoretikern und Studenten die keine Erfahrung in der Softwareentwicklung haben und einen Entwurfmusterkatalog als etwas sehen, was man durchgeht und versucht alles daraus irgendwie ins Programm einzubauen, in der irrigen Annahme das dadurch das Programm automatisch besser werden muss, und das jede Flexibilität die man einbaut das Programm besser, wartbarer, und leichter anpassbar macht.

Code klar, präzise, und am Problem orientiert zu schreiben, mit möglichst wenig Angriffsfläche für Fehler, ist „best practice“. In jeder Programmiersprache.

Die Ausführungen wie man Muster verwendet, also das man einen Entwurf oder gar ein bestehendes Programm haben muss, bevor man sich über die Muster Gedanken macht, sind so im GoF-Buch, also der Klassiker wenn es um Entwurfsmuster geht, und die haben Smalltalk und C++ für ihre Beispiele genommen, und das lässt sich alles auch ganz gut auf Java übertragen.

Ich wünschte Du würdest endlich mit MVC aufhören. Das ist einfach unsinnig. Du kannst MVC allgemein nicht üben und auch nicht anwenden, weil es *das* MVC nicht gibt. Vergiss doch einfach mal diesen Begriff. Wenn Du Geschäftslogik und GUI trennen willst, dann mach das einfach. Dafür braucht man keine 3-Buchstaben-Abkürzung über die sich selbst langjährige Softwareentwickler streiten was das überhaupt bedeutet, oder frei zugeben, dass sie keine Ahnung haben was das allgemein konkret bedeuten soll.

Klar muss man sich in Rahmenwerke einarbeiten, und der Rahmen stellt auch ein Gerüst dar innerhalb dessen man sich nicht mehr so ganz frei bewegen kann, aber der Punkt ist ja, dass man sich auch nicht mehr so ganz frei bewegen *muss*, sondern man kann sich auf das Rahmenwerk abstützen und die eigene Lösung in fertige Teillösungen einbetten. Fertige, von vielen Benutzern des Rahmenwerks *getestete* Teillösungen. Also Sachen die man nicht noch mal selber erfinden und testen muss. Klar wird es manchmal Ecken und Kanten geben an denen man sich reibt, aber wenn der vorhandene `QCompleter` nicht so ganz zu meinen Bedürfnissen passt, dann fange ich doch nicht an Qt wegzuwerfen und mein eigenes GUI-Rahmenwerk zu bauen. Dann schaut man in wie weit man den `QCompleter` zur Mitarbeit bewegen kann, oder ob man etwas für die eigenen Bedürfnisse von ihm ableiten kann, oder man implementiert nur diesen Teil so wie man ihn benötigt und schmeisst nicht alles andere auch gleich mit weg. Müsste sich Dein Anliegen nicht mit dem Model erschlagen lassen? Das gibt man als unsortiert an, also nicht alphabetisch sortiert, und sortiert es dann selbst nach den eigenen Bedürfnissen. Also beispielsweise Grossstädte wie Berlin vor kleinen Orten die mit B anfangen, und oder man schaut welche Orte schon vermehrt im Datenbestand vorhanden sind, und gibt denen beim sortieren auch ein höheres Gewicht.

Die Frage bei so etwas ist IMHO ob einem das Rahmenwerk erlaubt und ermöglicht an solchen Stellen eigene Lösungen zu entwickeln. Und das tut Qt eigentlich. Selbst wenn der `QCompleter` so gar nicht dazu zu bewegen ist, das zu tun was man möchte, kann man sich die Funktionalität selbst dazu bauen.

Ich bin mir jetzt nicht ganz sicher was Du mit ”Designwechseln” meinst? Du schreibst dann eigentlich nur von oberflächlichem Kram wie Farben oder das Aussehen. Das hat nichts mit Entwurfsmustern oder dem Softwareentwurf zu tun. Was hat das mit MVC zu tun? Und was bleibt einem für eine Wahl zu *was*? Dafür trennt man ganz einfach Geschäftslogik und Benutzerinteraktion sauber voneinander. Speziell bei Webseiten ist das oft nicht einmal eine Frage des HTMLs sondern rein von CSS. Das ist meilenweit von der Geschäftslogik entfernt. Die kann man wahrscheinlich nicht mal wenn man wollte mit dem CSS vermischen. :-)

Und was das Umkrempeln von Softwareentwürfen angeht: Das passiert auch immer mal wieder. Da kann man nicht wirklich etwas gegen machen. Irgendwann hat sich auch der flexibelste Entwurf überlebt und kann nicht mehr sinnvoll angepasst werden, wenn sich die Rahmenbedingungen und Technologien zu stark geändert haben.

Also eine grössere schriftliche Ausarbeitung in einer anderen Sprache möchte ich nicht radebrechen, sondern sauber ausformulieren. Das möchte der nächste der das lesen, und vielleicht überarbeiten muss, sicherlich auch von mir. Und der möchte auch nicht das ich Redewendungen und Strukturen verwende die ich aus meiner Muttersprache kenne, mit denen Muttersprachler in der anderen Sprache aber so gar nichts anfangen können. Wer das macht ist „heavy on the woodway“.

Zudem widerspricht sich das „Hauptsache es funktioniert“, mit haufenweise unnötigem Code schreiben, auf den Verdacht, dass der *vielleicht* irgendwelche Probleme lösen könnte, die man *vielleicht* irgendwann bekommen könnte. Wenn Funktionalität wichtig ist, dann ist es auch eine möglichst knappe, klare, präzise, direkt auf das tatsächlich vorliegende Problem gerichtete Formulierung der Lösung. Um zur Sprache zurück zu kommen: Wenn ich in einer fremden Sprache eine Lösung erklären will, versuche ich so wenig wie möglich zu radebrechen und so präzise es mir möglich ist, auf den Punkt zu kommen. Ich werde sicher nicht anfangen meine Erläuterungen unnötig mit irgendwelchen Ausschweifungen auszuschmücken von denen ich mal gehört habe, das man die vielleicht in diesem Kontext irgendwie anbringen könnte, und das vielleicht helfen würde die Lösung zu verstehe wenn das Problem grösser wäre als es tatsächlich ist. Das birgt die Gefahr das mich mein Gegenüber falsch oder gar nicht versteht, und das obwohl ich ja eigentlich eine Lösung habe, die ich kommunizieren möchte.

Bezüglich der Webanwendungen: Der Trend geht deutlich in die Richtung. Die grossen Anbieter wollen das so. Sei es Google, die das ja schon sehr lange wollen — aber auch Microsoft will den Leuten lieber Cloudlösungen andrehen als Office und Outlook für den lokalen Rechner beim Kunden. Und die Kunden wollen das mehr oder weniger auch, oder es ist ihnen egal. Die jüngeren kennen es dann gar nicht mehr anders. Die Absatzzahlen für klassiche PCs ist schon eine Weile rückläufig — Mobilgeräte sind das was die Leute kaufen. Smartphones und Tablets oder auch schwach ausgestattete, aber sehr günstige Laptops, bei denen man beim Kauf gleich Cloudspeicher und -anwendungen mit aufs Auge gedrückt bekommt. Regionen mit schlechter Anbindung ans Netz sind heute noch ein Problem, das wird sich aber auf die eine oder andere Weise lösen. Wenn nicht durch den Netzausbau durch Private und/oder Staat, dann letztendlich durch den Trend, dass die Leute auf der ganzen Welt immer mehr vom Land in die Städte ziehen. Irgendwann sind die paar Leute die dann noch irgendwo in der unerschlossenen Pampa leben für die Anbieter einfach egal, weil sich das nicht rechnet Rücksicht auf die zu nehmen. Bei uns hat alleine die Telekom schon Interesse alle mit Internet zu versorgen, denn das analoge Telefonnetz wollen sie auf lange, oder vielleicht sogar schon mittelfristige Sicht, loswerden. Da es aber einen Versorgungsauftrag gibt, muss dann Internet oder Funkabdeckung her.

Webanwendungen kann man auch immer besser ohne ständige Netzanbindung laufen lassen. HTML5 bietet Mechanismen um Daten auch lokal zu speichern und in einem Manifest anzugeben welche Daten/Dateien die Anwendung braucht um Offline zu funktionieren. Und es gibt Ansätze wie Electron, also einen Browser als Ablaufplattform für lokale Programme zu verwenden. Oder Apache Cordova/Phonegap die eine ”Webanwendung” als Mobilanwendung verpacken können.

Auch für PCs kann es eine Lösung sein keine native GUI zu implementieren, sondern die Webanwendung samt Server an den Benutzer auszuliefern, der sie dann lokal laufen lässt. Vielleicht sogar auf einem Server zuhause. Wenn ein Browser oder ein ”WebView” nicht angemessen für eine GUI ist, kann man immer noch eine native GUI für die Webanwendung, also dann eher ein Webservice, bauen.

Deinen Ausführungen zu OpenSource und Unternehmen kann ich nicht ganz folgen. Hinter Qt hat *auch* mal Nokia gesteckt, aber das existierte ja auch davor und es war immer eine Firma die das entwickelt hat, aber auch immer als OpenSource (auch während der Nokia-Zeit), und neben den Leuten die die kommerzielle Lizenz gekauft haben, wird die meiste Rückmeldung wohl von der OpenSource-Gemeinschaft gekommen sein, denn das Toolkit ist schon sehr lange die Basis für die KDE-Desktop-Umgebung. Qt ist IMHO keine ausgereiftes GUI-Rahmenwerk weil Nokia das mal in der Hand hatte, sondern Nokia hat das Rahmenwerk eingekauft weil es gut war. Das eine Firma hinter einem Projekt steht ist nicht wichtig, wirklich wichtig ist das es ausreichend viele Benutzer gibt, denn dann ist die Wahrscheinlichkeit sehr viel grösser das es sich an den Bedürfnissen der Benutzer orientiert, und nicht nur an denen der direkten Entwickler. Das kann nämlich auch bei Unternehmen ein Problem sein, wenn die nur für ihre eigenen Bedürfnisse entwickeln und ein Projekt damit in eine Richtung geht, die allgemein nicht mehr interessant ist.

OpenSource bedeutet auch nicht automatisch, dass es viele Köche gibt. Ich denke das ist sogar eher selten, dass es (zu) viele Entwickler in einem Projekt gibt. Das Problem sind in der Regel eher zu wenige Entwickler. Also beispielsweise nur einer und man muss Angst haben, das der irgendwann die Lust verliert oder einen Unfall hat. Oder Unternehmen wo man nicht weiss in welche Richtung die gehen wollen und deren Motivationen nicht immer nur technischer Natur sind. Oder sie gehen pleite. Oder werden aufgekauft und dem neuen Besitzer ist das OpenSource-Softwareprojekt, das er da mitgekauft hat egal, oder es ist ein Konkurrenzprodukt und er möchte es am liebsten plattmachen.

Ich glaube nicht das man die Qualität so einfach an OpenSource oder nicht festmachen kann. Da spielen einfach zu viele Faktoren mit rein und man muss bei jeder Bibliothek die gleiche Skepsis walten lassen.
Antworten