(asumiendo el código de producción)
Tiendo a ir un poco más lejos. He escrito sobre hacer que los programas sean "a prueba de idiotas", pero no siempre califico eso: escribo mucho código que otras personas no verán ni trabajarán (al menos, eso es lo que se espera cuando se escribe). yoSoy el idiota del que estoy tratando de defenderme en ese caso. Es bueno cuando su programa detecta problemas para usted, y el problema se ha simplificado tanto que es bastante obvio que hay un error y su origen. La verdad es que los detalles de implementación son obvios cuando escribe un programa (a menos que lo esté implementando prematuramente), pero deben ser abstraídos y resistentes a errores para los clientes (incluso cuando existe la localidad del módulo). La razón es que los programas se vuelven muy complejos. A veces puedes separar los problemas, pero no todo el tiempo. Si mantiene sus componentes muy estrictos, simples, bien encapsulados y a prueba de idiotas, tienden a escalar bien y la mayoría de los defectos se detectan antes de ser enviados. Es más fácil de reutilizar, y tiene más confianza y es más fácil reutilizar los programas. Además, esos programas complejos que usted escribe solo se vuelven más complejos (incluso para usted) después de un tiempo alejado del programa. Cuando lo lees en 6 meses, puede llevar una cantidad absurda de tiempo entenderlo y depurarlo en comparación con la versión a prueba de idiotas. Si un componente introduce un cambio importante, de lo contrario puede pasar desapercibido durante mucho tiempo. Los programas son complejos; no puedes escapar de esa realidad, pero puedes hacerlo a prueba de idiotas, lo que hará tu vida mucho más fácil cuando algo salga mal o cuando deba ser reutilizado o alterado. Por lo tanto, el enfoque de prueba idiota significa que su software puede ser entendido, reutilizado o mantenido por sus juniors o personas más nuevas en el equipo también (no solo alguien tan bueno / experimentado como usted). El reemplazo es una preocupación separada: si a la gente le encanta trabajar con sus programas, está haciendo un buen trabajo, no lo haga. No te preocupes por el reemplazo. Claro, podría idear escenarios en los que los programas ininteligibles podrían salvar su trabajo, pero escribir un buen programa que otros puedan usar y mantener es claramente el mal menor (mire las respuestas de los demás). Si me encuentro escribiendo algo que no es una prueba idiota, trato de arreglarlo.
Además del escenario, donde necesita documentación para usted mismo para continuar un proyecto después de 6 meses de pausa, parece haber un claro conflicto de intereses aquí entre el desarrollador y la compañía de software.
Realmente no tienes idea de lo que estabas pensando algunas veces cuando vuelves a visitar implementaciones inactivas. Cuando tienes mucha experiencia, entonces el problema es más simple porque puedes confiar más en las metodologías o enfoques establecidos que utilizas. Eso, sin embargo, también supone que estas metodologías son invariables. Aunque la documentación puede ser laxa, aún tiene que estar a la defensiva en sus implementaciones (por ejemplo, sabe que no debe pasar NULL en este escenario: pruebe esa condición).
Entonces, como programador, ¿debería realmente escribir una excelente documentación y un código fácil de leer para todos? ¿O debería escribir el código y la documentación de manera que haga el trabajo y usted mismo pueda entenderlo, pero otra persona puede tener problemas para entenderlo?
Recomiendo el enfoque a prueba de idiotas, que es aún más claro y resistente a los errores que el enfoque de factor de bus. Escriba sus programas y documentación de manera que alguien externo al proyecto pueda entenderlo fácilmente; también es bueno para usted. Si lo hace, aumentará su valor para su empresa y equipo, no querrán reemplazarlo.