Wie soll ich am besten ein neues Programmprojekt beginnen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo!

Weder unter Windows noch unter Linux habe ich bisher ein wirklich brauchbares Kalender-/Organizer-Programm gefunden. EssentialPIM unter Windows ist grundsätzlich ok, aber eben auch nur grundsätzlich. Nun ja, ich könnte jetzt einen ellenlangen Aufsatz über alle möglichen PIMs verfassen, komme aber dabei immer wieder an denselben Punkt: Ich finde nichts, was mir zusagt. In meiner grenzenlosen Selbstüberschätzung habe ich mich also entschlossen, selber so ein Programm zu erstellen, stecke immer noch im Wälzen von "wxPython in Action", habe "A Byte of Python" durch, werde das Gefühl nicht los, niemals durchzusteigen und möchte jetzt trotzdem einfach mal beginnen...!

Aber wie? Vielleicht könnte mir ja der eine oder andere ein paar Tipps auf meine Fragen geben:

Ich habe bereits einiges an Ideen sowohl der Funktionen wie auch der Handhabung gesammelt. Wie beginne ich denn nun? Soll ich erst einmal das Gerüst der GUI ohne eigentliche Funktionalität erstellen? Oder erst grundlegende Funktionen, die über einfachste Ein-/Ausgabe gesteuert werden. Oder lässt sich das gar nicht wirklich trennen?

Wie transportiert Ihr die Idee einer Programmoberfläche auf den Bildschirm? Erstmal Skizze auf Papier, dann mit Zeichenprogramm, dann programmieren? Oder gleich Editor anwerfen und GUI entwerfen? Oder wie?

Ich habe Angst, gerade jetzt am Anfang grundsätzliche Fehler zu machen, die mich später "an die Wand fahren" lassen. Gibt es Dinge, die ich auf jeden Fall vermeiden bzw. unbedingt beachten sollte? Oder ist diese Frage bereits der erste Fehler den ich nicht beachten sollte?

Jetzt, beim Verfassen dieses Threads, merke ich, dass der eigentliche Knackpunkt für mich die Trennung zwischen GUI und restlichem Programm besteht. Als ich früher einmal eine kleine Warenwirtschaft mit Clipper programmierte, hatte ich 80 Zeichen x 25 Zeilen auf dem Bildschirm zur Verfügung und begann erstmal damit, ein Hauptmenü, das über Zahlen und F-Tasten bedient wurde, zu erstellen. Benutzereingaben, Programmfunktionen und Bildschirmausgaben waren dadurch sehr miteinander verwoben. Aus dieser Denkweise komme ich noch nicht so recht raus. Vielleicht hat hier jemand für mich so eine kleine Hilfestellung, die mir eine kleine Brücke zwischen GUI und "eigentlichem" Programm baut.

Puh, ob das noch was wird???

Danke schon mal für's Lesen von all dem wirren Zeug... :-)

Liebe Grüße
mutetella


P.S.: Und natürlich immer wieder die Frage über allem: Ist Python überhaupt die passende Sprache für mein Kalenderprojekt?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo!

Wenn du dich noch nicht sicher genug im Umgang mit Python fühlst, dann ist es keine schlechte Idee einfach mal mit einem kleinen Projekt anzufangen. Sonst lernt man es nie. Ein Kalender sollte da durchaus machbar sein.

Am besten beginnst du mit der Funktionalität. Dazu kannst du dann noch ein paar Funktionen erstellen, mit denen du das Programm über die Tastatur steuerst. Du solltest aber auf keinen Fall Funktionalität und Ein-/Ausgabe vermischen. Eine GUI kannst du dann später noch drauf packen.

Am besten setzt du dich in Ruhe hin, schreibst auf was du haben möchtest, sortierst die Funktionalität nach Wichtigkeit und machst dann einen groben Plan über den Aufbau deines Programm (Datenstrukturen nicht Aussehen). Dann kann es mit Programmieren auch schon losgehen.

Angst, dass du das Projekt versaust, weil du am Anfang einen Fehler gemacht hast, brauchst du nicht zu haben. Im ersten Ansatz wird das eh nichts ;-) Bei Fragen machst du einfach einen Thread auf, oder zeigst hier mal einen Zwischenstand, dann werden genug Korrekturvorschläge kommen.
Das Leben ist wie ein Tennisball.
problembär

