Tu proyecto está terminado, documentado, defendido y publicado: Presentación del proyecto cerró la última tarea pendiente. Esta lección no enseña sintaxis nueva ni añade nada al proyecto; sirve para lo que viene después, que es una pregunta legítima y bastante angustiosa cuando se termina un curso: ¿y ahora qué? Vamos a responderla en cuatro tiempos. Primero, un balance honesto de lo que sabes hacer hoy y no sabías hace nueve módulos. Segundo, el mapa de lo que existe ahí fuera y este curso no cubrió, para que sepas qué hay y para qué sirve. Tercero, los caminos profesionales que se abren desde donde estás, con expectativas realistas. Y cuarto, un plan concreto de tres meses, porque la diferencia entre quien sigue programando dentro de un año y quien lo deja no es el talento: es tener la siguiente cosa que hacer.
Contenido
- El camino recorrido
- TareaFácil, de la v0.1 a la v1.0
- Lo que este curso no cubrió
- Elegir un camino
- Cómo seguir aprendiendo
- Hábitos profesionales que conviene consolidar
- Trabajar con asistentes de IA
- Errores frecuentes de quien empieza
- Un plan para los próximos tres meses
- Errores comunes y consejos
- Ejercicios
- Conclusión
- El camino recorrido
Empezaste sin saber qué era una variable. Este es el inventario, módulo a módulo, de lo que sabes hacer ahora; léelo despacio, porque la sensación normal al terminar un curso es la de no saber nada, y eso no es lo que dice la tabla:
| Módulo | Lo que sabes hacer ahora |
|---|---|
| 1. Introducción | Explicar qué es programar y por qué Python; montar un entorno con venv y VS Code; convertir un problema en un algoritmo con pseudocódigo, diagramas de flujo y prueba de escritorio |
| 2. Conceptos básicos | Manejar variables y tipos, operadores y expresiones; leer y escribir datos con input y f-strings; convertir tipos y validar entradas con el marco de presencia, tipo, dominio y coherencia |
| 3. Estructuras de control | Decidir con condicionales, repetir con bucles, cortar con break y continue, usar match/case y construir un bucle de aplicación con su menú |
| 4. Funciones | Definir funciones con parámetros y retorno, razonar sobre el ámbito con LEGB, descomponer un programa top-down con main(), separar entrada/salida de lógica y usar funciones como valores |
| 5. Estructuras de datos | Elegir con criterio entre lista, cadena, diccionario, conjunto y tupla; anidarlas; y persistir datos en texto, CSV y JSON |
| 6. Algoritmos | Buscar de forma lineal y binaria, ordenar con sorted y key, escribir funciones recursivas con memoización y razonar el coste con Big-O midiendo antes de optimizar |
| 7. Objetos | Diseñar clases con __init__, métodos, __str__, @property y @dataclass; componer colecciones de objetos; usar herencia básica; y organizar el código en módulos y paquetes |
| 8. Buenas prácticas | Documentar con docstrings, anotaciones y README; depurar con try/except, logging y depurador; versionar con Git; escribir pruebas con pytest; y refactorizar con PEP 8, black y ruff |
| 9. Proyecto final | Definir el alcance de un proyecto, diseñarlo, planificarlo, implementarlo en incrementos, probarlo, presentarlo y publicarlo |
Esa última fila es la que más pesa. Hay mucha gente que conoce la sintaxis de Python; hay bastante menos que haya llevado un proyecto propio de la idea a la v1.0 publicada. Lo primero se aprende en unas semanas; lo segundo es lo que hace falta para trabajar.
- TareaFácil, de la v0.1 a la v1.0
Si necesitas una prueba tangible del camino, ahí está TareaFácil. Empezó siendo tres print y una lista, y terminó siendo un paquete instalable con pruebas. Su historia es la del curso:
| Versión | Qué era | Módulo |
|---|---|---|
| v0.1 | Un puñado de print con las tareas escritas a mano |
2 |
| v0.2 | Un menú en un while True con opciones que ya hacían algo |
3 |
| v0.3 | Funciones separadas, main() y la lógica apartada de la pantalla |
4 |
| v0.4 | Lista de diccionarios y guardado en JSON: las tareas sobrevivían al cierre | 5 |
| v0.5 | Búsqueda, filtros y ordenación por prioridad y fecha, con su coste medido | 6 |
| v0.6 | Clases Tarea y TareaRecurrente, clase Agenda, paquete con módulos |
7 |
| v0.21 → v1.0 | Docstrings, tipos, README, CHANGELOG, try/except, logging, Git, ocho pruebas en verde, black y ruff |
8 |
La distancia se ve mejor comparando la misma idea escrita al principio y al final. Así se listaban las tareas en la v0.1:
tareas = ["Logotipo Panaderia Sole", "Cartel feria del libro", "Web cliente Vidal"]
print("Tareas pendientes:")
print("1. " + tareas[0])
print("2. " + tareas[1])
print("3. " + tareas[2])Y así en la v1.0:
def listar(agenda: Agenda, responsable: str | None = None) -> None:
"""Muestra las tareas pendientes, opcionalmente de un solo responsable."""
pendientes = agenda.filtrar_por(completada=False, responsable=responsable)
if not pendientes:
print("No hay tareas pendientes.")
return
for tarea in agenda.ordenadas(pendientes, clave="prioridad"):
print(tarea)Entre los dos fragmentos hay nueve módulos: funciones con parámetros y valores por defecto, anotaciones de tipo, docstring, una clase que encapsula la colección, filtrado y ordenación por criterio, el caso de lista vacía previsto y __str__ haciendo el formato. Pero la diferencia importante no es la sintaxis, sino que el segundo funciona con tres tareas y con trescientas, y que se puede probar, cambiar y ampliar sin reescribirlo.
Marta, Luis y Nuria empezaron con un cuaderno donde apuntaban quién hacía qué para la Panadería Solé y acabaron con una herramienta que reparte el trabajo del estudio, avisa de lo urgente y no pierde nada. Ese salto —de un problema real contado en una frase a un programa que lo resuelve— es exactamente el mismo que acabas de dar tú con tu propio proyecto, esta vez sin que nadie te dijera qué escribir en cada paso.
- Lo que este curso no cubrió
Un curso de fundamentos cubre los cimientos, y los cimientos no son el edificio. Esto es lo que existe ahí fuera, para qué sirve cada cosa y cuándo tiene sentido meterse:
| Tema | Para qué sirve | Cuándo te hará falta |
|---|---|---|
| POO avanzada | Herencia múltiple, clases abstractas, métodos mágicos, patrones de diseño: modelar dominios complejos sin repetir código | Cuando tu proyecto pase de tres o cuatro clases y notes duplicación entre ellas |
| Bases de datos y SQL | Guardar, consultar y relacionar grandes volúmenes de datos con integridad y sin cargarlo todo en memoria | En cuanto un proyecto supere unos miles de registros o necesite consultas complejas; es lo primero que recomendaría |
| Programación web | HTTP, APIs REST, JSON sobre la red, frameworks como Flask o Django: que tu programa lo use gente desde un navegador | Cuando quieras que tu proyecto salga de tu ordenador |
| Interfaces gráficas | Tkinter, PyQt o una interfaz web: ventanas, botones y formularios en vez de un menú de texto | Cuando el usuario final no sea alguien cómodo con la terminal |
| Concurrencia y asincronía | Hilos, procesos y async/await: hacer varias cosas a la vez sin que el programa se quede bloqueado |
Cuando esperes mucho por la red o el disco, o proceses volúmenes grandes |
| Estructuras de datos avanzadas | Pilas, colas, árboles y grafos: resolver problemas donde una lista o un diccionario no bastan (rutas, jerarquías, deshacer) | Cuando el problema tenga forma de red o de jerarquía; también sale en entrevistas técnicas |
| Expresiones regulares | Buscar y extraer patrones de texto en una línea: validar formatos, parsear logs, limpiar datos | En cuanto trabajes con texto libre; es de lo más rentable por hora invertida |
Para que la recomendación sobre bases de datos no quede en abstracto, mira la misma consulta —«los gastos de comida de agosto de más de 50 euros»— con lo que sabes hoy y con SQL:
# Con lo que sabes hoy: cargar todo en memoria y filtrar
resultado = [m for m in cuaderno
if m.categoria == "comida"
and m.fecha.isoformat().startswith("2026-08")
and m.importe < -50]-- Con SQL: la base de datos filtra sin cargar nada en tu programa
SELECT * FROM movimientos
WHERE categoria = 'comida' AND fecha LIKE '2026-08%' AND importe < -50;Con 200 movimientos, la primera versión es perfecta y más simple. Con 200.000, la primera carga todo el fichero en memoria y recorre cada elemento, mientras que la segunda usa índices y devuelve el resultado sin que tu programa vea el resto. Ese es el momento exacto en el que toca aprender SQL: cuando el problema aparece, no antes.
Dos consejos sobre esta tabla. El primero: no la conviertas en una lista de tareas. Intentar aprender los siete temas seguidos es la forma más rápida de no aprender ninguno. El segundo: aprende cada uno cuando un proyecto tuyo lo necesite. Cuando tu programa de gastos se vuelva lento con 20.000 movimientos, SQL dejará de ser una asignatura y será la solución a tu problema, y entonces se aprende en un fin de semana lo que de otro modo cuesta un mes.
- Elegir un camino
Con lo que sabes hoy ya puedes empezar cualquiera de estos caminos. Ninguno es mejor; dependen de qué tipo de problema te apetece resolver. Todos comparten el mismo tronco —el que acabas de recorrer— y se separan después:
flowchart TD
B["Fundamentos<br/>este curso"] --> W["Desarrollo web"]
B --> D["Datos y analisis"]
B --> A["Automatizacion<br/>y scripting"]
B --> M["Desarrollo movil"]
B --> S["Sistemas y DevOps"]
W --> WB["Back-end<br/>SQL, HTTP, Flask"]
W --> WF["Front-end<br/>HTML, CSS, JavaScript"]
D --> DD["SQL, pandas,<br/>estadistica"]
A --> AA["Regex, APIs,<br/>tareas programadas"]
M --> MM["Kotlin o Swift"]
S --> SS["Linux, Docker,<br/>CI/CD, nube"]
Las expectativas de la última columna son honestas, no motivacionales:
| Camino | Qué se hace | Qué se aprende después | Cómo conecta con el curso | Expectativa realista |
|---|---|---|---|---|
| Desarrollo web (back-end) | Servidores que responden peticiones, APIs, lógica de negocio, bases de datos | SQL, HTTP, Flask o Django, autenticación, despliegue | Tu capa de lógica y almacén es exactamente lo que hay detrás de una API; solo cambia la interfaz | 6-12 meses de trabajo constante para nivel de primer empleo |
| Desarrollo web (front-end) | Lo que ve el usuario en el navegador: interfaz, interacción, accesibilidad | HTML, CSS, JavaScript, después React o similar | Cambias de lenguaje, pero variables, funciones, condicionales y estructuras se transfieren enteras | Similar; hay que aprender otro lenguaje base |
| Datos y análisis | Limpiar, analizar y visualizar datos; informes y modelos | SQL, pandas, NumPy, estadística, matplotlib, después machine learning | Tus diccionarios, tu CSV y tu JSON son el paso previo a pandas | 6-12 meses; la estadística pesa tanto como el código |
| Automatización y scripting | Programas que hacen tareas repetitivas: ficheros, informes, integraciones | Expresiones regulares, APIs, os y pathlib, tareas programadas |
Es lo más cercano a lo que ya sabes hacer; podrías empezar mañana | Semanas para ser útil en tu propio trabajo |
| Desarrollo móvil | Aplicaciones para Android o iOS | Kotlin o Swift, ciclo de vida de una app, tiendas de aplicaciones | Los fundamentos se transfieren; el entorno y el lenguaje son nuevos | 9-18 meses; es el salto más grande desde aquí |
| Sistemas y DevOps | Que el software se despliegue, se ejecute y se vigile de forma fiable | Linux, redes, Docker, CI/CD, nube, infraestructura como código | Git, línea de comandos y scripting son la base diaria del oficio | 12+ meses; suele entrarse desde sistemas o desde desarrollo |
Y una nota que ningún catálogo de cursos te dará: la automatización es el camino con mejor relación entre esfuerzo y utilidad inmediata. Si trabajas en algo que no es programación, un script que te ahorre dos horas semanales de trabajo repetitivo te da resultados el primer mes, te da algo real que enseñar y te mantiene programando. Los caminos largos se recorren mucho mejor cuando por el camino hay recompensas.
- Cómo seguir aprendiendo
La regla que resume todo lo demás: se aprende construyendo. Leer sobre programación y programar se parecen tanto como leer sobre natación y nadar. Un curso, un libro o un vídeo sirven para saber que algo existe y cómo se usa; el conocimiento se fija cuando lo aplicas a un problema que no venía resuelto.
Proyectos siguientes, de dificultad creciente. Elige el siguiente escalón, no el edificio entero:
| Nivel | Proyecto | Lo nuevo que te obliga a aprender |
|---|---|---|
| 1 | Tu proyecto final, versión 1.1: los Should que quedaron fuera | Nada nuevo; consolidación y trabajo sobre código propio ya escrito |
| 2 | Un script que automatice algo real de tu día a día | pathlib, expresiones regulares, argumentos de línea de comandos |
| 3 | El mismo proyecto, con los datos en SQLite en lugar de JSON | SQL básico, consultas, integridad de datos |
| 4 | Un programa que consuma una API pública (tiempo, transporte, libros) | HTTP, requests, JSON de terceros, gestión de errores de red |
| 5 | Una pequeña aplicación web con Flask sobre tu proyecto | Rutas, plantillas, formularios, despliegue |
Retos de programación. Plataformas como Exercism, Codewars o Advent of Code te dan problemas cerrados con solución verificable. Son un excelente gimnasio para algoritmos y estructuras de datos, y un mal sustituto de los proyectos: entrenan resolver problemas de veinte líneas, no construir sistemas. Media hora dos o tres veces por semana está bien; vivir ahí, no.
Leer código ajeno. Es la habilidad más infravalorada y la que más practicarás en un trabajo real, donde el 80 % del tiempo se lee código que no escribiste tú. Empieza por proyectos pequeños, con este recorrido y estas preguntas:
| Orden | Qué miras | Pregunta que te haces |
|---|---|---|
| 1 | README | ¿Entiendo qué hace y para quién en un minuto? |
| 2 | Estructura de ficheros | ¿Reconozco las capas: modelo, lógica, almacén, interfaz? |
| 3 | El punto de entrada | ¿Por dónde empieza a ejecutarse y qué llama primero? |
| 4 | Un módulo cualquiera | ¿Cómo nombran las funciones? ¿Cuánto ocupa cada una? |
| 5 | Los tests | ¿Qué consideran importante probar? |
| 6 | El historial de commits | ¿Cómo escriben los mensajes? ¿Commits grandes o pequeños? |
Media hora con ese recorrido sobre dos o tres proyectos te da más criterio de estructura que varios tutoriales, porque ves decisiones reales tomadas por gente con más oficio.
Contribuir a proyectos libres. Suena inalcanzable y no lo es. La vía de entrada real no es arreglar un error complejo, sino esta secuencia:
- Usa una herramienta libre pequeña que ya te resulte útil.
- Encuentra algo que no funciona, o que la documentación no explica bien.
- Busca en su repositorio las incidencias etiquetadas
good first issue, que existen exactamente para quien llega nuevo. - Lee su guía de contribución (
CONTRIBUTING.md) y respeta su estilo, aunque no sea el tuyo. - Propón un cambio pequeño y bien explicado, y acepta la revisión que te hagan.
La primera contribución aceptada enseña más sobre trabajo en equipo —revisiones, estilo del proyecto, discusión técnica— que cualquier curso.
Estudiar la documentación oficial. Es una habilidad que se entrena, no un castigo. La documentación de Python tiene tres partes que conviene distinguir: el Tutorial (para aprender algo nuevo), la Library Reference (para consultar qué hace exactamente una función) y los HOWTO (guías temáticas excelentes, como el de expresiones regulares o el de logging). Acostúmbrate a buscar primero ahí y después en foros; los foros te dan una receta, la documentación te da el modelo.
- Hábitos profesionales que conviene consolidar
Estos cinco hábitos ya los has practicado en el curso. Lo que decide tu progreso no es aprenderlos otra vez, es no abandonarlos cuando nadie te los pida:
- Versiona todo desde el primer minuto.
git inites la primera orden de cualquier proyecto, aunque sea un script de treinta líneas y aunque no lo vayas a compartir. El coste es cero y evita la carpeta deversion_final_2_buena. - Prueba lo que importa. No hace falta cubrirlo todo: prueba los cálculos, las reglas del dominio y la persistencia. Es lo que te permite cambiar código sin miedo, y sin esa confianza los proyectos se paralizan.
- Escribe para quien viene detrás, que casi siempre eres tú dentro de tres meses. Nombres claros, funciones cortas, un README que explique el porqué. El código se escribe una vez y se lee muchas.
- Mide antes de optimizar. La intuición sobre el rendimiento es mala casi siempre. Mide, localiza el punto lento real y optimiza solo eso (06-04). El resto del tiempo, prioriza la claridad.
- Termina lo que empiezas. Es el hábito más difícil y el que más te va a diferenciar. Un proyecto acabado, aunque sea modesto, enseña y demuestra; diez a medias no hacen ninguna de las dos cosas.
- Trabajar con asistentes de IA
Los asistentes de IA forman parte del trabajo y no tiene sentido fingir lo contrario. La pregunta útil no es si usarlos, sino cómo usarlos para que sumen sin impedir que aprendas. La diferencia está en si el asistente hace el trabajo por ti o contigo:
| Uso que suma | Uso que impide aprender |
|---|---|
«Explícame qué significa este TypeError y por qué ocurre» |
«Arréglame este error» sin leer la explicación |
| «Revisa esta función y dime qué olores de código ves» | «Escríbeme la función» |
| «¿Qué alternativas hay a esta estructura y qué implica cada una?» | «¿Cuál es la mejor?» y aceptarlo sin criterio |
| «Ponme tres ejercicios sobre diccionarios y corrígemelos» | Pedir la solución antes de intentarlo |
| «Explícame este fragmento de código ajeno línea a línea» | Pegar código generado que no entiendes |
La diferencia se ve en cómo formulas la petición. Compara:
Mal: "Hazme una funcion que calcule el total por categoria."
Bien: "Esta es mi funcion total_por_categoria (la pego). Devuelve bien los totales
pero el orden no es el que espero. Que puede estar pasando y por que?"La segunda pregunta parte de tu código, describe el comportamiento observado y pide una explicación, no una sustitución. Es la diferencia entre salir con una función y salir entendiendo por qué sorted ordena por el segundo elemento de la tupla.
Tres reglas prácticas que funcionan bien:
- Intenta el problema veinte minutos antes de preguntar. El aprendizaje ocurre durante el intento, no en la respuesta. Preguntar después de intentarlo es investigación; preguntar antes es dependencia.
- No pegues nunca código que no sabrías reescribir. No por pureza, sino por consecuencias prácticas: cuando falle en producción, o cuando te lo pregunten en una entrevista, tendrás que entenderlo igualmente.
- Verifica siempre. Los asistentes se equivocan con seguridad aparente: inventan funciones que no existen, usan APIs obsoletas y cometen errores sutiles de lógica. Tus pruebas automatizadas y la documentación oficial son el filtro.
La habilidad que de verdad importa —y que los asistentes no sustituyen— es saber qué construir, cómo estructurarlo y cómo comprobar que funciona. Eso es justamente lo que has practicado en este módulo.
- Errores frecuentes de quien empieza
Cuatro patrones que descarrilan a mucha gente en el año siguiente a un primer curso, con su antídoto concreto:
| Error | Cómo se manifiesta | Antídoto |
|---|---|---|
| Saltar de tecnología en tecnología | Empiezas Django, a las dos semanas React porque «está más demandado», después Rust | Elige una y dale seis meses. La profundidad se transfiere entre tecnologías; el picoteo no |
| Tutorial hell | Encadenas cursos y vídeos con la sensación de aprender, pero no eres capaz de empezar nada solo desde una hoja en blanco | Por cada hora de tutorial, una hora construyendo algo que el tutorial no explicaba |
| Compararte con veteranos | Ves código de alguien con quince años de oficio y concluyes que esto no es para ti | Compárate con tu yo de hace tres meses. Y recuerda que ese código también empezó siendo malo |
| No terminar nada | Cinco proyectos al 60 %, ninguno publicado | Reduce el alcance hasta que quepa (MoSCoW de 09-01) y termina uno, aunque sea pequeño |
Un quinto, menos comentado y muy común: estudiar sin aplicar durante meses esperando estar «preparado» para hacer algo real. No existe ese momento. Se está preparado en cuanto se empieza; el resto se aprende por el camino, exactamente como acabas de hacer con tu proyecto.
- Un plan para los próximos tres meses
Un plan concreto vale más que cualquier lista de recursos. Este supone entre cinco y ocho horas semanales, que es lo que se puede sostener compaginándolo con otras cosas. Adáptalo, pero conserva la estructura: siempre hay un proyecto en marcha, y el estudio está al servicio del proyecto.
flowchart LR
S1["Semanas 1-2<br/>v1.1 de tu proyecto"] --> S2["Semanas 3-4<br/>Script de automatizacion"]
S2 --> S3["Semanas 5-8<br/>SQL y SQLite"]
S3 --> S4["Semanas 9-10<br/>Consumir una API"]
S4 --> S5["Semanas 11-12<br/>Segundo proyecto publicado"]
| Semanas | Objetivo | Qué haces | Resultado comprobable |
|---|---|---|---|
| 1-2 | Consolidar | Tu proyecto v1.1: el plan de mejora de 09-04 y uno o dos Should | Etiqueta v1.1 publicada |
| 3-4 | Automatizar algo real | Un script que te ahorre una tarea repetitiva propia | Un script que usas de verdad cada semana |
| 5-8 | Persistencia seria | Aprender SQL básico y migrar tu proyecto de JSON a SQLite | El proyecto funciona igual, pero con base de datos |
| 9-10 | Salir al mundo | Consumir una API pública en un proyecto pequeño | Un programa que trae datos de internet y los procesa |
| 11-12 | Elegir camino | Un tutorial serio del camino del apartado 4 que hayas elegido, y algo propio encima | Un segundo proyecto publicado con su README |
Cuatro reglas para que el plan sobreviva:
- Franjas fijas en el calendario. «Cuando pueda» significa nunca. Dos tardes y un rato el fin de semana funcionan mejor que cinco horas seguidas un domingo.
- Sesiones cortas y frecuentes ganan a maratones espaciados: la memoria funciona así, y los maratones dejan el código a medias.
- Termina cada sesión con algo commiteado y una nota de por dónde ibas (09-03). Retomar es lo que más tiempo consume.
- Revisa el plan cada mes. Si algo no encaja con tu vida real, cámbialo; un plan abandonado no enseña nada.
Errores Comunes y Consejos
- Confundir «terminar un curso» con «haber terminado». Este curso son los cimientos. La programación se aprende durante años y siempre en obra; eso no es una mala noticia, es la parte interesante del oficio.
- Elegir camino por lo que está de moda. Las modas cambian cada dos años y el interés propio no. Elige por el tipo de problema que te apetece resolver: si no te interesa, no aguantarás la curva.
- Esperar a «estar preparado». Nadie se siente preparado nunca. El síndrome del impostor acompaña también a los veteranos; se convive con él, no se cura estudiando más.
- Aprender teoría sin proyecto. Un tema estudiado sin aplicarlo se olvida en semanas. Cada cosa nueva debe entrar en algo que estés construyendo.
- Medir el progreso en horas de vídeo. El progreso se mide en problemas resueltos y proyectos publicados, no en tutoriales consumidos.
- Consejo: guarda un registro de aprendizaje. Un fichero donde apuntes, cada semana, qué hiciste y qué te costó. En seis meses será la prueba de tu avance el día que te parezca que no avanzas.
- Consejo: busca gente. Una comunidad, un grupo local, alguien con quien comentar lo que haces. Programar solo mucho tiempo se hace cuesta arriba, y la mayor parte de lo que se aprende después de un curso se aprende hablando con otros.
- Consejo: vuelve a este material cuando lo necesites. Nadie recuerda la sintaxis de
sortedconkeyni el orden de los argumentos deopen. Buscarlo no es un fallo: es el trabajo normal.
Ejercicios
Los tres últimos ejercicios del curso no son de código: son de dirección. Hazlos por escrito, en un fichero que puedas releer dentro de unos meses.
Ejercicio 1: Balance honesto
Recorre la tabla del apartado 1 y puntúa de 1 a 3 tu dominio real de cada módulo (1: lo reconozco pero no lo aplicaría solo; 2: lo aplico consultando; 3: lo aplico con soltura). Para cada módulo con un 1, escribe una tarea concreta que lo subiría a 2, en menos de dos horas de trabajo. Añade una lista de las cinco cosas que sabes hacer hoy y no sabías hace nueve módulos, con el ejemplo del proyecto que lo demuestra.
Ejercicio 2: Elegir camino y siguiente proyecto
Con la tabla del apartado 4, elige un camino y escribe medio folio justificando por qué: qué tipo de problemas resuelve, por qué te interesan a ti, qué expectativa temporal aceptas y qué tres cosas concretas tendrías que aprender primero. Después define tu siguiente proyecto con el documento de definición de 09-01 —problema, MoSCoW y cinco requisitos—, eligiendo el nivel del apartado 5 que te toque.
Ejercicio 3: Tu plan de tres meses
Adapta la tabla del apartado 9 a tu disponibilidad real: escribe las horas semanales de las que dispones de verdad (no las que te gustaría), las franjas concretas del calendario y el resultado comprobable de cada bloque de dos semanas. Añade una fila de «revisión mensual» y anota la fecha exacta de la primera. Guárdalo donde lo vayas a ver.
Soluciones
Solución 1. No hay solución única, pero sí una forma de comprobar que lo has hecho bien: las cinco cosas de la segunda lista deben poder señalarse en tu proyecto, con fichero y línea. Por ejemplo, «sé separar la lógica de la interfaz» → cuaderno.py no contiene ningún print; «sé escribir pruebas» → tests/test_modelo.py con nueve casos; «sé versionar» → git log con veinte commits y una etiqueta. Si alguna afirmación no tiene evidencia, es una que todavía estás aprendiendo, y eso también es información útil. Rúbrica: ¿cada punto tiene evidencia? ¿Las tareas de los módulos con 1 caben en dos horas y son concretas («escribir tres pruebas parametrizadas», no «repasar pruebas»)?
Solución 2. La justificación bien hecha habla de problemas, no de tecnologías: «me interesa que las herramientas que uso a diario dejen de hacerme perder tiempo, así que empiezo por automatización, y de ahí probablemente al back-end» es una respuesta sólida; «elijo datos porque está bien pagado» no sostiene los seis meses siguientes. Rúbrica: ¿tu justificación menciona el tipo de problema y no solo el nombre del camino? ¿Aceptas la expectativa temporal de la tabla? ¿Tu siguiente proyecto es un escalón, no un salto? ¿Tiene su cajón Won't escrito?
Solución 3. El plan del apartado 9 es la plantilla. Los dos fallos habituales: planificar con las horas ideales en vez de las reales —un plan de quince horas semanales que en realidad son cinco se abandona en la semana tres— y no fijar un resultado comprobable, con lo que es imposible saber si vas bien. Rúbrica: ¿las horas semanales son realistas y están en franjas concretas del calendario? ¿Cada bloque termina en algo verificable (una etiqueta, un script en uso, un repositorio publicado)? ¿Hay siempre un proyecto en marcha, con el estudio a su servicio? ¿Tiene fecha la primera revisión?
Conclusión
Nueve módulos atrás, la primera lección explicaba qué era programar y el primer ejercicio consistía en escribir un print. Hoy sabes convertir un problema en un algoritmo, manejar tipos y validar entradas, decidir y repetir con estructuras de control, descomponer un programa en funciones, elegir la estructura de datos adecuada y guardarla en disco, buscar, ordenar y razonar el coste de lo que escribes, diseñar clases y organizar un paquete, y trabajar como se trabaja de verdad: documentando, depurando, versionando, probando y refactorizando. Y por encima de todo eso, sabes llevar un proyecto propio de la idea a la versión publicada, que es la habilidad que nadie te puede enseñar en una lección porque solo se adquiere haciéndolo entero una vez. Ya la has hecho.
Lo que queda por delante es un mapa, no una lista de deberes: bases de datos, web, interfaces gráficas, concurrencia, estructuras avanzadas, expresiones regulares y POO avanzada, cada cosa a su tiempo y siempre cuando un proyecto tuyo la necesite. Los caminos —web, datos, automatización, móvil, sistemas— se eligen por el tipo de problema que te apetece resolver, no por la moda del año, y todos arrancan desde donde estás ahora. Se avanza construyendo: el siguiente escalón, siempre uno solo, con retos y lectura de código ajeno como gimnasio y la documentación oficial como fuente. Se sostiene con hábitos —versionar todo, probar lo que importa, escribir para quien viene detrás, medir antes de optimizar y terminar lo que se empieza— y se protege de los cuatro descarrilamientos clásicos: saltar de tecnología en tecnología, el tutorial hell, compararse con veteranos y no acabar nada. Los asistentes de IA acompañan bien si los usas para entender, revisar y explorar alternativas, y mal si les delegas el trabajo que es tu aprendizaje. Y para que nada de esto se quede en intención, ahí está el plan de tres meses con franjas fijas, sesiones cortas y un resultado comprobable cada quincena.
En Estudio Alba, Marta sigue coordinando a Luis y a Nuria, la Panadería Solé sigue pidiendo cambios de última hora y la feria del libro vuelve cada año. TareaFácil pasó de tres print a un paquete con pruebas en verde porque alguien decidió, un día, resolver un problema pequeño y concreto y luego no lo abandonó. Tu proyecto tiene ahora la misma historia y es enteramente tuyo: la idea, el diseño, cada decisión y cada fallo que arreglaste a las once de la noche. Eso —elegir un problema, entenderlo, construir la solución y terminarla— es programar, y ya lo has hecho una vez. Todo lo que venga a partir de ahora es la misma operación con más herramientas. Gracias por llegar hasta aquí, y que el siguiente proyecto sea mejor que este.
Fundamentos de la Programación
Módulo 1: Introducción a la Programación
- ¿Qué es la programación?
- Historia de la programación
- Lenguajes de programación
- Entornos de desarrollo
- Del problema al algoritmo
Módulo 2: Conceptos Básicos
- Variables y tipos de datos
- Operadores y expresiones
- Entrada y salida de datos
- Conversión de tipos y validación de datos
Módulo 3: Estructuras de Control
Módulo 4: Funciones y Procedimientos
- Definición y uso de funciones
- Parámetros y retorno de valores
- Ámbito de variables
- Descomponer un programa en funciones
- Funciones como valores: lambda y orden superior
Módulo 5: Estructuras de Datos
- Listas y arreglos
- Cadenas de caracteres
- Diccionarios y conjuntos
- Tuplas y estructuras anidadas
- Guardar datos en archivos: texto, CSV y JSON
Módulo 6: Algoritmos Básicos
Módulo 7: Objetos y Organización del Código
- De los datos a los objetos: clases e instancias
- Atributos, métodos y constructor
- Colecciones de objetos
- Módulos, paquetes e importaciones
Módulo 8: Buenas Prácticas y Herramientas
- Documentación y comentarios
- Depuración y manejo de errores
- Control de versiones
- Pruebas automatizadas
- Estilo, legibilidad y refactorización
