Mi primera revisión de BillG

Spolsky-Small

Siempre me ha encantado leer los artículos de Joel Spolsky, y ayer mientras buscaba otra cosa me topé con un artículo que había leído hace un tiempo (por aquel entonces en su versión original) y que me había gustado mucho. En este artículo Joel nos cuenta la história de su primera revisión con el tío Bill, allá por 1994 cuando trabajaba en Microsoft. Os dejo el artículo traducido al español y os animo a darle una ojeada al resto de artículos de Joel. Vale la pena…

Mi primera revisión de BillG

En la ‘antigüedad’, Excel tenía un lenguaje de programación sin nombre bastante incómodo. Lo llamábamos “Excel Macros”. Era un lenguaje de programación gravemente disfuncional, sin variables (tenías que almacenar los valores en celdas de una hoja de cálculo), sin locals, sin llamadas a subrutinas: en resumen, era completamente insostenible. Tenía características avanzadas como “Goto” pero las etiquetas eran físicamente invisibles, en realidad.

Lo único que lo hacía parecer razonable era que se veía genial comparado con las macros de Lotus, que no eran más que una secuencia de pulsaciones de teclado introducidas como una larga cadena en una celda de una hoja de cálculo.

El 17 de junio de 1991, empecé a trabajar para Microsoft en el equipo de Excel. Mi título era “Jefe de programa”. Se suponía que debía aportar una solución a este problema. Y que la solución tendría que ver con el lenguaje de programación Basic

¿Basic? ¡Puagh!

Pasé algún tiempo negociando con varios grupos de desarrollo. Visual Basic 1.0 acababa de salir, y era jodidamente guay. Había un esfuerzo descaminado en proceso con el nombre en código MacroMan, y otro esfuerzo para crear Basic Orientado a Objetos con el nombre en código “Silver”. Al equipo de Silver se le había dicho que tenían un cliente para su producto: Excel. El jefe de marketing de Silver, Bob Wyman, si, ese Bob Wyman, solo tenía una persona a quien vender esa tecnología: a mí.

Macroman, como he dicho, iba descaminado, y costó un poco de persuasión, pero finalmente fue cancelado. El equipo de Excel convenció al de Basic de que lo que realmente necesitábamos era una especie de Visual Basic para Excel. Conseguí que se añadieran cuatro características que me gustaban a Basic. Hice que añadieran Variantes, un tipo de dato unión que podía almacenar cualquier otro tipo, porque en otro caso no podrías almacenar los resultados de una celda de hoja de cálculo sin una sentencia switch. Hice que añadieran ‘late binding’, que luego se llamó IDispatch, también conocido como COM Automation, porque el diseño original de Silver requería de un profundo conocimiento de sistemas de tipos del que el tipo de gente que programa macros no se preocupa. Y conseguí que incluyeran dos características sintácticas que me gustaban en el lenguaje: For Each, robado de csh, y With, robado de Pascal.

Entonces me senté a escribir la especificación de Excel Basic, un documento enorme que creció hasta tener varios centenares de páginas. Creo que cuando se terminó tenía 500 páginas.(“Vaya montón”, te ríes por debajo; ya, ya, cállate).

En aquella época, solíamos tener estas cosas llamadas revisions de BillG. Básicamente, cada característica principal importante era revisada por Bill Gates. Me dijeron que mandara una copia de mi especificación a su oficina como preparación para la revisión. Era básicamente un taco de folios impresos a láser.

Me apresuré a imprimir la especificación y la mandé a su oficina.

Más tarde ese día, tuve un poco de tiempo, así que empecé a trabajar intentando comprender si Basic tenía suficientes funciones de fecha y hora para realizar todo lo que podías hacer en Excel.

En la mayoría de entornos de programación modernos, las fechas están almacenadas como números reales. La parte entera del número es el número de días desde una fecha acordada del pasado, llamada la ‘epoch’. En Excel, la fecha actual, 16 de junio de 2006, se almacena como 38884 días desde el 1 de enero de 1900, que sería 1.

Empecé a investigar las diferentes funciones de fecha y hora de Basic y las de Excel, probando cosas, hasta que me dí cuenta de algo extraño en la documentación de Visual Basic.: Basic usa como ‘epoch’ el 31 de diciembre de 1899 en vez del 1 de enero de 1900, pero, por alguna razón, la fecha actual era la misma en Excel y en Basic.

Ein?

Busqué un desarrollador de Excel lo suficientemente viejo como para recordar por qué. Ed Fries parecía conocer la respuesta.

