sábado, 24 de agosto de 2013

¿Qué es un algoritmo?

La Real Academia Española define la palabra algoritmo como conjunto ordenado y finito de operaciones que permite hallar la solución de un problema. Aunque quizás no seamos conscientes de ello, es muy normal que nos ayudemos de algoritmos en nuestra vida cotidiana, y no sólo cuando utilizamos ordenadores o realizamos cálculos matemáticos. Por ejemplo, cuando compramos una estantería de bajo coste, de esas de móntela usted mismo, junto con las tablas de madera encontramos un folleto con instrucciones, o mejor dicho con un algoritmo, que nos indica cómo montarla; cuando nos subimos en nuestro coche seguimos un algoritmo preciso que nos permite conducir (introducir la llave, girarla a la posición de contacto, volverla a girar hasta la posición de arranque, soltar la llave cuando el motor arranque, pisar el embrague, introducir la marcha primera, etc); o cuando invitamos a unos amigos a cenar a casa y queremos sorprenderlos con un menú especial, consultamos nuestro libro de recetas de cocina, que en definitiva no es otra cosa que un libro lleno de algoritmos culinarios.
Veamos uno de estos ejemplos con más detalle. Imaginemos que queremos hacer una tortilla de patatas pero, como nos ha pasado a todos en algún momento de nuestra vida, no sabemos cómo se hace. Así que cogemos nuestro libro de recetas de cocina para hijos recién emancipados, y buscamos la receta correspondiente a la tortilla. Seguramente el libro encontraremos algo parecido a:

Trocear las patatas en taquitos de medio centímetro cuadrado, y freirlas en una sartén con aceite abundante y no muy caliente. Al poco rato, añadir la cebolla y dejar que se fría junto con las patatas. En un cuenco batimos los huevos, le echamos sal, y añadimos las patatas y cebolla ya fritas, mezclándolo todo bien. Dejamos un poco de aceite en la sartén y echamos la mezcla. Esperamos a que se cuaje un poco, le damos la vuelta, y la dejamos a fuego lento hasta que termine de cuajar.

Evidentemente el párrafo anterior, aunque resulta fácil de entender para cualquier ser humano, es totalmente incomprensible para un ordenador. Podríamos reescribir la receta de manera algo más formal y precisa, intentando darle apariencia de programa de ordenador (véase el "algoritmo" de más abajo), pero aun así seguiría siendo un galimatías ininteligible para las máquinas. De hecho, aun contando con instrucciones tan precisas de cómo se hace una tortilla de patatas, es normal que a cada uno de nosotros nos salgan tortillas completamente diferentes (yo personalmente, aun no consigo entender qué hace mi mujer para que a ella le salgan las tortillas mucho más ricas que a mi). El problema es que nuestro algoritmo “Tortilla de Patatas” contiene todavía muchos elementos que, o bien tienen interpretaciones subjetivas (¿a qué temperatura se entiende que el aceite no está muy caliente?), o bien están descritos de manera demasiado vaga (¿qué se entiende por cuajar?), y por tanto, no son directamente interpretables por un ordenador. Las recetas, tal y como nos las encontramos en los libros de cocina, no entrarían dentro de lo que en informática se conoce como procedimientos computacionalmente bien definidos, y por tanto, no son directamente interpretables por los ordenadores. Los algoritmos utilizados en informática tienen que ser bastante más precisos que nuestro ejemplo de la tortilla, y basarse en pasitos mucho más pequeños.
1  Cortar patatas en tacos
2  Calentar aceite en sartén
3  Añadir patatas a sartén
4  Añadir cebolla a sartén
5  Freir patatas y cebolla
6  Batir huevos en cuenco
7  Añadir patatas y cebolla al cuenco
8  Quitar aceite sartén
9  Echar la mezcla de cuenco a sartén
10 Cuajar un poco
11 Dar la vuelta
12 Terminar de cuajar
Por tanto, los algoritmos para ordenador deben estar compuestos de sucesiones de pasos muy simples y muy bien definidos. Ejemplos típicos de posibles pasos son: sumar dos números dados, comparar si un número es mayor que otro, comprobar si la tercera letra de la palabra “ejemplo” es una “e”, etcétera. Estos pasos suelen venir agrupados en bloques que se pueden repetir varias veces, también existen pasos en los que es posible tomar decisiones, o incluso se pueden crear grupos de pasos comunes para utilizarlos más de una vez. Además, para que el algoritmo esté completo, es fundamental indicar cuales son los valores de entrada del mismo, y cuales son los resultados o valores de salida. Por ejemplo, un algoritmo podría tener como entrada un conjunto de diez números (17, 1, 5, 13, 15, 9, 21, 2, 4, 8), y como salida devolver el mismo conjunto de números pero ordenados de mayor a menor (21, 17, 15, 13, 9, 8, 5, 4, 2, 1).
Pero no se preocupe el lector si por ahora no entiende del todo cómo son los algoritmos que utilizan los ordenadores, ya que todas estas cuestiones irán quedando más claras a lo largo de las próximas entradas de este blog.

