jueves, 27 de junio de 2013

Aprendiendo a programar






Aprendiendo a programar

Versión completa del post en Aprendiendo a programar by PepeChorva.com

Saberse las funciones y/o comandos de un lenguaje no es saber programar, es saber utilizar un lenguaje. Es como saberse el diccionario de inglés y no saber decir una frase, nos falta lo más importante, la gramática.

En este post intentaré explicar de forma sencilla como programar (no sólo en Arduino, el método vale para todos los lenguajes… o casi).
Básicamente, la programación consiste en dar una serie de pasos al ordenador para que éste los ejecute, de ahí la frase “El ordenador hace lo que le dices que haga y, en ocasiones, lo que quieres que haga”.
¿Como le doy los pasos? Bueno, a los pasos, los informáticos nos gusta llamarlos algoritmos :)
Los algoritmos, funciones, procedimientos… todo esto nos suena a matemáticas, es cierto, la programación tiene un 90% de componente matemática… pero un 10% de componente artístico, que viene a ser el sello personal de cada programador.
Vamos a poner un ejemplo de algoritmo;
1
2
3
4
5
6
7
8
9
10
11
12
Ingredientes:
3 cebollas
1/4L aceite
1 pizca de sal
receta:
Ponemos el aceite a calentar en una sartén.
Cortamos las cebollas.
Si el aceite está caliente,
añadimos la cebolla,
añadimos sal
y lo dejamos cocinar a fuego lento durante 5 minutos.

No, no se me ha ido la olla, es una receta, sí :) a las recetas, las podemos llamar perfectamente “algoritmos” ya que un algoritmos es, ni más ni menos, una serie de instrucciones.
¿Te parece una comparación estúpida? Vamos a ver…

En programación, se usan variables que tienen un tipo definido, en nuestro caso, las variables son Cebollas, aceite y sal.

¿Qué tipo definido tienen cada una?¿Qué tienen que ver las cebollas con las matemáticas?
Vamos por partes, las variables en programación son ni más ni menos que un lugar en la memoria de un ordenador. Son variables porque en cualquier momento, puedes “variar” su valor, aunque no su tipo (tipo entero, tipo real… ). En nuestro caso, usamos 3 variables que definiríamos así:
1
2
3
int cebollas = 3; //usaremos 3 cebollas enteras, no me valen medias cebollas
float aceite = 0,25; //no podemos usar un aceite, tomamos la cantidad basandonos en el S.I. y usaremos 1/4 de litro (0,25l)
float sal; //¿cuanta sal necesitaremos?¿cuanto es una pizca? A veces este valor no podemos saber su cantidad exacta, por lo que se averiguará dentro del programa
Tenemos definidos los componentes que vamos a usar, pero… ¿como los hemos de usar? Aquí entra en juego la recet… eeeh… el algoritmo:
1
2
3
4
receta:
Ponemos el aceite a calentar en una sartén.
Cortamos las cebollas.
Si el aceite está caliente, añadimos la cebolla, añadimos sal y lo dejamos cocinar a fuego lento durante 5 minutos.

Esto es muy abstracto, hay que definir mejor las cosas, tengamos en cuenta lo dicho de los computadores, yo le voy a decir lo que tiene que hacer, no lo que quiero que haga. Así pues, habrá que aproximar los dos extremos lo más posible.
Concretemos más la receta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Ponemos el aceite a calentar en una sartén. //a veces, hay instrucciones que no hace falta definirlas más
Cortamos las cebollas. //¿Cuanto?¿un corte a cada cebolla? mejor así
-Cortamos las cebollas en pedacitos pequeños.
Si el aceite está caliente, añadimos la cebolla, añadimos sal y lo dejamos cocinar a fuego lento durante 5 minutos.
//¿Y si el aceite no está todavía caliente?
-Esperamos a que el aceite esté caliente. //ok, ¿y ahora?
echamos la cebolla y añadimos sal
//¿cuanta sal?¿medio kilo?¿Y luego quien se come la cebolla?
Echamos la cebolla y lo probamos.
mientras no está al punto de sal, echamos una cucharadita de sal y probamos
//las máquinas son estúpidas, ¿y si echamos la sal en el centro y probamos su sabor en el borde?
Echamos la cebolla y lo probamos.
-mientras no está al punto de sal, echamos una cucharadita de sal, removemos la cebolla y probamos. //mejor así, ¿no crees?
-Lo dejamos cocinar a fuego lento durante 5 minutos //podríamos complicarlo más, pero lo dejamos aquí

....

Consejos para programar:

  • Empieza poco a poco, no quieras hacer un robot dominador del mundo sin saber utilizar un servo, por ejemplo.
  • No uses nombres aleatorios para las variables, si al sensor lo llamas s1 y al servo s2, imagina juntar 6 sensores y 6 servos, un jaleo, mejor usar nombres descriptivos, como no puedes poner nombres separados con espacios, usa mayúsculas en las palabras (miservo, sensorTemperatura).
  • No tengas miedo a preguntar en foros, pero no pretendas que e resuelvan todo, la idea es tuya, así que hazla tu.
  • Busca ejemplos parecidos y reutiliza código, a veces quieres hacer algo complejo y otros lo han resuelto de forma sencilla.
  • Comenta el código como si lo tuviera que leer tu hermanito/hijo de 6 años, dentro de unos meses, al volver a leer el código, lo agradecerás.
En este tutorial no pretendo enseñar a hacer un termómetro, sino a ayudar a pensar en cómo crear el programa que lo controle.

No pretendo ser una ayuda a informáticos y/o electrónicos, esos ya saben programar y, de hecho, me dirán que este tuto es una basura porque me dejo muchas cosas. Considero que para alguien que no tiene conocimientos de programación, como una introducción a ella es más que suficiente.

También te dejo a tí, si estás interesado en ello, que busques información en www.arduino.cc sobre las funciones, comandos y objetos que implementa Arduino.
Este tutorial lleva una dedicatoria especial, a Gloria Martinez Vidal (Glo), profesora de la UJI y una gran amiga, fallecida en 2009. He tomado el ejemplo de pochar cebollas de una de sus clases como introducción.

También he de agradecer a Pablo, chico que conocí en la OSHWCon 2011 que fue el que me preguntó cómo programar (no es electrónico ni informático, o sea, de programar 0) y le estuve explicando con este mismo ejemplo. Gracias a ello, me he decidido a sacar este tutorial.
The Aprendiendo a programar by PepeChorva.com, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.