Lecciones de programación · Java, C#, Python, JavaScript
Mira cómo funciona el código.
No solo lo que dice, sino lo que pasa: adónde va el valor, hacia dónde apunta la flecha, qué línea se ejecuta ahora. Lecciones cortas de tarjetas, con una escena 3D junto al código.
Empieza con
- 33408 programas, ejecutados y comparados
- 1028 escenas 3D
- sin registro

coffee apunta al mismo objeto, así que imprime 8.0.
Product coffee = new Product();
coffee.price = 10;
Product sale = coffee;
sale.price = 8;
System.out.println(coffee.price); // 8.0Los pasos con palabras
- new crea el objeto, y sus campos reciben valores iniciales. coffee recibe una flecha hacia él.
- Por la flecha de coffee: el precio del objeto pasa a ser 10.
- sale = coffee copia la flecha, no el objeto. Dos flechas, un objeto.
- Por la flecha de sale: el precio del mismo objeto pasa a ser 8.
- coffee apunta al mismo objeto, así que imprime 8.0.

coffee apunta al mismo objeto, así que imprime 8.
Product coffee = new Product();
coffee.Price = 10;
Product sale = coffee;
sale.Price = 8;
Console.WriteLine(coffee.Price); // 8Los pasos con palabras
- new crea el objeto, y sus campos reciben valores iniciales. coffee recibe una flecha hacia él.
- Por la flecha de coffee: el precio del objeto pasa a ser 10.
- sale = coffee copia la flecha, no el objeto. Dos flechas, un objeto.
- Por la flecha de sale: el precio del mismo objeto pasa a ser 8.
- coffee apunta al mismo objeto, así que imprime 8.

coffee apunta al mismo objeto, así que imprime 8.
coffee = Product()
coffee.price = 10
sale = coffee
sale.price = 8
print(coffee.price) # 8Los pasos con palabras
- Product() crea el objeto, y __init__ da valores iniciales a sus campos. coffee recibe una flecha hacia él.
- Por la flecha de coffee: el precio del objeto pasa a ser 10.
- sale = coffee copia la flecha, no el objeto. Dos flechas, un objeto.
- Por la flecha de sale: el precio del mismo objeto pasa a ser 8.
- coffee apunta al mismo objeto, así que imprime 8.

