Wie dokumentiere ich notwendigerweise komplexe Codestrukturen?

9

Wenn ich einen Code habe, der mathematisch oder strukturell recht komplex und irreduzibel ist, wie würde ich diesen Code dokumentieren? Wie kann ich insbesondere sicherstellen, dass jemand, der möglicherweise nicht über die mathematischen oder architektonischen Fähigkeiten verfügt, die ich habe, dies anhand der Dokumentation verstehen kann? Soll ich auch die ganze Mathematik dokumentieren? Link zu einem Tutorial? Verknüpfung mit visuellen Hilfsmitteln bei komplexen Strukturen?

Weltingenieur
quelle
1
Dies würde offensichtlich sehr davon abhängen, ob es sich um mathematische oder architektonische Komplexität handelt. Sie sind überhaupt nicht auf die gleiche Weise dokumentiert. Welches ist es?
Edward Strange
2
Verwandte: Wo sollte ein Programmierer die erweiterte Logik hinter dem Code erklären? . Besonders gut gefällt mir der in einer der Antworten vorgeschlagene Test-as-a-Doc-Ansatz.
Mücke
1
@ Gnat, warum danke. Ich denke, dass meine Antwort auf diese Frage insgesamt auch für diese Frage funktionieren würde.
Mark Booth
@ MarkBooth richtig, es war hauptsächlich Ihre Antwort, die ich im Sinn hatte, als ich eine verwandte Frage vorschlug. Die Antwort ist im Allgemeinen gut, aber der Punkt über Tests hat besonders geklingelt, da ich ihn einmal für eine besonders komplizierte Algorithmusimplementierung verwendet habe
Mücke

Antworten:

8

Dies hängt wirklich davon ab, wie kompliziert der Code und die Mathematik sind. Der Code selbst sollte - wie immer - so selbstdokumentierend wie möglich sein. Benennen Sie Variablen korrekt, implementieren Sie logische und präzise Methoden (anstelle von Megafunktionen) und fügen Sie gegebenenfalls eine Inline-Dokumentation hinzu (dh wenn nicht klar ist, was der Code tatsächlich tut).

Wenn Sie einen nicht offensichtlichen Algorithmus verwenden, fügen Sie einen Link zu einer Referenz hinzu, die die Quelle ist. Dies ist eine vernünftige Vorgehensweise, da der Entwickler auf diese Weise sehr schnell herausfinden kann, was Sie tun. Wie gesagt, dies ist nützlich, wenn es sich um einen nicht offensichtlichen, aber komplexen Algorithmus handelt. Dies sollte beweisen, dass (a) Sie etwas tun, das Sinn macht, und (b) jemand gezeigt hat, dass es funktioniert.

Ein gutes Beispiel ist eine Arbeit, die ich zum Fuzzy-Text-Matching gemacht habe. Ich habe mich intensiv mit Algorithmen befasst und den sogenannten "Smith-Waterman-Algorithmus" implementiert (der eigentlich für DNA-Sequenzen verwendet wird, aber allgemein für "Matching" gilt). Anstatt den Algorithmus einfach zu implementieren, habe ich online Referenzen gefunden und ein oder zwei Links eingefügt. Wie oben zeigt dies, dass (a) mein Algorithmus mit dem veröffentlichten Algorithmus übereinstimmt und (b) der Algorithmus überprüft wurde und funktioniert.

Dies erklärt jedoch nicht unbedingt, wie der Code funktioniert und was die verschiedenen Klassen tun sollen. Wenn Sie eine "echte" Dokumentation schreiben - eine Entwickleranleitung für das System - sollten Sie erklären, was Sie getan haben, und genügend Informationen für die zukünftige Unterstützung bereitstellen. Meiner Meinung nach sollte dieses Dokument von einer technisch agnostischen Person gelesen werden können. es muss nicht "niedergeschlagen" werden, aber es sollte Jargon ausschließen und sich nicht auf angenommenes Wissen verlassen.

Kirk Broadhurst
quelle
3

Kommentare rund um die Quelle sind das erste, was Sie tun sollten. Dies stellt sicher, dass direkt neben dem Code ein direkter Link zur Dokumentation besteht. Wenn die Dokumentation sehr kompliziert ist, sollten Sie nur eine Zusammenfassung in Kommentaren und dann einen Link zu einem externen Dokument veröffentlichen, das eine vollständigere Beschreibung der Architektur / des komplexen Algorithmus enthält. Wenn es jedoch nicht zu kompliziert ist, sollten Sie die gesamte Dokumentation an einem Ort zusammenfassen. Dies maximiert die Wahrscheinlichkeit, dass Ihr Code / Ihre Dokumentation synchron bleibt und zusammen gelesen wird.

Oleksi
quelle
0

Dokumentieren Sie den Code in dem Umfang, in dem Ihr Team / Unternehmen ihn benötigt. Wenn ein jr. dev wird benötigt, um den Code zu pflegen. Möglicherweise müssen Sie einige Details der Mathematik näher erläutern. Dies ist eine Managemententscheidung und sie müssen Ihnen die notwendige Zeit geben.

Ich denke nicht, dass Sie den Code so sehr dokumentieren müssen, dass Sie dafür verantwortlich sind, von einem geringeren Entwickler ersetzt zu werden. Wenn dies ein Problem darstellt, müssen Sie Zeit zum Dokumentieren haben.

Sie sollten nicht die Websuche nach ihnen durchführen müssen.

JeffO
quelle
1
"Wenn ein jr. Dev benötigt wird, um den Code zu pflegen ..." Nach meiner Erfahrung ist es besser anzunehmen, dass jeder, der Ihre Kommentare liest, ein jr ist. dev. Wenn nicht, würden sie Ihre Kommentare nicht lesen. Auch wenn sie nicht jr sind. und lesen immer noch Ihre Kommentare, Fachsprache und Annahmen führen zu Missverständnissen. Schließlich ... kommen die meisten Entwickler, wie jedes andere dem Menschen bekannte Gebiet, durch das Leben, ohne sich wirklich darum zu kümmern, und werden nie wirklich viel besser als "jr".
Edward Strange