![]() | |||
Joel on Software La Opinión de Joel sobre qué es Software
| |||
|
Otros artículos de "Joel on Software" en Español Otros artículos de "Joel on Software" en Inglés |
Por Joel Spolsky Traducido por Xaviero Cervera Editado por Ricardo Hernández Machado 27. 1. 2001 En 1982, mi familia recibió la primera PC-IBM en Israel. De hecho fuimos a la
bodega y esperamos mientras entregaban nuestra computadora en el puerto de
desembarque. De alguna manera había convencido a mi papá a que comprara la
versión que traía TODO, la versión de "lujo", traía dos discos floppy,
128 K de memoria junto con una impresora de matriz de puntos (para hacer
borradores) y otra marca Brother con calidad para cartas con "Daisy Wheel" que
se escucha como una ametrallado Bueno, "Todos" sabían que BASIC era un lenguaje de programación para niños que requiere que escribas una sopa de código y te convierte el cerebro en queso “Camembert.” Decidimos desembolsar $600 para IBM Pascal, que venia en tres disquetes floppy. La primera pasada del compilador era en el primer disquete, la segunda pasada era en el segundo disquete y el enlazador se encontraba en el tercero. Escribí el famoso programa "Hola Mundo" y lo compilé. Tiempo total transcurrido: 8 Minutos. Hmmm. Yo diría que es demasiado tiempo. Escribí un proceso por lotes para automatizar el proceso y lo recorte a 7.5 minutos. Mejor, pero cuando intente escribir programas largos como mi versión emocionante de Otelo que siempre me vencía, me pasaba la mayor parte del tiempo esperando que el programa se compile. "Claro," me dijo un programador profesional, "nosotros teníamos una tabla para hacer abdominales mientras estábamos haciendo compilaciones. Después de pocos meses teníamos un abdomen escultural." Un día, apareció desde Dinamarca un programa elegante llamado “Compas Pascal” que luego fue comprado por Philippe Kahn y lo renombró Borland Turbo Pascal. Turbo Pascal era impactante, por que hacía básicamente todo lo que hacia el Pascal de IBM, solo que corría en aproximadamente 33K de memoria incluyendo el editor de textos. Esto no era menos que increíble. Pero aun más increíble era que podías compilar completamente un programa en menos de un segundo. Es como si una empresa de la cual jamás hubieses escuchado introdujera un auto que era una clonación del Buick LaSabre que podría alcanzar velocidades de 1,000,000 Millas / hora y podría conducirse alrededor del mundo con tan poca gasolina que una hormiga se la podría tomar sin enfermarse. De repente, me convertí en un ser mucho más productivo. Entonces fue cuando aprendí el concepto del "REP LOOP". Rep significa (por sus siglas en ingles) "Leer, Evaluar, Imprimir", y describe lo que hace un interpretador lisp; "Lee" tu información, lo evalúa, y luego imprime el resultado. Un ejemplo del "REP LOOP" a continuación: Yo escribo algo, el interpretador LISP lo lee, lo evalúa e imprime el resultado.
A una escala, pero más grande, cuando estas escribiendo código, estas en una macro-versión de una Repetición REP llamado la repetición de editar-compilar-probar. Editas tu código, lo compilas y luego lo pruebas para ver que tal funciona. Una observación crucial aquí es que tienes que pasar por la repetición vez tras vez para escribir un programa, de tal manera que mientras mas rápido los ciclos de editar-compilar-probar, mas productivo serás, hasta llegar a un límite de compilar instantáneamente. Esa es la razón de la ciencia-computacional por la cual los programadores de computadoras quieren hardware rapidísimo y los desarrolladores de los compiladores hacen cualquier cosa por lograr hacer más rápido la repetición de Editar-compilar-Probar. Visual Basic lo hace analizando cada línea mientras lo vas escribiendo, de esa manera la compilación final será súper rápido. Visual C++ lo hace ofreciendo compilaciones por incrementos, módulos o "headers" precompilados, así como enlazamientos incrementales. Pero apenas comiences a trabajar con un equipo más grande de programadores y probadores de programas te encontraras de nuevo con la misma repetición, solo que más grande (¡es un fractal, mi amigo!). Uno de los probadores encuentra un problema en el código y reporta el problema. Un programador arregla el problema. ¿Cuánto tiempo tardara para que el probador reciba de nuevo la nueva versión del código? En algunas organizaciones, esta repetición de reportar-Componer-(volver-a-probar) podría tardar hasta varias semanas, que significa que toda la organización llega a un alto y por lo tanto nadie produce. Para mantener todo el proceso del desarrollo trabajando bajo control, necesitas enfocarte en mantener lo mas unido posible el ciclo de reportar-componer-(volver-a-probar). Una buena forma de para hacer esto es haciendo construcciones diarias. Una "construcción del día" es una construcción automática, diaria, y completa de toda la estructura del código fuente. Automática -- por que tu ordenas a que un programa, "cron jobs" en UNIX y "scheduler service" en Windows, que compile todo el código a una hora especifica todos los días. Diaria -- o hasta mas seguido de lo normal. Existe la tentación de hacer construcciones continuas pero lo más probable es que no puedas por restricciones del controlador del código, hablaré más de estas restricciones en un momento. Completa -- Existe la posibilidad de que tu código tenga múltiples versiones. Múltiples versiones con lenguajes diferentes, múltiples sistemas operativos, o una versión de alto nivel y otra de bajo nivel. La construcción diaria necesita construir todas las versiones. Y necesita construir cada archivo desde cero y no fiarse en las capacidades de construcciones increméntales del compilador que posiblemente sean imperfectas. Aquí hay algunos de los muchos beneficios que podrían venir de hacer construcciones diarias:
A continuación explicaré como se hacen. Necesitas un servidor de construcciones diarias, que generalmente sería la computadora mas rápida que puedas conseguir. Escribe un script que reserve una copia completa del código fuente del repositorio del programa (¿sí estas utilizando un controlador de códigos fuentes verdad?), y luego las construcciones, todo desde cero, todas las versiones del código que venderás. Si tienes un instalador o un programa instalador, entonces construyen eso también. Todo lo que el cliente recibirá en la caja de software que enviaras deberá ser producido por el proceso de la construcción diaria. Pon cada construcción en su propio directorio identificados por la fecha de la construcción. Ejecuta el script a la misma hora todos los días.
Si desea leer mas sobre este tema consulte:
Esté articulo apareció originalmente en Inglés con el nombre Daily Builds Are Your Friend | ||
![]() Joel Spolsky es el fundador de Fog Creek Software, una pequeña empresa de software en Nueva York. Es titulado por la Universidad de Yale y ha trabajado como programador y gerente en Microsoft, Viacom, y Juno. | |||
El contenido de estas páginas representan la opinión de una persona.
Todo el contenido es Copyright ©1999-2005 por Joel Spolsky. Todos los derechos son reservados.