En el blog de makezine, me he encontrado con este relato en inglés, y me ha hecho gracia.
Lo he encontrado traducido, pero no me ha gustado y he decidido traducirlo yo mismo (evidentemente, ambas traducciones son similares, además de que he usado la anterior para resolver algunas dudas):
É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.
genial.....
ResponderEliminar