2011-01-20

Reescribir el código de un proyecto, ¿una buena idea?

Es una práctica más habitual de lo que creemos: se llega a un punto del proyecto, se está muy insatisfecho con la solución implantada y se decide hacer una nueva, empezando de cero.
Ya hace algún tiempo Joel Spolsky nos prevenía contra esta práctica, en Things You Should Never Do, Part I y tenía bastante razón.

En A total rewrite: costly, time-consuming, but worth it? cuentan la experiencia de una empresa que lo hizo y los pros y contras que aprecian en el proceso, aunque parece que no les ha salido mal.

Etiquetas: , , , , , , ,

Puedes enterarte de las notas nuevas en: @reflexioneseir (Twitter), Reflexiones e Irreflexiones (Página de Facebook), Reflexiones e Irreflexiones (Canal de Telegram), fernand0 (en LinkedIn), @fernand0 (en Medium), Mastodon.

2011-01-20 13:23 | 4 Comentarios | In English, please | En PDF | Para enlazar # |
| Compartir/Share | por correo | en Twitter | en LinkedIn | en Facebook | en Google+ | en Delicious |

Referencias (TrackBacks)

URL de trackback de esta historia http://fernand0.blogalia.com//trackbacks/68748

Comentarios

1
De: jose Fecha: 2011-01-20 14:10

"The idea that new code is better than old is patently absurd."
jeje.

"Old code has been used."
mmmmjajaj.

"It has been tested."
jajajajajaj

"Lots of bugs have been found"
Vale, eso sí es una verdad innegable.

"and they've been fixed."
juasjuasjuasjuasjausjuas

"There's nothing wrong with it."
JOOJJOJOJOJOOJJOJOJAAJJAAAAAA

Ahora en serio. Las extrañas excrecencias, verrugas y cicatrices en el código de las que habla Joel, explicando que son bug fixes, es precisamente una señal de que el código es malo (poco robusto). Se puede escribir teniendo en cuenta que van a haber problemas no previstos. En ese sentido, la herencia es tu amiga. Cuantas más verrugas, más acoplamiento y peor se vuelve el código. El día que al becario que escribió la función se le acabe la beca y no se la renueven (porque entonces habría que contratarlo, así que mejor no renovarlo y meter a otro nuevo), el código ya no será código, sino un cuadro de Pollock al que hay que encenderle un cirio y esperar a que sea luna llena para que funcione.

La función es una balsa llena de boquetes. Aquí hay un remiendo, aquí un tapón de corcho metido a presión, allí hay un agujero que hay que tapar con el pie cada vez que alguien se monta, y aparte hay una vieja radio que no tiene nada sintonizado pero nadie se atreve a apagarla, por si acaso explota. Hombre, flotar, flota, está claro.



2
De: Pirx Fecha: 2011-01-20 14:47

En fin, depende. Esta historia es excepcional. Se trata de un equipo que se encuentra con limitaciones y las resuelve empezando de nuevo. Pero no desde cero. Es la misma gente que programó el original con el conocimiento de lo que hicieron, en especial de lo que hicieron mal.

No suele ser el caso que yo me he encontrado: empresas que arrastran un códido hecho por una docena de programadores distintos, traídos por distintas consultoras, que estaban aprendiendo cuando lo escribieron, están ahora inaccesibles y no dejaron la más mínima documentación detrás. *Ése* es el pan nuestro de cada día (para servidor, YMMV).

Para mí la diferencia fundamental es si existe documentación suficiente. Pueden ser documentos externos, comentarios o conocimiento del negocio por alguna persona. Si la única documentación es el código y el código es malo, reescribir no es la solución.

Antes de matar al deshauciado hay que curarlo (refactorización, catalogación de accesos a BD y funcionalidad, cobertura SEH, documentación a posteriori, todo eso).

Claro que, una vez curado, no hay argumentos tan fuertes para reescribirlo, salvo el "ya nadie usa este lenguaje", que tampoco es un disparate, pero no es lo mismo que "hemos perdido el control del entorno".



3
De: marcis Fecha: 2011-01-21 09:35

Cuenta la leyenda que por re-escribir el código Netscape se fue al garete...



4
De: fernand0 Fecha: 2011-01-21 10:04

@marcis es lo que cuenta Joel Spolsky en el enlace que puse, sí :)



<Diciembre 2024
Lu Ma Mi Ju Vi Sa Do
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31