“Oh,” me dijo, “Prueba el 28 de febrero de 1900”.

“Es 59”, le dije.

“Prueba ahora el 1 de marzo”.

“¡Es 61!”

“¿Qué le ha pasado al 60?” preguntó Ed.

“El 29 de febrero. ¡1900 fue un año bisiesto! ¡Es divisible por 4!”

“Buen intento, pero no”, dijo Ed, y me dejó pensando un rato.

Ups. Investigué un poco. Los años que son divisibles por 100 no son años bisiestos, a menos que también sean divisibles por 400. 1900 no era un año bisiesto.

“¡Es un bug en Excel!” exclamé.

“Bueno, en realidad no” dijo Ed. “Tuvimos que hacerlo así porque necesitábamos poder importar hojas de cálculo de Lotus 123”.

“¿Así que es un bug en Lotus 123?”.

“Sí, pero probablemente uno intencionado. Lotus tenía que caber en 640K. Eso no es mucha memoria. Si ignoras a 1900, puedes calcular si un año dado es bisiesto mirando si los dos bits más a la derecha son cero. Es muy rápido y sencillo. Lo tipos de Lotus probablemente pensaron que no importaba equivocarse para esos dos meses tan antiguos. Parece que los tipos de Basic quisieron ser meticulosos con esos dos meses, así que movieron la ‘epoch’ un día hacia atrás.

“¡Argh!” dije, y me fui a estudiar por qué había un checkbox en el cuadro de diálogo de opciones con el nombre Sistema de Fecha 1904.

El día siguiente era la gran revisión de BillG.

30 de Junio de 1992.

En aquella época, Microsoft era mucho menos burocrática. En vez de las 11 o 12 capas de gestión que tienen hoy en día, yo dependía de Mike Conte que dependía de Chris Gram. que dependía de Pete Higgins, que dependía de Mike Maples, que dependía de Bill. Unas 6 capas desde arriba hasta abajo. Nos reíamos de compañías como General Motors ,con sus 8 capas de gestión, o las que fueran.

En la reunión de mi revisión de BillG, toda la jerarquía de dependencias estaba allí, junto con sus primos, hermanas y tías, y una persona que vino de mi equipo cuya única función durante la reunión era contar cuántas veces decía Bill la ‘palabra J’. Cuanto menor fuera la cuenta-j*d*r, mejor.

Bill entró.

Pensé lo extraño que era que tuviera dos piernas dos brazos, una cabeza, etc. Casi como un ser humano normal.

Tenía mi especificación en la mano.

Tenía mi especificación en la mano.

Se sentó e intercambió con un ejecutivo que yo no conocía bromas que no tenían sentido para mí. Unas cuantas personas se rieron.

Bill se giró hacia mí.

Me di cuenta de que había comentarios escritos en los márgenes de mi especificación. ¡Se había leído la primera página!

¡Se había leído la primera página de mi especificación y había escrito pequeñas notas en el margen!

Considerando que sólo le habíamos dado la especificación 24 horas antes, debía habérsela leído la noche anterior.

Él hacía preguntas. Yo las respondía. Eran bastante sencillas, pero por mi vida que soy incapaz de recordar cuáles eran, porque no podía evitar darme cuenta de que él estaba hojeando la especificación…

¡Estaba hojeando la especificación! [Cálmate, ¿qué eres? ¿una niña?]

… y HABÍA NOTAS EN TODOS LOS MÁRGENES. EN CADA PÁGINA DE LA ESPECIFICACIÓN. SE HABÍA LEÍDO TODA LA MALDITA COSA Y HABÍA ESCRITO NOTAS EN LOS MÁRGENES.

¡Se la había leído entera! [¡OH DIOS MÍO SIIIIIIIIIIII!]

Las preguntas se fueron haciendo más difíciles y detalladas.

Parecían un poco aleatorias. En ese punto me había acostumbrado a pensar en Bill como mi colega. ¡Es un tío majo! ¡Se ha leído mi especificación! ¡Probablemente sólo quiere hacerme algunas preguntas sobre los comentarios en los márgenes! ¡Abriré un bug en el bug tracker por cada uno de sus comentarios y me aseguraré de que se solucione, pronto!

Finalmente, la pregunta trampa.

“No sé, tíos” dijo Hill, “¿Alguien ha mirado realmente todos los detalles de cómo hacer esto? Como todas esas funciones de fecha y hora. Excel tiene tantas. ¿Basic va a tener las mismas funciones? ¿Van a funcionar de la misma forma?”

