¿Cuál fue tu peor pesadilla sobre la programación?

Esta historia muy breve de mi libro Boomer es un terrible problema de programación desde un rincón sorprendente.

Kickout

A fines de los ’70, recién salido de la universidad, contraté trabajo en una gran compañía para hacer pronósticos de ingresos. Durante los primeros seis meses, fue a prueba. Podría dejarme ir como un mal ajuste. No es necesario que demuestre la causa, pero la economía y las matemáticas estaban en mi línea. Estaba ansioso por mostrar lo fuerte que era.

Después de dos meses, ayudé en todas las operaciones de rutina: pronósticos por producto, ajustes de estacionalidad, Box-Jenkins, regresión con historial de ingresos, crecimiento del sector y del PIB, y más. La mayoría de los días trabajé desde las 7 de la mañana hasta las 6 de la noche.

El procedimiento que se me ordenó seguir requirió que la salida de una ejecución se ingresara manualmente en la siguiente secuencia de trabajos. Eso requirió que cuidara de la operación. Había más de una docena de líneas de productos para pronosticar cada semana. Cada uno corrió de 15 a 30 minutos. También imagine el tedio de ingresar cada uno de 13 coeficientes con 9 decimales.

Estuve en la terminal todo el día, a excepción de los descansos en el baño. La habitación terminal, mi casa en el trabajo, yacía dentro del edificio, una habitación sin ventanas, sin pizazz en absoluto. Estoy convencido de que era un armario de conserje convertido, de solo 6 pies de ancho y 20 pies de largo. Hubo varios otros programadores que llegaron, corrieron sus programas y se fueron. Estaba celoso de su libertad. Un fuerte ventilador zumbó todo el día, soplando calor hacia los conductos de salida y matando a toda conversación significativa. No había carteles o fotos en las paredes. Las paredes estaban grises y descoloridas. Después de un largo día allí, mi lado estético gritó por atención. Mi alma estaba siendo muerta de hambre.

Jack, mi jefe, era un desagradable duende de un hombre, bajo pero ancho con una barriga impresionante de cerveza. Se jactó de que nuestra factura informática con el proveedor de SimCalc era de $ 25K el mes pasado. ¡Es más de lo que mi trabajo pagó durante todo el primer año! Se rió y me dijo que Walt, el gran jefe, se había quejado. Jack se rió en vivo de que estaba tragando un hobbit y afirmó que le había dicho a Walt que solo mostraba lo valiosas que eran sus predicciones.

Llevé el manual de SimCalc a casa para estudiar. Emily no estaba feliz de que toda la noche tuviera mi nariz en el libro, pero tenía que salir de esa maldita habitación terminal. Demasiados días comiendo galletas de queso y bañándolos con un refresco de uva, mientras controlaba los programas, me volvería loco. Más tarde esa primera noche, encontré mi objetivo: comandos para leer y escribir en archivos.

La noche siguiente, traía a casa listados de dos programas de pronóstico que se ejecutaban en secuencia. Los puse sobre la mesa de la cocina. Todos los programas de pronóstico tenían la misma estructura básica. Si descubriera cómo alterar este par, podría automatizarlos a todos. En ese momento, podría almorzar donde quisiera, con comida de verdad. Podría salir y respirar en la naturaleza.

Fue después de la medianoche. Eric Burden cantó “Tenemos que salir de este lugar” en el estéreo. Los programas fueron largos con muchos bucles y funciones realizadas. Me centré en los lugares para escribir los parámetros en el primer programa y dónde leerlos en el segundo.

Debería haberme ido a dormir entonces, pero mi cerebro estaba acelerado. Miré a través de cálculos intrincados en el idioma de SimCalc. Hice algunas notas, pero realmente no entendí lo que estaban haciendo. Pero luego noté una rareza. Después del cálculo final, justo antes de escribir los resultados, el primer programa tenía un ciclo que parecía escribir una serie temporal en la memoria diez mil veces.

¿Porqué haría eso? Miré más arriba en el listado. Incluso allí, los resultados temporales fueron seguidos por bucles que escriben en la memoria diez mil veces también. Negué con la cabeza. Eso no tiene sentido. Una señal segura de que estaba demasiado cansado para pensar con claridad. Fui a la cama.

Después de las últimas horas, fue difícil sacarme de la cama hasta que recordé que podía preparar los programas hoy.

Como de costumbre, llegué al trabajo a las 7 AM. Hice los cambios antes de que Jack entrara. No le gustaría. Él me había dicho que no cambiara los programas. No lo había hecho, realmente no. Los cálculos fueron los mismos. Simplemente corrieron con menos mano.

