Prima. Du hast also ein Projekt vor dir mit rund 6000 Klassen und versuchst herauszufinden wieso etwas gemacht wurde wie es gemacht wurde. Wenn nun mehrere Entwickler an einer Klasse gearbeitet haben - und ich bin mir sicher dass das bei großen Projekten nicht selten ist - dann hab ich mit der Tatsache, dass ja im SCM das ganze "wer" festgehalten wurde ein kleines Problem... Wenn die Methode in der Klasse, für die ich mich interessiere nun 2 Jahre alt ist such ich mir nen Wolf. Da wäre ein kleiner Hinweis wer's verbrochen hat schon hilfreich. Damit nicht bei jeder Methode der Autor mit dabei steht kann man ja im Kopf der Methode die Autoren aufführen. Werden ja schon keine 200 sein, so dass man die 5, die es letztendlich wirklich waren schnell abgeklappert und seine gewünschte Info eingeholt hat.
Das Subversisve Plugin für Eclipse macht das sehr gut, Revisionen mit Änderungen werden fett angezeigt, ansonsten geht das auch mit den Kommandozeilentools ziemlich einfach.
Nachteilig an der "alten" Art festzuhalten wer wann was gemacht hat ist eben dass der Quellcode so zugeüllt wird mit Meta-Infos die eigentlich schon im SCM stehen.
Nicht jede Methode hat nur eine Hand voll zeilen und sind schnell zu überschauen.
Aber jede Methode kann dazu refactored werden, und das ist genau der Punkt, wann ist Code "fertig"?
Wenn er funktioniert? Code zu schreiben der vom Compiler verstanden wird ist einfach, Code zu schreiben der vom Menschen verstanden wird ist die Kunst.
Wie gesagt, gemessen daran wie oft Code gelesen wird wird imho viel zuwenig auf die Struktur geachtet.
Klar, es ist ein gewisser mehr Aufwand Code-Kommentare up2date zu halten wenn sich etwas ändert. Aber ich bin davon überzeugt dass es das Wert ist.
Dieser Aufwand wäre beim Refactoring besser aufgehoben.
Wie die "Realität" (JUnit und Co.) aussieht ist mir persönlich dabei absolut Schnuppe.
Du hattest gefragt
Wenn ich nach 2 Jahren ein recht komplexes Codekonstrukt wieder vor mir hab, dann will ich das nicht ausschließlich anhand des Codes verstehen. An so manchen Stellen bau ich mittels Code Comments Hintergrundinformationen ein dir mir selbst helfen auch nach Jahren noch zu verstehen wieso ich das gerade so und nicht anders gemacht habe. Denn DAS geht nicht aus dem Code selbst hervor.
Wenn der Code sauber genug wäre, wären Kommentare so gut wie überflüssig, und genau das ist der Punkt.
Klarheit im Code durch Kommentare zu erreichen hat viele Nachteile, vor allem aber wird der Code selber dadurch nicht klarer.
Und wer schonmal durch den JRE Source geschaut hat, wird auch dort Kommentare zwischen den Zeilen vorfinden. Ich sag ja nicht dass jede Zeile kommentiert werden soll. Aber kategorisch Kommentare iund Infos (ja, ist noch die Rede von Kommentaren, und nicht nur JavaDoc) in nicht public Methoden zu "verteufeln", und solchen Code dann als "schlecht" hinzustellen finde ich etwas engstirnig und falsch.
Die JRE/JDK Sourcen sind auch kein gutes Beispiel, zumindest meist.
"Verteufeln" will ich es nicht, aber klarstellen das es keine "gute Sache" ist.
Klar habe ich das auch gemacht, klar habe ich auch mal private Member dokumentiert (unsinnig, vor allem der Inhalt meiner Kommentare).
Früher war es gang und gäbe so viele Kommentare wie nur möglich einzufügen, mittlerweile hat sich (vor allem in OO Sprachen) diese Einstellung geändert.
"Refactoring: Improving the Design of Existing Code" von Fowler und "Clean Code" von Robert Martin fand ich ganz gut wenn es darum geht Struktur in den Code zu bringen.