Unidad I · Tema 1.0 Disponible

Antes de empezar

Qué es un algoritmo, un programa y un lenguaje, para quien comienza desde cero.

Objetivo de aprendizaje

Al concluir este módulo, el estudiante será capaz de:

  1. Explicar con sus palabras qué es un algoritmo y por qué debe ser preciso.
  2. Distinguir algoritmo, programa y lenguaje de programación.
  3. Escribir un programa elemental de instrucciones precisas y depurarlo comparando lo esperado con lo ocurrido.
  4. Reconocer que el orden de los pasos importa y que entre ellos existen dependencias.

No se requiere ningún conocimiento previo de computación.

Ruta de trabajo del módulo

Etapa Contenido Producto del estudiante
1 Planteamiento inicial Hipótesis escrita
2 Algoritmo, programa y lenguaje Vocabulario básico
3 El robot literal Un programa que funciona y su depuración
4 El orden de los pasos y sus dependencias Tres algoritmos ordenados
5 Del problema al programa: un método de trabajo Método de cinco pasos
6 Verificación y reflexión Cuestionario

1. Planteamiento inicial

Cuando usted da indicaciones a otra persona, confía en que esa persona completará lo que falta con sentido común: «sigue derecho hasta el semáforo y ahí dobla» no especifica cuántos pasos dar ni cómo esquivar a quien se cruce. Ahora imagine que quien recibe las indicaciones es un robot que ejecuta literalmente lo que lee, sin sentido común y sin pedir aclaraciones.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Esta hipótesis se pondrá a prueba en la práctica de la sección 3.


2. Algoritmo, programa y lenguaje

Una computadora ejecuta, a una velocidad enorme, instrucciones muy elementales: sumar dos números, compararlos, copiar un valor de un lugar a otro. No entiende intenciones ni completa lo que falta: es rápida, pero literal. Todo lo que hace una computadora, desde mostrar una página web hasta calcular una trayectoria, resulta de combinar de manera adecuada esas instrucciones elementales. Tres conceptos organizan esta idea:

Definición — Algoritmo: secuencia finita y ordenada de pasos precisos, cada uno realizable sin necesidad de interpretación, que permite resolver un problema y termina.

Definición — Programa: un algoritmo expresado en un lenguaje de programación, de modo que una computadora pueda ejecutarlo.

Definición — Lenguaje de programación: notación formal, con reglas precisas, que permite escribir programas. Sus reglas se describen en varios niveles (léxico, sintaxis, semántica y pragmática), que se estudian en esta unidad.

Caso de estudio. Una receta de cocina dice «añada una pizca de sal». Una persona sabe qué hacer; un robot no, porque «una pizca» no es una cantidad precisa. Para convertir la receta en un algoritmo habría que especificar, por ejemplo, «agregue 1 gramo de sal». La diferencia entre una receta y un algoritmo es la precisión: cada paso debe poder ejecutarse sin interpretar.

Aplicación práctica. El algoritmo para calcular el promedio de tres números tiene cuatro pasos: leer los números, sumarlos, dividir la suma entre tres y mostrar el resultado. Expresado en un lenguaje de programación se convierte en un programa. La idea es la misma en ambos casos; lo que cambia es que el programa debe respetar las reglas del lenguaje.


3. Práctica A: el robot literal

El robot de la práctica solo entiende tres instrucciones: avanzar, girar a la izquierda y girar a la derecha. Las ejecuta exactamente como se le dan. Escriba un programa que lo lleve hasta la meta, ejecútelo y observe. Si el resultado no es el esperado, depure el programa: compare lo que ocurrió con lo que usted esperaba y corrija la instrucción responsable.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Definición — Depuración: proceso de localizar y corregir los errores de un programa. Se basa en comparar el comportamiento esperado con el observado hasta encontrar dónde y por qué difieren.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Nota: repetir una instrucción con un multiplicador es una forma elemental de abstracción: se expresa lo mismo con menos instrucciones al ocultar los detalles repetitivos. A lo largo de la unidad se encontrarán muchas más.


4. El orden de los pasos y sus dependencias

No basta con conocer los pasos: importa en qué orden se ejecutan. Un paso puede depender de otro, es decir, necesitar su resultado. No se puede sumar lo que aún no se ha leído, ni mostrar un resultado que no se ha calculado. En cambio, dos pasos que no dependen entre sí pueden ejecutarse en cualquier orden.

