⏱️ Lectura: 11 min

Un post de blog sobre botánica, sin código ni frameworks, ordena mejor un plan de estudio técnico que la mayoría de las guías para desarrolladores autodidactas: sin proponérselo, describe lo que en programación llamaríamos un grafo de prerrequisitos.

📑 En este artículo
  1. TL;DR
  2. Qué pasó
  3. Contexto e historia
  4. Detalles técnicos: cómo funciona un grafo de prerrequisitos
  5. Cómo empezar
  6. Impacto y análisis
  7. Qué sigue
  8. Preguntas frecuentes
    1. ¿Qué es un grafo de prerrequisitos en un plan de estudio?
    2. ¿Por qué no alcanza con seguir una lista de lectura en el orden en que fue publicada?
    3. ¿Qué diferencia hay entre graphlib.TopologicalSorter y el paquete toposort de npm?
    4. ¿Qué pasa si el grafo de prerrequisitos tiene un ciclo?
    5. ¿Este método sirve para otros campos además de programación?
    6. ¿Dónde puedo ver el reading list original que inspiró este método?
  9. Referencias

El artículo original, publicado en Crime Pays But Botany Doesn’t, no usa esas palabras, pero describe la misma lógica con precisión: no tiene sentido leer sobre filogenia molecular sin entender antes taxonomía básica. Esa relación de dependencias se puede aplicar, tal cual, a cualquier currículo de programación, sistemas o inteligencia artificial.

TL;DR

  • El blog Crime Pays But Botany Doesn’t publicó una reading list para autoaprender botánica con libros de referencia y un método de estudio explícito.
  • El artículo original insiste en un principio clave: no tiene sentido estudiar filogenia molecular sin entender taxonomía básica antes.
  • El mismo principio de dependencias aplica a programación: hay temas que no se entienden sin dominar antes su prerrequisito técnico.
  • Modelar un plan de estudio como grafo de prerrequisitos (DAG) permite calcular el orden correcto con un ordenamiento topológico.
  • Python resuelve este problema con graphlib.TopologicalSorter, parte de la librería estándar desde la versión 3.9.
  • Node.js lo resuelve con el paquete toposort de npm, que hay que instalar aparte.
  • Listas curadas como OSSU o TeachYourselfCS resuelven qué leer, pero no en qué orden: ahí es donde el grafo de prerrequisitos aporta valor real.

Qué pasó

El sitio Crime Pays But Botany Doesn’t, escrito por una paleobotánica, publicó una guía para quienes quieren autoaprender botánica desde cero. La guía no es una lista plana de títulos: primero explica por qué existe la nomenclatura en latín (un sistema universal creado por Carl Linneo para que científicos de distintas culturas pudieran nombrar organismos sin ambigüedad), después introduce el concepto de taxonomía evolutiva, y recién ahí recomienda los textos de referencia.

El libro central de la lista es Plant Systematics, de Michael Simpson, que explica cómo los botánicos identificaban relaciones evolutivas entre familias de plantas usando sinapomorfías (rasgos derivados compartidos) antes de que existiera el análisis de ADN, y por qué algunas de esas clasificaciones resultaron erróneas cuando llegó la filogenia molecular. El punto no es memorizar nombres de plantas: es entender que cada nivel de conocimiento depende del anterior.

Esa dependencia explícita (primero taxonomía, después sistemática, después filogenia molecular) es exactamente el tipo de estructura que casi ninguna lista de recursos para aprender programación hace explícita: la mayoría enumera libros o cursos sin declarar qué necesita saber el lector antes de empezar cada uno, es decir, sin construir un verdadero grafo de prerrequisitos.

💭 Clave: el aporte real de la lista no es la bibliografía de botánica, sino el orden: cada recurso se recomienda después de que el lector ya tiene el vocabulario para entenderlo.
Pila de libros de referencia técnica para armar un plan de estudio
Ordenar los recursos por dependencia, no por fecha de publicación. Foto de Alba Calbetó en Unsplash

Contexto e historia

Las listas de lectura curadas no son nuevas en tecnología. OSSU (Open Source Society University) arma un plan de estudio completo de ciencias de la computación con cursos gratuitos organizados en fases obligatorias. roadmap.sh dibuja rutas de aprendizaje como árboles de decisión para roles de frontend, backend o DevOps. Ninguna de las dos populariza el concepto de dependencia como una estructura de datos explícita y editable: en general muestran una secuencia fija, no un grafo que el propio lector pueda consultar o modificar.