mutetella hat geschrieben:Jetzt, beim Verfassen dieses Threads, merke ich, dass der eigentliche Knackpunkt für mich die Trennung zwischen GUI und restlichem Programm besteht ... Vielleicht hat hier jemand für mich so eine kleine Hilfestellung, die mir eine kleine Brücke zwischen GUI und "eigentlichem" Programm baut.
Das macht man mit 3 Klassen: "Model, View und Controller".

Es ist immer wieder ärgerlich, daß das in den gängigen Python-Büchern nicht erläutert wird. Ich mußte deshalb schon allerhand Code neu schreiben :(.
mutetella hat geschrieben:Ist Python überhaupt die passende Sprache für mein Kalenderprojekt?
Ja, durchaus: So viel Geschwindigkeit braucht das ja nicht, und ewig dran rumcoden mit großen Programmierteams willst Du ja auch nicht.
In Python kriegst Du schönen, sauberen Code, der auch ohne weiteres länger werden kann, das heißt, Du kannst das Programm ohne weiteres in mehreren Klassen und in mehreren Dateien umsetzen.

Gruß
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich würde es genau anders herum als EyDu empfehlen: Bei einem klassischen GUI-Programm und auch bei Web-Anwendungen würde ich mit der GUI anfangen, idealerweise mit einem guten GUI-Builder wie ihn Qt oder der Mac bietet. Baue dann alle Screens mit gerade genug Funktionalität, dass man sich vorstellen kann, wie das Programm funktionieren soll. Alternativ kann man auch ein Malprogramm oder ein spezielles Tool wie Adobe Fireworks oder Balsamiq Mockups (Microsoft auch ein ziemlich cooles Programm in der Mache), je nach Geschmack. Feile dann so lange an dem GUI herum, bis alle Funktionen und Abläufe klar sind und sich das ganze gut bedienen lässt.

Als nächstes ist dann das Domainenmodell dran, also ein Netzwerk von Objekten, welches die Dinge und Konzepte des Problemsfelds (der Domaine) abbildet (modelliert). Dies ist in jedem Fall vom UI zu trennen, aber nachranging, denn für den Anwender ist das UI die Anwendung.

Fast immer ist das Hauptproblem nicht, wie man eine Funktion in Python baut, sondern welche Funktionen (immer im Sinn von Funktionalität gemeint, nicht das Ding, was man mit `def` oder `lambda` definiert) man eigentlich haben will.

Siehe z.B. http://www.codinghorror.com/blog/archives/001091.html

Stefan
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Problembär, ich würde MVP (Model-View-Presenter) als die dem klassischen MVC überlegene Entwurfsmethode empfehlen, da sie besser auf native UIs mit "Widgets" oder "Controls" passt, die bereits VC zu einer Einheit verkleben. MVC braucht man eigentlich nur, wenn man diese Eingabeelemente selbst bauen will. Den zitierten Wiki-Artikel finde ich grenzwertig und über den Missbrauch und die Umdeutung des MVC-Begriffs für Web-Anwendungen will ich gar nicht anfangen zu motzen.

Zwar über Smalltalk, dennoch glaube ich eine gute Einführung: http://www.object-arts.com/papers/TwistingTheTriad.PDF

Ansonsten mal nach GWT und MVP googelt, da sollte sich auch etwas finden, denn das ist das empfohlene Entwurfsmuster für GWT-Anwendungen.

Stefan
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

sma hat geschrieben:Problembär, ich würde MVP (Model-View-Presenter) als die dem klassischen MVC überlegene Entwurfsmethode empfehlen, da sie besser auf native UIs mit "Widgets" oder "Controls" passt, die bereits VC zu einer Einheit verkleben. MVC braucht man eigentlich nur, wenn man diese Eingabeelemente selbst bauen will. Den zitierten Wiki-Artikel finde ich grenzwertig und über den Missbrauch und die Umdeutung des MVC-Begriffs für Web-Anwendungen will ich gar nicht anfangen zu motzen.
Seh ich ähnlich. Eine Trennung zwischen Logik und Präsentation ist wichtig, aber MVC ist so verdammt übertrieben für 99% der Softwareprojekte...
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Danke schonmal für Eure Antworten....

Nicht zuletzt der Link von sma zum codinghorror-blog hat mich davon überzeugt, mein Kalenderprogramm mit der GUI zu beginnen. Gerade diese Art von Programm ist von einem schlüssigen UI abhängig. Was da im Hintergrund passiert nimmt der Anwender im Vordergrund nicht wirklich wahr (sofern es einigermaßen flüssig programmiert ist!). Von daher glaube ich auch, dass mich das UI hauptsächlich beschäftigen wird.

Nun ja, da es jetzt konkret wird bin ich ein wenig verunsichert, ob meine Wahl für wxPython die Richtige ist. Ich muss gestehen, dass ich mich letztlich nicht aus programmiertechnischen Gründen für wxPython entschieden hatte, sondern schlicht und ergreifend deshalb, weil es nichts vergleichbares zum Buch "wxPython in Action" gibt. Falls also jemand denkt, mit Qt oder GTK wäre ich für mein Projekt besser gerüstet, so lasse ich mich gern überzeugen... :-) Hmm... ich weiß einfach nicht, auf was ich denn bei meiner Wahl wxPython-Qt-GTK achten soll. Da fehlt mir jegliche Erfahrung!

