Buscar en Taty Talk...

quién me sigue??

julio 03, 2008

Informáticos vs Electrónicos

Entre ayer y hoy me llegaron dos acertijos a mi celular, uno de ellos si lo pude resolver con un poco de lógica, el otro no hubo manera, pero mi hermano que estudia Ing. Electrónica lo solucionó como si fuera un simple 1+1... Después entendí que mi error fue enfocarme en el problema y no en la solución. Pero luego de mucho análisis recordé las innumerables veces en que mi hermano y un amigo Ing. Industrial humillaban mi carrera haciendo parecer las suyas mas difíciles e importantes. El eterno pleito con mi hermano es cual carrera depende de cual, que sistemas no seria nada sin la electrónica o si la electrónica depende totalmente de la informática para poder funcionar, a algún informático que lea esto se le hará familiar la discusión. Pues pensando en esa dependencia entre ambas ingenierías me encontré esta historia que aunke no va muy a favor de la informática, me hizo mucha gracia. Tal vez los que no saben de programación no la entiendan mucho, pero si conocen lo que es OOP seguro se van a reír :D

Érase una vez, en un reino no muy lejano, un rey que convocó a dos de sus consejeros para ponerlos a prueba. Les mostró a ambos una caja metálica brillante con 2 ranuras en la parte superior, una rueda de control, y una palanca. "¿Qué creéis que es esto?".

Uno de los consejeros, un ingeniero electrónico, respondió primero. "Es una tostadora", dijo. El rey preguntó "¿Cómo diseñarías un ordenador empotrado con ella?". El ingeniero contestó, "Utilizando un microcontrolador de 4 bits, escribiría un programa sencillo que lee el degradado de claro a oscuro de la rueda de control y cuantizaría su posición en uno de 16 tonos posibles del degradado, desde blanco como la nieve, hasta negro como el carbón. El programa utilizaría ese nivel del degradado como índice para una tabla de 16 elementos con los valores iniciales del reloj. Entonces encendería los elementos calentadores y comenzaría la cuenta atrás del reloj con el valor inicial elegido de la tabla. Al finalizar el tiempo de calentado, apagaría el calor y haría saltar la tostada. Vuelva la semana que viene y le enseñaré un prototipo funcional".

El segundo consejero, un ingeniero informático, inmediatamente reconoció el peligro de un hilo de pensamiento tan superficial. Dijo, "Las tostadoras no sólo convierten el pan en tostadas, también sirven para calentar gofres congelados. Lo que tiene ante usted es realmente un cocinador de desayunos. Conforme los súbditos de su reino se sofistiquen, demandarán una mayor funcionalidad. Necesitarán un cocinador de desallunos que pueda cocinar una salchicha, freír beicon, y hacer huevos revueltos. Una tostadora que sólo hace tostadas quedaría obsoleta muy pronto. Si no miramos al futuro, tendremos que rediseñar completamente la tostadora dentro de unos años".

"Teniendo esto en cuenta, podemos formular una solución más inteligente al problema. Primero, creamos una clase de comida de desayuno. Especializamos esa clase en las subclases cereales, cerdo y aves. El proceso de especialización se debe repetir con los cereales para obtener tostadas, madalenas, bizcochos y gofres; el cerdo se divide en salchichas, longanizas y beicon; y las aves se dividen en huevos revueltos, huevos duros, huevos pasados por agua, huevos fritos, y varias clases de tortillas".

"La tortilla de jamón y queso merecería una atención especial por que debe heredar características de las clases cerdo, lechería, y aves. Entonces tenemos que el problema no se puede resolver sin usar herencia múltiple. En tiempo de ejecución, el programa debe crear el objeto apropiado, y enviar un mensaje a ese objeto que diga, 'cocínate'. La semántica de este mensaje depende, por supuesto, del tipo de objeto, para que tenga distinto significado para una tostada que para unos huevos revueltos".

"Revisando el proceso hasta ahora, vemos que la fase de análisis ha revelado que el requisito primario es cocinar cualquier tipo de comida para el desayuno. En la fase de diseño hemos descubierto algunos requisitos derivados. Concretamente necesitamos un lenguaje orientado a objetos que permita herencia múltiple. Por supuesto, los usuarios no quieren que los huevos se enfríen mientras que el beicon aún se está haciendo, así que también hará falta programación concurrente".

"No debemos olvidarnos de la interfaz de usuario. La palanca que hace descender la comida carece de versatilidad suficiente, y la rueda con el degradado de claro a oscuro es confusa. Los usuarios no comprarán el producto a menos que tenga un interfaz gráfico amigable. Cuando el cocinador de desayunos se enchufe, los usuarios deberían ver el camión del lechero en la pantalla. Los usuarios hacen clic en el camión y el mensaje "Arrancando UNIX v8.3" aparece en la pantalla (UNIX 8.3 debería estar disponible para cuando el producto llegue al mercado). Los usuarios podrían desplegar un menú y clicar en la comida que quieran cocinar".

"Habiendo tomado la sabia decisión de especificar el software primero en la fase de diseño, todo lo que queda es elegir una plataforma hardware para la fase de implementación. Un Intel 80386 con 8MB de memoria, un disco duro de 30MB, y un monitor VGA debería ser suficiente. Si se elige un lenguaje de programación multitarea, orientado a objetos y que soporte herencia múltiple con un GUI de fábrica, escribir el programa será un suspiro (¡Imagínese lo difícil que hubiera sido si hubiésemos seguido descerebradamente una estrategia de diseño del hardware primero para acabar encerrados en un microcontrolador de 4 bits!)".

Sabiamente, el rey mandó que cortaran la cabeza del ingeniero informático, y todos vivieron felices y comieron tostadas.

1 comentarios:

Anónimo dijo...

Esta es la historia que se repite una y otra vez, casi todos los días a la hora del café cuando estos dos mundos se encuentran.

Jeff.