miércoles, 18 de junio de 2008

El año 2000 y los temores informáticos

Lo que todos deberíamos saber y tratar de entender
Peter de Jadler

A menos que lo arreglen...todas las computadoras...en todas partes del mundo...sufrirán un choque en enero 1 de 2000. ¿Puede imaginarlo...sólo por un momento... el caos que causaría? Sería en el tráfico aéreo, luces de tránsito, sin luz en su compañía, compañías que no producirán bienes, no habrá bienes en las tiendas a tiempo, la tiendas no podrán enviar las facturas y no podrá enviar a nadie sus facturas. Los negocios caerán en punto muerto.

¿Podría ocurrir una catástrofe como esta? Bueno, si lee este artículo y piensa en las consecuencias, tal vez podría reducir la probabilidad del fortalecimiento del evento.

Si ignora las advertencias, o si rehusa a preguntarse. ¿Podría pasar?, entonces Ud. es parte del problema. ¿Cómo es posible que las computadoras lleguen a sucumbir? La explicación es simple, muy simple y mucha gente como Ud. tienen dificultades para creer en el problema.

Después de Diciembre 31 de 1999, las computadoras no sabrán qué año es.

Esto puede sonar alocado. Suena como historia de ciencia ficción. Pero es realmente lo que pasará. Aquí está el porqué:

Nuestros programadores de computadoras, para almacenar las fechas siguieron este formato: dd/mm/aa. Esto significa que hemos permitido utilizar 2 dígitos para el día (dd), dos para el mes (mm) y dos para el año (aa). ¿Es claro el problema?

Algunos ejemplos podrían ayudar. Yo nací en agosto 02 de 1963. Almacené la información en la computadora así: 02/08/63. Los hermanos Wright realizaron su primer viaje en avión en diciembre 17 de 1903, y es almacenado como: 17/12/03. Cuando lleguemos a 1 de enero de 2000 la información de las computadoras será 01/01/00.

¿Ahora ve el problema? Le hemos indicado a las computadoras que asuman que 02/08/63, que 17/12/03 significan 02/agosto/1963 y 17/diciembre/1903 respectivamente, ¿qué pasará si asume eso para 01/01/00, que ella interpretará que es 01/enero/1900. Esto es. Este es el problema. Las computadoras, todas las computadoras, pensarán que todas las fechas después del 31 de diciembre de 1999, serán de 100 años en el pasado.

¿Y qué? Para entender las implicaciones de este "pequeño" error, debemos mirar una de las más básicas, de los más comunes, cálculos realizados por computadora.

Los cálculos para determinar cuánto tiempo ha pasado de un evento a otro, por ejemplo ¿cuántos años tiene Ud.? Yo nací en 02 de agosto de 1963, Si le preguntamos a la computadora por mi edad, ella restará mi fecha de nacimiento a la fecha actual. O sea algo así: 97-63(recuerde que sólo son dos dígitos para la fecha) y su respuesta será: 34 años, lo cual desafortunadamente es cierto.

En enero 1 de 2000, los cálculos se harán exactamente igual, restando el año de mi nacimiento al año actual, es decir 00-63, y yo proclamaré a viva voz que tengo -63 años de edad. Lo cual es risible, erróneo y causará problemas para cualquier programa que haga cálculos con base en este dato.

Pero el problema afecta a más que sólo a cálculos. Afecta a toda la información que se basa en el tiempo. Cuando expira una licencia de conducir. Cuando expira una tarjeta de crédito. Cuando una medicina se vence. Cuando una maquinaria tiene que ser reparada. Cuando construir un producto. Cuando expira una suscripción.

Todos estos cálculos se basan en fechas, y si una computadora no sabe la fecha, estos cálculos no puede realizarse. Tal vez esté en su mente volando ideas como "¡Cómo pudieron ser tan torpes los programadores de computadoras!... ¡No sabían que el año 2000 llegaría...!¿Porqué no almacenaron desde el principio las fechas con cuatro dígitos?, y finalmente, cuando menos... "bueno, que le pongan cuatro dígitos a las fechas y ya, es todo." ¿Qué problema hay en esto?

Estas son ideas comunes para quienes escuchan sobre "La crisis de las computadoras en el año 2000". Todos estos y más se vuelven más incrédulos cuando se les mencionan los costos estimados para solucionar este problema: $600 billones (US) en el mundo.

$600 billones por arreglar dos dígitos perdidos, de otra manera las computadoras en todos el mundo caerán el caos. Y esto sí suena a ciencia ficción. Desafortunadamente no lo es. Es muy real y afecta a todos en la tierra.

