¿Cómo documento necesariamente estructuras de código necesariamente complejas?

9

Si tengo un código que es matemáticamente o estructuralmente bastante complejo e irreductible, ¿cómo haría para documentar este código? En particular, ¿cómo puedo asegurarme de que alguien que no tenga las habilidades matemáticas o arquitectónicas que yo pueda entenderlo de la documentación? ¿Debo documentar todas las matemáticas también? Enlace a un tutorial? ¿Alguna ayuda visual en el caso de estructuras complejas?

Ingeniero mundial
fuente
1
Obviamente, esto dependería en gran medida de si se hablaba de complejidad matemática o complejidad arquitectónica. No están documentados de la misma manera. Cual es
Edward Strange
2
relacionado: ¿Dónde debería un programador explicar la lógica extendida detrás del código? . Me gusta especialmente el enfoque de las pruebas como documento sugerido en una de las respuestas.
mosquito
1
@Gnat, por qué gracias. Creo que, en general, mi respuesta a esa pregunta también funcionaría para esta pregunta.
Mark Booth
@MarkBooth, fue su respuesta la que tuve en mente al sugerir preguntas relacionadas. Respuesta es buena en general, pero el punto sobre las pruebas de sonar una campana en especial como lo usamos una vez para una aplicación particular complicado algoritmo
mosquito

Respuestas:

8

Esto realmente depende de lo complicado que sea el código y las matemáticas. El código en sí debería, como siempre, ser tan autodocumentable como sea posible. Nombre las variables correctamente, implemente métodos lógicos y concisos (en lugar de megafunciones), agregue documentación en línea cuando sea apropiado (es decir, cuando no es obvio lo que el código está haciendo realmente).

Si está utilizando un algoritmo no obvio, agregue un enlace a una referencia de la fuente. Esta es una práctica razonable porque le brinda al desarrollador una forma muy rápida de descubrir lo que está haciendo. Como dije, esto es útil si es un algoritmo no obvio pero complejo. Esto debería probar que (a) está haciendo algo que tiene sentido, y (b) alguien ha demostrado que funciona.

Un buen ejemplo es el trabajo que hice sobre la coincidencia de texto difuso. Hice una investigación sustancial en algoritmos e implementé lo que se conoce como 'algoritmo Smith-Waterman' (que en realidad se usa para secuencias de ADN, pero se aplica al 'emparejamiento' en general). Entonces, en lugar de simplemente implementar el algoritmo, encontré referencias en línea e incluí un enlace o dos. Como se indicó anteriormente, esto demuestra que (a) mi algoritmo coincide con el algoritmo publicado, y (b) el algoritmo ha sido revisado y demostrado que funciona.

Sin embargo, esto no necesariamente explica cómo funciona el código y qué se supone que deben hacer las diferentes clases. Cuando vaya a escribir documentación 'real', una guía para desarrolladores del sistema, debe explicar lo que ha hecho y proporcionar suficiente información para el soporte futuro. En mi opinión, este documento debe ser legible por una persona técnicamente agnóstica; no necesita ser "tonto", pero debe excluir la jerga y no confiar en el conocimiento asumido.

Kirk Broadhurst
fuente
3

Los comentarios que rodean la fuente son lo primero que debe hacer. Esto asegura que haya un enlace directo a la documentación justo al lado del código. Si la documentación es muy complicada, considere publicar solo un resumen en los comentarios y luego un enlace a algún documento externo que contenga una descripción más completa de la arquitectura / algoritmo complejo. Sin embargo, si no es demasiado complicado, considere incluir toda la documentación en un solo lugar. Esto maximizará la probabilidad de que su código / documentación permanezca sincronizado y se lean juntos.

Oleksi
fuente
0

Documente el código en la medida en que su equipo / empresa lo necesite. Si un jr. Se requerirá que dev mantenga el código, es posible que tenga que entrar en detalles sobre algunas de las matemáticas. Esta es una decisión de administración y tienen que darle el tiempo necesario.

No creo que tenga que documentar tanto el código que tenga en cuenta que será reemplazado por un desarrollador menor. Si eso es una preocupación, debe tener tiempo para documentar.

No deberías tener que buscarlos en la web.

JeffO
fuente
1
"Si se requiere un desarrollador jr. Para mantener el código ..." En mi experiencia, es mejor asumir que todos los que leen sus comentarios son jr. dev. Si no lo están, no estarían leyendo sus comentarios. Incluso si no son jr. y todavía está leyendo sus comentarios, jerga y suposiciones conducen a una falta de comunicación. Finalmente ... la mayoría de los desarrolladores, como cualquier otro campo conocido por el hombre, pasan por la vida sin importarles un comino y nunca se ponen mucho mejor que "jr".
Edward Strange