Wie schreibt man seine Projekte übersichtlich?

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.
Antworten
ll9
User
Beiträge: 34
Registriert: Samstag 9. Februar 2013, 15:13

Hallo,

ich merke immer häufiger, dass ich meine Python Projekte häufig leider nicht ganz zu Ende bringe und lieber ein neues Projekt anfange (mit der Hoffnung, dass es da besser wird), weil ich die übersicht bei meinen eigenen Code verliere. Vor allem jetzt, wo ich nurnoch an Wochenenden Programmieren kann. Wo/ Wie kann man es denn lernen übersichtlich zu schreiben. Gibt es für sowas speziell Tutorials? Ich hab auch vor kurzem mit Tkinter/ ttk angefangen und dort weiß ich auch nicht, wie ich das am besten strukturiere. Wie habt ihr das denn gelernt euren Code besser zu strukturieren?

Würde mich über antworten freuen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Woran liegt es denn, dass Du die Übersicht verlierst? Schaue Dir Deine unübersichtlichen Codes an und suche Dir Beispiele, also Code-Stellen, bei Denen Du nicht mehr weißt, was sie tun. Dann überlege Dir, woran es liegt, dass Du das nicht mehr weißt.

Du kannst solche Schnipsel hier auch gerne Posten. Dazu solltest Du schreiben, was Du nicht mehr verstehst.

Ich wette, wir finden so die Ursachen heraus. (Eigentlich sind das immer die selben; aber ich finde es besser, wenn der Fragende selber drauf kommt, als wenn wir Dir das hier nur vorkauen! Also musst Du selber jetzt ein wenig "arbeiten" :-) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ll9
User
Beiträge: 34
Registriert: Samstag 9. Februar 2013, 15:13

Hyperion hat geschrieben:Woran liegt es denn, dass Du die Übersicht verlierst? Schaue Dir Deine unübersichtlichen Codes an und suche Dir Beispiele, also Code-Stellen, bei Denen Du nicht mehr weißt, was sie tun. Dann überlege Dir, woran es liegt, dass Du das nicht mehr weißt.

Du kannst solche Schnipsel hier auch gerne Posten. Dazu solltest Du schreiben, was Du nicht mehr verstehst.

Ich wette, wir finden so die Ursachen heraus. (Eigentlich sind das immer die selben; aber ich finde es besser, wenn der Fragende selber drauf kommt, als wenn wir Dir das hier nur vorkauen! Also musst Du selber jetzt ein wenig "arbeiten" :-) )
Ich verliere die Übersicht meist erst, wenn der Code lang wird und ich schon recht viel geschrieben habe. Ich habe dabei auch eher auf funktionen Gesetzt, da ich mir zumindest dachte, dass Klassen bei mir nicht so viel Sinn machen.
BlackJack

@ll9: Das mit den Funktionen sollte grundsätzlich erst einmal nicht so viel ausmachen, sofern der Code sinnvoll aufgeteilt und strukturiert ist. Dann bleibt die Frage wie Du die Daten organisiert hast. Also zumindest mir geht es so, dass ich anfange den Überblick zu verlieren wenn es um Datenstrukturen aus generischen Containerobjekten geht, die mehr als drei Ebenen tief verschachtelt sind. Und man sollte solchen Code nicht voller ”magischer Zahlen” haben, also Indizes die irgendeine Bedeutung haben, die man letztlich auswending lernen, oder ständig nachschauen muss, um den Code zu verstehen.

Bei GUIs kann ich mir nicht vorstellen wie man da ein auch nur etwas grösseres Programm oder ein Fenster mit einem Eingabefelt und einer Schaltfläche ohne objektorientierte Programmierung (OOP) realisieren kann. Wenn man sich wirklich Mühe gibt, kann man das in Python vielleicht auch funktional sauber lösen mit `functools.partial()` und Closures und ``nonlocal`` (was ich noch *nie* benutzt habe). Das würde sich IMHO aber falsch, beziehungsweise wie zweite Wahl anfühlen, weil der offensichtliche Weg in Python hier einfach Klassen sind.

