En los viejos tiempos, Excel tenía un lenguaje de programación muy incómodo sin nombre. “Macros de Excel”, lo llamamos. Era un lenguaje de programación severamente disfuncional sin variables (había que almacenar valores en celdas en una hoja de trabajo), sin locales, sin llamadas de subrutina: en resumen, era casi completamente imposible de mantener. Tenía características avanzadas como “Goto”, pero las etiquetas eran físicamente invisibles.
Lo único que lo hizo parecer razonable fue que se veía genial en comparación con las macros de Lotus, que no eran más que una secuencia de pulsaciones de teclas ingresadas como una cadena larga en una celda de la hoja de trabajo.
El 17 de junio de 1991, comencé a trabajar para Microsoft en el equipo de Excel. Mi título era “Administrador de programas”. Se suponía que debía encontrar una solución a este problema. La implicación era que la solución tendría algo que ver con el lenguaje de programación básico.
¿Básico? ¡Yech!
Paso algún tiempo negociando con varios grupos de desarrollo. Visual Basic 1.0 acababa de salir, y era bastante genial. Hubo un esfuerzo equivocado en curso con el nombre en clave MacroMan, y otro esfuerzo para hacer que el código básico orientado a objetos se denominara “Silver”. Se le dijo al equipo Silver que tenían un cliente para su producto: Excel. El gerente de marketing de Silver, Bob Wyman, sí, ese Bob Wyman, solo tenía una persona a la que tenía que vender su tecnología: yo.
MacroMan fue, como dije, equivocado, y tomó algo de persuasión, pero finalmente se cerró. El equipo de Excel convenció al equipo básico de que lo que realmente necesitábamos era algún tipo de Visual Basic para Excel. Logré agregar cuatro características de mascotas a Basic. Conseguí que agregaran Variantes, un tipo de datos de unión que podría contener cualquier otro tipo, porque de lo contrario no podría almacenar el contenido de una celda de hoja de cálculo en una variable sin una declaración de cambio. Conseguí que agreguen un enlace tardío, que se conoció como IDispatch, también conocido como COM Automation, porque el diseño original para Silver requería una comprensión profunda de los sistemas de tipos que no les importa a los tipos de personas que programan macros. Y obtuve dos características sintácticas de mascotas en el lenguaje: For Each , robado de csh, y With , robado de Pascal.
Luego me senté a escribir la especificación básica de Excel, un documento enorme que creció a cientos de páginas. Creo que eran 500 páginas cuando se hizo. (“Cascada”, te ríes; sí, sí cállate).
En aquellos días solíamos tener estas cosas llamadas revisiones de BillG. Básicamente, Bill Gates revisó todas las características importantes más importantes. Me dijeron que enviara una copia de mis especificaciones a su oficina en preparación para la revisión. Básicamente era una resma de papel impreso con láser.
Me apresuré a imprimir la especificación y la envié a su oficina.
Más tarde ese día, tuve algo de tiempo, así que comencé a trabajar en averiguar si Basic tenía suficientes funciones de fecha y hora para hacer todas las cosas que podía hacer en Excel.
En la mayoría de los entornos de programación modernos, las fechas se almacenan como números reales. La parte entera del número es el número de días desde alguna fecha acordada en el pasado, llamada época. En Excel, la fecha de hoy, 16 de junio de 2006, se almacena como 38884, contando los días donde el 1 de enero de 1900 es 1.
Comencé a trabajar a través de las diversas funciones de fecha y hora en Basic y las funciones de fecha y hora en Excel, probando cosas, cuando noté algo extraño en la documentación de Visual Basic: Basic usa el 31 de diciembre de 1899 como la época en lugar del 1 de enero, 1900, pero por alguna razón, la fecha de hoy era la misma en Excel que en Basic.
¿Eh?
Fui a buscar un desarrollador de Excel que tuviera la edad suficiente para recordar por qué. Ed Fries parecía saber la respuesta.
“Oh”, me dijo. “Echa un vistazo al 28 de febrero de 1900.”
“Son 59”, dije.
“Ahora intenta el 1 de marzo”.
“¡Son 61!”
“¿Qué pasó con 60?” Preguntó Ed.
“29 de febrero. ¡1900 fue un año bisiesto! ¡Es divisible por 4!”
“Buena suposición, pero sin cigarro”, dijo Ed, y me dejó preguntándome por 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 fue un año bisiesto.
“¡Es un error en Excel!” Exclamé
“Bueno, en realidad no” , dijo Ed. “Tuvimos que hacerlo de esa manera porque necesitamos poder importar hojas de trabajo Lotus 123”.
“Entonces, ¿es un error en Lotus 123?”
“Sí, pero probablemente sea intencional. Lotus tuvo que caber en 640K. Eso no es mucha memoria. Si ignoras 1900, puedes averiguar si un año dado es bisiesto solo mirando para ver si los dos bits más a la derecha son cero. Eso es realmente rápido y fácil. Los muchachos de Lotus probablemente pensaron que no importaba estar equivocado durante esos dos meses en el pasado. Parece que los muchachos básicos querían ser anal sobre esos dos meses, así que movieron el época un día atrás “.
“¡Aargh!” Dije y fui a estudiar por qué había una casilla de verificación en el cuadro de diálogo de opciones llamada Sistema de fechas 1904 .
Al día siguiente fue la gran revisión de BillG.
30 de junio de 1992.
En aquellos días, Microsoft era mucho menos burocrático. En lugar de las 11 o 12 capas de gestión que tienen hoy, informé a Mike Conte, quien informó a Chris Graham, quien informó a Pete Higgins, quien informó a Mike Maples, quien informó a Bill. Alrededor de 6 capas de arriba a abajo. Nos burlamos de compañías como General Motors con sus ocho niveles de gestión o lo que sea.
En mi reunión de revisión de BillG, toda la jerarquía de informes estaba allí, junto con sus primos, hermanas y tías, y una persona que vino de mi equipo cuyo trabajo durante la reunión fue mantener un recuento exacto de cuántas veces dijo Bill La palabra F. Cuanto más bajo sea el recuento, mejor.
Bill entró.
Pensé en lo extraño que era que tuviera dos piernas, dos brazos, una cabeza, etc., casi exactamente como un ser humano normal.
Tenía mi especificación en su mano.
¡Tenía mi especificación en su mano!
Se sentó e intercambió bromas ingeniosas con un ejecutivo que no sabía que no tenía sentido para mí. Algunas personas se rieron.
Bill se volvió hacia mí.
Noté que había comentarios en los márgenes de mi especificación. ¡Había leído la primera página!
¡Había leído la primera página de mis especificaciones y había escrito pequeñas notas al margen!
Teniendo en cuenta que solo le obtuvimos la especificación unas 24 horas antes, debe haberla leído la noche anterior.
Él estaba haciendo preguntas. Les estaba respondiendo. Eran bastante fáciles, pero por mi vida no puedo recordar lo que eran, porque no podía dejar de notar que estaba hojeando las especificaciones …
¡Estaba hojeando la especificación! [Cálmate, ¿qué eres una niña?]
… y hubo notas en todos los márgenes. EN CADA PÁGINA DE LA ESPECIFICACIÓN. Había leído todo lo que Dios había condenado y había escrito notas en los márgenes.
¡Leyó toda la cosa! [OMG SQUEEE!]
Las preguntas se hicieron más difíciles y más detalladas.
Parecían un poco al azar. A estas alturas ya estaba acostumbrado a pensar en Bill como mi amigo. ¡Es un chico agradable! ¡Él leyó mi especificación! ¡Probablemente solo quiera hacerme algunas preguntas sobre los comentarios en los márgenes! Abriré un error en el rastreador de errores para cada uno de sus comentarios y me aseguraré de que se solucione, ¡pronto!
Finalmente la pregunta asesina.
“No lo sé, muchachos”, dijo Bill, “¿Alguien está realmente investigando todos los detalles de cómo hacer esto? Por ejemplo, todas esas funciones de fecha y hora. Excel tiene tantas funciones de fecha y hora. ¿Va Basic? tener las mismas funciones? ¿Funcionarán todos de la misma manera? ”
“Sí”, dije, “excepto en enero y febrero de 1900”.
Silencio.
El maldito contador y mi jefe intercambiaron miradas de asombro. ¿Cómo lo supe? Enero y febrero ¿QUÉ?
“Está bien. Bueno, buen trabajo”, dijo Bill. Tomó su copia marcada de la especificación
… espera! Yo quería eso …
E izquierda.
“Cuatro”, anunció el contador f ***, y todos dijeron, “wow, eso es lo más bajo que puedo recordar. Bill se está suavizando en su vejez”. Tenía 36 años.
Más tarde me lo explicaron. “Bill realmente no quiere revisar su especificación, solo quiere asegurarse de que lo tenga bajo control. Su MO estándar es hacerle preguntas cada vez más difíciles hasta que admita que no sabe, y luego puede gritarle por no estar preparado. Nadie estaba realmente seguro de lo que sucede si responde a la pregunta más difícil que puede formular porque nunca ha sucedido antes “.
“¿Te imaginas si Jim Manzi hubiera estado en esa reunión?” Alguien preguntó. “‘¿Qué es una función de fecha?’ Manzi habría preguntado “.
Jim Manzi era el tipo de MBA que ejecutaba Lotus en el suelo.
Fue un buen punto. Bill Gates fue increíblemente técnico. Entendió las Variantes, los objetos COM y el IDispatch, y por qué la automatización es diferente a las vtables y por qué esto podría conducir a interfaces duales. Le preocupaban las funciones de citas. No se entrometía en el software si confiaba en las personas que estaban trabajando en él, pero no se le podía mentir por un minuto porque era un programador. Un programador real, real.
Mirar a los no programadores que intentan dirigir compañías de software es como mirar a alguien que no sabe navegar tratando de navegar.
“¡Está bien! ¡Tengo excelentes asesores parados en la orilla diciéndome qué hacer!” dicen, y luego se caen del tablero, una y otra vez. El grito estándar del MBA que cree que la gestión es una función genérica. ¿Ballmer va a ser otro John Sculley, que casi llevó a Apple a la extinción porque el consejo de administración pensó que vender Pepsi era una buena preparación para dirigir una empresa de informática? 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 sobreextendió y algunas decisiones éticas dudosas hicieron necesario dedicar demasiada atención de la gerencia a luchar contra el gobierno de los Estados Unidos. Steve asumió el rol de CEO en la teoría de que esto le permitiría a Bill pasar más tiempo haciendo lo que mejor hace, dirigiendo la organización de desarrollo de software, pero eso no parece solucionar los problemas endémicos causados por esas 11 capas de administración, una cultura de reuniones permanentes y permanentes, una obstinada insistencia en crear todos los productos posibles sin importar qué, (cuántos miles de millones de dólares ha perdido Microsoft, en I + D, honorarios legales y daños a la reputación, porque decidieron que no solo tienen que hacer un navegador web, pero ¿tienen que regalarlo gratis?), y un par de décadas de contratación rápida y descuidada han asegurado que la capacidad intelectual del empleado promedio de Microsoft haya disminuido (Douglas Coupland, en Microserfs: “Contrataron a 3.100 personas solo en 1992, y sabes que no todas eran gemas “)
Oh bien. La fiesta se ha mudado a otro lado. Excel Basic se convirtió en Microsoft Visual Basic para Aplicaciones para Microsoft Excel, con tantos (TM) y (R) que no sé dónde ponerlos todos. Dejé la compañía en 1994, asumiendo que Bill me había olvidado por completo, hasta que noté una breve entrevista con Bill Gates en el Wall Street Journal, en la que mencionó, casi de pasada, algo similar a lo difícil que era reclutarlo. digamos, un buen administrador de programas para Excel. No solo crecen en los árboles, o algo así.
¿Podría haber estado hablando de mí? No, probablemente era otra persona.
Todavía.