¿Los programadores recuerdan su propio código unos años más tarde?

Por lo general, no. Aunque algunas rutinas o algoritmos “memorables” pueden quedarse en mi cabeza durante años, la mayoría de los que escribí hace mucho tiempo y fueron tan buenos que los reutilizo en proyectos más nuevos.

La razón es que, al menos para mí, escribo el código constantemente, casi todos los días de mi vida. No creo que sea una exageración decir que he escrito cientos de miles de líneas de código en mi vida, posiblemente en los millones de líneas de código desde que comencé a codificar en 1974.

Recordar todo esto sería humanamente imposible. Es difícil incluso recordar en cualquier código de detalle que escribí hace 6 meses (si ahora estoy en un proyecto diferente al que estaba entonces). Si todavía estoy en el mismo proyecto, tiendo a poder conservar los detalles del código por más tiempo, tal vez hasta un año o dos, ya que todavía trabajo todos los días en el mismo código.

He mirado mi código anterior, como el código de 30 años, y me digo a mí mismo “¿escribí esto?”, Ya que no me resulta familiar, pero sí lo escribí.

Hace apenas unas semanas encontré un programa de “pasatiempo” que comencé a escribir en 1981 (en una cinta de cassette, nada menos), pero no lo terminé. Definitivamente recuerdo haber comenzado a codificar este programa, pero no recordé ninguno de los detalles del código. Limpié el polvo de mi vieja computadora (una computadora antigua con Z80 de finales de los 70), estudié detalladamente mi “código antiguo” para volver a aprender lo que ya había hecho, y desde entonces he estado trabajando para finalmente terminar ese programa. Pero tuve que estudiar el viejo código con gran detalle para recuperar el conocimiento de lo que había hecho anteriormente, y por qué, antes de poder comenzar a trabajar en él nuevamente.

Si no fuera bueno para poner muchos comentarios significativos en mi código, lo que siempre he hecho, sería extremadamente difícil entender mi propio código “antiguo”. Son sobre todo los comentarios que me recuerdan lo que había hecho.

La respuesta es NO, no en un nivel útil de detalle, y el “tiempo de olvidar” (en mi experiencia) es generalmente un poco menos que “unos pocos años”.

De hecho, muchos (si no la mayoría) de los programadores que han producido gran cantidad de código para productos que son grandes y de larga duración han tenido la humilde experiencia de observar un código ridículo y difícil de seguir, acompañado de comentarios que completan pierda el punto y piense: “¿Qué idiota escribió esta mierda?”, solo para encontrar su propio nombre en la lista como el creador de ese punto de venta particular …

Puedo dar fe de que solo se necesitan una o dos de esas experiencias, antes de que uno elija adoptar el estilo de codificación más simple y humilde posible. En particular, los buenos comentarios que responden a las preguntas mentales del mantenedor de “años más tarde” son siempre un desafío serio. Honestamente, trato de “leer la mente” del chico que lo visitará más tarde, y le doy un contexto, pasos antes y pasos para venir más tarde, en comentarios aquí y ahora. Muy a menudo, ese chico de “años más tarde” resulta ser tú mismo, y muy a menudo tus propios comentarios no ayudan a ese chico tanto como podrían haberlo hecho.

Trate de evitar explicar por qué elige una forma particular de hacer algo, y en lugar de eso, trate de proporcionar un contexto de por qué hacer lo que hace este código es necesario en el propósito más amplio de todo el sistema.

Pregunta original:

¿Los programadores recuerdan su propio código unos años más tarde?

Recuerdo el código que escribí en el pasado, aunque no todo, y definitivamente no línea por línea. En general, recuerdo el código que escribí que resolvió un problema interesante (para mí, en ese momento).

Un ejemplo es un cálculo de distancia que escribí una vez en Perl (hace mucho tiempo). Tenía que encontrar una forma de evitar hacer cientos de cálculos de gran distancia de círculo en cada solicitud, y pude resolverlo rápidamente.

Otra vez tuve que implementar un proceso ETL extremadamente complejo y altamente configurable, pero se me restringió el uso de herramientas ETL de terceros diseñadas específicamente para este propósito. Todo tenía que hacerse en C ++. Después de comprar algunos libros sobre programación ODBC en C, pude eliminarlo bastante rápido.

Ha habido muchos otros proyectos, algunos menos interesantes, otros más interesantes. Probablemente la única cosa que realmente se destaca es cuando aprendo algo nuevo: un nuevo algoritmo, un patrón de diseño más eficiente, una nueva forma de ver un problema. Tiendo a recordar esos proyectos lo mejor.

Depende de lo que quieras decir con “recordar”.

Si te refieres a recordar palabra por palabra lo que escribí, entonces no.

Si te refieres a recordar una forma fresca o nueva en la que resolví un cierto problema, entonces seguramente, al menos por la mitad de los problemas, resolví. Puedo recordar cómo resolví varios problemas que encontré hace 8 años. Recuerdo haber comprado un libro en Ubuntu porque tenía una solución para un tema en particular en el que estaba trabajando.

Si quiere decir que reconocería mi propio código palabra por palabra si lo viera o tuviera la misma sensación intuitiva (casi como memoria muscular), entonces, por experiencia, generalmente supongo que aproximadamente el 50% de esa memoria ha desaparecido o es amable de divididos después de 7-9 meses, y el 85% desapareció después de más de 5 años.

Lo que recordamos es la sintaxis familiar utilizada de manera consistente (con suerte ) en los proyectos. Cuando regrese y quiera actualizar algo, tomemos un sitio web viejo por simplicidad.

