¿Cuál es el origen del término negativo "código heredado"

28

Todos hablan sobre el código heredado en el desarrollo de software y he escuchado que el término en los últimos diez años solía pintar cualquier código base como malo.

¿Dónde se originó este término, que tiene connotaciones tan poderosas para los programadores?

Estoy seguro de que debe haber algún libro sobre desarrollo de software que sea pionero en este término. Me encantaría localizar el origen del término "código heredado".

stevebot
fuente
13
Escuché la siguiente definición de código heredado hace 20 años y la he recordado desde entonces: el código heredado es el código que tiene actualmente en producción. Ha ayudado a mi punto de vista muchas veces.
Michael Durrant
10
"Código heredado" es un término negativo? ¿Quién dice eso? De todos modos, la palabra "legado" no es específica de la programación, ni es especialmente significativa en este contexto.
Robert Harvey
55
Michael Feathers ( amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/… ) probablemente no sea el inventor de ese término, pero hizo una definición interesante: llamó al código heredado "código sin pruebas". Y eso es de hecho un atributo negativo.
Doc Brown
11
Escribe un montón de código. Regístralo. Ve a almorzar. Vamos de regreso. ¡Hay una pantalla completa llena de código heredado! Ahora debe comprender ese código y asegurarse de que todos los cambios futuros funcionen correctamente en el contexto de ese código. El código heredado es el mismo que el código existente .
Eric Lippert
44
"Legado" aquí simplemente significa que los desarrolladores originales ya no existen, y solo quedan el código y los artefactos de documentación. No se refiere a una edad o calidad de ninguna manera.
SK-logic

Respuestas:

39

El código heredado se basa en la frase de un sistema heredado que se aplica específicamente al código. Según Wikipedia, probablemente se remonta a la década de 1970 y era de uso común en la década de 1980. Despegó con la explosión tecnológica de la década de 1990.

Esto se puede ver con el visor ngram de Google: sistema heredado, código heredado

sistema y código heredado

Profundizando en esto, puede encontrar usos documentados del término 'sistema heredado' en la década de 1970 .

El primer ejemplo de 'sistema heredado' que Google tiene está en un libro sobre Actas de la Conferencia de Análisis Numérico y Computadoras del Ejército de 1978:

... una solución bien documentada y bien documentada para un problema claramente definido es que la operación del sistema heredado necesita ser entendida y cambiar el sistema existente con confianza.

También hay un ejemplo de 'sistema heredado' fuera de la industria de la tecnología en Clout: Womanpower and Politics grin 1976:

... además, ocupa un puesto como la demócrata de tercer rango en el poderoso Comité de Banca y Moneda, posiciones de poder que ha construido por su cuenta, no a través del sistema heredado.

Más allá de este ejemplo que muestra que su uso se ha extendido más allá del mundo del software puro, los detalles de dónde se originó exactamente el término probablemente se pierden en las arenas del tiempo. Dadas las referencias militares y políticas, puede haberse originado con ellos (principalmente el ejército y su migración de la jerga ( "Parece probable que 'kluge' llegó al MIT a través de antiguos alumnos de los muchos proyectos de electrónica militar que se ejecutaron en Cambridge durante la guerra (muchos en El venerable Edificio 20 del MIT, que albergaba TMRC ... " ))


fuente
Esta es una respuesta genial. Voy a seguir investigando para ver si puedo encontrar un origen, pero es probable que tengas razón en que el origen se perdió o posiblemente no se documentó.
stevebot
1
@stevebot Sugeriría seguir el camino del 'sistema heredado' en lugar del código ... ese término parece haber sido anterior al código heredado y tiene el mismo significado esencial.
66
El texto en su 'libro sobre la formación de enlaces carbono-carbono de 1979' es de un libro llamado 'Nuevas prácticas en la gestión de proyectos' y es de 2002 (publicado por primera vez en 1998). Parece que algo se confundió en el escaneo.
Pete Kirkham
1
No parece que esta sea la fuente del término negativo.
JeffO
@JeffO No, como MichaelT menciona que no es concluyente de dónde vino. Sin embargo, esta es una muy buena respuesta que muestra investigación y esfuerzo.
stevebot
5

La base de código heredada generalmente no se refiere a un sistema POS, sino a cualquier sistema que exista en una base de código o sistema que ya no se use para nuevos desarrollos. Por ejemplo, mi equipo actualmente admite algunas aplicaciones .net 1.1 y 2.0 que se consideran código heredado. Si llega un momento en que se requiere una modificación, se reescribirán o actualizarán para usar los marcos y estándares más recientes. Hasta entonces, los administramos como aplicaciones heredadas que necesitan continuar funcionando pero que no se implementan mejoras o correcciones de código.

