Para el desarrollo de un sistema informático, se consideran cuatro grandes etapas, las cuales son claramente identificables y además cada una es requisito para la siguiente, estas son:
- Análisis: Esta primera etapa trata sobre la comprensión lógica del problema que se quiere resolver, no podemos intentar siquiera automatizar una solución a algo que aún no comprendemos en qué consiste o cómo funciona.
- Diseño: Consiste en las definición de los algoritmos, estos pueden ser escritos en pseudo-código o directamente en el lenguaje informático con el que trabajaremos en la siguiente etapa.
- Implementación: Es aquí donde se escribe el código en la computadora, en el IDE (ambiente de desarrollo integrado, por sus siglas en inglés) y lenguaje que hayamos escogido (c, Java, Python, etc.).
- Pruebas: La últma etapa involucra realizar muchas pruebas a nuestro programa ya finalizado, con el propósito de encontrar posibles errores o "bugs" para corregirlos en caso de que ocurran.
Nos concentraremos en la segunda etapa, en la definición de los algoritmos. Un algoritmo puede definirse como un conjunto de pasos ordenados que permiten resolver un problema.
Si bien un algoritmo puede aplicarse a diversas ramas de la ciencia, donde más protagonismo toma es en el área de la informática y computación. Los algoritmos son tan cotidianos que ni siquiera nos percatamos de usarlos a tiempo completo. Atarse los zapatos, llegar a la universidad o trabajo, cambiar un neumático o cocinar un huevo son todos procedimientos que podemos describirlos como un conjunto de pasos a seguir hasta lograr el resultado esperado.
Probemos con un ejemplo muy simple para clarificar el concepto, desarrollemos el algoritmo "cómo lavarse los dientes":
1. Abrir el tubo de pasta de dientes.
2. Aplicar pasta sobre el cepillo de dientes.
3. Llevar el cepillo a la boca.
4. Mover hacia la derecha y luego a la izquierda, 50 veces.
5. Mover hacia arriba y abajo, 50 veces.
6. Sacar el cepillo de la boca.
7. Abrir la llave de agua.
8. Llenar un vaso con agua.
9. Cerrar la llave de agua.
10 Enjuagar hasta que la boca esté limpia.
11. Cerrar el tubo de pasta de dientes.
A cualquiera le puede parecer ridículo especificar con tanto detalle cosas que aparentemente son obvias, sin embargo, debemos recordar que las computadoras son máquinas completamente lógicas y con un juego de instrucciones reducido, por lo que debemos indicar de manera explícita cada paso a realizar.
Existen dos parámetros que rigen el valor un algoritmo, estos son la efectividad y la eficacia. La efectividad se refiere básicamente a determinar si el algoritmo cumple o no con el objetivo deseado y la eficacia tiene que ver con el uso de recursos y el tiempo empleado en lograr dicho objetivo. A menor tiempo de ejecucución y menor consumo de recursos, mayor es la eficiencia.
En el algoritmo de ejemplo, se logra ver que se cumple la efectividad (hemos lavado los dientes). En tanto la eficacia es debatible, por ejemplo podríamos haber eliminado el paso número ocho (llenar un vaso con agua) y simplemente acercarnos a la llave de agua y enjuagarnos directamente (independiente de qué opiniones generemos por enjuagarnos la boca de esa manera), esto nos ahorra tener que usar un vaso (recurso) y nos demoramos menos (tiempo). Recordemos que las computadoras siempre están realizando múltiples tareas de manera paralela, por lo tanto la eficiencia nos permite asignarle una menor carga y hacer que nuestro programa se ejecute de manera más fluida.
Para el desarrollo de algoritmos se utiliza una herramienta, de la teoría de sistemas, llamada diagrama de flujo. Esta nos permite graficar la lista de pasos mediante una serie de símbolos estandarizados. Veamos a continuación otro ejemplo de algoritmo, el cual tiene como objetivo mostrar un mensaje en pantalla que indique si un alumno a aprobado o reprobado una asignatura.
Para mantener la extensión breve, consideraremos solo dos notas. El diagrama de flujo sería como el que se muestra a continuación:
Fig. 1 - Diagrama de flujo para cálculo de aprobación/reprobación.
Podemos notar que se presentan diferentes símbolos:
Fig. 2 - Simbología más común en diagramas de flujo.
Existen varios símbolos más, pero estos son los más comunes a utilizar. El diagrama marca su inicio y final con el símbolo tipo cápsula (1). A continuación, se muestra por pantalla el mensaje "Ingresar nota 1", este proceso de que el computador entregue información hacia el exterior se conoce como salida de información o simplemente salida (por pantalla, por impresora, por sonido, etc.). El siguiente paso implica el ingreso de información desde teclado, este proceso de ingresar información desde el exterior hacia el computador de conoce como entrada de información o simplemente entrada (una tecla presionada, un click del mouse, una palanca accionada, etc.). Tanto el proceso de entrada como de salida utilizan el mismo símbolo con forma de romboide (2). Lo mismo se repite para la segunda nota.
Una vez se tengan ambas notas ingresadas, el computador realiza la operación de promedio aritmético entre ellas. Como esta operación es interna y no requiere de interacción con el usuario, se utiliza el símbolo rectangular (3). A continuación, corresponde decidir si el promedio calculado es menor a 4 o no, el símbolo para esto es un rombo (4). Si lo es, seguimos por el camino de la izquierda e imprimimos el mensaje "Alumno reprobado", en caso contrario tomamos el camino de la derecha e imprimimos el mensaje "Alumno aprobado". En ambos casos, antes de terminar el programa se pasa por un conector en forma circular (5) el que se usa simplemente para agrupar ambas flechas ya que a cada símbolo puede ingresar sólo una de éstas flechas de flujo.
Las expresiones utilizadas, tales como: Escribir: "Ingresar nota 1", Leer: Nota2, Promedio < 4, etc. Se conoce como pseudo-lenguaje. No es ningún tipo de lenguaje informático real, pero por lo mismo, tiene la ventaja de ser independiente de una tecnología en particular. Luego, un programador con conocimientos en Java puede traducirlo a su léxico, uno en Python puede hacer lo mismo y así sucesivamente.
Definitivamente los algoritmos son la columna vertebral de cualquier software, nos ayudan a modelar un problema independiente de la complejidad de éste y así, en el siguiente paso, poder codificar de manera mucho más eficiente. Como podrás ver, los algoritmos están presente en cada proceso que realicemos, por lo que es un buen ejercicio practicar su desarrollo, especialmente si queremos entrar al muno de la programación.