“Si,” dije, “excepto para enero y febrero de 1900.

Silencio.

El contador-de-j*d*r*s y mi jefe intercambiaron miradas de asombro. ¿Cómo supiste eso? ¿Enero y febrero QUÉ?

“OK. Bueno, buen trabajo” dijo Hill. Cogió su copia anotada de la especificación

…¡espera! Quiero eso…

y se fue.

“Cuatro”, anunció el contador-de-j*d*r*s, y todo el mundo dijo “Guau, es el número más bajo que puedo recordar. Bill se está suavizando con la edad”. El tenía, ya sabes, 36.

Más tarde me lo explicaron. “Bill no quiere revisar realmente tu especificación, sólo quiere asegurarse de que lo tienes bajo control. Su modus operandi estándar es hacer preguntas cada vez más y más difíciles hasta que admitas que no sabes la respuesta, y entonces él pueda gritarte por no estar preparado. Nadie estaba realmente seguro de que pasaría si respondías la pregunta más difícil que se le pudiera ocurrir, porque no había pasado antes.”.

“¿Os imagináis si Jim Manzi hubiera estado en esa reunión?” preguntó alguien. “Habría preguntado: ‘¿Qué es una función de fecha?’”.

Jim Manzi era el MBA que estaba hundiendo a Lotus.

Era algo importante. Bill Gates era increíblemente técnico. Entendía los Variants, y los objetos COM, y IDispatch, y porqué Automation es diferente de las vtables y porqué podría llevar a interfaces duales. Se preocupaba de las funciones de fecha. No se entrometía en el software si confiaba en la gente que estaba trabajando en él, pero no podías engañarle ni un minuto porque era un programador. Un verdadero programador.

Ver a no-programadores intentando dirigir empresas de software es como ver a alguien que no sabe hacer surf intentar practicarlo.

“¡Está bien! ¡Tengo grandes consejeros diciéndome qué hacer!” dicen, y luego se caen de la directiva, una y otra vez. El grito estándar del MBA que cree que la gestión es una función genérica. ¿Es Ballmer otro John Sculley, que casi llevó a Apple a la extinción porque la directiva pensó que vender Pepsi esa una buena preparación para dirigir una empresa de computadoras? Al culto del MBA le gusta creer que puedes dirigir organizaciones que hacen cosas que no entiendes.

A lo largo de los años, Microsoft se hizo grande, Bill se dedicó a demasiadas cosas, y algunas decisiones éticamente turbias hicieron necesario dedicar demasiada atención de la gestión a luchar contra el gobierno de los Estados Unidos. Steve cogió el puesto de CEO porque en teoría permitiría a Bill dedicar más tiempo a lo que hace mejor, dirigir la organización de desarrollo de software, pero eso no pareció arreglar problemas endémicos causados por esas 11 capas de gestión, una cultura de reuniones permanentes, perpetuas, una terca insistencia en crear cada posible producto, fuera como fuera,(¿Cuántos miles de millones de dólares ha perdido Microsoft en Investigación y Desarrollo, costes legales y daño a su reputación, porque decidieron que no sólo tenían que crear un navegador web, sino además darlo gratis?), y un par de décadas de contrataciones descuidadas y apresuradas ha asegurado que la capacidad intelectual del empleado de Microsoft medio se haya hundido (Douglas Coupland, en Microsiervos: “Contrataron a 3.100 personas sólo en 1992, y sabes que no todos fueron joyas.”).

Oh, bueno. La fiesta se ha movido a otra parte. Excel Basic se convirtió en Microsoft Visual Basic para Aplicaciones para Microsoft Excel, con tantos (TM)’s y (R)’s que no sé dónde ponerlos. Dejé la compañía en 1994, creyendo que Bill me había olvidado completamente, hasta que descubrí una pequeña entrevista a Bill Gates en el Wall Street Journal en la que mencionó, casi de pasada, algo en la línea de lo difícil que era contratar, digamos, un buen jefe de programa para Excel. No crecen en los árboles, o algo así.

¿Podría estar hablando de mí? Naaa, probablemente era sobre otra persona.

Aunque…

Artículo traducido al español por David Vilches:
http://local.joelonsoftware.com/mediawiki/index.php/Mi_primera_revisi%C3%B3n_de_BillG

Artículo original en inglés:
http://joelonsoftware.com/items/2006/06/16.html

Saludos desde Andorra,

** crossposting desde el blog de Lluís Franco en geeks.ms **

Leave a Reply

Your email address will not be published. Required fields are marked *