Skip to content

Commit 36dceb1

Browse files
travisjneumanclaude
andcommitted
feat: resolve 21 GitHub issues — content, tests, i18n, tooling, new projects
Closes #3 (type hints level 0-1), #4 (TRY_THIS.md level 1), #5 (pytest markers), #6 (flashcard decks), #7 (GETTING_STARTED Spanish), #9 (empty input test), #10 (JSON error messages), #11 (set operations), #12 (non-numeric input test), #15 (boundary value tests), #16 (level-00 docstrings), #17 (common mistakes), #18 (Level 00 Spanish), #19 (browser exercises level 1), #20 (quiz types), #21 (progress tracker), #22 (cheat sheets), #23 (markdown-to-html project), #25 (pre-commit hooks), #26 (weather API project), #27 (PR validation workflow). New content: 8 cheat sheets, 34 flashcard decks (274 cards), 5 browser exercises, 15 TRY_THIS.md files, 31 Spanish translations, 2 new projects (level-2/16 and module-03/06), PR validation workflow, pre-commit config, enhanced dashboard. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b4ce9ac commit 36dceb1

File tree

204 files changed

+9774
-262
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

204 files changed

+9774
-262
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: PR Validation
2+
3+
on:
4+
pull_request:
5+
branches: [main]
6+
7+
jobs:
8+
validate:
9+
name: Lint, Compile & Contract Checks
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout
13+
uses: actions/checkout@v4
14+
15+
- name: Setup Python 3.12
16+
uses: actions/setup-python@v5
17+
with:
18+
python-version: '3.12'
19+
20+
- name: Install dependencies
21+
run: pip install ruff pytest
22+
23+
- name: Ruff lint check
24+
run: ruff check .
25+
26+
- name: Python syntax check (py_compile)
27+
run: |
28+
python -c "
29+
import pathlib, py_compile, sys
30+
errors = []
31+
for p in pathlib.Path('.').rglob('*.py'):
32+
if '.venv' in p.parts:
33+
continue
34+
try:
35+
py_compile.compile(str(p), doraise=True)
36+
except py_compile.PyCompileError as e:
37+
errors.append(str(e))
38+
if errors:
39+
print(f'Syntax errors in {len(errors)} file(s):')
40+
for err in errors:
41+
print(f' {err}')
42+
sys.exit(1)
43+
print('All Python files compile successfully.')
44+
"
45+
46+
- name: Root doc contract checks
47+
run: python tools/check_root_docs.py
48+
49+
- name: Level index contract checks
50+
run: python tools/check_level_index_contract.py
51+
52+
- name: Elite track contract checks
53+
run: python tools/check_elite_track_contract.py
54+
55+
- name: Modality hub link validation
56+
run: python tools/check_modality_hubs.py

.pre-commit-config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# See https://pre-commit.com for more information
2+
# See https://pre-commit.com/hooks.html for more hooks
3+
repos:
4+
- repo: https://github.com/astral-sh/ruff-pre-commit
5+
rev: v0.9.10
6+
hooks:
7+
- id: ruff
8+
args: [--fix]
9+
- id: ruff-format

