Empezar â de una mĂĄquina vacĂa a tu primer verde#
Este documento es el prĂłlogo del programa. No enseña ningĂșn framework: prepara la mĂĄquina y el vocabulario para que las 149 clases se puedan ejecutar de verdad en vez de leerse como un artĂculo.
Estå pensado para alguien que nunca ha instalado un entorno de desarrollo. Si ya tienes Node, Python y Java funcionando, salta a «El primer verde» y tardarås dos minutos.
| Paso | Qué consigues | Tiempo |
|---|---|---|
| 1. Lo que hay que saber antes | Entender qué es un puerto, una petición y un gestor de paquetes | 30 min |
| 2. Las ocho cadenas de herramientas | Poder ejecutar las implementaciones de cada ecosistema | 20 min â 2 h |
| 3. El primer verde | Ver una clase ejecutarse contra su contrato | 5 min |
| 4. Cómo se lee una clase | Saber qué mirar y en qué orden | 10 min |
| 5. La ruta completa | Saber por dĂłnde seguir hasta el nivel experto | â |
1. Lo que hay que saber antes#
El programa no exige experiencia previa con frameworks âde eso trataâ, pero sĂ da por sabidas seis cosas. EstĂĄn explicadas, una por una y sin dar por supuesto nada, en Conocimientos previos:
- La terminal â abrir una, moverse por directorios, ejecutar un comando y leer su cĂłdigo de salida.
- Cliente, servidor y puerto â quĂ© proceso escucha, dĂłnde, y por quĂ© dos programas no pueden usar el mismo nĂșmero a la vez.
- PeticiĂłn y respuesta HTTP â mĂ©todo, ruta, cabeceras, cuerpo, cĂłdigo de estado. Es el idioma comĂșn de todo el laboratorio [rfc9110].
- JSON â el formato en el que viajan los datos y en el que estĂĄn escritos los contratos de cada clase [rfc8259].
- Gestor de paquetes y dependencias â quĂ© es
pnpm install, y por quĂ© cada ecosistema tiene el suyo. - Git â clonar este repositorio y volver atrĂĄs cuando rompas algo.
Ninguna de las seis es un framework. Todas aparecen en la primera clase.
2. Las ocho cadenas de herramientas#
Una cadena de herramientas es el conjunto de ejecutables que una implementaciĂłn necesita para arrancar. Cada implementaciĂłn la declara en su ejecutar.json, y el ejecutor de clases la comprueba antes de intentar nada:
{ "framework": "spring-boot", "requiere": ["java", "mvn"] }Si falta un ejecutable, esa implementaciĂłn se declara omitida â nunca fallida, y nunca aprobada en silencio. Por eso no hace falta instalarlas todas para empezar: con Node ya puedes ejecutar una parte grande del laboratorio, y cada cadena que añadas amplĂa lo que puedes ver.
Para saber en qué punto estås:
node scripts/doctor.mjsCadenas de herramientas del laboratorio
â Node.js 3 impl · 2 clases v22.14.0
â Node.js + pnpm 86 impl · 69 clases 10.15.0
â Python 86 impl · 67 clases Python 3.12.7
â JDK + Apache Maven 65 impl · 65 clases falta `java` y `mvn`
...
RESUMEN: 197/353 implementaciones ejecutables en esta mĂĄquina (55 %)Ese porcentaje es la mĂ©trica honesta: no dice cuĂĄnto has aprendido, dice cuĂĄnto puedes comprobar por ti mismo. Lo que no puedas ejecutar en local se ejecuta igualmente en la integraciĂłn continua del repositorio, y su resultado es pĂșblico.
<!-- generado: cadenas -->
| Cadena | Qué desbloquea | Frameworks | Instalación oficial |
|---|---|---|---|
| Node.js · 22 o superior | 12 impl. en 7 clases | alpinejs, htmx, nodejs | nodejs.org [nodejs-downloads] |
| Node.js + pnpm · Node 22 · pnpm 10 | 210 impl. en 109 clases | angular, astro, drizzle, express, fastify, hotwire-turbo, htmx, lit, nestjs, nextjs, nuxt, prisma, react, remix, solid, svelte, sveltekit, typeorm, vue | pnpm.io [pnpm-installation] |
| Python · 3.11 o superior | 101 impl. en 82 clases | django, fastapi, flask, sqlalchemy | python.org [python-downloads] |
| JDK + Apache Maven · JDK 21 · Maven 3.9 | 79 impl. en 79 clases | hibernate, spring-boot | adoptium.net [adoptium-temurin] |
| .NET SDK · 8 o superior | 71 impl. en 71 clases | aspnet-core, dapper, entity-framework-core | dotnet.microsoft.com [dotnet-sdk-downloads] |
| PHP + Composer · PHP 8.2 · Composer 2 | 15 impl. en 15 clases | eloquent, laravel | getcomposer.org [composer-download] |
| Ruby + Bundler · Ruby 3.3 · Bundler 2 | 14 impl. en 14 clases | activerecord, rails | ruby-lang.org [ruby-installation] |
| Go · 1.22 o superior | 11 impl. en 11 clases | gin | go.dev [go-downloads] |
| Rust · 1.80 o superior | 1 impl. en 1 clases | axum | rust-lang.org [rust-install] |
Ocho cadenas, 514 implementaciones. Ninguna es obligatoria: el ejecutor corre las que encuentre y declara las que omitiĂł.
Node.js#
Es el requisito del propio laboratorio: los verificadores, el generador del sitio y el ejecutor de clases son scripts de Node sin dependencias.
Windows
winget install OpenJS.NodeJS.LTSmacOS
brew install nodeLinux (Debian/Ubuntu)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejsComprobaciĂłn:
node --versionâ ïž El paquete
nodejsde Debian y Ubuntu suele ir varias versiones por detrås; por eso la receta añade primero el repositorio oficial.
Node.js + pnpm#
Es el gestor de paquetes admitido para JavaScript y TypeScript. Instala una sola copia de cada dependencia y enlaza el resto, que es lo que hace viable tener decenas de implementaciones con node_modules propio.
Cualquier sistema, con Node ya instalado
corepack enable pnpmComprobaciĂłn:
pnpm --versionâ ïž Corepack viene dentro de Node, asĂ que no hace falta descargar nada aparte. Si
corepackno estĂĄ en el PATH, la alternativa oficial esnpm install -g pnpm.
Python#
Ejecuta las implementaciones de Flask, Django, FastAPI y SQLAlchemy â el ecosistema con mĂĄs clases del laboratorio junto a Node.
Windows
winget install Python.Python.3.12macOS
brew install python@3.12Linux (Debian/Ubuntu)
sudo apt-get install -y python3 python3-venv python3-pip python-is-python3ComprobaciĂłn:
python --versionâ ïž En Debian y Ubuntu el ejecutable se llama
python3; el paquetepython-is-python3crea el aliaspythonque las recetas de arranque esperan.
JDK + Apache Maven#
Compila y ejecuta Spring Boot e Hibernate. Maven no es opcional: las implementaciones declaran sus dependencias en pom.xml y se empaquetan antes de arrancar.
Windows
winget install EclipseAdoptium.Temurin.21.JDK
winget install Apache.MavenmacOS
brew install temurin mavenLinux (Debian/Ubuntu)
sudo apt-get install -y default-jdk mavenComprobaciĂłn:
java -version
mvn --versionâ ïž Es la cadena mĂĄs lenta en la primera ejecuciĂłn: Maven descarga el ĂĄrbol de dependencias entero antes de compilar. Por eso
ejecutar.jsonle concede 60 s de espera y no 15.
.NET SDK#
Compila y ejecuta ASP.NET Core, Entity Framework Core y Dapper. Un Ășnico ejecutable âdotnetâ restaura, compila y arranca.
Windows
winget install Microsoft.DotNet.SDK.8macOS
brew install --cask dotnet-sdkLinux (Debian/Ubuntu)
sudo apt-get install -y dotnet-sdk-8.0ComprobaciĂłn:
dotnet --versionâ ïž Hay que instalar el SDK, no el runtime: el runtime ejecuta binarios ya compilados y aquĂ se compila desde el cĂłdigo fuente.
PHP + Composer#
Ejecuta Laravel y Eloquent. Composer aporta ademĂĄs el autocargador PSR-4, que es lo que permite que el controlador frontal de la clase 011 encuentre las clases sin un solo require.
Windows
winget install PHP.PHP.8.3
winget install Composer.ComposermacOS
brew install php composerLinux (Debian/Ubuntu)
sudo apt-get install -y php-cli php-xml php-mbstring php-sqlite3 composerComprobaciĂłn:
php --version
composer --versionâ ïž Laravel necesita las extensiones
mbstring,xmlysqlite3. En Windows vienen en la distribuciĂłn oficial pero hay que descomentarlas enphp.ini.
Ruby + Bundler#
Ejecuta Ruby on Rails y Active Record â el origen de casi todas las convenciones que el resto del catĂĄlogo copiĂł despuĂ©s.
Windows
winget install RubyInstallerTeam.RubyWithDevKit.3.3
gem install bundlermacOS
brew install ruby
gem install bundlerLinux (Debian/Ubuntu)
sudo apt-get install -y ruby-full
gem install bundlerComprobaciĂłn:
ruby --version
bundle --versionâ ïž En Windows hace falta la variante with DevKit: algunas gemas de Rails se compilan al instalarse y sin compilador fallan a mitad.
Go#
Ejecuta Gin. Es la Ășnica cadena que no necesita paso de preparaciĂłn: go run resuelve dependencias, compila y arranca en un solo comando.
Windows
winget install GoLang.GomacOS
brew install goLinux (Debian/Ubuntu)
# El paquete de la distribuciĂłn suele ir por detrĂĄs; descarga desde go.dev/dl
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
export PATH="$PATH:/usr/local/go/bin"ComprobaciĂłn:
go versionâ ïž
go versionno lleva guiones, a diferencia de casi todos los demĂĄs. Es un detalle, pero es el que hace fallar el primer intento.
Rust#
Ejecuta axum. Es la Ășnica cadena donde el modo de compilaciĂłn cambia los nĂșmeros de rendimiento en un orden de magnitud: cargo build a secas compila sin optimizar, y medir eso no compara nada.
Windows
winget install Rustlang.RustupmacOS
brew install rustup && rustup-init -yLinux (Debian/Ubuntu)
# rustup instala la cadena en el directorio del usuario, sin tocar el sistema
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"ComprobaciĂłn:
cargo --version
rustc --versionâ ïž La primera construcciĂłn descarga y compila el ĂĄrbol entero de dependencias y tarda minutos. Las siguientes son rĂĄpidas porque
target/guarda lo compilado â y por esotarget/no se versiona.
<!-- fin generado: cadenas -->
3. El primer verde#
Con Node instalado ây nada mĂĄsâ ya se puede recorrer el repositorio entero:
git clone https://github.com/vladimiracunadev-create/framework-ecosystems-labs.git
cd framework-ecosystems-labs
node scripts/doctor.mjsEl primer contrato completo no necesita instalar ninguna dependencia, porque la implementaciĂłn de referencia estĂĄ escrita solo con la biblioteca estĂĄndar de Node [nodejs-docs]:
node scripts/run-acceptance.mjs reference-nodeY la primera clase:
node scripts/run-class.mjs 011La salida distingue tres estados y nunca los mezcla:
| SĂmbolo | Significado |
|---|---|
â |
la implementaciĂłn arrancĂł y pasĂł todos los casos del contrato |
â |
arrancĂł y fallĂł un caso â hay algo que arreglar |
â |
no se ejecutĂł: falta una herramienta o el entorno no estaba listo |
Un informe que dijera «todo bien» habiendo ejecutado tres de diez estarĂa mintiendo. Esa distinciĂłn es la que hace creĂble el verde de este repositorio, y es el mismo principio que Nygard aplica a la instrumentaciĂłn de un sistema en producciĂłn: un indicador que no puede estar en rojo no informa de nada [nygard-release-it].
4. CĂłmo se lee una clase#
Cada clase es una carpeta con tres piezas y una constante:
081-mejora-progresiva/
âââ README.md la clase: problema, contrato, cĂłdigo y comparaciĂłn
âââ contrato.json los casos, ejecutables, idĂ©nticos para todos
âââ porque-si-porque-no.md dĂłnde cada framework es natural y dĂłnde es forzado
âââ implementaciones/ un directorio por framework, cĂłdigo real
âââ htmx/
âââ alpinejs/
âââ react/
âââ svelte/El orden de lectura que funciona:
- El problema â quĂ© situaciĂłn se plantea. Sin frameworks todavĂa.
- El contrato â quĂ© se va a exigir exactamente. AquĂ es donde se decide si la comparaciĂłn significa algo: es el mismo para todos y no se adapta a ninguno.
- El cĂłdigo â la implementaciĂłn de cada framework, en su forma idiomĂĄtica, a la vista en la propia clase. No hay que abrir archivos para seguir la explicaciĂłn.
- La comparaciĂłn â la tabla que pone las diferencias juntas, y el texto que explica de dĂłnde vienen.
- Por quĂ© sĂ y por quĂ© no â el juicio: para quĂ© producto y quĂ© equipo cada opciĂłn es la natural.
Y una regla que conviene conocer antes de la primera clase: si un framework no hace de verdad lo que la clase mide, sale del elenco con su explicaciĂłn. No se simula. Una simulaciĂłn enseñarĂa el comportamiento que le programamos, no el real, y con eso el laboratorio entero dejarĂa de valer.
5. La ruta completa: de cero a experto#
El programa estĂĄ ordenado para que cada nivel dependa solo del anterior.
| Nivel | Dónde estås | Qué sabes hacer al salir |
|---|---|---|
| InstalaciĂłn | este documento | Ejecutar el laboratorio y leer su informe sin creerte un verde falso |
| Fundamentos | Parte 0 â El mĂ©todo · mĂłdulo 00 | Distinguir biblioteca de framework, y saber quĂ© hace comparable una comparaciĂłn |
| BĂĄsico đą | Partes 1â3 | Responder, encadenar middleware, validar y contratar una API |
| Intermedio đĄ | Partes 4â7 | Persistir sin contaminar el dominio, autenticar, renderizar donde toque |
| Avanzado đŽ | Partes 8â10 | Tiempo real, trabajo en segundo plano, mĂłvil y escritorio, calidad y operaciĂłn |
| Experto | Parte 11 · módulo 11 · módulo 12 | Migrar sistemas vivos sin pararlos, elegir con criterio declarado y saber salir |
El salto de «avanzado» a «experto» no es mĂĄs tecnologĂa: es decidir bajo restricciones y hacerse responsable de la decisiĂłn. Hunt y Thomas lo formulan como la diferencia entre saber usar una herramienta y saber cuĂĄndo no usarla [hunt-thomas-pragmatic].
Qué hacer cuando algo falla#
| SĂntoma | Causa habitual | QuĂ© hacer |
|---|---|---|
â falta la herramienta \X\`` |
la cadena no estĂĄ instalada | node scripts/doctor.mjs y sigue la receta |
â entorno no preparado |
la herramienta estĂĄ, pero faltan las dependencias del proyecto | ejecuta el preparar de su ejecutar.json en ese directorio |
| El puerto sigue ocupado | un proceso de una ejecución anterior no murió | ciérralo; el ejecutor comprueba el puerto antes de arrancar y espera a que se libere |
pnpm: command not found |
Node estĂĄ, Corepack no se ha activado | corepack enable pnpm |
| Errores de acentos en Windows | consola en una pĂĄgina de cĂłdigos antigua | usa Windows Terminal, que habla UTF-8 |
Fuentes#
- [rfc9110] Fielding, R.; Nottingham, M.; Reschke, J. HTTP Semantics, RFC 9110, IETF, 2022 â https://www.rfc-editor.org/rfc/rfc9110
- [rfc8259] Bray, T. (ed.). The JavaScript Object Notation (JSON) Data Interchange Format, RFC 8259, IETF, 2017 â https://www.rfc-editor.org/rfc/rfc8259
- [nodejs-docs] Node.js API Documentation (v22 LTS). OpenJS Foundation â https://nodejs.org/docs/latest-v22.x/api/
- [nygard-release-it] Nygard, Michael T. Release It!, 2.ÂȘ ed. Pragmatic Bookshelf, 2018. ISBN 9781680502398 â https://openlibrary.org/isbn/9781680502398
- [hunt-thomas-pragmatic] Hunt, Andrew; Thomas, David. The Pragmatic Programmer, 20.Âș aniversario. Addison-Wesley, 2019. ISBN 9780135957059 â https://openlibrary.org/isbn/9780135957059
- [nodejs-downloads] Download Node.js. OpenJS Foundation â https://nodejs.org/en/download
- [pnpm-installation] Installation. pnpm â https://pnpm.io/installation
- [python-downloads] Download Python. Python Software Foundation â https://www.python.org/downloads/
- [adoptium-temurin] Eclipse Temurin Releases. Eclipse Foundation â https://adoptium.net/temurin/releases/
- [dotnet-sdk-downloads] Download .NET. Microsoft â https://dotnet.microsoft.com/download
- [composer-download] Composer â Download. Composer â https://getcomposer.org/download/
- [ruby-installation] Installing Ruby. Ruby â https://www.ruby-lang.org/en/documentation/installation/
- [go-downloads] Download and install Go. Google â https://go.dev/doc/install