Prefacio
Este libro reúne las conferencias del primer semestre de Programación en la Facultad de Matemática y Computación de la Universidad de La Habana, para las carreras de Ciencia de la Computación y Ciencia de Datos. Cada capítulo es una conferencia de una semana, y se lee en el mismo orden en que se imparte.
No supone ningún conocimiento previo de programación. Sí supone el preuniversitario: aritmética, álgebra elemental, la ecuación de segundo grado, funciones y el lenguaje de conjuntos. El lenguaje es Python.
Cada capítulo se construye alrededor de un problema concreto: una calculadora de ecuaciones de segundo grado, los primos hasta un tope, las palabras de un capítulo del Quijote, un millón de números que ordenar. El programa que lo resuelve se escribe por partes, se rompe a propósito para ver qué error da, y se arregla. Por eso conviene leer con Python abierto y escribir cada ejemplo en lugar de copiarlo.
Todo el código del libro se ejecuta cada vez que el libro se construye. Lo que aparece
debajo de cada bloque es lo que imprimió ese bloque, y las figuras que ilustran un
algoritmo se dibujan con el estado que ese algoritmo calculó. Los tiempos que se miden
dependen de la máquina en que se construyó el libro: en la tuya serán otros, pero las
razones entre ellos, que es lo que el texto discute, deberían parecerse. Los archivos de
datos que usan los ejemplos están en la carpeta
conferences/2026/libro
del repositorio del curso.
El libro tiene dos partes, que son los dos primeros temas del programa de la asignatura. La primera, de recursos básicos y programación estructurada, va de las expresiones y los tipos hasta la búsqueda, la ordenación y el costo de un algoritmo. La segunda, de estrategias de solución, empieza con la recursión y llega hasta divide y vencerás. Backtrack, combinatoria y programación dinámica completan ese segundo tema y se agregarán como capítulos nuevos cuando se impartan.
El libro se lee en línea en https://matcom.github.io/programming/ y se descarga completo en PDF desde https://matcom.github.io/programming/programacion.pdf. Las dos versiones salen del mismo texto y se actualizan juntas.
Cada capítulo termina con un resumen y una lista de ejercicios. Los ejercicios son parte del curso: varios retoman en capítulos posteriores funciones que se dejaron para escribir allí.