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?
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í:
- Enciendo el fuego.
- Coloco el recipiente sobre el fuego.
- Echo aceite dentro del recipiente.
- Espero que se caliente.
- Cojo un huevo.
- Le doy unos golpecitos contra una superficie con borde hasta conseguir cascarlo un poco.
- Sitúo el huevo encima del recipiente a una distancia corta.
- Ayudándome de los dedos, abro la cáscara por el lado cascado.
- Vierto la clara y la yema en la sartén.
- Cojo un instrumento para mover el huevo.
- Lo dejo freírse a la vez que lo muevo hasta que veamos que está preparado.
- Cojo un plato.
- Recojo el huevo con el instrumento, con cuidado de no romper la yema.
- Coloco el huevo en el plato.
- 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?