“El arte de la programación es el arte de organizar la complejidad”. E.W. Dijkstra. A lo largo de nuestras vidas, se presentan problemas que tenemos que resolver. Algunos son difíciles de solucionar como, por ejemplo, encontrar la cura para una que otra enfermedad devastadora. De igual forma existen otros problemas comunes y espinosos: ¿cómo voy pagar esa deuda? o ¿cómo voy a aprobar este examen? Desde luego también existen problemas sencillos de resolver pero que los complicamos más de lo debido, por ejemplo, ¿cuál vestido usaré para la fiesta del sábado por la noche? ¿Y cómo se podría resolver un problema? Una buena opción sería mediante un procedimiento secuencial y ordenado llamado Algoritmo.
¡El quien solucione un problema que baile! Escena de la película Grease (1978)
No obstante antes de elaborar un algoritmo para solucionar un problema necesitamos, primero, entender el problema. Inclusive el matemático, George Póyla, planteó un algoritmo básico de cuatro pasos para solucionar problemas: 1. 2. 3. 4.
Entender el problema. Elaborar un plan para resolverlo. Poner en práctica el plan. Comprobar los resultados (revisar).
Desde luego el planteamiento de Póyla fue creado originalmente para la resolución de problemas matemáticos. Aquí está la versión para resolver problemas con algoritmos llevados al computador: 1. Definir y analizar el problema. 2. Elaborar el algoritmo, teniendo en cuenta analizar y organizar los datos de entrada y salida de manera lógica, así como identificar los métodos y formulas a utilizar. 3. Poner en marcha el algoritmo: codificar el programa. 4. Verificar los resultados del programa. Así como te habrás dado cuenta, para solucionar un problema, primero, debes entender su esencia con el fin de elaborar un buen plan que será el algoritmo. Desde luego, no existe una fórmula mágica y universal para resolver problemas; sin embargo, el estudio detallado y análisis concienzudo de varios problemas con sus diversas soluciones abrirá y despejará nuestras mentes para que den cabida al 1
arribo de ideas; aparte de que nos dará las herramientas necesarias, aunque nunca suficientes, para conseguir de un modo fácil, por lo menos, una solución. Así que piensa y reflexiona antes de actuar. Supongamos que el problema consiste en que no enciende la bombilla de la cocina, entonces ¿cómo lo solucionamos? Alguien podría comprar otra bombilla en el supermercado y cambiarla. Otro primero verificaría si la bombilla se fundió (tal vez el inconveniente consista en que sólo que estaba un poco floja). Es decir, existen diversos procedimientos o algoritmos para resolver un problema. Así que depende del ingenio y del sentido común inventar un algoritmo eficiente y óptimo. En otras palabras, existen mejores algoritmos que otros. “Ésta es la era de la creatividad porque es la era del conocimiento. Y en una era que aprecia el conocimiento, la creatividad añade valor al conocimiento y lo hace cada vez más útil”. John Kao, autor de Jamming.
Un algoritmo más elaborado para solucionar el problema de la bombilla que no enciende podría ser: Instrucción 1:
Verificar si la cocina tiene corriente eléctrica, en caso contrario revisar el sistema eléctrico o llamar a un técnico.
Instrucción 2:
Si hay energía, constatar si funciona el interruptor de la cocina (no sea que esté defectuoso y tenga que arreglarlo o cambiarlo).
Instrucción 3:
Si no alcanza la bombilla para revisarla, buscar algo para subirse y lograr alcanzarla.
Instrucción 4:
Verificar que la bombilla no esté mal puesta.
Instrucción 5:
Verificar si está fundida y si lo está, comprar una bombilla nueva.
Instrucción 6:
Quitar la bombilla que no funciona.
Instrucción 7:
Colocar la bombilla nueva.
Quizás usted podría inventarse un algoritmo mejor y completo.
¡Ánimo, hazlo! Edison fracasó varias veces antes de inventar una bombilla estable que funcionara bien y no estallara. De modo que para resolver problemas se requiere algo más que conocimientos, necesitas de tenacidad, disciplina y de realmente querer encontrar una solución.
2
Ahora bien, que tal si en el algoritmo de la bombilla primero se realizara o ejecutara la instrucción 7 y después la 6. Absurdo, ¿verdad? No se puede colocar una bombilla nueva, sin antes haber quitado la descompuesta. Es decir, en un algoritmo, además de una secuencia de instrucciones a seguir, éstas también deben tener un orden lógico. Un Algoritmo es un procedimiento para resolver un problema en términos de: 1. Una secuencia finita de instrucciones a seguir y... 2. El orden en que dichas instrucciones deben ejecutarse. Así que todo algoritmo debe especificar sin ambigüedad el orden en que se deben ejecutar las instrucciones, es decir, deber ser preciso. Además de ser finito, bien definido, correcto y general en la solución. Otros ejemplos de algoritmos son: la receta impresa en la caja para preparar gelatina, la prescripción médica para bajar de peso, la estrategia de un director técnico de fútbol para ganar un partido, las indicaciones recibidas para llegar a un sitio cuando se está perdido y las instrucciones para utilizar una máquina dispensadora de alimentos. De esta forma, aquí presento cinco recomendaciones para la creación de algoritmos: 1. IDENTIFICA EL QUID DEL PROBLEMA A los desarrolladores de software los contratan para resolver problemas, no para provocarlos ni empeorarlos. “Pensar para acertar, callar para escuchar y actuar para vencer”. R. Kebí. El programador, antes de comenzar el desarrollo de cualquier software, debe entender: primero, en qué consiste el problema así como por qué y para qué se quiere solucionar; y segundo, cuáles son los datos que el usuario debe ingresar al software y cuáles son los datos que el software debe calcular para proporcionarle al usuario. Parece obvio, pero muchos programadores novatos no identifican el verdadero quid del problema, y además se les dificulta determinar correctamente el input y el output. 2. INVESTIGA Es difícil construir una mesa de madera cuando no se cuenta ni con la madera ni con las herramientas ni los conocimientos suficientes para construirla... y para crear software competitivo también se debe contar con herramientas y buenos conocimientos, por lo menos, en matemáticas y lógica. Por ejemplo, para calcular el área de un cuadrado, se debe conocer la formula, si no es difícil resolver el problema. “El hombre inteligente nace aprendiendo y muere aprendiendo”. Aristóteles. Así que si no conoces sobre un tema relacionado con el problema: “Investiga”.
3
3. SIEMPRE EXISTE MÁS DE UNA FORMA PARA LOGRAR UN RESULTADO Y UNAS FORMAS SON MEJORES QUE OTRAS Cualquier problema se puede resolver utilizando más de un algoritmo. “Nada más peligroso que una idea cuando es la única que se tiene”. Emile Chartier. Lo importante es que el algoritmo creado dé con la solución y sea el mejor en cuanto a viabilidad de implementación, velocidad en tiempo de ejecución y administración de los recursos del computador. 4. PRUEBA, PRUEBA, PRUEBA Lo que desarrollas o modificas, pruébalo, revísalo. Tan sólo imagina si la industria automotriz o aeronáutica no probara sus nuevos vehículos antes de salir al mercado. “Si algo puede ir mal, irá mal”. Ley de Murphy. 5. SIEMPRE RECUERDA QUE EL COMPUTADOR ES UNA “MÁQUINA” Es mi última recomendación: un computador es una máquina; por lo tanto: no piensa, no sospecha, no supone, ni hace nada a menos que se lo ordenes. Muy obvio, pero a los programadores novatos se les olvida.
EJERCICIOS: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Desarrolle un algoritmo que indique los pasos a seguir cuando no enciende una bombilla en la cocina. Desarrolle un algoritmo que le facilite a alguien conseguir una novia (o novio). Desarrolle un algoritmo que le permita a un robot preparar un jugo. Desarrolle un algoritmo que explique cómo construir un avión de papel. Desarrolle un algoritmo que permita saludar a un amigo. Desarrolle un algoritmo que permita hacer un gol en fútbol. Desarrolle un algoritmo que te permita comprar una revista. Desarrolle un algoritmo que te facilite pedirle perdón a alguien. Desarrolle un algoritmo que explique cómo bailas el baile que más te gusta. Desarrolle un algoritmo que permita desarrollar algoritmos. “Tres clases de personas son infelices: el que no sabe y no pregunta; el que sabe y no enseña; el que aprende y no práctica”. Buda. Ing. Diego Darío López Mera [ diegodario arroba colombia punto com ] Ingeniero de sistemas y docente de la Institución Universitaria Antonio José Camacho.
4