Pages - Menu

jueves, 11 de abril de 2013

¿Por qué programar se parece a cocinar?

Los que me conocen saben que amo programar casi tanto como amo la comida, un buen plato de comida preparada en casa o en un bar puede aportar sensaciones muy placenteras. ¿Quién no conoce la sensación que invade cuando después de un día duro de trabajo nos sentamos relajados a la mesa con nuestro plato de comida favorito?

¿Por qué programar se parece a cocinar?
Foto tomada de freedigitalphotos.net

Programar se parece mucho a cocinar, cuando cocinamos seleccionamos los ingredientes necesarios, disponemos los utensilios para cortar, trocear o mezclar, ponemos la olla o sartén al fuego, vamos preparando los ingredientes y los echamos al recipiente en un orden concreto. Estamos realizando pequeñas acciones y en orden para que el resultado final sea un exquisito plato.

Con la programación pasa exactamente igual, nosotros somos el chef, nuestro puesto de trabajo es la cocina, nuestros entornos de desarrollo son los recipientes donde preparar la comida, los ingredientes y utensilios son las características y funciones del entorno de desarrollo y nuestro computador es el plato donde se servirá la comida.

Cuando creamos un programa estamos definiendo las instrucciones que la computadora realizará, estas instrucciones seguirán el orden de ejecución natural (primera acción, luego segunda, luego tercera, etc.) y no hará ninguna instrucción si aún no ha llegado a ella, una vez que el programa haya realizado la última de las instrucciones éste terminará.

Éste es el concepto principal de programación estructurada.

Al igual que no podemos freír un huevo sin antes romper la cáscara y verter su contenido en una sartén, no podemos crear un algoritmo que realice una suma si no solicitamos los valores con los que vamos a trabajar. No podemos freír el huevo si no echamos aceite a la sartén y lo calentamos, así como tampoco podemos crear un algoritmo que diga qué número es el mayor si sólo estamos trabajando con variables de tipo carácter.

La atención a los pequeños detalles es fundamental para realizar un buen programa, si disponemos los “ingredientes” de forma incorrecta o en el orden que no se debe lo más normal es que el programa no funcione correctamente (al igual que un huevo frito no se haría correctamente o no estaría bueno).

Dividir una acción grande en otras más pequeñas hará más fácil la creación de un programa, nos permitirá estudiar correctamente cada aspecto del mismo, hará posible un mantenimiento post-desarrollo sencillo y nos ayudará a localizar posibles errores.

Nunca freiríamos un huevo tan sólo haciendo la acción “freír un huevo”, así como tampoco crearemos un programa dándole al computador la orden “crear programa”. Crear un programa no es una acción, es el resultado de realizar infinidad de pequeñas acciones ordenadas, dispuestas correctamente y probadas.

Estos dos primeros conceptos son clave en la programación estructurada, disponer instrucciones en un orden concreto y dividir acciones grandes en otras más pequeñas.

En cuanto tengamos asimilada la asociación entre la programación y la realización de acciones cotidianas habremos dado un buen paso hacia delante.

Yo por ejemplo a modo rápido freiría un huevo así:
  1. Enciendo el fuego.
  2. Coloco el recipiente sobre el fuego.
  3. Echo aceite dentro del recipiente.
  4. Espero que se caliente.
  5. Cojo un huevo.
  6. Le doy unos golpecitos contra una superficie con borde hasta conseguir cascarlo un poco.
  7. Sitúo el huevo encima del recipiente a una distancia corta.
  8. Ayudándome de los dedos, abro la cáscara por el lado cascado.
  9. Vierto la clara y la yema en la sartén.
  10. Cojo un instrumento para mover el huevo.
  11. Lo dejo freírse a la vez que lo muevo hasta que veamos que está preparado.
  12. Cojo un plato.
  13. Recojo el huevo con el instrumento, con cuidado de no romper la yema.
  14. Coloco el huevo en el plato.
  15. Apago el fuego.
Parece un ejemplo simple pero yo os pregunto:

¿He hecho bien en dar por sentado que todos los ingredientes y utensilios están disponibles?

Es posible que necesite comprobar que tenemos todo lo necesario antes de encender un fuego.

¿De donde sale el recipiente donde echo el aceite y el huevo?

No he cogido el recipiente de ninguna parte, es posible que ni exista y el resultado sea que esté sólo en mi cocina frente a un fuego encendido (forever alone).

¿De donde sale el aceite?

Lo mismo que el recipiente.

¿La cáscara la llevo en las manos siempre?

Según mis instrucciones sí. No he dado la instrucción de soltar la cáscara en ningún sitio, por lo que en el momento de mover el huevo y recogerlo mientras tengo cáscaras en las dos manos puede ser un poco peligroso.

Éste ejemplo servirá para abrir un poco la mente, sobre todo si estás empezando a programar o necesitas comprender mejor como abordar algún problema, la importancia de estar atento a los detalles es esencial o los resultados pueden ser catastróficos.

Éste mismo ejemplo se puede aplicar a lo que queramos de la vida cotidiana, como cambiar de canal en la televisión, beber agua, dormir o conducir. Una vez que dispongamos de las herramientas necesarias y la mente preparada para ir abordando tareas de programación podremos hacer aplicaciones donde gestionemos datos de usuarios, operaciones matemáticas, transacciones, y por supuesto videojuegos.

¿Y a vosotros a qué se os asemeja la programación? ¿Qué pasos daríais para freír un huevo?