Oder ist das wie so oft eigentlich egal, eher Ansichts- und Geschmackssache? Leider kenne ich keine Gegenüberstellung der Vor- und Nachteile, ähnlich wie bei Softwarepaketen.

Vielleicht kann mir ja da noch jemand "auf die Sprünge" helfen. Würde mich auch über weitere grundsätzliche Überlegungen zum Beginnen eines Programmprojektes freuen.

Liebe Grüße
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

mutetella hat geschrieben:Ich muss gestehen, dass ich mich letztlich nicht aus programmiertechnischen Gründen für wxPython entschieden hatte, sondern schlicht und ergreifend deshalb, weil es nichts vergleichbares zum Buch "wxPython in Action" gibt.
Das halte ich für einen sehr guten Grund. Etwas so komplexes wie eine GUI-Bibliothek sinnvoll ohne gescheite Dokumentation zu verwenden, ist ziemlich schwierig. Wenn also das Buch zu wxPython halbwegs aktuell ist und gute Kritiken bekommen hat, würde ich Dir zu Deinem Vorgehen raten.
https://www.xing.com/go/invite/18513630.6a91d4
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@problembär:

Auch wenn ich das eine oder andere des Model-View-Controller-Konzeptes noch nicht wirklich verstehe, so bin ich froh, dass Du mich darauf aufmerksam gemacht hast. Wo im Programm beispielsweise eine wie auch immer geartete Datumseingabe des Nutzers validiert und formatiert wird, wo gelöscht, hinzugefügt und gespeichert wird und vieles andere mehr, halte ich für sehr entscheidend. Habe ich mir bisher überhaupt keine Gedanken gemacht.

Wenn die einzelnen Bereiche sauber voneinander getrennt sind, ist damit ein späterer Wechsel von beispielsweise GTK zu Qt einfacher möglich oder bringe ich da jetzt etwas durcheinander?

Mir fehlt jetzt allerdings noch eine Vorstellung davon, wie z. B. ein Termin, den ich in mein Kalenderprogramm eingebe letztlich im UI auftaucht. Woher weiß das UI, dass da ein Termin ist? Woher weiß die Datenbank, dass heute der Tag ist, an dem der Termineintrag zum UI muss?

Liebe Grüße
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@lutz.horn:

Danke! Neben allen technischen für- und wider-Argumenten tut es auch einfach mal gut zu hören, dass das schon ok ist, wie man sich entschieden hat. Und es ist tatsächlich so, dass neben den vielen (hauptsächlich Online-)Tutorials und Dokumentationen "wxPython in Action" für mich ein sehr wichtiges Buch zum Verständnis eines GUI an sich und wxPython im besonderen ist.

Es bleibt allerdings immer dieser Restzweifel, ob man sich für das Passende entschieden hat. Letztlich hängt ja auch sehr viel Arbeit daran. Und dann nach wochenlangem programmieren erkennen zu müssen, dass ich aus dem einen oder anderen Grund mit Qt oder GTK doch besser bedient gewesen wäre, möchte ich mir wenn möglich ersparen. Hat nicht jeder von uns auch schon die Erfahrung machen müssen, dass viele Stunden am PC "nur" Lehrstunden waren, weil man nicht mit dem richtigen Programm gearbeitet hat?

Aber wie gesagt, in all' dem hin und her und für und wider sind es nicht zuletzt auch Beiträge wie dieser von Dir, die etwas Klarheit jenseits aller Argumente bringen.

Liebe Grüße
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