Aplicación práctica. Ordene los pasos de los tres algoritmos siguientes. Los dos primeros tienen un único orden posible; en el tercero existen varios, y el verificador le indicará qué dependencias se incumplen cuando el orden no funciona.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.

Nota: el hecho de que algunos pasos sean independientes es el germen de una idea importante: lo que no depende de nada puede realizarse al mismo tiempo. Es la base de la programación concurrente y paralela, que se estudia en cursos posteriores.


5. Del problema al programa: un método de trabajo

Resolver un problema con un programa no consiste en escribir código de inmediato. En este curso se utiliza un método de cinco pasos que se aplicará, de manera cada vez más autónoma, en todos los temas:

Paso Acción Ejemplo: calcular el promedio de tres números
1. Entender Precisar qué se pide y con qué datos Entrada: tres números. Salida: su promedio
2. Ejemplos Elaborar casos concretos, incluidos los límites 2, 4 y 6 dan 4; 0, 0 y 0 dan 0
3. Modelo Descomponer el problema en pasos Leer, sumar, dividir entre tres, mostrar
4. Construir Escribir la solución con precisión Redactar el algoritmo y después el programa
5. Verificar Comprobar con los ejemplos y reflexionar ¿Coincide con 4 y con 0? ¿Qué ocurre con números negativos?

El método sigue la línea de los trabajos clásicos sobre la resolución de problemas (Pólya) y de las metodologías de diseño de programas para principiantes. Lo valioso es que el razonamiento queda explícito: usted puede explicar cómo llegó a su solución y revisarla.

Un vistazo a lo que sigue. En los temas siguientes se utilizará un lenguaje de juguete llamado Mini. Una línea como

total = precio * 3 + 10;

parece sencilla, pero para que una computadora la ejecute deben ocurrir varias cosas: reconocer sus partes, verificar que está bien formada, comprender su significado y producir el resultado. Estudiar cómo ocurre cada una de ellas es el objetivo de esta unidad.


6. Errores conceptuales frecuentes

Error común: creer que la computadora «entiende» lo que se quiso decir. Ejecuta literalmente lo escrito; si el programa no expresa la intención, el resultado no la cumple.

Error común: pensar que, cuando un programa falla, la culpa es de la computadora. Casi siempre el programa expresa algo distinto de lo que su autor pretendía. La depuración consiste en descubrir esa diferencia.

Error común: confundir algoritmo y programa. El algoritmo es la idea (pasos precisos); el programa es su expresión en un lenguaje que la máquina puede ejecutar. Un mismo algoritmo puede escribirse en muchos lenguajes.

Error común: suponer que siempre existe un único orden correcto. Los pasos dependientes tienen un orden obligatorio; los independientes, no.

Error común: pensar que programar es escribir código lo más rápido posible. Los primeros pasos del método (entender, ejemplos, modelo) ocurren antes de escribir.


7. Verificación del módulo

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.


8. Libreta de trabajo

Reúna sus respuestas y el registro de sus niveles resueltos del robot; revíselos y expórtelos como evidencia para el portafolio.

Este laboratorio interactivo requiere JavaScript habilitado en el navegador.


9. Preguntas de reflexión

  1. Piense en una instrucción cotidiana que dependa del sentido común (por ejemplo, «sirve un poco de agua»). ¿Qué habría que añadir para que un robot pudiera ejecutarla?
  2. ¿Por qué cree que conviene escribir el algoritmo antes de escribir el programa?
  3. ¿Qué ventajas tiene poder repetir una instrucción? ¿Qué podría salir mal si se repite una instrucción de más?
  4. ¿Qué diferencia hay entre un error de quien escribe el programa y un error de la máquina que lo ejecuta?
  5. Describa con sus palabras un problema de su vida diaria que se pueda resolver mediante un algoritmo y escriba los pasos con la precisión que exigiría un robot.

10. Lecturas recomendadas

  • Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33–35. (Visión general del pensamiento computacional.)
  • Pólya, G. (1945). How to solve it. Princeton University Press. (Clásico sobre el método para resolver problemas.)
  • Felleisen, M., Findler, R. B., Flatt, M., & Krishnamurthi, S. How to Design Programs. Acceso libre en htdp.org. (Una metodología de diseño de programas para principiantes.)