También hay algunos sistemas heredados que no admitimos en absoluto que se escribieron en VB6 y Classic ASP. No tenemos capacidad ni directivas para admitir o modificar estos sistemas, pero mientras continúen ejecutándose y no necesiten mejoras, es probable que no se actualicen. No hay nada particularmente malo con ninguno de estos sistemas. Realizan su trabajo de la forma en que se supone que deben hacerlo y, aparte de verse como una aplicación desde mediados hasta finales de los 90, no tienen problemas importantes.

Por lo tanto, el legado no significa POS solo un sistema creado en una tecnología o lenguaje anterior que no cumple con los estándares actuales. Algunos sistemas heredados califican como POS principalmente porque carecían de las metodologías de desarrollo que existen hoy en día que permiten el código administrado y los más de 15 años de experiencia de los codificadores web veteranos.

SoylentGray
fuente
Estoy completamente de acuerdo en que los sistemas heredados no son necesariamente sistemas POS. Me pregunto cuál es el origen de la frase.
stevebot
3
@stevebot Si desea encontrar el origen del término, debe solicitarlo sin presuponer una connotación.
un CVn
2
@stevebot: un legado es todo lo que dejas atrás cuando pasas. Supongo que el descriptor se acaba de adoptar de la misma manera que se adoptó en muchos otros campos.
SoylentGray
1
@ MichaelKjörling, ¿me estás diciendo que nunca has escuchado el código heredado utilizado en sentido negativo? Esa no es mi connotación, sino la de otros que he escuchado una y otra vez en reuniones, libros y trabajos. Como dije, estoy completamente de acuerdo en que el legado no debe ser un término negativo.
stevebot
@stevebot: el código heredado solo parece 'negativo', porque solo se usa en el contexto de reemplazar o interactuar con un sistema anterior (y las dificultades del mismo). Un programa que se creó hace más de una década, pero que sigue siendo útil / relevante y tiene pocos errores, sigue siendo 'software heredado', pero todos simplemente lo llaman 'software'. Lo mismo ocurre con las bases de código.
Robotnik
3

"Código heredado" es un término utilizado por los profesionales del marketing para presionar a aquellos cuyo código es antiguo (pero presumiblemente funciona bien) para que se actualicen a los últimos lenguajes y técnicas de software más grandes (y probablemente más correctos) Está estrechamente relacionado con el "sistema heredado", que se refiere a hardware y sistemas operativos antiguos que funcionan bien pero no se ajustan a lo que ahora es "políticamente correcto" (por ejemplo, OpenVMS, sistema IBM).

JohnM
fuente
66
Si bien esto podría ser cierto, sería mejor si editara la respuesta para citar referencias específicas que respalden las afirmaciones hechas en esta respuesta. ¿Hay alguna referencia que pueda citar?
un CVn
2

El término código heredado data de al menos 1989, como lo usa Glenn Everhart en comp.sys.amiga :

(... por cierto, sí, lo hago a veces en el programa de C también ... pero me resulta más fácil de convertir el código heredado w / o cambiando su lenguaje ...)

No encontré nada verificable anteriormente en Google Books.

Hugo
fuente
Como señaló Eric Lippert, el mismo minuto después de que escribiste un código obtuviste un código heredado. Las curvas mostradas por MichaelT y su hallazgo solo visualizan el marco de tiempo, donde el aumento generalizado de TI comenzó a producir inmensas cantidades de código, involucrando a muchas personas en todo el mundo. Un poco más tarde también surgió la necesidad de reemplazar los sistemas "antiguos" por otros más nuevos, y es por eso y cuándo se convirtió en un término generalizado.
JensG
1
El antiguo código se reemplazaba constantemente, si había una buena razón para hacerlo. Solía ​​trabajar en un sistema de facturación de mainframe escrito (en PL / 1) en 1970. Reemplazó un sistema escrito en lenguaje ensamblador de mainframe (que en sí mismo era en gran medida una automatización de un sistema manual existente). El sistema PL / 1 finalmente se reemplazó después de aproximadamente 35 años de uso (un par de intentos fallidos para reemplazarlo antes de eso). Posiblemente ahora las tecnologías modernas se descarten mucho antes (y sin tener en cuenta la cantidad de reescritura del sistema patrimonial que esto pueda implicar).
Kickstart