die UI-Toolkits sind IMHO eher Geschmackssache. Ich hatte nur Qt erwähnt, weil es da einen ganz netten GUI-Builder gibt. Für Wx gibt es da glaube ich nix. GTK hat Glade, der ist aber einfacher gestrickt. Ohne guten grafischen GUI-Builder würde ich das UI dann eher mit einem Malprogramm oder speziellen Prototypisierungsprogramm entwerfen.

Stefan
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ich werde wohl erstmal mit einem Zeichenprogramm beginnen. Bei einfachen GUI-Buildern hab' ich so den Eindruck, dass man schon von vornherein in ein bestimmtes Gerüst gesteckt wird. Muss dazu aber auch sagen, dass ich noch nicht viel und eben auch nur einfachere Tools (abgesehen von Balsamiq Mockups) gesehen habe. Und ich vermute mal, dass GUI-Builder, die aufgrund großer Funktionalität auch mehr Freiheiten lassen eher außerhalb der Möglichkeiten meines Geldbeutels sind.

Ich hab' jetzt schon mal begonnen, mit OODraw erste Entwürfe zu basteln. Macht nicht wirklich Spaß, etwas umständlich, aber die Stunden, die ich damit verwende, einen passenden GUI-Builder zu finden, verwende ich einfach mal produktiv... :-)

Oder hat vielleicht jemand einen Vorschlag, mit welchem Programm sich eine GUI entwerfen lässt? Balsamiq Mockups finde ich ganz Klasse, kostet allerdings 130 €... :-(

Liebe Grüße
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nun es gibt ``Pencil`` fuer Firefox. Qt Designer kann man auch verwenden, wenn es denn um Mockups geht, IMHO ist die Doku zu Qt/PyQt auch sehr gut - allerdings kenne ich wxPython in Action nicht - aber sowohl die Qt Dokumentation als auch das PyQt Buch sind gut zu benutzen.

Google sagt mir aber auch, dass es wxGlade gibt.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Die Trennung von Bedienung und Daten ist grundsätzlich keine schlechte Idee, aber MVC & co sind, wie schon erwähnt wurde, in vielen Fällen mit Kanonen auf Spatzen geschossen.

von der Vorgehensweise würde ich mit den Daten anfangen. Dabei würde ich eine Eigenschaft von Python nutzen, nämlich die Möglichkeit, dass man Module einzeln testen kann.

Mit der Zeile

Code: Alles auswählen

if __name__ == "__main__":
    #Python Testcode
kann man jedes Modul unabhängig vom Hauptprogramm testen. Ich würde hier entweder ein einfaches Konsoleninterface oder vielleicht sogar eine rudimentäre GUI implementieren, die nichts anderes machen, als die Funktionen des Moduls zu testen.

Man nennt das im übrigen "Bottom Up" oder "Top Down" Development. Top Down wäre z.B. das Visual Studio. Du malst die Oberfläche und versiehst die mit Funktionalität. Beides hat Vor- und Nachteile. Ich bevorzuge Bottom Up. In Visual Studio und Delphi bin ich immer auf die Nase gefallen, weil GUI und Logik immer zu stark verwoben waren, wenn ich fertig war. Das liegt aber nicht grundsätzlich am Werkzeug sondern an der Verlockung, erstmal mit dem anzufangen, was Spaß macht.
BlackJack

@mutetella: Ich persönlich würde von unten Anfangen und mich zur GUI hocharbeiten. Andererseits würde ich nachdem die Planung der Features steht, mit "Milestones" arbeiten, also nicht erst alle Grundlagen und dann die GUI für das komplette Programm implementieren, sondern vielleicht erst einmal nur eine ganz einfache Kalenderanzeige mit der Möglichkeit ganz einfach Termine für einen ganzen Tag anzuzeigen. Und dann kann man sich das nächste kleine Ziel stecken und dass dann auch wieder von "unten nach oben" in das Programm einziehen.

Oder von oben nach unten. Das ist letztendlich auch ein bisschen Geschmackssache.

Die GUI muss zur Anzeige die Programmlogik befragen, welche Termine an einem bestimmten Tag sind. Wie die Programmlogik das beantwortet und die Datenhaltung darunter läuft, sind halt die spannenden Fragen. Bei einfachen Terminen, wo einfach nur ein Datum an einen Tag gebunden ist, könnte man eine Abbildung Datum->Termin verwenden. Bei Terminen, die als Zeitspanne über mehrere Tage und/oder als sich regelmässig wiederholende Termine angelegt sind, muss man sich dann etwas schlaueres ausdenken. Universell wäre es wahrscheinlich, wenn die Programmlogik als Datentyp Zeitintervalle kennen würde und zum Beispiel eine Operation darauf, ob sich zwei Zeitintervalle überlappen oder nicht.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Gerade für wxPython gibt es eine umfangreiche WIKI. Und es wurden auch schon Seiten erstellt darüber:

http://wiki.wxpython.org/ModelViewController

http://wiki.wxpython.org/ModelViewPresenter

Mir ist immer lieber, wenn etwas an einem konkreten Beispiel gezeigt wird. Im Gegensatz zu dicken Büchern wie Pattern, ... wo meist eh nur abstraktes bla bla drinnenesteht.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Zur ursprünglichen Frage:
So etwas gibt es schon, und direkt in wxPyhton:

Frank Niesink's http://www.taskcoach.org/

Soweit ich gesehen habe, ist das Programm vorbildlich geschrieben, sowohl vom Source Code als auch von der UI selbst.

Du kannst das verwenden, das als Ausgangsbasis hernehmen oder einfach für Lernzwecke verwenden.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo mutetella,

> ... auf wxpyhton in action "angewiesen" ...

das sehe ich ganz und gar nicht ganz so :)
Das Buch ist eine kompatke Form, ja; ich habe es selbst auch damals gleich bestellt

