"Guter Code" und fortgeschrittene Tutorials

Martin240

Grünschnabel
Hallo.

Ich würde von mir behaupten, dass meine Kenntnisse im Bereich Programmierung mitlerweile schon recht fortgeschritten sind, aber wenn ich ein Programm umsetze stellt sich mir immer wieder die Frage "Ist das guter Code?" oder "Geht das eventuell auch besser?".

Deshalb bin ich auf der Suche nach "gutem Code". Am liebsten wäre es mir in Form von Aufgaben, die man umsetzen soll und dann mit einer schönen Lösung vergleichen kann. Alternativ wäre es natürlich auch schon gut einfach mal Code von anderen Leuten zu sehen, die einen guten Programmierstil haben. Gerne auch größere Programme in die man sich auch mal einarbeiten muss.

Eine andere Frage die sich dabei stellt ist natürlich, wie sieht guter Code allgemein aus? Kann man das definieren? Design-Pattern und Anti-Patterns sind mir geläufig, aber reicht das um guten Code zu schreiben?

Ansonsten bin ich auch auf der Suche nach fortgeschrittenen Tutorials, gehört ja mehr oder weniger zu dem Thema dazu. Im Netz hatte ich da weniger Glück, da man fast nur Anfängertutorials oder absoluten Mist findet bei dem ich mir teilweise echt an den Kopf fassen muss :D Ich bin also für alle Vorschläge offen :)

Grüße
Martin
 
hallo Martin,

ich würde dir raten, dich ein bisschen weiter in Richtung Refactoring und Unit-Tests umzuschauen.
Refactoring, um es dir zu erleichtern auch nicht so perfekten Code zu schreiben und dann nachzubessern.
Und automatisierte Unit-Tests um das auch mit einem Gefühl der Sicherheit tun zu können.
Auch wenn durch Unit-Tests keine absolute Sicherheit garantiert werden kann.

Als Buch kann ich dir dann z.B.: Martin Fowler: Refactoring (Addison-Wesley) empfehlen.

hier ist dann noch eine Liste mit Unit-Test-Frameworks:
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks

mfg Werner
 
Hallo.

Danke schonmal für die Antworten. Auf die Von Kopf bis Fuß Bücher bin ich gestern Abend beim stöbern auch noch gekommen. Sie haben auch gute Bewertungen und wären da auf jeden Fall schonmal im engeren Kreis. Ich finde es allerdings eine Frechheit, dass die für die deutsche Übersetzung 20 Euro mehr haben wollen als für das Original, es würde da also auf die englische Version hinauslaufen.

Mit Unit Testing habe ich auch schon gearbeitet, namentlich JUnit. Allerdings finde ich man muss vorher schon sehr viel planen, um so ein mächtiges Werkzeug richtig sinnvoll einsetzen zu können. Für den kleinen privaten Gebrauch meiner Meinung nach ziemlich viel Overhead. Ich ändere und teste meine Klassen in der Regel nicht so oft, als dass sich das im großen Stile lohnen würde.

Refactoring ist allerdings ein guter Stichpunkt. Damit wollte ich mich auch noch etwas näher auseinandersetzen. Da werde ich bei Gelegenheit auch noch reinschauen.

Weitere Vorschläge und Empfehlungen sind gern gesehen, ziert euch nicht so :)

Grüße
 
heise developer hat eine Reihe von Büchern vorgestellt, die zum Thema passen. Insbesondere "Clean Code" von Robert C. Martin fand ich sehr gut gemacht:
http://www.heise.de/developer/artikel/Clean-Code-1137811.html

Allerdings ist das keine Lektüre für den Nachttisch- wenn du wirklich was daraus lernen willst, musst du dich wirklich intensiv damit auseinandersetzen. Das schreibt der Autor schon im Vorwort - und er hat Recht. Aber es lohnt sich!
Zum Thema Englisch: Die Originalliteratur ist meistens deutlich angenehmer zu lesen als das deutsche Pendant. "Übersetzungen" wie "fauler Initialisierung" verwirren mich eher, als das sie mir helfen... ;)

Ich ändere und teste meine Klassen in der Regel nicht so oft

Und gerade, wenn du deine Klassen nicht so häufig änderst, wirst du froh sein, Tests zu haben, wenn du sie eines Tages (nach Wochen, Monaten oder gar Jahren) doch einmal ändern musst - glaub mir :)
 
Ich muss in Sachen Unit-Testing widersprechen, denn wenn du sagst, dass es dir zwar geläufig ist, du dich als fortgeschritten einstufst und gleich darauf dann schreibst, dass du es kaum einsetzt, dann empfehle ich dir genau das, nämlich für den Anfang deine Klassen mittels JUnit abzutesten. Das ist mittlerweile Gang und Gebe in Firmen und meiner Meinung nach absolut sinnvoll.

Unit-Testen ist per se erst Mal nicht komplex - schreibe erst Mal simple Tests die den "Main-Flow" bzw. alle Methoden abtesten, später kannst du dich dann mit Testen von Boundaries und Exceptions befassen. Generell sollte man also erst Mal Testen beherrschen und dann lernen wann es sinnvoll ist ein Test zu schreiben. Getter- und Setter einer Backing Bean zu testen ist z.B. ein offensichtlicher Fall wo Tests nur unnötig Zeit kosten (sofern man diese Tests nicht generiert).

Bist du damit erst Mal recht firm, stößt du auf Fälle, wo deine Klasse plötzlich Abhängigkeiten hat die du eigentlich gar nicht mit testen möchtest. Dann kommt das Thema Mocking ins Spiel. Dann geht es weiter in Richtung Continious Integration, immer sinnvoll wo viele Köche den Brei verderben könnten... usw.

Fazit: Testen ist immer sinnvoll, aber ich gebe dir natürlich Recht - es ist unsinnig für ein kleines Tool mit beschränktem Funktionsumfang Tests zu schreiben. Zu Lernzwecken und sobald die Software wachsen wird absolut sinnig.

Gruß
 
Zurück