Mientras corría mi primer par en tándem, hojeé el manual de SimCalc. Un perfil de comando me llamó la atención. Informa, después de que se ejecuta el programa, cuánto tiempo se usa en cada comando.

Agregué el perfil para la próxima ejecución en tándem. A la hora del almuerzo, descubrí que los varios 10 mil bucles de escritura consumían el 25% del uso total de la CPU del programa. SimCalc nos cobró por el tiempo de CPU. ¡Eso significaba que su facturación fue aumentada en un 25%!

Antes de que apenas hubiera pensado en esto, Jack entró en la habitación terminal.

“Jack, no vas a creer esto”, dije. “¡SimCalc nos está engañando por seis mil al mes!”

Su frente arrugada, una línea de preocupación. Levantó la mano como un policía de tráfico. “Aqui no. Mi oficina.”

Recogí mi listado marcado y lo seguí.

De vuelta en su escritorio, metió una hoja con números escritos a mano en el cajón superior. Lo reconocí como un recuento de la pasión, su juego de póquer semanal. Él me miró con las cejas fruncidas. “¿De qué estás acusando a SimCalc?”

“Nos están engañando”. Puse el listado frente a él. “Mira aquí”. Señalé el ciclo vacío final.

Él lo miró y se encogió de hombros. “¿Asi que? Tienen un bucle. Así es como funciona el programa “.

Me enderecé. “Ese ciclo escribe los mismos resultados en la misma ubicación de memoria. No una, sino diez mil veces. Los bucles vacíos representan una cuarta parte del tiempo del programa. Son bucles falsos “.

Jack se reclinó en su silla. “Este programa fue escrito por Jimbo, el mejor programador que tiene SimCalc. No creo que haya cometido un error así. ¿Utilizaste la precisión decimal como te dije que usas? ”

“Sí.” Tuve que dejar de discutir sobre eso. Nuestros datos de ventas solo tenían 2 decimales. Doce dígitos en los parámetros daban una falsa impresión de exactitud. “Todo lo que digo, Jack, es que si no es un error, entonces ¡es una decisión consciente cobrarnos más!

Él se paró. “Me ocuparé de esto. Déjame … “Tomó mi lista de programas.” ¿Cuáles son estas otras asignaciones? Parecen nuevas variables “.

Tuve que confesarme. “Los agregué para que el procedimiento sea más automático”.

“¡Te dije que no cambies los programas! ¡Eso es lo que causó estos números de perfil locos! Tu lo causaste. “Jack movió su garra hacia la puerta.” Vete. Ve a la sala terminal y completa los pronósticos que te asigné. Y corre los programas sin alterar “. Metió mi lista en un cajón y recuperó su póker. hoja de seguimiento.

Me sorprendió Él no creía en la evidencia. Por supuesto, mis variables de automatización no afectarían el uso de la CPU en otras partes del programa. Cualquier programador decente sabría eso. Él no era tonto. Lo resolvería cuando lo pensara bien.

Le entregué los pronósticos a las 5:30 de la tarde. Gruñó gracias y me dio media sonrisa. Probablemente se estaba dando cuenta de que tengo razón.

Esa noche, estaba en lo más alto por mis sorprendentes hallazgos. Le dije a Emily que nos mudaríamos a ese ranchero tan pronto como Jack se diera cuenta de los ahorros en costos de la compañía. Fantaseaba que cuando Jack le mostrara a Walt mi descubrimiento, quedarían tan impresionados que inmediatamente me tomarían como permanente.

Al día siguiente, llegué ansiosamente al trabajo. Había una nota en mi escritorio. “Encuéntrame en la oficina de Walt a las 10. Jack”.

Empecé las previsiones diarias, matando el tiempo. Inmediatamente a las 10, llamé a la puerta de Walt. Jack estaba sentado en la silla de orejas. Levantaron la vista.

Walt me ​​hizo un gesto con un gesto de la mano hacia la silla de respaldo recto frente a él. “Sentar.”

Lo hice y esperé por las felicitaciones.

Walt escribió algo en su planificador diario, miró brevemente a Jack y luego se volvió hacia mí. “Jack me dice que no sigues sus órdenes. Has maquinado el programa con un enfoque indisciplinado. ¿Está bien?”

“No.” Esto no fue lo que esperaba. Sabía que se requería una explicación, pero todo lo que pude decir fue “No hice nada malo”.

Walt se rascó la cabeza. “No es una pregunta complicada, pero parece demasiado para ti. Jack, ¿cuáles son los detalles?

