Formación en programación · Metodología
Aprender Python suele comenzar de la misma manera: variables, tipos de datos, condicionales, bucles, funciones y, después de varias sesiones, algún proyecto práctico. El problema es que este enfoque obliga al estudiante a aprender primero la sintaxis y recién después entender para qué sirve.
Una alternativa interesante es invertir el proceso mediante Spec-Driven Development (SDD) o desarrollo guiado por especificaciones.
La secuencia
Problema → Especificación → Código → Prueba → Corrección
En lugar de comenzar preguntando «¿cómo funciona un if en Python?», comenzamos preguntando:
¿Qué debe hacer exactamente el programa?
Este cambio aparentemente pequeño puede hacer que aprender programación sea mucho más intuitivo, especialmente para personas que no tienen formación previa en desarrollo de software.
Contenidos
- 1. Qué es Spec-Driven Development
- 2. De la especificación al código
- 3. Enseñar Python desde necesidades, no desde sintaxis
- 4. Un ejemplo: aprender bucles sin comenzar explicando bucles
- 5. SDD también cambia el papel de la inteligencia artificial
- 6. Una regla sencilla para el aula
- 7. Una posible ruta de aprendizaje
- 8. Qué cambia para el estudiante
- 9. Programar ya no consiste solamente en escribir código
Qué es Spec-Driven Development
Spec-Driven Development propone que antes de escribir código exista una especificación suficientemente clara sobre el comportamiento esperado del sistema. Una especificación sencilla debería responder al menos cinco preguntas:
- 1¿Qué problema debe resolver?
- 2¿Qué información recibe?
- 3¿Qué reglas debe aplicar?
- 4¿Qué resultado debe entregar?
- 5¿Cómo comprobaremos que funciona correctamente?
Por ejemplo, imaginemos que queremos desarrollar un pequeño programa para controlar el cumplimiento de una meta comercial. La especificación podría ser:
OBJETIVO Determinar si las ventas del mes alcanzaron la meta. ENTRADAS - ventas_mes - meta_mes REGLAS - Si ventas_mes >= meta_mes → META CUMPLIDA - Si ventas_mes < meta_mes → META NO CUMPLIDA SALIDAS - porcentaje de cumplimiento - estado de la meta CASOS DE PRUEBA ventas = 120000, meta = 100000 → 120%, META CUMPLIDA ventas = 80000, meta = 100000 → 80%, META NO CUMPLIDA
Antes de escribir una sola línea de Python, el estudiante ya entiende qué debe ocurrir.
De la especificación al código
Una vez definida la especificación, podemos convertirla progresivamente en Python.
ventas_mes = 120000 meta_mes = 100000 cumplimiento = ventas_mes / meta_mes * 100 if ventas_mes >= meta_mes: estado = "META CUMPLIDA" else: estado = "META NO CUMPLIDA" print(cumplimiento) print(estado)
Aquí aparecen naturalmente varios conceptos fundamentales de programación:
- —variables
- —números
- —operadores matemáticos
- —comparaciones
- —condicionales
- —salida de información
La diferencia es que ahora cada concepto tiene una razón de existir.
El estudiante aprende un if porque necesita implementar una regla que previamente definió, y no porque aparezca en el capítulo cuatro del curso.
Enseñar Python desde necesidades, no desde sintaxis
Este enfoque permite reorganizar completamente un curso introductorio de programación.
| Necesidad | Concepto de Python |
|---|---|
| Guardar información | Variables |
| Realizar cálculos | Operadores |
| Aplicar reglas | if, elif, else |
| Procesar muchos registros | for |
| Almacenar varios elementos | Listas |
| Representar registros | Diccionarios |
| Reutilizar lógica | Funciones |
| Leer archivos | Pandas |
| Manejar errores | Excepciones |
| Verificar comportamiento | Tests |
La sintaxis deja de ser el punto de partida y se convierte en una herramienta para resolver algo.
Un ejemplo: aprender bucles sin comenzar explicando bucles
Supongamos que tenemos una lista de operaciones comerciales:
operaciones = [
12000,
85000,
42000,
110000
]
La especificación indica:
OBJETIVO Identificar operaciones superiores a S/ 50,000. ENTRADA Lista de operaciones. REGLA Si el monto es mayor a 50,000, mostrarlo. SALIDA Lista de operaciones que superan el umbral.
Ahora surge una pregunta natural: ¿cómo aplicamos la misma regla a todas las operaciones? En ese momento aparece el concepto de iteración.
for operacion in operaciones: if operacion > 50000: print(operacion)
El estudiante acaba de aprender un for, y lo hizo para resolver una necesidad concreta.
SDD también cambia el papel de la inteligencia artificial
La aparición de herramientas como ChatGPT, Claude, Gemini o GitHub Copilot introduce un nuevo desafío en la enseñanza de programación. Hoy un estudiante puede pedir «hazme un programa en Python que analice ventas» y recibir cientos de líneas de código en segundos.
Por eso, evaluar únicamente la capacidad de escribir código empieza a perder relevancia. SDD permite cambiar la dinámica: el estudiante asume tres responsabilidades.
|
01 Especificar Definir correctamente el problema, las entradas, las reglas y las salidas. |
02 Generar o implementar Construir el código directamente o usar una herramienta de IA para una primera versión. |
03 Verificar Comprobar que el resultado realmente cumple la especificación. |
Esto cambia la relación entre el estudiante y la IA. La IA deja de ser simplemente una máquina que «hace la tarea» y pasa a convertirse en un asistente de implementación. El criterio sigue perteneciendo al estudiante.
Una regla sencilla para el aula
Una práctica especialmente útil consiste en establecer una regla:
No se genera código hasta que exista una especificación verificable.
Antes de abrir el editor de Python, el estudiante debe completar cinco bloques:
1. OBJETIVO ¿Qué debe resolver? 2. ENTRADAS ¿Qué datos recibe? 3. REGLAS ¿Qué lógica debe aplicar? 4. SALIDAS ¿Qué debe entregar? 5. CRITERIOS DE ACEPTACIÓN ¿Cómo sabemos que funciona?
Esta estructura obliga a pensar antes de programar y facilita que el docente identifique rápidamente dónde se encuentra el problema. Si el programa produce un resultado incorrecto, podemos preguntar:
- —¿la especificación era incorrecta?
- —¿la regla estaba incompleta?
- —¿el código implementó mal la regla?
- —¿faltaban casos de prueba?
Esto genera conversaciones mucho más valiosas que simplemente corregir errores de sintaxis.
Una posible ruta de aprendizaje
Un curso introductorio de Python basado en SDD podría organizarse en ocho sesiones.
| S1 |
Del problema a la especificación Identificar objetivos, entradas, reglas, salidas y criterios de aceptación. |
| S2 |
De la especificación a Python Variables, tipos de datos, operadores y resultados. |
| S3 |
Reglas de decisión Uso de |
| S4 |
Procesamiento de múltiples datos Listas, diccionarios y bucles. |
| S5 |
Construcción de funciones Cómo convertir reglas repetitivas en componentes reutilizables. |
| S6 |
Datos reales Lectura y procesamiento de archivos CSV o Excel utilizando Pandas. |
| S7 |
Validación Casos de prueba, errores, |
| S8 |
Proyecto completo Construcción de una solución desde la especificación hasta las pruebas finales. |
El resultado es una progresión diferente: problema → lógica → implementación → validación.
Qué cambia para el estudiante
Con este enfoque, aprender Python deja de significar memorizar comandos. El estudiante comienza a desarrollar otras capacidades:
|
|
Estas habilidades son especialmente importantes en un contexto donde cada vez más código puede ser generado automáticamente.
Programar ya no consiste solamente en escribir código
Durante muchos años, aprender programación significaba aprender a producir instrucciones para una computadora. La inteligencia artificial está cambiando parcialmente esa definición: cada vez será más común que una persona describa un comportamiento esperado y que una herramienta genere parte de la implementación.
En ese escenario, saber especificar correctamente un problema se vuelve una competencia central. Por eso, enseñar Python mediante Spec-Driven Development puede ser una forma especialmente útil de introducir programación a nuevos estudiantes.
En lugar de comenzar la clase con «hoy aprenderemos variables», podemos comenzar con algo mucho más cercano a la realidad:
«Tenemos un problema. Definamos exactamente qué debería hacer el programa.»
Y desde allí, dejar que Python aparezca como lo que realmente es: una herramienta para convertir una idea bien definida en una solución ejecutable.