Tu proyecto funciona, está probado y vive en un repositorio ordenado: Implementación y pruebas cerró la checklist de «terminado». Queda una parte que quien empieza suele considerar accesoria y que en la práctica decide cuánto vale tu trabajo para los demás: saber enseñarlo. Un proyecto que nadie sabe instalar, que no se entiende sin ti al lado o cuyas decisiones no sabes justificar es, para efectos prácticos, un proyecto que no existe. Esta lección convierte tu carpeta de código en algo presentable: un repositorio limpio, un README que hace el trabajo por ti, una demostración de cinco minutos que no depende de la suerte, y las respuestas preparadas para las preguntas que te van a hacer —incluida la más incómoda, la de las limitaciones—.
Contenido
- Dejar el repositorio presentable
- El README como carta de presentación
- La demostración de cinco minutos
- Explicar decisiones técnicas
- Hablar de las limitaciones sin restarte valor
- Preguntas típicas y cómo responderlas
- Recibir crítica y convertirla en tareas
- Publicar el proyecto
- Autoevaluación final y plan de mejora
- Errores comunes y consejos
- Ejercicios
- Conclusión
- Dejar el repositorio presentable
Quien mire tu proyecto verá primero el repositorio, no el programa. Y la primera impresión se juega en treinta segundos: si hay un README.md que explica qué es esto y hay ficheros con nombres razonables, sigue leyendo; si ve una carpeta con prueba2.py, datos_final_final.json y ningún texto, cierra la pestaña.
Recorre esta checklist entera antes de enseñárselo a nadie, retomando Documentación y comentarios y Control de versiones:
| # | Comprobación | Por qué importa |
|---|---|---|
| 1 | README.md completo, con instalación, uso y ejemplo de sesión |
Es lo único que muchos van a leer |
| 2 | requirements.txt (o requirements-dev.txt) con las dependencias |
Sin esto nadie reproduce tu entorno |
| 3 | .gitignore con .venv/, __pycache__/, *.log y tus datos reales |
Un repositorio con basura resta credibilidad |
| 4 | Sin datos personales ni credenciales en ningún fichero ni en el historial | Es el error más grave que puedes cometer |
| 5 | Sin ficheros temporales, prueba.py, copia_de_seguridad/ ni código comentado |
Todo lo que sobra distrae de lo que importa |
| 6 | Nombres de fichero y de rama coherentes y en un solo idioma | La coherencia se lee como profesionalidad |
| 7 | git log --oneline legible, con mensajes que empiezan por verbo |
Cuenta la historia del proyecto |
| 8 | git status limpio, todo commiteado y subido |
Lo que no está subido no existe |
| 9 | Etiqueta v1.0 creada y empujada |
Marca el punto entregable |
| 10 | Clonado en una carpeta nueva: instala y arranca | La comprobación definitiva |
Sobre el punto 4, una advertencia seria: borrar un fichero con una contraseña en un commit posterior no lo elimina del historial; sigue ahí y cualquiera puede recuperarlo. Si te ha pasado, la respuesta correcta no es maquillarlo sino invalidar esa credencial y, si el repositorio no es público todavía, rehacerlo desde cero. En un proyecto de este curso lo normal es que no haya credenciales, pero sí datos personales reales: los tuyos, en el fichero de gastos o en la agenda de contactos. Esos no se suben.
Y el cierre del trabajo, retomando el versionado semántico de 08-01:
git tag -a v1.0 -m "Primera version completa: todos los requisitos Must"
git push origin master --tags
- El README como carta de presentación
El README es el documento más rentable de tu proyecto: se escribe en una hora y es lo que leerá el 100 % de quienes lo miren. Esta es la estructura, en orden, con el porqué de cada sección:
| Sección | Qué va | Extensión |
|---|---|---|
| Título y frase | Qué es esto, en una línea | 1 línea |
| Descripción | El problema que resuelve y para quién | 3-5 líneas |
| Características | Lista de lo que hace | 5-8 puntos |
| Requisitos | Versión de Python y dependencias | 2 líneas |
| Instalación | Comandos copiables, en orden | 4-6 líneas |
| Uso | Cómo se ejecuta y un ejemplo de sesión real | 15-25 líneas |
| Estructura del proyecto | Árbol de ficheros con una línea por módulo | 8-10 líneas |
| Pruebas | Cómo ejecutarlas | 2 líneas |
| Limitaciones y mejoras futuras | Lo que no hace, a propósito | 4-6 puntos |
| Licencia y autoría | Quién lo hizo | 1-2 líneas |
Un extracto comentado del README de MisGastos:
# MisGastos
Gestor de gastos personales por linea de comandos.
Registra ingresos y gastos con categoria y fecha, los guarda en un fichero JSON
y muestra el desglose mensual por categoria. Nacio de un problema propio: llegar
a fin de mes sin saber en que se habia ido el dinero.
## Caracteristicas
- Alta de gastos e ingresos con validacion de todos los campos
- Listado de movimientos por mes, ordenado por fecha
- Resumen por categoria con porcentajes y saldo del mes
- Exportacion del mes a CSV para la hoja de calculo
- Guardado automatico en JSON; tolera fichero ausente o corrupto
## Requisitos
Python 3.10 o superior. Sin dependencias externas.
## Instalacion
(aqui va un bloque de codigo bash con los comandos, uno por linea)
## Uso
(otro bloque de codigo con: python -m misgastos)Los dos últimos apartados llevan bloques de código con los comandos literales, que son estos:
git clone https://github.com/usuario/misgastos.git
cd misgastos
python -m venv .venv && source .venv/bin/activate
python -m misgastosFíjate en tres decisiones. La descripción menciona el problema antes que la solución: quien lee entiende para qué sirve antes de saber cómo funciona. Las características están en infinitivo o sustantivo, no en «podrás hacer...». Y la instalación son comandos copiables en orden, sin prosa entre ellos: quien evalúa tu proyecto quiere pegarlos y que funcionen.
La parte que más convence, y la que casi nadie incluye, es una demostración en texto de una sesión real. Vale más que cualquier descripción, porque enseña el programa funcionando sin instalarlo:
$ python -m misgastos
=== MisGastos ===
1. Registrar gasto
4. Resumen por categoria
0. Salir
Opcion: 4
Mes (AAAA-MM): 2026-08
=========================================
RESUMEN DE 2026-08 (18)
=========================================
comida -212,40 EUR 38,1 %
transporte -132,00 EUR 23,7 %
hogar -98,50 EUR 17,7 %
-----------------------------------------
Gastos -557,10 EUR
Ingresos +1450,00 EUR
SALDO +892,90 EUR
=========================================Cómo se hace: ejecuta el programa con tus datos de ejemplo, copia la salida literal de la terminal y pégala en un bloque ```text. Nada de recrearla a mano —se nota, y además suele quedar desalineada—. Si prefieres capturas de pantalla, súbelas a una carpeta docs/ del repositorio y enlázalas con ; pero el texto tiene una ventaja: se busca, se copia y no se rompe.
- La demostración de cinco minutos
Antes o después tendrás que enseñar el proyecto en directo: en clase, en una entrevista o a alguien que te preguntó qué estabas haciendo. Cinco minutos parecen pocos y son muchos si no llevas guion, porque el impulso natural es empezar por el código y perderse en detalles.
flowchart LR
P["Problema<br/>30 s"] --> S["Solucion<br/>30 s"]
S --> D["Demo del flujo<br/>2 min"]
D --> T["Detalle tecnico<br/>1 min"]
T --> L["Limitaciones y<br/>siguientes pasos 1 min"]
Este es el guion, y el reparto de tiempo importa tanto como el contenido:
| Bloque | Tiempo | Qué dices | Error típico |
|---|---|---|---|
| 1. El problema | 30 s | «Apuntaba los gastos en notas del móvil y a fin de mes no sabía en qué se me iba el dinero» | Empezar por «he usado dataclasses y JSON» |
| 2. La solución | 30 s | Qué es el programa en una frase y qué hace | Enumerar las diez funciones |
| 3. Demo del flujo principal | 2 min | Registrar un gasto y ver el resumen del mes, con datos ya cargados | Improvisar y teclear datos a mano |
| 4. Un detalle técnico | 1 min | Algo de lo que estés orgulloso, con el porqué | Enseñar código sin explicar la decisión |
| 5. Limitaciones y siguientes pasos | 1 min | Qué dejaste fuera a propósito y qué harías después | Pedir disculpas por lo que falta |
Sobre el bloque 3, que es el que se puede torcer: prepara los datos de antemano. Ten un datos_demo.json con quince o veinte movimientos repartidos en dos meses, copiado al sitio justo antes de empezar. Nunca hagas una demo con la base vacía: registrar cinco gastos en directo consume tus dos minutos y no enseña nada. Y ensaya la secuencia exacta de teclas al menos dos veces; el objetivo es que puedas hablar mientras las tecleas, no leer la pantalla.
¿Y si algo falla durante la demo? Falla, tarde o temprano. Lo que se juzga no es el fallo, es la reacción:
- No lo escondas ni lo minimices. «Ahí hay un fallo, no había probado esta combinación» es una respuesta profesional. Fingir que no ha pasado, no.
- No te pongas a depurar en directo. Consume el tiempo de todos y rara vez sale bien. Anótalo y sigue.
- Ten un plan B: una captura o una sesión grabada en texto en el README con la que continuar explicando.
- Convierte el fallo en información. «Es un caso que no está en mi guion de pruebas; lo añado» demuestra que tienes método, que es justamente lo que se está evaluando.
- Explicar decisiones técnicas
Todo lo que hay en tu código es el resultado de una decisión, y la pregunta «¿por qué lo hiciste así?» no es un ataque: es la forma estándar de averiguar si entiendes lo que has hecho. Una buena respuesta tiene tres partes: qué elegiste, qué alternativa descartaste y con qué criterio. Tres ejemplos reales sobre MisGastos:
«¿Por qué una clase
Movimientoy no un diccionario?» Empecé con diccionarios, que es lo más rápido. El problema apareció con la validación: cada sitio que creaba un movimiento tenía que comprobar que el importe no fuera cero y que la categoría existiera, y me olvidé en uno. Con una clase, la validación está en__post_init__y no puede existir un movimiento inválido en el programa. Además__str__me da la línea de tabla ya formateada. Si solo fuera un contenedor de datos sin reglas, habría dejado el diccionario.
«¿Por qué JSON y no CSV, si son registros planos?» Por los tipos. En CSV todo vuelve como cadena y tendría que reconvertir importes y fechas al leer, con el riesgo de fallar en silencio. JSON conserva los números y me deja añadir campos opcionales sin romper los ficheros antiguos, para lo que además guardo un número de versión. CSV sí lo uso, pero solo como exportación de un sentido, que es donde tiene ventaja: abrir el mes en la hoja de cálculo.
«¿Por qué separaste la interfaz de la lógica, si es un programa pequeño?» Sobre todo para poder probarlo. Los cálculos del resumen están en
Cuaderno, que no imprime nada, así que puedo verificarlos conpytesten centésimas de segundo; si estuvieran mezclados con los
El patrón se ve en los tres: contexto, alternativa, criterio, consecuencia. Y algo igual de importante: si una decisión la tomaste sin pensar, dilo. «Lo hice así porque era lo que sabía hacer, y ahora que lo miro habría sido mejor...» es una respuesta que suma, porque demuestra criterio adquirido. La respuesta que resta es inventarse una justificación que no sostienes en la repregunta.
- Hablar de las limitaciones sin restarte valor
Todo proyecto tiene carencias, y el tuyo, que es el primero, tiene bastantes. La diferencia entre parecer un principiante que no sabe y un profesional que empieza está entera en cómo se cuentan. El patrón tiene tres tiempos:
«Lo sé → lo dejé fuera a propósito → así lo haría»
Aplicado:
| Limitación | Versión que resta | Versión con el patrón |
|---|---|---|
| Sin interfaz gráfica | «No me dio tiempo a hacer la interfaz» | «Es de línea de comandos a propósito: quería centrar el esfuerzo en el modelo de datos y las pruebas. La interfaz está aislada en interfaz.py, así que montar una web encima sería sustituir esa capa» |
| Sin multiusuario | «Solo funciona para una persona» | «Es monousuario por diseño: resolvía mi problema. Para varios haría falta un identificador de usuario en el modelo y un fichero por usuario, o directamente una base de datos» |
| Todo en memoria | «Si tuviera muchos datos igual va lento» | «Cargo todo en memoria al arrancar, lo que con unos miles de movimientos responde al instante. A partir de decenas de miles habría que pasar a SQLite; lo medí antes de decidirlo (06-04)» |
Las tres versiones de la derecha comparten algo: convierten una carencia en una decisión y proponen el camino. Eso solo es posible si de verdad tomaste la decisión, y por eso el cajón Won't de Definición del proyecto era tan importante: ahora es tu guion.
Dos cosas que no debes hacer nunca: disculparte en bucle («perdón, sé que está muy mal hecho, es que soy principiante»), que invita a mirar el proyecto con desconfianza y no aporta información; e inventar limitaciones que no tienes para parecer humilde. Di lo que es.
- Preguntas típicas y cómo responderlas
Estas preguntas salen casi siempre. Prepáralas por escrito; responder bien una pregunta previsible es de las cosas que más diferencian una presentación de otra:
| Pregunta | Qué buscan saber | Orientación de respuesta |
|---|---|---|
| ¿Qué es lo que más te costó? | Si sabes reconocer dificultades y cómo las resuelves | Un problema concreto y el método con que lo resolviste, no «todo fue difícil» |
| ¿Qué harías distinto si empezaras hoy? | Criterio adquirido | Una o dos decisiones concretas con su porqué |
| ¿Cómo sabes que funciona? | Si pruebas o solo confías | Las pruebas automáticas, qué cubren, y el guion manual de la interfaz |
| ¿Qué pasa si el usuario escribe cualquier cosa? | Robustez | Demuéstralo en vivo: escribe una barbaridad y enseña el mensaje de error |
| ¿Cuánto tardarías en añadir X? | Si conoces tu propio código | Nombra los ficheros que tocarías y da un rango honesto |
| ¿Por qué esta estructura de ficheros? | Si entiendes las capas o copiaste | Una frase por módulo y la regla de las dependencias hacia abajo |
| ¿Has usado IA? | Honestidad y criterio | Di la verdad y explica para qué: entender errores, revisar, aprender |
| ¿Escalaría a muchos datos? | Si piensas en costes | Big-O de tus operaciones principales y a partir de qué volumen cambiarías |
| ¿Qué has aprendido? | Autoconocimiento | Concreto: «a partir el trabajo en incrementos», no «he aprendido Python» |
Sobre la de la IA: la respuesta honesta siempre es mejor. «La usé para entender un TypeError que no sabía leer y para que me revisara el almacen.py; el diseño y el código son míos» es una respuesta profesional y verificable —porque si el código es tuyo, sabrás explicarlo—.
- Recibir crítica y convertirla en tareas
Cuando enseñas tu proyecto recibes comentarios, y la reacción instintiva es defenderse. Es un error: la crítica de alguien que se ha molestado en mirar tu código es de las cosas más valiosas que vas a recibir gratis. El procedimiento:
- Escucha entera la observación sin interrumpir y sin justificarte todavía.
- Anótala literal. No la interpretes en el momento; ya la interpretarás en frío.
- Pregunta si no la entiendes. «¿A qué te refieres con que el módulo hace demasiadas cosas?» es una pregunta legítima y demuestra interés.
- Agradece. Aunque no estés de acuerdo. El coste de escuchar es cero.
- En frío, clasifícala en una de estas cuatro cajas.
| Tipo de comentario | Ejemplo | Qué haces |
|---|---|---|
| Error real | «Con el mes 2026-13 peta» |
Tarea inmediata: reproducir, arreglar, prueba de regresión |
| Mejora acertada | «Los porcentajes deberían redondearse al mismo decimal» | Tarea para la v1.1 |
| Preferencia personal | «Yo lo habría hecho con listas por comprensión» | Escúchala, valórala, decide tú |
| Fuera de alcance | «Le falta una app móvil» | Va al cajón Won't con su justificación |
La cuarta caja es donde más se sufre si no la tienes clara: hay comentarios que describen otro proyecto, no el tuyo. Y la primera es la más valiosa de todas: quien encuentra un fallo en tu programa te está haciendo un favor, aunque no lo parezca en ese momento. Convierte cada comentario de las dos primeras cajas en una línea de tu lista de tareas, con su prioridad; de eso sale el plan de mejora del apartado 9.
- Publicar el proyecto
Un proyecto en tu disco duro no le sirve a nadie, empezando por ti. Publicarlo cuesta veinte minutos:
# Con el repositorio ya creado en GitHub, vacio:
git remote add origin https://github.com/usuario/misgastos.git
git branch -M main
git push -u origin main --tagsDespués, dedica un rato a la página del repositorio, que es tu escaparate:
- Descripción corta (el campo About): una frase con lo que hace y en qué está escrito. «Gestor de gastos personales por línea de comandos en Python, con persistencia en JSON y pruebas con pytest».
- Temas (topics):
python,cli,json,pytest,learning-project. Ayudan a que aparezca en las búsquedas. - README bien renderizado: míralo en GitHub, no solo en el editor. Comprueba que las tablas se ven y que los bloques de código tienen su lenguaje.
- Licencia: si quieres que otros lo usen, añade una MIT; sin licencia, técnicamente nadie puede reutilizarlo.
Sobre el portfolio: dos o tres proyectos terminados, explicados y con historial de commits valen más que veinte repositorios a medias. Quien evalúa mira si el proyecto está acabado, si el README explica el porqué, si hay pruebas y si los commits cuentan una historia coherente. Un proyecto pequeño y completo comunica «esta persona termina las cosas», que es exactamente la señal que se busca.
Y una práctica que enseña más de lo que parece: mirar proyectos ajenos. Busca en GitHub una aplicación de línea de comandos en Python con pocas estrellas —los proyectos enormes son ilegibles al principio— y examina, en este orden: el README (¿entiendes qué hace en un minuto?), la estructura de ficheros (¿reconoces las capas?), un módulo cualquiera (¿cómo nombran las funciones?), los tests (¿qué prueban?) y el historial (¿cómo escriben los mensajes?). Media hora haciendo esto te da referencias que ningún tutorial te da.
- Autoevaluación final y plan de mejora
Ha llegado el momento de usar la rúbrica que escribiste en 09-01, cuando aún no sabías cómo iba a salir el proyecto. Rellénala con honestidad —la única persona a la que engañarías es a ti— y multiplica cada puntuación por su peso:
| Criterio | Peso | Tu puntuación (1-4) | Evidencia concreta que lo justifica |
|---|---|---|---|
| Funcionalidad | 25 % | ¿Qué requisitos Must funcionan? ¿Alguno a medias? | |
| Estructura del código | 20 % | ¿Cuántos módulos y con qué responsabilidad? | |
| Robustez | 15 % | ¿Qué entradas raras probaste y qué pasó? | |
| Documentación | 15 % | ¿README, docstrings, anotaciones, CHANGELOG? | |
| Pruebas | 15 % | ¿Cuántas y de qué capas? | |
| Uso de Git | 10 % | ¿Cuántos commits, con qué mensajes, hay etiqueta? |
La columna de la derecha es la que hace útil el ejercicio: obliga a justificar la nota con una evidencia, no con una impresión. Un 3 en pruebas significa poder decir «once pruebas que cubren modelo, agregación y ciclo guardar/cargar», no «creo que están bien».
Con la rúbrica rellena, el plan de mejora sale solo: ordena por peso descendente los criterios con nota más baja. Ejemplo de MisGastos, que salió con 2,85 de media:
| Prioridad | Criterio | Nota | Acción concreta | Coste |
|---|---|---|---|---|
| 1 | Robustez (15 %) | 2 | Validar el formato del mes y capturar PermissionError al guardar |
1 h |
| 2 | Pruebas (15 %) | 2 | Añadir pruebas de del_mes con mes vacío y de la exportación a CSV |
2 h |
| 3 | Documentación (15 %) | 3 | Añadir CHANGELOG.md y docstrings a interfaz.py |
1 h |
| 4 | Funcionalidad (25 %) | 3 | Implementar «editar movimiento», que quedó en Should | 3 h |
Siete horas de trabajo que suben la media a un 3,4. Y observa el orden: primero lo barato que arregla una nota baja, después lo caro. Añadir una función nueva es lo más divertido y casi nunca es lo que más mejora el proyecto.
Errores Comunes y Consejos
- Enseñar el código antes que el problema. Nadie puede valorar una solución si no sabe qué problema resuelve. Treinta segundos de contexto primero, siempre.
- README de tres líneas. «Proyecto final del curso de Python» no dice nada. Si solo tienes una hora para pulir el proyecto, inviértela entera aquí: es lo que más multiplica.
- Demo sin datos preparados. Registrar registros en directo consume el tiempo y aburre. Ten un fichero de demo listo y ensayado.
- Disculparse todo el rato. Rebaja el valor de lo que has hecho y no aporta información. Usa el patrón «lo sé, fue a propósito, así lo haría».
- Defenderse de la crítica. Escuchar es gratis y decidir es tuyo. Anota, agradece, clasifica en frío.
- Subir datos personales. Revisa el repositorio antes de hacerlo público: el fichero de datos reales no se sube, y borrarlo después no lo quita del historial.
- Consejo: cuenta el proyecto en voz alta a alguien que no programe. Si consigues que entienda qué hace y por qué, tienes la presentación resuelta.
- Consejo: escribe tu guion de cinco minutos y cronométralo. Casi siempre son ocho la primera vez, y lo que sobra es el bloque técnico.
Ejercicios
Los últimos pasos reales de tu proyecto. Al terminarlos, está entregado.
Ejercicio 1: Repositorio y README
Recorre la checklist del apartado 1 punto por punto y arregla lo que falle, incluida la comprobación de clonar en una carpeta nueva. Después escribe tu README.md completo con las diez secciones del apartado 2, incluyendo una demostración en texto de una sesión real copiada literalmente de tu terminal. Crea la etiqueta v1.0 y súbela.
Ejercicio 2: Guion de demo y decisiones técnicas
Escribe tu guion de cinco minutos siguiendo la tabla del apartado 3, con el tiempo asignado a cada bloque y los datos de demo preparados en un fichero aparte. Ensáyalo cronometrado dos veces. Después redacta por escrito tres decisiones técnicas de tu proyecto con el patrón contexto-alternativa-criterio-consecuencia, y tres limitaciones con el patrón «lo sé, lo dejé fuera a propósito, así lo haría».
Ejercicio 3: Autoevaluación y plan de mejora
Rellena la rúbrica del apartado 9 con una evidencia concreta por criterio y calcula tu nota ponderada. Construye después el plan de mejora ordenando por peso los criterios con nota más baja, con una acción concreta y una estimación por fila. Finalmente, elige la acción de prioridad 1 y hazla; después vuelve a puntuar ese criterio.
Soluciones
Solución 1. El apartado 2 contiene la estructura y el extracto del README de MisGastos. Los tres fallos más habituales: un README que describe el código en lugar del problema, una sección de instalación con prosa entre los comandos, y ninguna demostración de sesión. Rúbrica de autoevaluación: ¿alguien que no conoce tu proyecto sabría en un minuto qué hace y para quién? ¿Puede instalarlo copiando y pegando, sin preguntarte nada? ¿Hay ejemplo de sesión real? ¿La sección de limitaciones existe y está escrita como decisiones? ¿git tag muestra v1.0?
Solución 2. El apartado 3 tiene el guion con tiempos y el apartado 4 los tres ejemplos de decisión bien argumentada —clase frente a diccionario, JSON frente a CSV, separación de capas— con la estructura contexto, alternativa, criterio y consecuencia. El apartado 5 hace lo propio con las limitaciones. Rúbrica: ¿tu guion dedica los primeros 60 segundos al problema y a la solución, sin mencionar tecnología? ¿La demo es de un flujo real con datos ya cargados? ¿Cada decisión menciona la alternativa que descartaste? ¿Cada limitación termina proponiendo cómo se resolvería? ¿Cabe en cinco minutos cronometrados?
Solución 3. El apartado 9 tiene la rúbrica y el plan de mejora de MisGastos, con su nota de 2,85 y las cuatro acciones ordenadas por peso. Lo que suele fallar en este ejercicio es la generosidad: si te pones un 4 en pruebas con tres pruebas sueltas, la rúbrica deja de servir para nada. Rúbrica de la rúbrica: ¿cada nota tiene una evidencia concreta y numérica al lado? ¿Tu plan está ordenado por peso del criterio, no por lo que te apetece hacer? ¿Cada acción cabe en tres horas? ¿Has hecho ya la primera?
Conclusión
Un proyecto que no se sabe explicar no cuenta, y explicarlo empieza por el repositorio: README completo, requirements.txt, .gitignore, cero datos personales o credenciales, sin ficheros temporales, historial legible, todo commiteado, etiqueta v1.0 y la comprobación definitiva de clonar en una carpeta nueva y arrancar. El README es el documento más rentable que escribirás: diez secciones en orden —título y frase, descripción del problema antes que de la solución, características, requisitos, instalación en comandos copiables, uso con demostración en texto de una sesión real, estructura, pruebas, limitaciones y autoría— y se escribe en una hora.
La demostración de cinco minutos tiene guion y reparto de tiempos: treinta segundos de problema, treinta de solución, dos minutos de demo del flujo principal con datos preparados de antemano y ensayados, un minuto de detalle técnico del que estés orgulloso y un minuto de limitaciones y siguientes pasos; y si algo falla, se reconoce, se anota y se sigue, sin depurar en directo. Las decisiones técnicas se defienden con el patrón contexto, alternativa descartada, criterio y consecuencia —por qué una clase y no un diccionario, por qué JSON y no CSV, por qué separar la interfaz de la lógica—, y las limitaciones con el patrón «lo sé, lo dejé fuera a propósito, así lo haría», que convierte cada carencia en una decisión y por el que el cajón Won't de 09-01 se vuelve tu guion. Las preguntas típicas se preparan por escrito, la de la IA incluida, donde la respuesta honesta siempre gana. La crítica se escucha entera, se anota literal, se agradece y en frío se clasifica en error real, mejora acertada, preferencia personal o fuera de alcance; las dos primeras se convierten en tareas. Y el proyecto se publica: repositorio en GitHub con descripción, temas y licencia, con la idea de que dos o tres proyectos terminados valen más que veinte a medias, y con el hábito de leer código ajeno para tener referencias. La autoevaluación cierra el círculo con la rúbrica de 09-01, exigiendo una evidencia concreta por criterio, y el plan de mejora ordena por peso lo que más sube la nota.
Con esto, el proyecto está hecho, terminado, defendido y publicado —que es exactamente lo que se propuso al abrir el módulo—. Queda una última conversación, y no es técnica: qué hacer a partir de ahora. En Siguientes pasos como programador recorreremos lo aprendido en estos nueve módulos, lo que este curso no cubrió y conviene saber que existe, los caminos profesionales que se abren con lo que ya sabes, los hábitos que conviene consolidar y un plan concreto para los próximos tres meses.
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
