¿Cómo hablo con la máquina?
Pongamos que, un buen día, ante tus ojos, tienes una maravillosa
máquina que la gente llama ordenador.
La miras con cautela (¿morderá?), y lo primero que tus
ojos observan, es que consta de varios trozos. Uno de ellos, de verdad,
es clavado a la tele de la salita (¿podré ver la peli de
la 2 desde aquí?). Otro de esos trozos recuerda a las
máquinas de escribir de nuestra infancia (¿le podré
mandar una carta a mi abuela?; ¿y por dónde
meto el papel?).
Sin embargo, en un ordenador "medio", suele haber algo más, que lo
primero que recuerda es a una caja grande de zapatos, con la
diferencia de que no tiene zapatos dentro.
Se le suele llamar "torre" (pues yo no veo ningún castillo) o,
simplemente, caja. Si la abrimos, entre todo el maremágnum de
cables existente, podemos ver unas plaquitas muy finas. Un consejo:
no las rompas. Tienes ante ti, al cerebro pensante (es un decir) de la
máquina, y a todos sus súbditos.
Entonces, como eres una persona emprendedora, te preguntas, "¿y
cómo demonios le convenzo para que se ponga la peli de la 2?",
"¿sabrá hacer ganchillo?", "¿podremos hacernos
amigos?". Esto último depende de ti, y sólo de ti.
Porque, lo primero que tienes que tener pero que muy claro es que la
máquina hará única y exclusivamente lo que
tú le digas. Lo segundo, es saber que tu máquina tiene
limitaciones (lo siento mucho, pero sin brazos dudo mucho que pueda
hacerte la comida) y que está diseñada para unas tareas
concretas ("¡pero bueno, ¿puedo o no puedo ver la peli
de la 2?!"). Lo tercero: tienes que aprender el lenguaje de la
máquina. Porque, claro, si le recitas algún poema, nadie
te salvará de su gesto de indiferencia: no te entiende. La
pregunta lógica, pues, ¿y cuál es el idioma de la
máquina? ("¿que no sabrá ruso y mira cómo
se lo calla?").
Si eres despierto, habrás observado con especial atención
cuando he dicho que hay un maremágnum de cables en alguna parte.
No importa tanto lo de la parte como lo de los cables. Bien, veamos:
cables. ¿Y yo para qué quiero un cable? Bueno, sí,
puedo querer estrangular al perro de la vecina, vale, pero eso no me
ayuda a saber cómo hablarle a mi máquina (ni siquiera
al perro de la vecina). ¿Por dónde íbamos? Ah,
sí... CABLES. Bueno, ahora que lo pienso, por los cables
pasa la corriente. Uuummm... CORRIENTE, sí, vamos bien.
¿Y qué le pasa a la corriente? ("ah, yo no sé,
pregúntale a ver"). Pues que, como el dinero, *está*
o *no está*. Vale, vamos progresando.
Si te fijas más aún, en esas placas que te he sugerido
que no rompas, hay dibujitos como los de las "pelis" futuristas con un
montón de líneas, y hay como una cajita negra grandota
con un montón de patitas ("¡Agh, por Diox, una cucaracha!,
¡Traedme el insecticida!") ¡Vaya, pero si de esas patitas
salen más de esas líneas!
No te engañes: esas líneas son cables, y la cucaracha
grande es la que manda. Esa cucarachita está preparada para
entender un idioma (no tan rico como el castellano) que le permite
hacer sus cuentas, encargarle a alguien que las haga por ella
("¿tiene una calculadora?"), y, lo más importante, por
medio de esos cables, dar órdenes a diestro y siniestro a
sus súbditos y recibir las respuestas de los mismos.
Tiene muchas responsabilidades encima, para ser una cosa tan chica.
Y suele responder al nombre de "procesador" (aunque no se gira
cuando le llamas).
Sus colaboradores se encargan (si están todos lo cables enchufados
como toca, cosa que presuponemos) de hacer cuentas, de enviar
señales de vídeo a esa cosa "clavada a la tele de la
salita" para que puedas ver desde unas tristes letras blancas en fondo
negro (aunque tienen su encanto) a la última novedad en 3D con
muchos colorines, de permitirnos que al pulsar una tecla aparezca por
esa pantalla, en fin... ¡todo un mundo!
Y el procesador, para que le hablen, simplemente necesita que le
digas: "0" o "1". ("¡Pero bueno, ¿y para esto tanto rollo
con que si lenguajes de programación que si historias?").
¿Qué significa esto? ¿Por qué, de entre
todas las posibles formas de comunicación, ha ido a elegir
la más estúpida?
Bueno, en realidad no lo es tanto. Lo que quiere decir es, "0": ausencia
de corriente. "1": presencia de corriente. Es la manera más
fácil. Pero esto no acaba aquí. Como podrás
imaginar, los 0 y 1 pueden aparecer de muchas maneras. Ah, ahí
has dado con la clave de todo: 0 y 1 son "el alfabeto", pero todas
las formas en que pueden aparecer son sus "palabras" (aunque no te
recomendaría que asociaras palabra con esto).
Ya está claro: tengo que saber hablar en 0 y 1 si quiero tener
algún tipo de relación con mi ordenador. Pero no es
nada "humano", digamos intuitivo. Lo ideal sería que pudiera
hablarle de forma que se parezca más a mi manera de hablar,
puesto que no estamos ahora para ir aprendiendo idiomas tan
"exóticos".
Y entonces llega el ser humano con su ingenio, y decide inventarse
un lenguaje más sencillo con el que hablarle a la máquina:
y nació el ensamblador. Pero, para una persona cuyo objetivo
más ambicioso (por ahora) es escribir un "Hola Mundo", resulta
demasiado complicado. ¿Por qué? Pues porque requiere
conocer a la máquina como a uno mismo, y si uno mismo no llega
a conocerse bien, qué me direis de su máquina.
Así, en un alarde de ingenio, el ser humano repite jugada, y se
inventa otros lenguajes que, ahora sí, son más parecidos
a nuestra forma de pensar.
Estos lenguajes, como todo, hay que aprendérselos, pero tienen una
ventaja, y es que hay varios puntos en común.
Todos constan de unos determinados tipos de variables. Una variable
es como una caja, donde ahora puedo meter un zapato y mañana un
tomate. Ahora, yo puedo haber etiquetado mis cajas y decir
"aquí sólo fruta": será una variable de tipo FRUTA.
O, "aquí sólo legumbres": será una variable de
tipo LEGUMBRE. Esto es interesante, porque en el momento en que yo
vea FRUTA, ya sé que dentro no hay cerveza (y tendré que
buscar en otro sitio, jo, qué sed...). Pero no sólo eso:
yo sé que tengo muchas cajas para frutas, pero puedo querer
bautizarlas ("tú serás la caja de frutas Juana"), y
así llamarlas por su nombre. Podré cambiar (o no) su
contenido (hoy Juana tiene un melón pero mañana
le pondré ciruelas), pero NO lo que puede contener: FRUTA.
Esto también lo tiene en común los lenguajes de
programación. Sólo que sus variables son de otro TIPO.
Pueden ser enteros (sí, como los números que nos
enseñaron en la infancia), números con decimales,
cadenas de caracteres (no es más que un caracter detrás
de otro) y otros que ahora no comentamos (quedan para más
adelante).
Lo normal es declarar las variables al principio de un programa.
Declarar no es más que decir "mira, yo quiero tres variables
enteras, y quiero que una se llame Pepi, otra Juani y otra Yoli".
A partir de este momento, podrás meter un -4 en Pepi, un 2 en
Yoli, y hacer Pepi+Yoli. El resultado será -2.
Vaya, esto se pone interesante. ¿Qué más cosas
me permite hacer un lenguaje de programación? Pues me permite
hacer operaciones conocidas por todos como sumar, restar, multiplicar
y dividir.
Los lenguajes de programación, cuentan todos en su haber con un
juego de "instrucciones". Una instrucción no es más que
una orden que nosotros le damos a la máquina.
Y es que, al fin y al cabo, un PROGRAMA no es más que una secuencia
de instrucciones (escritas en algún lenguaje de programación) pensado
para RESOLVER algún tipo de PROBLEMA. Si no sabemos resolver este
problema, no podremos escribir el programa.
A ti se te puede ocurrir una manera de resolverlo. A tu vecino, otra.
Este METODO con el que resolveis el problema, es lo que se llama
ALGORITMO, y es lo que vamos a ver en este cursito
cómo se hacen.
Un algoritmo no es más que una secuencia de pasos que, seguidos uno
a uno, me permiten resolver un problema.
Por ejemplo, cuando quiero ver una película de vídeo,
podría hacer:
- Elijo una película de las de mi colección.
- Compruebo SI TV y vídeo están conectados a la red (y procedo).
- SI la TV está apagada, la enciendo, SI NO, pues no. Y lo mismo con el vídeo.
- Abro el estuche de la película.
- Saco la película de su estuche.
- Introduzco la película en el vídeo. Dejo el estuche sobre el vídeo.
- SI la TV no está en el canal adecuado, la cambio, SI NO, pues no.
- Cojo los mandos a distancia (el del TV y el del vídeo).
- Me pongo cómodo.
- Pulso PLAY en el mando del vídeo.
¿A qué no se os había ocurrido?
Fijaos bien en unos detalles que son fundamentales y que aparecen en
este algoritmo:
- La descripción de cada paso no me lleva a
ambigüedades: los pasos son absolutamente
explícitos y no inducen a error.
- El número de pasos es finito.
Y es que no puedes tener eternamente pensando a la máquina si
pretendes que te dé algún resultado en algún
momento.
Podría poner una definición rigurosa
de lo que es un algoritmo, pero me parece que con esto se coge
la idea.
Notar también que he escrito en mayúsculas las palabras
SI y SI NO. Como podeis imaginar, formar parte de la manera en que se
escriben algoritmos.
Por ahora, os invito a que describais algorítmicamente situaciones
cotidianas de vuestra vida. En la próxima entrega haré un
resumencito escribiendo las cosas de forma algo más rigurosa (al
principio lo que importa es que se entiendan las ideas),
completaré lo dicho sobre las variables, y seguiremos por esos
pecaminosos senderos del mundo de la programación: las
instrucciones de control de un programa.