Wenn die Funktionen vernünftig strukturiert sind, und es bei grösseren Programmen anfängt unübersichtlich zu werden, dann sind jetzt Klassen vielleicht der nächste Schritt. Objektorientierte Programmierung zu lernen hat auch Einfluss auf den Code ohne Klassen. Nachdem ich das Konzept gelernt hatte, hat sich teilweise auch die Art wie ich Code und Daten in anderen Programmiersprachen organisiere, beispielsweise in C, verändert.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

ll9 hat geschrieben:Ich verliere die Übersicht meist erst, wenn der Code lang wird und ich schon recht viel geschrieben habe.
Das ist jetzt nicht wahnsinnig überraschend, dass die Übersicht erst bei längeren Quelltexten verloren gehen kann. Versuche doch mal anhand von 1-2 Beispielen zu beschreiben, welche hässlichen Merkmale es sind, die den Code bei dir letztlich so schlecht lesbar machen.
ll9 hat geschrieben:Ich habe dabei auch eher auf funktionen Gesetzt, da ich mir zumindest dachte, dass Klassen bei mir nicht so viel Sinn machen.
Das kommt sehr auf den Anwendungsfall an. Ich lebe z.B. ganz gut mit einer Mischung aus Funktionen und Klassen. Ich finde Klassen prima als weitere Ebene für die Zusammenfassung von "thematisch" gleichartiger Funktionalität, für die ein eigenes Modul "too much" wäre. Allerdings sollte man bedenken, dass bei der Verwendung von Klassen sinnvollerweise auch Gebrauch von Instanzattributen gemacht werden sollte (``self``), was ein bißchen Übung erfordert. Zum Einsatz kommen diese Instanzattribute bei mir in aller Regel dann, wenn ich sie andernfalls als Parameter zwischen den Funktionen hin- und herreichen würde und für Konfigurationszwecke der Klasseninstanz, die sich entsprechend auf das Verhalten ihrer Methoden auswirken (z.B. durch True/False, Zahlwerte für bestimmte Optionen, etc). Das Konfigurationszeug übergebe ich größtenteils schon bei der Erzeugung der Klasseninstanz (``__init__``) und die Methoden fragen es wie gesagt dann bei Bedarf via ``self.blablupp`` ab. Meiner Meinung nach kann sich allein sowas schon positiv auf die Lesbarkeit und Übersicht des Programmcodes auswirken.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Anzufügen wär noch, dass du auch Module erstellen kannst, welche dann dein Hauptprogramm nutzt. Dadurch erhälst du auch noch einen Übersichtsbonus durch den Modulnamen im Hauptprogramm.
Oder du testest mal einen anderen Editor. Welcher dich durch alle Klassen, Funktionen wechseln lässt und/oder diese übersichtlich anzeigt z.B. in Form eines Baums mit ggf. Beschreibungsanzeige bei Mausübergang.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dami123 hat geschrieben:Oder du testest mal einen anderen Editor. Welcher dich durch alle Klassen, Funktionen wechseln lässt und/oder diese übersichtlich anzeigt z.B. in Form eines Baums mit ggf. Beschreibungsanzeige bei Mausübergang.
In aller Regel ist wenn man in Python solchen Support von einem Editor benötigt eh schon was gehörig schief gelaufen, somit wird man die Überforderung nur etwas aufschieben können, aber nicht aufhalten können. Dazu muss man den Code sehr warscheinlich besser Strukturieren, aber welche Fehler der OP gemacht hat lässt sich mangels Code nicht sagen und daher ist es schwer sinnvoll Tipps zu geben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

Hallo ll9,
ll9 hat geschrieben: Wo/ Wie kann man es denn lernen übersichtlich zu schreiben. Gibt es für sowas speziell Tutorials?
Es gibt zum Thema einige Bücher, z.B. ein Klassiker von Martin Fowler (Stichwort "Refactoring"). Vielleicht solltest du dich auch mal mit den Zielen der "Clean Code Devolper"-Bewegung beschäftigen - da gibt's auch einige Anregungen.
Viele Grüße
Piet Lotus
Antworten