En su forma más simple, cualquier lista de lectura curada ya es un grafo implícito: cada recurso tiene cero o más prerrequisitos. El problema aparece cuando la lista crece. A partir de 15 o 20 temas interrelacionados, ordenar a mano cuál va antes que cuál deja de ser trivial, sobre todo si un tema tiene más de un prerrequisito o si un mismo prerrequisito habilita varios temas en paralelo.

Detalles técnicos: cómo funciona un grafo de prerrequisitos

Modelar un currículo como grafo dirigido acíclico (DAG) convierte el problema de ordenar el estudio en un problema de ordenamiento topológico: cada tema es un nodo, cada prerrequisito es una arista dirigida, y el resultado es una secuencia donde ningún nodo aparece antes que sus dependencias. El algoritmo de Kahn resuelve esto en tiempo O(V + E), donde V es la cantidad de temas y E la cantidad de relaciones de prerrequisito: prácticamente instantáneo incluso con un currículo de varios cientos de temas.

flowchart TD
A["Estructuras de datos"] --> B["Algoritmos y complejidad"]
B --> C["Sistemas operativos"]
B --> D["Bases de datos"]
C --> E["Redes y protocolos"]
D --> F["Diseño de APIs"]
E --> G["Sistemas distribuidos"]
F --> G
⚠️ Ojo: si el grafo de prerrequisitos tiene un ciclo (por ejemplo, “sistemas distribuidos” depende de “bases de datos” y, por error, “bases de datos” quedó marcado como dependiente de “sistemas distribuidos”), no existe ningún orden válido. Tanto graphlib.TopologicalSorter como toposort detectan esto y lanzan una excepción en lugar de devolver un orden incorrecto.
Diagrama de un grafo de prerrequisitos con nodos y dependencias
Cada arista es una dependencia que el algoritmo respeta al ordenar. Foto de Fotógrafo Samuel Cruz en Unsplash

Cómo empezar

Para reproducir el ejemplo hace falta Python 3.9 o superior (por graphlib, que ya viene incluido) o Node.js 16 o superior (por el paquete toposort, que hay que instalar aparte). Instalación según el sistema operativo:

  • Windows: winget install Python.Python.3.12 o winget install OpenJS.NodeJS.LTS
  • macOS: brew install python o brew install node
  • Linux (Debian/Ubuntu): sudo apt install python3 o sudo apt install nodejs npm

Con Python, cargar el currículo como un diccionario de dependencias y pedirle a graphlib el orden:

from graphlib import TopologicalSorter

curriculo = {
    "estructuras_de_datos": set(),
    "algoritmos": {"estructuras_de_datos"},
    "sistemas_operativos": {"algoritmos"},
    "bases_de_datos": {"algoritmos"},
    "redes": {"sistemas_operativos"},
    "sistemas_distribuidos": {"redes", "bases_de_datos"},
}

orden = list(TopologicalSorter(curriculo).static_order())
print(orden)

El resultado es la secuencia exacta en la que conviene estudiar cada tema para no llegar a uno sin haber cubierto antes lo que necesita. Si agregás un tema nuevo con sus dependencias, el orden se recalcula solo.

Con Node.js, el mismo currículo como lista de pares [dependiente, prerrequisito], usando el paquete toposort (npm install toposort):

const toposort = require("toposort");

const dependencias = [
  ["algoritmos", "estructuras_de_datos"],
  ["sistemas_operativos", "algoritmos"],
  ["bases_de_datos", "algoritmos"],
  ["redes", "sistemas_operativos"],
  ["sistemas_distribuidos", "redes"],
  ["sistemas_distribuidos", "bases_de_datos"],
];

const ordenDeEstudio = toposort(dependencias).reverse();
console.log(ordenDeEstudio);

La llamada a .reverse() es necesaria porque toposort devuelve el orden de dependientes a prerrequisitos: invertirlo da el orden real de estudio, de lo más básico a lo más avanzado.

Impacto y análisis

