viernes, 30 de julio de 2010

rehacer una aplicación desde 0

un interesante  articulo  encontrado  aqui: http://www.joelonsoftware.com/articles/fog0000000069.html 

pero en ingles, disculpen la traducion pero es lo mejor  que  hace el google.



Las cosas que nunca debes hacer, parte I

Joel Spolsky por
Jueves, 06 de abril 2000
Netscape 6.0 está finalmente entrando en su primera beta pública.Nunca hubo una versión 5.0. El último lanzamiento importante, la versión 4.0, fue lanzado hace casi tres años. Tres años es un muy largo tiempo en el mundo de Internet. Durante este tiempo, se sentó junto a Netscape, con impotencia, como su cuota de mercado cayó en picado.
Es un poco zalamero de mí que les critican por haber esperado tanto tiempo entre versiones. No lo hice a propósito, ahora, ¿verdad?
Bueno, sí. Ellos lo hicieron. Lo hicieron, haciendo que el único peor error estratégico que cualquier compañía de software puede hacer:
Decidieron volver a escribir el código desde cero.
Netscape no fue la primera compañía para hacer de este error. Borland cometió el mismo error cuando compraron Arago y trató de convertirlo en dBase para Windows, un proyecto condenado al fracaso que llevó tanto tiempo que Microsoft Access se comió su almuerzo, y luego lo hicieron de nuevo en la reescritura de Quattro Pro desde cero y la gente increíble con qué pocos características que tenía. Microsoft casi cometió el mismo error, tratando de reescribir Word para Windows desde cero en un proyecto condenado al fracaso llamada pirámide que fue cerrado, tirado, y barrido bajo la alfombra. Por suerte para Microsoft, que nunca habían dejado de funcionar en el antiguo código base, así que tenía algo para enviar, por lo que es simplemente un desastre financiero, no de carácter estratégico.
Estamos programadores. Los programadores son, en sus corazones, arquitectos, y lo primero que quieren hacer cuando llegan a un sitio es arrasar el lugar plano y construir algo grande. No estamos contentos por la renovación elementales: el bricolaje, la mejora, la plantación de macizos de flores.
Hay una razón sutil que los programadores siempre quieren tirar el código y empezar de nuevo. La razón es que piensan que el viejo código es un desastre. Y aquí está la observación interesante: probablemente están equivocados. La razón de que ellos piensan que el antiguo código es un desastre se debe a una, fundamental ley fundamental de la programación:
Es más difícil leer el código que escribirlo.
Esta es la razón por la reutilización de código es tan difícil. Por eso todo el mundo en tu equipo tiene una función diferente que desea usar para dividir cadenas en los arrays de cadenas. Ellos escriben su propia función porque es más fácil y más divertido que descubrir cómo funciona la función de edad.
Como corolario de este axioma, puede pedir casi cualquier programador de hoy sobre el código que está trabajando. "Es un lío peluda", le dirán. "Me gustaría nada mejor que tirarlo y empezar de nuevo."
¿Por qué es un desastre?
"Bueno", dicen, "mira esta función. Se trata de dos páginas! Ninguna de estas cosas pertenecen ahí! No sé lo que la mitad de estas llamadas a la API son para".
Antes nueva hoja de cálculo de Borland para Windows enviadas, Philippe Kahn, el fundador de colores de Borland, fue citado mucho en la jactancia de prensa acerca de cómo Quattro Pro sería mucho mejor que Microsoft Excel, porque fue escrito desde cero. Todo el código fuente de nuevo! Como si el código fuente oxidado.
La idea de que el nuevo código es mejor que el viejo es evidentemente absurdo. código antiguo se ha utilizado. Se ha probadoLotes de errores han sido encontrados, y han sido fijados. No hay nada malo en ello. Interesada no podrá adquirir sólo los errores con los brazos cruzados en su disco duro. Au contraire, baby! ¿Es el software supone que es como un viejo Dodge Dart, que se oxida sentado en el garaje?¿El software como un oso de peluche que es bastante asqueroso si no está hecha de todo el nuevo material?
Volver a la función de la página dos. Sí, lo sé, es sólo una simple función para mostrar una ventana, pero ha crecido pelitos y cosas sobre ella y nadie sabe por qué. Bueno, te diré por qué: esas son las correcciones de errores. Uno de ellos corrige ese error que Nancy tenía cuando ella trató de instalar la cosa en un equipo que no tiene Internet Explorer.Otro error que revisiones que se produce en condiciones de baja memoria. Otro error que correcciones que se produjo cuando el archivo está en un disquete y los Yankees de usuario a cabo el disco en el centro. Esa llamada a LoadLibrary es fea, pero se puede ver el código en las versiones anteriores de Windows 95.
Cada uno de estos errores tomó varias semanas de uso del mundo real antes de que fueran encontrados. El programador podría haber pasado un par de días reproduciendo el error en el laboratorio y arreglarlo. Si es como un montón de errores, la solución podría ser una línea de código, o incluso podría ser un par de caracteres, pero una gran cantidad de trabajo y el paso del tiempo en esos dos personajes.
Cuando usted lanza lejos el código y empezar de cero, va a tirar todo ese conocimiento. Todos los recogidos correcciones de errores. Años de trabajo de programación.
Usted está desechando su liderazgo en el mercado. Usted está dando un regalo de dos o tres años a sus competidores, y créanme, es unlargo tiempo en años de software.
Usted se está poniendo en una situación extremadamente peligrosa en la que se envío una versión antigua del código durante varios años, completamente incapaz de realizar cualquier cambio estratégico o de reaccionar a las nuevas características que exige el mercado, debido a que no tienen código fáciles de enviar. Es posible que también acaba de cerrar para el negocio de la duración.
Estás perdiendo una cantidad descabellada de dinero escribiendo código que ya existe.
¿Hay alguna alternativa? El consenso parece ser que el antiguo código base de Netscape fue realmente malo. Bueno, podría haber sido malo, pero, ¿sabes qué? Funcionó bastante maldito bien en una gran cantidad de raíces de sistemas de computación del mundo.
Cuando los programadores dicen que su código es un desastre santo (como siempre lo hacen), hay tres tipos de cosas que están mal con ella.
En primer lugar, hay problemas de arquitectura. El código no sea un factor correctamente. El código de red se están expandiendo por sus propios cuadros de diálogo de la mitad de la nada, lo que debería haber sido tratado en el código de interfaz de usuario. Estos problemas se pueden solucionar, uno a la vez, moviendo cuidadosamente el código, la refactorización, el cambio de interfaces. Se puede hacer un programador trabajar con cuidado y comprobación de sus cambios de una sola vez, para que nadie más se interrumpe. Incluso arquitectónica bastante grandes cambios se puede hacer sin tirar el código. En el proyecto Juno que pasó varios meses rearchitecting en un punto: sólo moviendo cosas de sitio, limpiarlas, la creación de clases base que tenía sentido, y la creación de interfaces entre los módulos afilados. Pero lo hicimos con cuidado, con nuestra base de código existente, y no introdujo nuevos errores o tirar código de trabajo.
Una segunda razón los programadores piensan que su código es un desastre es que es ineficiente. El código de representación en Netscape se rumoreaba que era lento. Pero esto sólo afecta a una pequeña parte del proyecto, que se puede optimizar o incluso reescribir. No es necesario volver a escribir toda la cosa. Cuando se optimiza para la velocidad, el 1% del trabajo que usted obtiene el 99% de la explosión.
En tercer lugar, el código puede ser doggone feo. Uno de los proyectos que trabajé en realidad tenía un tipo de datos llamado FuckedString.Otro proyecto que había comenzado con la convención de las variables miembro de partida con un guión bajo, pero más tarde pasó a la más estándar "m_". Así, la mitad de las funciones que comience con "_" y la otra mitad con "m_", que parecía feo. Francamente, este es el tipo de cosas a resolver en cinco minutos con una macro en Emacs, no partiendo de cero.
Es importante recordar que al iniciar desde cero no hayabsolutamente ninguna razón para creer que va a hacer un mejor trabajo de lo que hizo la primera vez. En primer lugar, es probable que ni siquiera tienen el mismo equipo de programadores que trabajaron en la versión uno, por lo que en realidad no tienen "más experiencia".No eres más que va a hacer la mayoría de los viejos errores de nuevo, e introducir algunos nuevos problemas que no estaban en la versión original.
La antigua cantinela deconstruir una a tirar es peligroso cuando se aplica a gran escala para aplicaciones comerciales. Si está escribiendo código de forma experimental, es posible que desee romper la función que escribió la semana pasada cuando se piensa en un mejor algoritmo. Eso está bien. Es posible que desee refactorizar una clase para que sea más fácil de usar. Eso está bien, también. Pero tirar todo el programa es una locura peligrosa, y si Netscape ya contaba con supervisión de un adulto con experiencia en el sector de software, es posible que no se han disparado en el pie tan mal.