Aber:
a) es steht sicher nicht alles drinnen
b) ist es aus dem Jahr 2006 IIRC, und somit sicher nicht mehr ganz aktuell

Die wichtigsten Infoquellen sind sicher die wxPython mailing list (jetzt in google Groups), die wxPython Wiki, Pycrust zum ausprobieren (hat eine Code Completion, hat einen hochinteressanten Inspector (ansehen der Klassenhierarchie eines Programms; alles in wxPython selbst implementiert), experimentieren und testen von Codesnipptes und natürlich die tolle Demo, die seinesgleichen sucht...

Du kannst auch eine oder mehrere der vielen Editoren verwenden oder testen, die selbst in wxPy geschrieben sind (Editra, DrPython, pype, Stanis SPE, Ulipad, ActiveGrid (wenns noch aktuell ist, PyAlaCarte, ,...)

Und lade dir einfach viele wxpython programme herunter, entpacke sie auf deiner Festplatte und schau dir die Programme an und den code. Das hat mir schon oft geholfen.

Als Hilfe zur Erstellung von Guis gibt es XRC (obwohl ich das eigentlich nie selbst verwendet habe; ist aber Geschmacksache, ob man so etwas grundsätzlich verwenden möchte) und wxGlade! (wie glade für gtk).

Eine Liste (wo ich damals auch mitgeholfen habe) ist in:
http://wiki.wxpython.org/wxPythonPit%20Apps

und es gibt auch viele zusätzliches Libs (vor allem von Andrea Gavana):
http://wiki.wxpython.org/wxPythonPit%20Libs

Am besten die mailing list durchsuchen, wenn etwas unklar ist, oder Robin Dunn selbst fragen. Er ist wirklich sehr sehr kompetent und höflich... ;)

Du siehst, wxPython bietet eine Menge Hilfe und Möglichkeiten an... ;)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

WOW....

Vielen Dank schon mal für die vielen Infos, echt gut!

@francesco:
Du hast Recht, 'wxPython in Action' ist sicherlich nicht alles, aber in meinen Augen ein hervorragender Einstieg in die Materie.
Die vielen Beispiele von Dir sind toll, wie Du ja auch schon sagtest, es hilft ungemein, wenn man einfach mal ein Codebeispiel hat und sieht, wie das eine oder andere gelöst werden kann.
'Taskcoach' wird mich sicherlich noch lange beschäftigen...!!

Jedenfalls Danke, Eure Hilfe hier im Forum hat mir schon sehr sehr geholfen!

Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Bitte, bitte :)
Im Demo kannst du auch die Beispiele direkt ändern => saved modified => und dann ansehen, wie sich deine Änderungen auswirken.

Hifreich ist auch das Programm viewdocs (wo die ganze wxWidget und wxPython Doku drin ist). Ich glaube, da gibt es einen eigenen download (neben dem demosdownload).

Ich würde mir einfach einmal die verschiednenen Sachen anschauen, dann kommt man schon drauf, was einem/r am ehesten zusagt, beim Programmieren zu helfen.

wxPython in action hat auch Herr Dunn selbst geschrieben (mit seinem CoAutor)

Taskcoach gefällt mir auch gut, auch weil eine Menge drin ist, was man evtl. selbst auch brauchen könnte. ;)
Antworten