Документация в коде
Самое главное - использовать средства документации в выбранной вами среде разработки, что означает pydoc для python, javadoc в java или xml комментарии в C #. Это облегчает написание документации одновременно с написанием кода.
Если вы полагаетесь на то, что вернетесь и документируете вещи позже, вы, возможно, не сможете обойти это, но если вы сделаете это, когда пишете код, то то, что нужно документировать, будет свежим в вашем уме. C # даже имеет возможность выдать предупреждение компиляции, если документация XML неполна или не соответствует реальному коду.
Тесты как документация
Другим важным аспектом является хорошая интеграция и модульные тесты.
Часто документация сосредотачивается на том, что классы и методы делают изолированно, пропуская, как они используются вместе, чтобы решить вашу проблему. Тесты часто помещают их в контекст, показывая, как они взаимодействуют друг с другом.
Точно так же модульные тесты часто явно указывают на внешние зависимости, через которые нужно что-то исключать .
Я также обнаружил, что, используя тестовую разработку, я пишу программное обеспечение, которое проще в использовании, потому что я использую его с самого начала. С хорошей структурой тестирования упрощение тестирования и упрощение использования кода - это часто одно и то же.
Документация высшего уровня
Наконец, есть что делать с системным уровнем и архитектурной документацией. Многие выступают за написание такой документации в вики или с использованием Word или другого текстового процессора, но для меня лучшее место для такой документации - рядом с кодом в простом текстовом формате, который удобен для системы контроля версий.
Как и в случае с документацией в коде, если вы храните документацию более высокого уровня в своем хранилище кода, вы, скорее всего, будете поддерживать ее в актуальном состоянии. Вы также получаете преимущество, что, когда вы извлекаете версию XY кода, вы также получаете версию XY документации. Кроме того, если вы используете дружественный к VCS формат, то это означает, что вы легко разветвляете, анализируете и объединяете вашу документацию, как и ваш код.
Мне очень нравится reStructuredText (rst) , поскольку из него легко создавать html-страницы и pdf-документы с использованием sphinx , и он намного удобнее, чем LaTeX , но все же может включать математические выражения LaTeX, когда они вам нужны.