đ± GuĂa para principiantes#
Para quien estĂĄ empezando a programar y quiere recorrer este laboratorio sin perderse.
đ§ ÂżNo sos del mundo del desarrollo? EmpezĂĄ por ÂżQuĂ© es esto? â explicaciĂłn en lenguaje simple. EstĂĄ escrito sin jerga y no supone ningĂșn conocimiento previo.
1ïžâŁ La ruta en 6 pasos#
| # | Paso | Documento |
|---|---|---|
| 1 | Entender la idea general del laboratorio | README.md |
| 2 | Ver qué problema profesional resuelve | positioning-and-objective.md |
| 3 | Identificar los casos y su estado real | case-catalog.md |
| 4 | Levantar un caso con Docker | INSTALL.md |
| 5 | Destrabar lo que no arranque | RUNBOOK.md |
| 6 | Comparar el mismo caso en otro lenguaje | cases/NN-*/comparison.md |
đĄ Los 20 casos estĂĄn operativos en los 7 stacks: PHP, Python, Node.js, Java, .NET, Go y Rust. PodĂ©s recorrer cualquier caso en cualquiera de ellos.
đ§ TĂ©rminos clave de este repositorio#
| Término | Significado acå |
|---|---|
| Problem-driven | El problema manda; el stack se elige para resolverlo, no al revés |
| Operativo | Caso implementado con evidencia real y Docker funcional |
| Legacy vs optimized | Las dos variantes de cada caso: la que tiene el problema y la que lo resuelve. EstĂĄn vivas al mismo tiempo para poder compararlas |
| Hub | Un contenedor que sirve los 20 casos de un lenguaje detrĂĄs de un puerto (:8100 PHP, :8300 Node, âŠ) |
| Modo aislado | Levantar un solo caso en su propio contenedor, Ăștil cuando la mediciĂłn necesita el runtime sin ruido |
| Primitiva | La herramienta que el lenguaje trae de fĂĄbrica para resolver algo (un canal en Go, un Semaphore en Java) |
| Comparativa | El comparison.md de cada caso: los 7 stacks lado a lado y un veredicto razonado |
đȘ Por dĂłnde empezar#
| Caso | Por qué empezar ahà |
|---|---|
| 02 · N+1 en base de datos | El mås fåcil de entender. El problema se ve contando consultas: 101 en vez de 2 |
| 01 · API lenta bajo carga | El mås completo: base de datos, worker, métricas y dashboards en Grafana |
| 03 · Observabilidad deficiente | Muestra råpido por qué unos logs sin contexto no sirven para nada |
| 04 · Timeouts y reintentos | Para entender circuit breaker y degradación controlada |
| 06 · Pipeline frågil | Hace visible por qué preflight y rollback importan |
đ CĂłmo leer un caso#
Cada caso tiene siempre la misma estructura. Leerlos en este orden hace que el cĂłdigo se entienda solo:
cases/NN-nombre-del-caso/
âââ README.md â empezĂĄ acĂĄ: el problema en contexto
âââ comparison.md â los 7 stacks lado a lado + veredicto
âââ docs/
â âââ context.md â la situaciĂłn
â âââ symptoms.md â quĂ© se ve desde afuera
â âââ diagnosis.md â cĂłmo se buscĂł la causa
â âââ root-causes.md â quĂ© lo provoca de verdad
â âââ solution-options.md â los caminos posibles
â âââ trade-offs.md â quĂ© se gana y quĂ© se pierde
â âââ business-value.md â por quĂ© le importa a la empresa
â âââ postmortem.md â quĂ© se aprendiĂł
âââ php/ python/ node/ java/ dotnet/ go/ rust/
âââ shared/đ La regla de oro: leĂ©
README.mdydocs/antes de abrir el cĂłdigo. El repositorio estĂĄ construido para que el cĂłdigo sea la conclusiĂłn de un razonamiento, no el punto de partida.
đ§Ș Tu primer experimento#
LevantĂĄ el caso 02 en Go y mirĂĄ el problema con tus propios ojos:
docker compose -f compose.go.yml up -d --buildcurl -s "localhost:8600/02/report-legacy?limit=20"Fijate en el campo db_hits: va a ser 1 + N. Una consulta para traer la lista, y una mĂĄs por cada fila.
curl -s "localhost:8600/02/report-optimized?limit=20"Ahora db_hits es un nĂșmero chico y constante, sin importar cuĂĄntas filas pidas. Ese salto âde crecer con los datos a no crecerâ es el caso 02 entero.
Cuando termines:
docker compose -f compose.go.yml downđ Y despuĂ©s, el mismo caso en otro lenguaje#
Es la parte mĂĄs formativa del laboratorio. El mismo experimento en Rust:
docker compose -f compose.rust.yml up -d --buildMismo problema, mismo arreglo, primitiva distinta. La comparativa cases/02-*/comparison.md explica por qué Rust queda primero en ese caso concreto: collect::<Result<Vec<_>>>() hace imposible ignorar un fallo a mitad del recorrido, algo que en los otros seis stacks depende de que el programador se acuerde.
Para entender qué es cada lenguaje y en qué es bueno, estån los perfiles de lenguaje.
đĄ Cuatro consejos que ahorran tiempo#
- Un caso por vez. No levantes los siete stacks juntos "para ver si funciona". El ruido tapa lo que querés observar.
- Comparar siempre legacy contra optimized. Un nĂșmero solo no dice nada; la diferencia entre los dos, sĂ.
- Descartar el arranque. En Java y .NET las primeras peticiones son mĂĄs lentas porque el runtime todavĂa se estĂĄ calentando. TirĂĄ trĂĄfico un rato antes de medir.
- Leer el veredicto de la comparativa al final, no al principio. Si lo leés primero, ya no vas a sacar tus propias conclusiones.
đ AdĂłnde ir despuĂ©s#
| Documento | Para qué |
|---|---|
| QUE-ES-ESTO.md | La versión sin jerga, para compartir con alguien no técnico |
| languages/ | QuĂ© es cada lenguaje, sus primitivas y sus lĂmites |
| case-methodology.md | CĂłmo se construye un caso antes de escribir cĂłdigo |
| docker-strategy.md | Por qué Docker es el modelo operativo del laboratorio |
| executive-summary.md | Los 20 casos en una pĂĄgina |