Si vuelvo a algo como eso de hace unos años, y con el propósito de hacer entender mi punto, el sitio web está usando PHP ( lo que muy probablemente sería un trabajo muy desactualizado ), no me preocuparé por tener que Pasé mucho tiempo tratando de averiguar qué demonios estaba pensando. ¿Por qué? Porque estoy seguro de usar buenos estándares y prácticas que siempre me han funcionado.

Lo que los programadores fuertes recordarán es la estructura con la que se implementa el código.

Incluso podrías ser la persona más inclinada a OCD como yo, donde físicamente no puedo dejar las cosas completas si parece que falta una abrazadera de apertura, es “compañero” ( llave de cierre ).

Sé muy a menudo que no porque soy tan particular en cuanto a las convenciones de espaciado, las convenciones de nomenclatura de variables, cuándo usar varios bucles o conmutadores, poder reintroducirme rápidamente en un proyecto será esencialmente atemporal. No te preocupes por los efectos de cluster de ser perezoso para este tipo, porque mi mente no lo permite.

Depende del proyecto.

Tiendo a recordar los proyectos más grandes y si me pusieras delante del código que escribí hace 2–3 años, probablemente me llevaría solo unos días recordar de nuevo dónde estaba (en general) y ser productivo otra vez.

Más importante que los detalles específicos del proyecto, lo que recordamos son los métodos que utilizamos para crearlo, tanto los buenos como los malos. No puedo decir cuántas veces he planteado problemas con mi propio código desde hace años durante las reuniones sobre mi último proyecto. Recordar cómo pensaste que tenías la respuesta, pero en realidad te estalló en la cara es una lección importante.

Dicho esto, no me llames dos años después y pregúntame por qué tu widget está explotando. Primero, puede que no haya sabido por qué explotó incluso dos minutos después de que dejé tu trabajo y, segundo, no tengo idea de lo que hiciste con el código desde que me fui.

¡Muchas respuestas geniales!

Recuerdo un fragmento de código antiguo de hace 26 años, pero solo con nostalgia, debido a todo lo demás en el momento y el significado de lo que hizo esa pequeña cosa. Aparte de eso, apoyo el 100% de lo que todos aquí han dicho.

Los programadores de COBOL nunca pensaron que su código sería usado por más de unos pocos años. Y2K se convirtió en una mina de oro no anticipada para ellos. Esta creencia es la misma para mí y no era uno de ellos (programadores COBOL). Las mejores herramientas y los métodos más eficientes con herramientas probadas y verdaderas (C / c ++, etc.) cambian demasiado rápido para que usted se moleste en dejar que las viejas soluciones se acerquen a su mente y les permita dominar sus intentos actuales de encontrar soluciones.

Si eres bueno, ahí es donde se concentran tus energías.

Casi todo mi código, con mucho gusto lo olvidé. Y ni siquiera soy bueno.

A2A .

Tengo que tener cuidado al responder a esta …

Tiendo a recordar al menos la estructura general del software que escribo años más tarde; hay algún software que podría escribir bastante literalmente desde la memoria, tal vez con cambios en el espaciado y los comentarios, ya que el estilo aceptado ha evolucionado a lo largo de los años.

Soy bastante escrupuloso para evitar el desangramiento de la propiedad intelectual entre un empleador y otro. Estaré encantado de capturar cualquier cosa que haya hecho que sea de código abierto y aplicable, siempre que la licencia sea compatible y que la empresa esté de acuerdo en que yo la tome.

Si vale la pena recordarlo entonces sí. Todavía tengo programas que escribí en VB5 en High School (2000). Los fragmentos que recuerdo más fuera de los productivos son los que generalmente fueron difíciles de depurar.

Lo dudo seriamente, a menos que un programador tenga una memoria eidética como el Dr. Spencer Reid en Criminal Minds .

Por supuesto, cuando era mucho más joven, podía jugar un fabuloso juego de ajedrez y recordar todos los movimientos en el juego años más tarde. No puedo hacer eso ahora; La edad lo pasa factura.

Para mí, a veces lo hago, a veces no lo hago.

Es una de las razones por las que he tomado en contra de los lenguajes dinámicos, porque sin comentarios para decir cuáles son los tipos * pueden ser muy difíciles de leer si no tienes una idea en tu cabeza.

Algunos proyectos duran mucho tiempo, hice un sitio web en Perl que funcionó desde 2001 hasta el año pasado, y un proyecto en Python que duró un tiempo similar. Entonces, si miro el código que escribí hace 15 años, probablemente no voy a recordar todo eso.

* Sí, podría comentar qué tipos son las cosas, pero ¿cuál es el punto si su idioma lo hace por usted con tipos estáticos declarados explícitamente?

No recuerdo que escribí ayer. Ni siquiera trato de recordar, a menos que sea muy importante. Pero incluso entonces solo recuerdo unas pocas docenas de líneas de código.

Encontré un artículo que dice que el programador puede recordar un promedio de 70–80 líneas de código.

A veces, cuando las cicatrices emocionales son profundas, recuerdo que “hey, hice algo como esto antes. Me pregunto si puedo encontrarlo en Git / Subversion / esa carpeta de archivo de cosas de mi estación de trabajo 1999 ”

Pero más de una vez he buscado en Google una solución y he estado leyendo una respuesta de desbordamiento de pila: “sí, esta es una gran solución” y me sorprendió ver que la escribí hace seis meses.

Muy a menudo, un programador dirá “¿Quién demonios escribió esta mierda?”

“Oh, era yo”.