Documentazione nel codice
La cosa più importante è utilizzare le strutture di documentazione nell'ambiente di sviluppo scelto, quindi ciò significa pydoc per python, javadoc nei commenti java o xml in C #. Ciò semplifica la scrittura della documentazione contemporaneamente alla scrittura del codice.
Se fai affidamento sul tornare e documentare le cose in un secondo momento, potresti non aggirarlo, ma se lo fai mentre stai scrivendo il codice, ciò che deve essere documentato sarà fresco nella tua mente. C # ha anche la possibilità di emettere un avviso di compilazione se la documentazione XML è incompleta o incompatibile con il codice effettivo.
Test come documentazione
Un altro aspetto importante è avere una buona integrazione e unit test.
Spesso la documentazione si concentra su ciò che le classi e i metodi fanno isolatamente, saltando su come vengono utilizzati insieme per risolvere il problema. I test spesso li inseriscono nel contesto mostrando come interagiscono tra loro.
Allo stesso modo, i test unitari spesso evidenziano esplicitamente dipendenze esterne attraverso le quali le cose devono essere simulate .
Trovo anche che usando lo sviluppo Test-driven scrivo software che è più facile da usare, perché lo sto usando fin dall'inizio. Con un buon framework di test, rendere il codice più facile da testare e renderlo facile da usare sono spesso la stessa cosa.
Documentazione di livello superiore
Infine c'è cosa fare a livello di sistema e documentazione architettonica. Molti raccomanderebbero di scrivere tale documentazione in un wiki o di usare Word o altri elaboratori di testi, ma per me il posto migliore per tale documentazione è accanto al codice, in un formato di testo semplice che è compatibile con il controllo della versione.
Proprio come con la documentazione in-code, se memorizzi la tua documentazione di livello superiore nel tuo repository di codice, è più probabile che tu la tenga aggiornata. Inoltre, si ottiene il vantaggio che quando si estrae la versione XY del codice, si ottiene anche la versione XY della documentazione. Inoltre, se si utilizza un formato compatibile con VCS, significa che è facile ramificare, diffondere e unire la documentazione, proprio come il codice.
Mi piace abbastanza reStructuredText (primo) , poiché è facile produrre pagine html e documenti pdf da esso usando la sfinge , ed è molto più amichevole di LaTeX , ma può ancora includere espressioni matematiche LaTeX quando ne hai bisogno.