coffee apunta al mismo objeto, así que imprime 8.
const coffee = new Product();
coffee.price = 10;
const sale = coffee;
sale.price = 8;
console.log(coffee.price); // 8Los pasos con palabras
- new crea el objeto, y sus campos todavía son undefined. coffee recibe una flecha hacia él.
- Por la flecha de coffee: el precio del objeto pasa a ser 10.
- sale = coffee copia la flecha, no el objeto. Dos flechas, un objeto.
- Por la flecha de sale: el precio del mismo objeto pasa a ser 8.
- coffee apunta al mismo objeto, así que imprime 8.
Una idea, cuatro lenguajes
El concepto es uno. La sintaxis es distinta.
La misma clase en Java, C#, Python y JavaScript. Pulsa «Ejecutar» y sigue el programa línea por línea: qué línea se ejecuta, qué hay en el objeto, qué sale al final.
Dog.javaverificado
class Dog {
private final String name;
Dog(String name) { this.name = name; }
String speak() { return name + ": ¡Guau!"; }
public static void main(String[] args) {
System.out.println(new Dog("Firulais").speak());
}
}class Dog
{
private readonly string name;
public Dog(string name) => this.name = name;
public string Speak() => $"{name}: ¡Guau!";
static void Main() =>
Console.WriteLine(new Dog("Firulais").Speak());
}class Dog:
def __init__(self, name):
self.name = name
def speak(self):
return f"{self.name}: ¡Guau!"
print(Dog("Firulais").speak())class Dog {
#name;
constructor(name) { this.#name = name; }
speak() { return `${this.#name}: ¡Guau!`; }
}
console.log(new Dog("Firulais").speak());Pulsa «Ejecutar»
Cómo se aprende
Una lección de tarjetas, una por una
En la pantalla hay una tarjeta. Primero un problema que conoces, luego la idea y la escena, luego tareas pequeñas para hacer con tus manos. Nada de muros de texto. Tu progreso se guarda en tu navegador.
Lección «Métodos», Java
- ProblemaUn cambio, tres lugares
Empieza con algo que duele: el mismo código copiado en tres lugares.
- La ideaEscríbelo una vez, llámalo por su nombre
La idea con palabras sencillas, y luego cómo se escribe exactamente.
- MíraloQué pasa en una llamada
La escena 3D avanza junto con el código y muestra la memoria.
- Pruébalo¿En qué orden? ¿Qué falta?
Ordena las líneas, completa lo que falta, encuentra el error.
- EjercicioEl recibo y el triángulo
Un programa pequeño completo que escribes tú.
- TestPonte a prueba
Una prueba corta. Una respuesta incorrecta te dice por qué lo es.
Cursos
Todo el camino, módulo por módulo
Cada lección usa solo lo que ya has visto. Abre un módulo y empieza por su primera lección.
POO con Java
Del primer programa a clases, herencia, excepciones, colecciones, archivos, hilos y bases de datos.
Abrir el curso- 00Bienvenidael lenguaje, dónde se usa, preparación3 lecciones
- 01Fundamentos del lenguajevariables, condiciones, bucles, arreglos9 lecciones
- 02Métodoscódigo que escribes una vez y llamas muchas veces4 lecciones
- 03Clases y objetostus propios tipos5 lecciones
- 04Herencia y polimorfismolo común, en un solo lugar6 lecciones
- 05Errores y excepcionescuando algo sale mal3 lecciones
- 06Texto y archivoscadenas, regex, archivos5 lecciones
- 07Coleccioneslistas, pila, cola, HashMap5 lecciones
- 08Java modernolambdas, streams, patrones4 lecciones
- 09Programas en el mundo realpruebas, hilos, red, bases de datos, reflection5 lecciones
POO con C#
Del primer programa a clases, herencia, excepciones, LINQ, async y aplicaciones web con ASP.NET y WPF.
Abrir el curso- 00Bienvenidael lenguaje, dónde se usa, preparación3 lecciones
- 01Fundamentos del lenguajevariables, condiciones, bucles, arreglos9 lecciones
- 02Métodoscódigo que escribes una vez y llamas muchas veces4 lecciones
- 03Clases y objetostus propios tipos5 lecciones
- 04Herencia y polimorfismolo común, en un solo lugar6 lecciones
- 05Errores y excepcionescuando algo sale mal3 lecciones
- 06Coleccioneslistas, pila, cola, Dictionary, HashSet5 lecciones
- 07C# modernolambdas, streams, patrones4 lecciones
- 08Programas en el mundo realpruebas, hilos, red, bases de datos, reflection5 lecciones
- 09Web y escritorioLINQ, async, internet, MVC, WebAPI, WPF8 lecciones
Programación con Python
Del primer programa a funciones, clases, herencia, excepciones, archivos, colecciones, pruebas, hilos y bases de datos.
Abrir el curso- 00Bienvenidael lenguaje, dónde se usa, preparación3 lecciones
- 01Fundamentos del lenguajevariables, condiciones, bucles, arreglos9 lecciones
- 02Funcionescódigo que escribes una vez y llamas muchas veces4 lecciones
- 03Clases y objetostus propios tipos5 lecciones
- 04Herencia y polimorfismolo común, en un solo lugar6 lecciones
- 05Errores y excepcionescuando algo sale mal3 lecciones
- 06Texto y archivoscadenas, regex, archivos5 lecciones
- 07Coleccioneslistas, pila, cola, diccionarios, conjuntos5 lecciones
- 08Python modernolambdas, streams, patrones4 lecciones
- 09Programas en el mundo realpruebas, hilos, red, bases de datos, reflection5 lecciones
Programación con JavaScript
Del primer programa a funciones, clases, herencia, excepciones, archivos, colecciones, async, pruebas y bases de datos con Node.js.
Abrir el curso- 00Bienvenidael lenguaje, dónde se usa, preparación3 lecciones
- 01Fundamentos del lenguajevariables, condiciones, bucles, arreglos9 lecciones
- 02Funcionescódigo que escribes una vez y llamas muchas veces4 lecciones
- 03Clases y objetostus propios tipos5 lecciones
- 04Herencia y polimorfismolo común, en un solo lugar6 lecciones
- 05Errores y excepcionescuando algo sale mal3 lecciones
- 06Texto y archivoscadenas, regex, archivos5 lecciones
- 07Coleccionesarreglos, pila, cola, Map, Set5 lecciones
- 08JavaScript modernolambdas, streams, patrones4 lecciones
- 09Programas en el mundo realpruebas, hilos, red, bases de datos, reflection5 lecciones
Bases de datos y SQL
Consultas SQL que ejecutas directamente en el navegador, diseño de bases de datos, transacciones, índices, la base de datos en el programa y los tipos de bases de datos, con simuladores en vivo.
Abrir el curso- 00Bienvenida a las bases de datosqué es una base de datos, tablas, la primera consulta3 lecciones
- 01Leer datosSELECT, WHERE, ORDER BY, LIMIT, NULL5 lecciones
- 02Expresiones y funcionescálculos, texto, fechas, CASE4 lecciones
- 03ResumirCOUNT, SUM, AVG, GROUP BY, HAVING4 lecciones
- 04Unir tablasclaves, JOIN, LEFT JOIN, UNION5 lecciones
- 05Subconsultas y ventanassubconsultas, WITH, árboles, funciones de ventana5 lecciones
- 06Cambiar los datosINSERT, UPDATE, DELETE, UPSERT4 lecciones
- 07Tablas y reglasCREATE DATABASE y DROP, CREATE TABLE, tipos, claves, vistas6 lecciones
- 08Diseñar una base de datosrelaciones, diagramas ER, normalización4 lecciones
- 09TransaccionesACID, BEGIN y COMMIT, acceso simultáneo, triggers4 lecciones
- 10Índices y velocidadíndices, plan de consulta, consultas lentas4 lecciones
- 11La base de datos en el programaconexión desde el código, parámetros, inyección SQL, ORM, migraciones5 lecciones
- 12Tipos de bases de datosdocumentos, clave-valor, eventos, grafos, columnares, búsqueda, vectores10 lecciones
- 13Proyecto: la panadería desde cerotoda la base de datos, de CREATE TABLE a DROP6 lecciones
Análisis de datos
Python con NumPy, pandas, matplotlib y scikit-learn, ejecutado en el navegador: tablas, grupos, gráficos, estadística y modelos sobre los datos de una tienda, hasta la pregunta de por qué bajaron los ingresos.
Abrir el curso- 00Bienvenidaqué hace el análisis, el sandbox, la primera tabla2 lecciones
- 01NumPyarreglos, cálculos sin for, resúmenes, broadcasting4 lecciones
- 02Tablas con pandasSeries y DataFrame, selección, filtros, columnas nuevas, tipos y valores faltantes5 lecciones
- 03Preparar los datosgrupos, uniones, ancho y largo, fechas, datos sucios5 lecciones
- 04Gráficosmatplotlib, qué gráfico para qué pregunta, distribuciones, gráficos honestos4 lecciones
- 05Estadística para decidirruido, intervalos, pruebas de hipótesis, una prueba A/B, correlación y causa6 lecciones
- 06Modelos con scikit-learnpredicción, clasificación, fuga de información, una evaluación honesta5 lecciones
- 07Proyecto: por qué bajaron los ingresostodo el recorrido con los datos de la tienda1 lección
Validación y verificación
Análisis de negocio y QA, casi sin código: requisitos, historias y criterios de aceptación, escenarios de Gherkin, la matriz de trazabilidad y pruebas que atrapan errores reales.
Abrir el curso- 00Bienvenidavalidación y verificación, defectos y fallos, calidad3 lecciones
- 01Requisitospartes interesadas, obtención, tipos, el buen requisito, modelos5 lecciones
- 02Historias y criterios de aceptaciónhistoria, INVEST, división, criterios, Example Mapping5 lecciones
- 03Escenarios con GherkinDado, Cuando, Entonces, ejemplos, declarativo, escenarios malos5 lecciones
- 04Trazabilidadla matriz, cambio e impacto, lo que la cobertura no dice3 lecciones
- 05Pruebas estáticaspor qué pronto, tipos de revisión, revisar una especificación3 lecciones
- 06Técnicas de diseño de pruebasclases, límites, tablas de decisión, estados, cobertura, experiencia7 lecciones
- 07Niveles, tipos y procesoniveles y tipos de pruebas, ciclo de vida, plan, riesgo, defectos5 lecciones
- 08No funcionalusabilidad, desempeño, seguridad como requisitos3 lecciones
- 09Automatizaciónpasos con Cucumber, pruebas de componente, API y UI, CI5 lecciones
- 10Validar con el clientepruebas de aceptación, medición después del lanzamiento2 lecciones
- 11Proyecto: códigos promocionalesde la solicitud del cliente al lanzamiento1 lección
Ingeniería de software
El curso que sigue al lenguaje: patrones de diseño, código limpio, algoritmos y complejidad, concurrencia y seguridad, con código en el lenguaje que elijas.
Abrir el curso- 00Bienvenidaqué enseña el curso y qué necesitas saber1 lección
- 01Patrones de diseñoStrategy, Observer, Builder, State…14 lecciones
- 02Código limpio y refactorizaciónnombres, funciones, malos olores, pasos pequeños8 lecciones
- 03ComplejidadBig-O, tiempo y memoria, medición5 lecciones
- 04Búsquedabúsqueda lineal y binaria3 lecciones
- 05Ordenamientoinsertion, merge, quick, heap, counting6 lecciones
- 06Recursiónla pila de llamadas, divide y vencerás4 lecciones
- 07Estructuras de datosarreglo, lista, tabla hash, árboles, heap8 lecciones
- 08GrafosBFS, DFS, Dijkstra, dependencias6 lecciones
- 09Programación dinámicamemoización, tabla, mochila5 lecciones
- 10Algoritmos voracescuándo funcionan y cuándo engañan2 lecciones
- 11Técnicas para resolver problemasdos punteros, ventana deslizante, sumas de prefijos4 lecciones
- 12Proyecto: navegación por la ciudadel mapa como grafo, BFS, Dijkstra1 lección
- 13Concurrencia y condiciones de carrerabloqueos, deadlock, async9 lecciones
- 14Seguridad para programadoresentrada no confiable, contraseñas, sesiones, tokens, secretos7 lecciones
- 15Arquitectura de softwarecapas, módulos, eventos, API, caché, escalado9 lecciones
- 16El arquitecto en acciónNFR, compromisos, integración, migraciones, revisión9 lecciones
Inteligencia artificial para programadores
Cómo aprende un modelo y cómo se construye una aplicación con un modelo de lenguaje: regresión, redes neuronales, tokens, prompts, herramientas, RAG y agentes, con código sin bibliotecas en el lenguaje que elijas.
Abrir el curso- 00Bienvenidalas dos partes del curso, por qué el código no usa bibliotecas1 lección
- 01Cómo aprende un modeloregresión, descenso del gradiente, clasificación, evaluación6 lecciones
- 02Una red neuronal por dentroneurona, capas, backprop, entrenamiento5 lecciones
- 03Cómo funciona un modelo de lenguajetokens, el siguiente token, vectores, contexto5 lecciones
- 04Aplicaciones con LLMAPI, prompts, salida estructurada, herramientas, costo6 lecciones
- 05Búsqueda semántica y RAGvectores de documentos, fragmentación, respuestas con fuente4 lecciones
- 06Agentesel ciclo del agente, prompt injection, guardrails3 lecciones
- 07Proyecto: el asistente de soporteRAG, una herramienta, un conjunto de pruebas y protección en uno1 lección
Interfaces web
HTML, CSS y el DOM, luego componentes, estado, efectos, formularios, enrutamiento y pruebas con React o Vue, en un sandbox dentro de la propia página.
Abrir el curso- 00Bienvenidacómo el navegador muestra una página, el sandbox, React o Vue1 lección
- 01HTML: la estructura de la páginaelementos, texto, formularios, accesibilidad4 lecciones
- 02CSS: el aspecto de la páginala cascada, cajas, flexbox, grid, para el celular5 lecciones
- 03JavaScript en la páginael DOM, eventos, una lista a partir de datos, fetch4 lecciones
- 04ComponentesJSX y plantillas, props, listas, condiciones4 lecciones
- 05EstadouseState y ref, actualizaciones, valores derivados, estado compartido4 lecciones
- 06Efectos, datos y formulariosefectos, datos de una API, formularios, estado compartido4 lecciones
- 07Una aplicación completaenrutamiento, velocidad, pruebas, un proyecto real4 lecciones
- 08Proyecto: el escaparate de la tiendacatálogo, carrito, pedido y API en uno1 lección
Juegos y proyecto
Después construyes algo de verdad
Tres juegos de cero hasta el final y un proyecto grande. Cada paso es una lección con escena, y cada juego dice después de qué módulo se hace.
juegoRPGHéroes de cinco razas, batallas y niveles. Herencia, interfaces y excepciones en un juego.
juegoEpic CosmosEstrellas, planetas y satélites como clases, luego recursos, edificios y naves.
juegoEl laboratorio cerradoUn juego de escape de texto sin combates: salas, comandos, acertijos y un código para continuar.
proyectoReservas de hotelUn servidor y un cliente. Cuando dos personas quieren la misma habitación en el mismo instante, solo una la consigue.
Código verificado
El código no se copia a ojo. Se ejecuta.
Cada programa de las lecciones y de las escenas se compila y se ejecuta en Docker sin red, y su salida se compara con la de la lección. Si algo se rompe, el sitio no se publica.
- programas
- 33.40829784 ejecutados, 3592 con entrada, 32 solo compilados (WPF)
- ejercicios «Encuentra el error»
- 3228el error está exactamente en la línea que señala el ejercicio
- escenas 3D
- 1028cada paso señala una línea real de su código
- problemas
- 0en la última verificación
Con las mismas versiones con las que vas a escribir
- Java 21
- .NET 10
- Python 3.12
- Node 22
- Docker
- sin red
Preguntas
Lo que más se pregunta
¿Necesito registrarme?
No. Todo se lee directamente. Tu progreso se guarda solo en tu navegador y en ningún otro lugar.
¿Tengo que saber algo antes?
No. El módulo «Bienvenida» dice qué es el lenguaje, dónde se usa y cómo preparar tu computadora. Cada lección siguiente usa solo lo que ya has visto.
¿Qué lenguaje elijo?
Los conceptos son los mismos, así que no hay una mala elección. Si estudias con un plan de estudios, toma su lenguaje. Si no: Python es el más fácil de leer y está en todas partes en datos y automatización, JavaScript corre en cualquier navegador y en el servidor, Java y C# muestran los tipos con más claridad. C# también tiene un módulo de aplicaciones web y de escritorio.
¿Son iguales las lecciones en los cuatro lenguajes?
Los temas, las escenas y los ejercicios son los mismos. Donde un lenguaje hace algo distinto, la lección muestra su forma: en Python y JavaScript las funciones no van dentro de una clase, los tipos no se escriben y en lugar de la sobrecarga hay valores por defecto.
¿En qué idiomas están las lecciones?
En búlgaro, inglés, alemán y español. El código también está traducido: los programas imprimen texto en el idioma de la lección y se verifican igual que los búlgaros.
Novedades
Últimos cambios
Las lecciones también en inglés
Cada lección, cada juego y el proyecto tienen ahora una versión en inglés, con el código incluido: los programas imprimen en inglés y pasan la misma verificación. Las escenas escriben sus rótulos en el idioma de la página.
Python y JavaScript
Las mismas lecciones, escenas, ejercicios y verificaciones, en Python y en JavaScript. Donde el lenguaje hace algo distinto (funciones sin clase, tipos sin declarar, sin sobrecarga), la lección muestra su propia forma.
Lecciones más anchas, .NET 10 y un proyecto grande
En un monitor grande la escena queda junto al código y la salida junto al programa. El código de C# se verifica con .NET 10. Seis ejercicios parecidos dejaron su lugar a un proyecto paso a paso: reservas de hotel.
Lecciones hechas de tarjetas, con una escena 3D en cada una
Las clases y los ejercicios pasaron a ser módulos de lecciones cortas: problema, idea, escena, tareas pequeñas, ejercicio y prueba. Una lección nunca usa algo que todavía no se ha mostrado. Se añadieron tres juegos.
Los cursos de Java y C# ahora están aquí
El material de java.gh.igergov.com y csharp.gh.igergov.com se trasladó aquí y se reescribió. Cada dirección antigua lleva a la lección donde fue a parar su contenido.
Sobre el sitio
De dónde viene wannacode
El sitio empezó como ayuda para los estudiantes de la Universidad Técnica de Sofía: clases y ejercicios de programación orientada a objetos con Java y C#.
Hoy está abierto para cualquiera que quiera crecer en la programación, en cuatro lenguajes: Java, C#, Python y JavaScript. Cursos aparte enseñan bases de datos y SQL y análisis de datos.
Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación.
La primera lección está a un clic.
Abre el curso, lee la idea, ejecuta el código. El sitio recordará hasta dónde llegaste.