“Sí, señor.” Jack movió la cabeza, se giró hacia mí y su amplia sonrisa falsa mostró sus incisivos. “Te di la simple tarea de los pronósticos de la línea de productos”. Tomó un sorbo de café, luego continuó. “Te dije específicamente que no cambies ninguno de los códigos. Cambiaste el código y llegas tarde y me das los resultados. Tengo que trabajar hasta tarde porque nunca me das las cosas a tiempo “.

Eso fue tan injusto. Antes no podía terminarlos en el tiempo normal, porque estaban muy mal construidos. ¡Los mejoré y esto es lo que obtengo!

Walt me ​​miró por encima de sus gafas de lectura. “¿Bien?”

“Yo mejoré …”

“Esa no es la pregunta”, Walt me ​​interrumpió. “¿No lograste obtener tus pronósticos asignados a Jack antes de la fecha límite de las 3 PM?”

“Sí, fue más tarde.” Bajé mi cabeza instintivamente, y al darme cuenta de que mostraba culpa, lo cual no sentí, los miré.

Walt se sentó con calma, pero las orbes negras de Jack ardieron.

“El código cambiado”, Jack le recordó a Walt.

“¿Cambiaste el código que Jack te dijo que dejes en paz? ¿Que tenemos una pequeña fortuna invertida?

Eso fue imposible. Los pronósticos nunca podrían estar listos a media tarde, tal como estaban. Tenía que ser honesto, “Sí, pero los mejoré”.

Jack resopló. “Es por eso que no los recibí hasta después del 5 de ayer”.

“Eso lo soluciona”, dijo Walt. “Te contraté para ayudar a Jack, pero eso no está ayudando. Tienes que ir. Contaremos hoy como medio día, pero te quiero fuera en una hora “.

Me puse de pie, estupefacto, y me fui. No recuerdo cómo llegué a casa ese día.

Me llevó semanas enterarme de la vergüenza de perder el prometedor trabajo del que me había jactado de estar tan bien emparejado.

No fue hasta que vacilantemente le conté la historia a mi mejor amigo cuando me di cuenta de la verdadera motivación de Jack. Jack se deshizo de mí tan pronto como me encontré con la estafa de facturación SimCalc. Uno de sus amigos del póker era Jimbo, el programador SimCalc. Habían embolsado el exceso de facturación.

Jack recibió un soborno. ¡Tengo el golpe de gracia!

La que todavía me hace temblar hoy fue una enorme plataforma de automatización de hardware que comencé a escribir para la interfaz entre un sistema de software a medida con una interfaz LabView / Datasocket y un sistema de hardware a medida. Mi plataforma se ejecutó en una computadora separada, así que básicamente tomó un comando “Ejecutar muestra 3″ desde la máquina LabView / Datasocket y le dijo al sistema de hardware exactamente qué hacer (mover a la posición bla, iniciar el láser, esperar, detener el láser, enviar ” terminó “señal por Datasocket a la primera máquina) Lo suficientemente simple desde un punto de vista de interfaz / diseño, y la mayoría del trabajo estuvo en las matemáticas posicionales, los patrones de trama personalizados que requerimos para diferentes tipos de muestras y el manejo de eventos y secuencias para apretón de manos entre los sistemas.

Tenía un calendario abierto para empezar, así que esbocé un plan de diseño para el software y pensé cuidadosamente sobre cómo implementarlo.

Y, como soy un genio, decidí codificarlo en LabView.

18 meses después, y después de un poco de presión por parte de mis colegas para terminarlo, puse el código LabView terminado en un 60% en el contenedor y lo reescribí desde cero en VB 2010 en 10 semanas.

Lo que no me di cuenta es que programar proyectos masivos en LabView es difícil. Una vez que el código alcanzó un cierto tamaño, no pude “ver” los bordes del mismo, y mezclar Evento controlado y manejado por datos también es complicado. Además, no tiene una linda lista de sus clases, y de repente la traducción de coordenadas bidireccionales se estaba descontrolando con más casos especiales que los normales.

No perdí todo de la experiencia de LabView, pero sobre todo las matemáticas fueron todo lo que sobrevivió.

Herramienta correcta para el trabajo. Debería ser la regla n. ° 1

Como programadores, nos ganamos la vida automatizando tareas tediosas. La peor pesadilla para mí fue escuchar que pronto la programación sería automática. 4GL y similares.

Bueno, eso no sucedió, pero el nerviosismo que veo cuando me presento a escribir un programa para “simplificar el proceso” entiendo lo que podrían estar sintiendo.