MétodoCuándo usarlaVentajaLimitación
Bootcamp estructuradoCuando necesitás un cronograma fijo con fechas de entregaOrden ya validado por instructoresPoca flexibilidad para saltar temas que ya dominás
Lista curada (OSSU, TeachYourselfCS)Cuando querés un temario completo y gratuitoAhorra la curaduría de recursosEl orden es fijo, no se adapta a lo que ya sabés
Ruta generada por un LLMCuando necesitás un punto de partida rápido para un tema puntualSe genera en segundos y es personalizable en el promptPuede alucinar prerrequisitos o recursos inexistentes
Currículo modelado como grafo de prerrequisitosCuando el plan tiene muchos temas interdependientes y cambia con el tiempoEl orden se recalcula solo al agregar o quitar temasRequiere mantener vos mismo las relaciones de dependencia

La limitación real de este método es que alguien tiene que declarar las dependencias a mano: un grafo de prerrequisitos mal cargado ordena mal, aunque el algoritmo en sí nunca falle silenciosamente. Para un plan de estudio de cuatro o cinco temas la ganancia frente a una lista simple es mínima; el modelo empieza a pagar cuando el currículo supera la docena de temas cruzados, que es justamente el tamaño en el que una lista de botánica como Plant Systematics más Raven’s Biology of Plants más una docena de textos adicionales deja de poder ordenarse a ojo.

Qué sigue

El paso natural es que estos currículos dejen de vivir en la cabeza de quien los arma y pasen a un archivo versionado: un JSON o YAML en un repositorio, con historial de cambios en Git, que cualquiera pueda forkear y adaptar a su propio punto de partida. Herramientas como roadmap.sh ya publican sus rutas como datos estructurados; falta que ese formato se estandarice lo suficiente como para que un script community-maintained pueda tomar el currículo de otra persona, marcar qué nodos ya se completaron, y recalcular automáticamente el resto del camino.

📖 Resumen en Telegram: Ver resumen

Probalo vos: instalá graphlib (ya viene con Python 3.9 o superior) o corré npm install toposort, cargá tres o cuatro temas que quieras aprender con sus dependencias, y dejá que el algoritmo arme tu propio grafo de prerrequisitos.

Preguntas frecuentes

¿Qué es un grafo de prerrequisitos en un plan de estudio?

Es una forma de representar un currículo donde cada tema es un nodo y cada flecha indica una dependencia obligatoria: si el tema B necesita el tema A, existe una arista de A hacia B. El resultado es un grafo dirigido que, si está bien armado, no tiene ciclos.

¿Por qué no alcanza con seguir una lista de lectura en el orden en que fue publicada?

Porque el orden de publicación no siempre coincide con el orden real de dependencia entre los temas. La lista de Crime Pays But Botany Doesn’t funciona porque su autora ordenó manualmente los conceptos por dependencia, algo que no todas las listas hacen de forma explícita.

¿Qué diferencia hay entre graphlib.TopologicalSorter y el paquete toposort de npm?

Resuelven el mismo problema, el ordenamiento topológico, en distintos lenguajes: graphlib es parte de la librería estándar de Python desde la versión 3.9, mientras que toposort es un paquete de terceros para Node.js que hay que instalar con npm.

¿Qué pasa si el grafo de prerrequisitos tiene un ciclo?

No existe un orden válido posible y ambas herramientas lo detectan: graphlib.TopologicalSorter lanza un CycleError y toposort lanza una excepción indicando qué nodos forman el ciclo, lo que sirve para corregir el currículo antes de empezar a estudiar.

¿Este método sirve para otros campos además de programación?

Sí: el ejemplo original es justamente botánica, no tecnología. Cualquier campo con conceptos que dependen unos de otros (matemática, biología, incluso teoría musical) se beneficia de modelar el material como grafo en lugar de como lista lineal.

¿Dónde puedo ver el reading list original que inspiró este método?

Está publicado en Crime Pays But Botany Doesn’t, el blog de la paleobotánica que lo escribió; el enlace directo está en la sección de referencias de esta nota.

Referencias

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Imagen destacada: Foto de GuerrillaBuzz en Unsplash


Andrés Morales

Desarrollador e investigador en inteligencia artificial. Escribe sobre modelos de lenguaje, frameworks, herramientas para devs y lanzamientos open source. Cubre papers de ML, ecosistema de startups tech y tendencias de programación.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.