CONTRIBUTING.md

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,31 @@ Use the [issue templates](https://github.com/travisjneuman/learn.python/issues/n
1010
- **Feature requests** — new projects, modules, or curriculum improvements
1111
- **Curriculum feedback** — unclear explanations, typos, suggested rewrites
1212

13+
## Development Setup
14+
15+
After cloning or forking, install the pre-commit hooks so that linting and formatting run automatically on every commit:
16+
17+
```bash
18+
pip install pre-commit
19+
pre-commit install
20+
```
21+
22+
This adds a Git hook that runs [ruff](https://docs.astral.sh/ruff/) (lint + format) before each commit. If ruff finds fixable issues it will apply the fixes automatically — just re-stage the changed files and commit again.
23+
24+
You can also run the hooks manually against all files at any time:
25+
26+
```bash
27+
pre-commit run --all-files
28+
```
29+
1330
## How to Submit a Pull Request
1431

1532
1. Fork the repository
1633
2. Create a branch from `main` (`git checkout -b your-branch-name`)
17-
3. Make your changes
18-
4. Run tests if applicable (`python -m pytest`)
19-
5. Open a pull request against `main`
34+
3. Install pre-commit hooks (see **Development Setup** above)
35+
4. Make your changes
36+
5. Run tests if applicable (`python -m pytest`)
37+
6. Open a pull request against `main`
2038

2139
Keep pull requests focused. One fix or one feature per PR is easier to review than a grab bag of changes.
2240

@@ -27,7 +45,7 @@ This is an educational repository. Writing style matters as much as code style.
2745
- **Plain language first.** Explain concepts the way you would to a friend who has never coded.
2846
- **Hands-on before theory.** Show the code, then explain why it works.
2947
- **No jargon without explanation.** If you use a technical term, define it on first use.
30-
- **Python code** should pass `ruff check` and `black --check`.
48+
- **Python code** should pass `ruff check` and `ruff format --check`. (If you installed the pre-commit hooks, this happens automatically.)
3149

3250
## Project Structure Conventions
3351

GETTING_STARTED_ES.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Como Usar Este Curriculum
2+
3+
> **Orientacion del curriculum.** Como funcionan los niveles, modos de estudio y estimaciones de tiempo.
4+
> Si todavia no instalaste Python, empieza con [START_HERE.md](./START_HERE.md) primero.
5+
6+
Esta guia te explica como esta organizado el curriculum, en que orden seguirlo y como manejar tu ritmo de estudio.
7+
8+
---
9+
10+
## Orden de Lectura
11+
12+
Empieza con estos cuatro documentos, en este orden:
13+
14+
1. **[START_HERE.md](./START_HERE.md)** -- Instala Python y ejecuta tu primer script en menos de 10 minutos.
15+
2. **[00_COMPUTER_LITERACY_PRIMER.md](./00_COMPUTER_LITERACY_PRIMER.md)** -- Que es una terminal, un archivo y un programa. Saltate esto si ya lo sabes.
16+
3. **[01_ROADMAP.md](./01_ROADMAP.md)** -- La vista general completa del programa: cada nivel, cada hito.
17+
4. **[03_SETUP_ALL_PLATFORMS.md](./03_SETUP_ALL_PLATFORMS.md)** -- Instrucciones detalladas de instalacion para Windows, Mac y Linux.
18+
19+
Despues de eso, sigue el enlace "Next" al final de cada documento. Todo el curriculum es una cadena de un solo clic -- nunca tienes que adivinar que viene despues.
20+
21+
## Documentos Solo de Referencia
22+
23+
Estos documentos no estan pensados para leerse de principio a fin. Usalos cuando necesites buscar algo:
24+
25+
- **[02_GLOSSARY.md](./02_GLOSSARY.md)** -- Definiciones de terminos clave. Vuelve aqui cuando encuentres palabras desconocidas.
26+
- **[13_SAMPLE_DATABASE_SCHEMAS.md](./13_SAMPLE_DATABASE_SCHEMAS.md)** -- Esquemas de base de datos de ejemplo usados en proyectos relacionados con SQL. Relevante a partir del Nivel 6.
27+
- **[concepts/](./concepts/)** -- Guias de conceptos sobre variables, loops, funciones, etc. Leelas cuando un proyecto las referencie o cuando necesites repasar.
28+
29+
---
30+
31+
## Estimaciones de Tiempo
32+
33+
Cuanto tiempo toma cada seccion depende de tu ritmo y experiencia previa. Estas son estimaciones aproximadas para alguien que trabaja el material con cuidado, incluyendo los ejercicios de "Modificalo / Rompelo / Arreglalo".
34+
35+
| Seccion | Horas Estimadas |
36+
|---------|----------------|
37+
| Level 00 (Principiante Absoluto) | ~5 horas |
38+
| Level 0 (Terminal, Archivos, I/O Basico) | ~15 horas |
39+
| Level 1 (Input, CSV, JSON, Rutas) | ~20 horas |
40+
| Level 2 (Estructuras de Datos, Limpieza) | ~20 horas |
41+
| Level 3 (Paquetes, Logging, TDD) | ~25 horas |
42+
| Level 4 (Validacion de Schemas, Pipelines) | ~25 horas |
43+
| Level 5 (Scheduling, Monitoreo) | ~25 horas |
44+
| Level 6 (SQL, ETL, Idempotencia) | ~30 horas |
45+
| Level 7 (APIs, Caching, Observabilidad) | ~30 horas |
46+
| Level 8 (Dashboards, Concurrencia) | ~30 horas |
47+
| Level 9 (Arquitectura, SLOs, Seguridad) | ~35 horas |
48+
| Level 10 (Empresarial, Produccion) | ~35 horas |
49+
| Elite Track (Algoritmos, Sistemas Distribuidos) | ~40 horas |
50+
| Cada Modulo de Expansion (12 disponibles) | ~10-20 horas |
51+
| **Total** | **~400-500 horas** |
52+
53+
---
54+
55+
## Sugerencias de Ritmo Semanal
56+
57+
| Horas por Semana | Duracion Aproximada |
58+
|----------------|---------------------|
59+
| 5 horas/semana | ~2 anos |
60+
| 10 horas/semana | ~1 ano |
61+
| 20 horas/semana | ~6 meses |
62+
| Tiempo completo (40 horas/semana) | ~3 meses |
63+
64+
No hay prisa. La practica constante importa mas que la velocidad. Es mejor dedicar 5 horas por semana durante dos anos que estudiar intensivamente un mes y quemarte.
65+
66+
---
67+
68+
## Cuando Te Atoras
69+
70+
Atorarte no es fracasar -- es aprender. Todo programador profesional se atora a diario. La diferencia entre un principiante y un experto no es que los expertos nunca se atoran. Es que los expertos se han atorado miles de veces y construyeron un kit de herramientas para salir adelante.
71+
72+
Cuando te topas con un muro, esa sensacion incomoda es tu cerebro formando nuevas conexiones. La investigacion sobre aprendizaje muestra consistentemente que luchar con un problema -- incluso sin exito -- produce una comprension mas profunda que recibir la respuesta servida. Si todo se siente facil, no estas aprendiendo nada nuevo.
73+
74+
Asi que cuando te sientas atorado, frustrado, o como que "esto no es para ti," reconoce esa sensacion como evidencia de crecimiento. Respira hondo e intenta el proceso de abajo.
75+
76+
Para mas informacion sobre como aprender de manera efectiva, consulta [LEARNING_HOW_TO_LEARN.md](./LEARNING_HOW_TO_LEARN.md).
77+
78+
### Un proceso que funciona
79+
80+
1. **Lee el mensaje de error.** Los mensajes de error de Python te dicen exactamente que salio mal y en que linea. Leelo de abajo hacia arriba.
81+
2. **Vuelve a leer el documento del concepto.** Cada proyecto enlaza a guias de conceptos relacionados. Regresa y relee la seccion relevante.
82+
3. **Agrega sentencias `print()`.** Imprime el valor de las variables antes de la linea que falla. Ve como se ven los datos realmente.
83+
4. **Toma un descanso.** Si llevas 20 minutos atorado, alejate 10 minutos. La respuesta a menudo llega cuando dejas de mirar la pantalla.
84+
5. **Revisa las [Preguntas Frecuentes](./FAQ.md).** Problemas comunes y sus soluciones estan recopilados ahi.
85+
6. **Busca el mensaje de error.** Copia la ultima linea del traceback y buscala en internet. Alguien ya se topo con el mismo error antes.
86+
7. **Abre un issue.** Si crees que el curriculum tiene un bug (test roto, archivo faltante, instrucciones confusas), [abre un issue](https://github.com/travisjneuman/learn.python/issues) en GitHub.
87+
88+
---
89+
90+
## Como Rastrear Tu Progreso
91+
92+
Ejecuta el rastreador de progreso desde la raiz del repositorio:
93+
94+
```bash
95+
python tools/progress.py
96+
```
97+
98+
Tambien puedes actualizar manualmente [PROGRESS.md](./PROGRESS.md) conforme completes proyectos.
99+
100+
---
101+
102+
## Eligiendo un Modo de Aprendizaje
103+
104+
El curriculum soporta tres modos. Escoge el que se ajuste a como aprendes:
105+
106+
- **Play-First** -- Abre un proyecto, experimenta, rompe cosas, descubrelo por tu cuenta. Lee el documento del concepto cuando te atores.
107+
- **Estructurado** -- Lee el documento del concepto, toma el quiz, luego haz los proyectos en orden. Usa checklists y puertas de dominio.
108+
- **Hibrido (Recomendado)** -- Sigue el camino estructurado entre semana. Explora modulos de expansion y challenges los fines de semana. Repasa flashcards a diario.
109+
110+
---
111+
112+
---
113+
114+
## Herramientas de Practica
115+
116+
El curriculum incluye varias herramientas para reforzar tu aprendizaje mas alla de los proyectos principales:
117+
118+
- **Quizzes** — Pon a prueba tu comprension de cada concepto: [`concepts/quizzes/`](./concepts/quizzes/)
119+
- **Flashcards** — Mazos de repaso rapido para terminos y patrones clave: [`practice/flashcards/`](./practice/flashcards/)
120+
- **Challenges** — Problemas independientes ordenados por dificultad: [`practice/challenges/`](./practice/challenges/)
121+
- **Ejercicios en el Navegador** — Ejecuta Python en tu navegador sin instalar nada: [`browser/`](./browser/index.html)
122+
- **Repeticion Espaciada** — Algoritmo SM-2 para programar tus repasos: [`tools/spaced_repetition.py`](./tools/spaced_repetition.py)
123+
124+
---
125+
126+
| [← Anterior](README.md) | [Inicio](README.md) | [Siguiente →](START_HERE.md) |
127+
|:---|:---:|---:|

0 commit comments

Comments
 (0)