sábado, 17 de agosto de 2013

El Arte de Programar

La mayoría de las ciudades de hoy en día funcionan gracias a los ordenadores. Sea cual sea el lugar a donde vayamos siempre encontraremos un ordenador cerca. Son ya tan comunes que ni siquiera nos damos cuenta de que están ahí, pero basta con detenemos un momento y fijamos con atención para verlos, puede incluso que los encontremos en los lugares más insospechados. En la oficina tenemos ordenadores que nos ayudan a hacer nuestro trabajo; en casa tenemos un ordenador como centro de ocio, para juegos, música y video, o miniordenadores empotrados dentro de los más variados electrodomésticos, como la televisión, el equipo de alta fidelidad, e incluso en el microondas; en el supermercado de la esquina hay unos cuantos ordenadores más, las cajas registradoras, los equipos de inventario; en nuestro coche está el famoso ordenador de abordo, que vigila que todo funciona correctamente; y así un largo etcétera. Y también están aquellos ordenadores que llevamos todo el día de un lado a otro con nosotros, como el teléfono móvil, la agenda electrónica, o el reloj. Hemos llegado a una situación de dependencia tal que nos resulta muy difícil concebir el mundo sin la existencia de los ordenadores (otra cuestión muy distinta es si realmente en todos los casos el ordenador nos hace la vida más fácil).
Lo que nunca hacemos, a menos que uno sea un profesional que trabaja en el mundo de la informática, es pararnos a pensar cómo funcionan todos estos ordenadores. Nos han dicho muchas veces que los ordenadores son en realidad máquinas muy tontas, que para funcionar correctamente necesitan de un conjunto de instrucciones que les digan con todo lujo de detalles qué es lo que tienen que hacer en cada momento, y cómo lo tienen que hacer. También sabemos que estos conjuntos de instrucciones se llaman programas, y que los programas se escriben utilizando los llamados lenguajes de programación, que son muchos y muy variados. Seguramente nos suenen nombres como Visual Basic, Java o C++. Pero en realidad sabemos muy poco sobre la forma y contenido de estos programas, lo cual es perfectamente comprensible, porque a priori parece un tema irrelevante y sumamente aburrido. ¿A quién se le ocurriría estudiar en su tiempo libre el programa que controla un aparato de aire acondicionado? Sin embargo, los programas no son tan aburridos como parece. En el corazón de los programas se encuentran los algoritmos. La mayoría de las veces, estos algoritmos son simples sucesiones de pasos triviales que conducen a la solución de un problema. Por ejemplo, si la temperatura de la habitación ha superado los 25º centígrados, entonces enciende el compresor del aire acondicionado. Pero otras veces, los algoritmos que implementan los programas de ordenador son verdaderas obras de arte del intelecto humano. Quién sabe, a lo mejor el funcionamiento de nuestro aparato de aire acondicionado está basado en una interesantísima teoría matemática de lógica difusa, donde las cosas no son sólo ciertas o falsas, sino que pueden ser medio ciertas o tres cuartos falsas.
El presente blog es precisamente eso, un apasionante viaje por el mágico mundo de los algoritmos. No se necesita nada para poder acompañarnos, no es necesario saber programar, ni saber de matemáticas; tan sólo se necesita curiosidad y muchas ganas de aprender. Así que abróchense los cinturones, que despegamos.