Haga la obvia pregunta ¿Por qué se utilizaron dos dígitos sabiendo que necesitaríamos cuatro dígitos con la llegada del nuevo milenio? Bueno, la mala noticia es que esto se hizo deliberadamente, pero con muy buenas intenciones, siendo honestos.

Cuando las computadoras llegaron a los negocios mundiales a finales de los 60's principios de los 70's eran muy costosas. Este costo, se presentaba directamente en dos aspectos de la computación: cuántos datos podrían almacenarse y qué tan rápido era el proceso de esos datos. Así incrementar algunos atributos eran asunto de costo y rapidez.

Una forma de almacenar datos era por medio de las "tarjetas de Hollerith", o tarjeta perforadas, que se creaban según un patrón y leídas por medio de luz. Cada una de esas tarjetas, tenían espacio suficiente para 80 caracteres de información. 80 caracteres no era mucha información. Escriba en ella su nombre completo, dirección, fecha de nacimiento y los blancos entre palabras, fácilmente sobre pasa los 80 caracteres. ¡ Que gran problema almacenar información en estas tarjetas! Este fue precisamente el problema con que se enfrentaron los programadores de los 60's y 70's. Las tarjetas no eran suficientes para almacenar toda la información que se necesitaba, era realmente un compromiso. Así que escribían 020863 por 02/08/1963 salvando así cuatro preciosos caracteres, de los cuales dos eran "19". Los programadores comprometieron exactitud por costos cuando decidieron almacenar el año en dos dígitos. Su razonamiento, hasta ahora, tenía mucho sentido.

Especialmente si ubicamos este compromiso en su época. Eran los 60's y 70's, faltaban 30 o 40 años para el cambio de siglo, era lejano. Parte de su razonamiento era que sus códigos en este tiempo serían reemplazados. Se asumió que los programas escritos en los 60's y 70's no estarían en uso 30 años después. Esta particular presunción estaba equivocada, muy equivocada. Tenemos muchísimo código antiguo en uso, hoy día, conocido como "Sistemas heredados".


Tenga en cuenta que los compromisos nunca se hicieron en forma aislada, siempre fueron con colaboración. Los administradores de centro de cómputo, le decían al cliente que si querían almacenar cuatro dígitos en la fecha debían adquirir una computadora más grande y que se debían escribir programas más complicados para almacenar esos datos o utilizar 4 tarjetas perforadas más. El cliente típicamente les diría: ¿Acaso estás loco?

¿Quiere que gaste otro millón de dólares para almacenar dos dígitos más, que probablemente no serán utilizados hasta dentro de 30 años? ¡Deje todo con dos dígitos y déjeme tranquilo! Más bien utilice sólo un dígito y ahórreme dinero. Pues bien este compromiso se constituyó en un estándar en la industria. Las computadoras siempre eran caras, hasta la última década cuando se ha hecho posible que incluso tengamos computadoras en nuestra casas y son mucho más poderosas que las del 60 y 70.

El problema es que mientras las computadoras cambiaron, aquel estándar no cambió. Muchos programadores, hasta ahora, han escrito códigos que fallarán en el año 2000. Generalmente no somos muy buenos para mirar el futuro y planificar eventos que tendrán lugar 5 años en el futuro. Otro desafortunado capítulo en esta historia es que los "profesionales" en computación son muy rotativos.

Es inusual que en la industria de la computación trabajen por más de 5 años para la misma compañía haciendo lo mismo. Por qué preocuparse entonces por un problema que se presentará en el futuro, si probablemente trabaje en otro sitio.

Bien, entendemos el problema, pero el problema seguramente es sencillo de resolver, sólo ponga dos dígitos más y ya, ¿qué problema hay en eso? Bueno realmente esto no es difícil del todo. Prácticamente cualquier programador puede mirar una línea de código que contiene un cálculo de fecha y hacer los cambios necesarios para resolver el asunto. Pero el problema es que ese no es el problema...!

Cuando se dice "ponga dos dígitos más y ya", se está haciendo una presunción. Y el que la hace no sabe qué dañina es. La presunción es que: sabemos dónde están las fechas. ¡No es cierto!. No sabemos dónde están las fechas en nuestros códigos de programas y debemos buscarlas para arreglarlas. Buscarlas es la parte más larga del problema por dos razones:

La primera, ¿tiene idea de la cantidad de líneas de código que se han escrito en los últimos 30 años? No es difícil para una compañía tener 100,000,000 líneas de código o más. (para este artículo se asume que su compañía los tiene). 100,000,000 no es fácil de recorrer, y es complicado darse una idea de lo que significa en líneas de código.