Faragiri

Aprender programación

Por dónde se empieza a programar desde cero, en qué orden se cogen los ocho temas, qué instalar en 2026 sin pagar nada y cómo saber que avanzas.

7Secciones
10Min de lectura
1Profundidad

Programación

Lo que contiene de verdad aprender a programar

Cada rama es un oficio distinto con una forma distinta de fallar. Quien lo deja suele dejarlo en la segunda, creyendo que sigue en la primera.

  • Un lenguajeLa parte más pequeña, y la única que entra en un examen
    • Sintaxis
    • Tipos
    • Biblioteca estándar
  • Las herramientas de alrededorDonde el título deja de servir de guía
    • Terminal
    • Git
    • Editor
    • Paquetes
  • Ponerlo en producciónNada funciona hasta que funciona en otro sitio
    • Desplegar
    • Logs
    • Volver atrás
Aprender a programar
  • Pensar por pasosConvertir lo que alguien quiere en un orden de operaciones
    • Descomponer
    • Estado
    • Casos límite
  • Leer código ajenoLo que separa el segundo año del primero
    • Seguir una traza
    • Documentación
    • Fuente

Las ramas no son etapas. Se es malo en las cinco a la vez durante una temporada, y esa es la forma normal de esto.

Nerea Ibáñez Otero escribió cuarenta líneas de Python para no abrir a mano los extractos mensuales del banco en la gestoría donde trabaja, en Zaragoza. El programa separa las facturas con 21 % de IVA de las que llevan el 10 % y saca el total de cada cliente. Es correcto, y funciona en exactamente un ordenador.

En el portátil de su compañera se cae en la línea que abre el fichero. Las cuarenta líneas costaron una tarde; el segundo ordenador costó el resto de la semana, y nada de lo que falló en él era Python.

Ahí se parte esta rama del atlas. Nerea tiene un título que certifica que sabe programar, y lo que la tuvo parada cinco días no entraba en ninguna prueba de ese título.

Ocho temas: tres ideas, y cinco sitios con su propia forma de matar un programa

Tres de los ocho no dependen de lo que acabes construyendo. Los fundamentos de programación son lo que quedaría si le quitaran a alguien todos los lenguajes que sabe: cuánto cuesta un bucle, para qué sirve una tabla hash y por qué un fallo se esconde. Los lenguajes de programación son la sintaxis y los varios cientos de paquetes que la rodean. La puesta en producción es todo lo que pasa después de que el programa funciona y antes de que pueda usarlo alguien más.

Los otros cinco no son temas elegidos por gusto, sino juegos de restricciones. En el desarrollo web el código corre en dos máquinas ajenas, y la red entre ellas falla de maneras que ninguna de las dos cuenta. En el desarrollo móvil los límites son la batería, la revisión de la tienda y un aparato en el que no se puede entrar a mirar qué pasó.

Las bases de datos cargan un requisito que los otros cuatro no tienen: los datos siguen ahí después de que se corte la luz a mitad de una escritura. En blockchain el código es público, permanente y casi siempre custodia dinero, así que no hay segundo despliegue. Y en el desarrollo de videojuegos el presupuesto son 16 milisegundos por fotograma, 60 veces por segundo, y pasarse lo ve quien juega.

El temario que trajo aquí a la mayoría parte esto por módulos y por evaluaciones: Programación, Bases de Datos, Entornos de Desarrollo, Lenguajes de Marcas. Es una división cómoda para quien examina, porque un módulo se aprueba en junio. El precio lo paga quien sale con el título y busca el paso siguiente, porque en esa lista solo puede ser otro módulo.

Una única página llamada Python tendría que cubrir una petición web, un entrenamiento, un bucle de juego y un script que renombra ficheros, y solo podría decir lo que es cierto en los cuatro casos, que es la sintaxis. De ahí que dos personas con el mismo Go en el currículum no puedan cubrirse la una a la otra. Leer código ajeno se ha quedado sin tema propio a propósito: es lo que haces dentro de los ocho, y se practica abriendo un proyecto que no escribiste.

Sumar un lenguaje aplaza la segunda asignatura, y la pila la elige el cliente

Rubén Alcaraz Vidal lleva tres años con JavaScript, uno con Python y desde marzo con Java. Los tres los lee bien. Nada de lo que ha escrito en ninguno ha corrido nunca en una máquina distinta de su portátil. Un segundo lenguaje es la forma más cara de aplazar la segunda asignatura.

Es tentador por un motivo concreto: un lenguaje nuevo te devuelve el primer mes. Todo vuelve a ser nuevo, cada noche termina con algo que ha funcionado, y la semana uno va rápida. Sacar el programa de tu máquina no regala nada de eso durante quince días, y luego regala una dirección.

El primer empleo suele estar en una consultora que te coloca en un cliente: entras sabiendo Python y pasas dieciocho meses en Java, o al revés. Elegir bien el primer lenguaje pesa aquí menos que en casi ningún otro sitio, porque durante un buen rato la elección no es tuya. Lo que sí viaja contigo a los dos proyectos es la segunda asignatura.

El mes siguiente al título

La bifurcación del primer programa que funciona

Los dos brazos se parecen a un avance. Solo uno termina en algo que un desconocido puede abrir.

Tu primer programa funciona en tu ordenador. ¿Y ahora qué?
  • Lo que hace casi todo el mundo
    Otro curso, otro certificado, otro lenguajeEl mes uno otra vez, y se parece a un avance porque todo vuelve a ser nuevo
    • Sintaxis que ya tienes, escrita de otra manera
    • Sigue sin correr nada tuyo fuera de casa
    • La distancia crece en los dos lenguajes a la vez
  • Lo que se cobra
    El mismo programa en una máquina que no es tuyaQuince días en los que no funciona nada, y después una dirección
    • Una terminal que abriste tú
    • Un repositorio con las versiones fijadas
    • Un enlace que otra persona puede abrir

No dice que el segundo lenguaje sea un error. Dice que no toca este mes, y quien lo coge ahora suele cogerlo en lugar de lo otro.

Lo que no examina un título de programación

Una prueba de dos horas puede pedir una consulta SQL, un diagrama de clases y un método que ordene una lista, y las tres cosas se corrigen mirando un papel. No puede ponerte delante de un entorno que no instala, ni de una rama que otra persona ha tocado mientras tú tocabas la tuya. Sales con un papel que dice que terminaste la asignatura, y por eso, cuando te encallas en la siguiente, la conclusión que llega sola es que no vales para esto.

Las cuarenta líneas de Nerea dan por supuestas cuatro cosas que no aparecen en el fichero: un Python que vino con el sistema y va dos versiones por detrás, una librería que alguien instaló en 2023 y ya nadie recuerda, una ruta con un nombre de usuario dentro, y una codificación de texto que eligió la máquina que escribió el CSV. Ninguna es Python, ninguna está escrita en ningún sitio, y las cuatro tienen que ser ciertas antes de que se ejecute la línea uno.

La quinta llega el día en que hay dos personas tocando el mismo fichero. Git para el merge y deja las dos versiones dentro del fichero, separadas por tres marcas:

  • <<<<<<< HEAD abre el bloque, y debajo va lo que ya tenías en tu rama.
  • ======= separa las dos versiones y no señala ninguna como buena.
  • >>>>>>> cierra el bloque, seguido del nombre de la rama que entra.

De ahí sale la única regla que hay que recordar delante de un conflicto: la versión entre ======= y >>>>>>> es la que llega, no la que tenías. Resolverlo es borrar las tres líneas de marcas y dejar el fichero como debe quedar, que casi nunca es una de las dos versiones enteras. Nadie suspende por no saber hacerlo y casi todo el mundo se para la primera vez. La otra mitad del mismo atasco es la terminal, que tiene gramática propia y vive en los sistemas operativos.

El idioma de los commits, y por dónde se abre un repositorio heredado

Hay una decisión que se toma en los primeros días de cualquier equipo español: en qué idioma se escriben los mensajes de commit. El código está en inglés porque las palabras clave lo están, y la gente del equipo habla español entre ella. Las dos opciones funcionan; mezclarlas no, porque un historial mitad en un idioma y mitad en otro deja de leerse de un vistazo.

El idioma de los mensajes de commit lo decide el repositorio, no cada persona, y lo habitual es que lo decidiera el primer commit sin que nadie se diera cuenta.

Lo segundo que pasa esa semana es que te dan acceso a un repositorio con cuatro años dentro y nadie tiene tiempo de explicártelo. Ahí sirve un comando y no un curso: git log --oneline cabe en una pantalla y es por donde se abre un repositorio ajeno, porque cada commit ocupa un renglón y en veinte ya se ve quién toca qué.

Lo tercero es el idioma de todo lo demás. El error llega en inglés, la documentación está en inglés y la entrevista técnica, en buena parte de estas empresas, también. Eso no es una anécdota cultural sino una parte del trabajo que se aprende aparte, y está en inglés, no aquí.

El atasco

El temario de la asignatura que no venía en el temario

Cuatro meses de avance constante terminan en una orilla, y en la otra empieza la semana uno de otra cosa con su propio nivel de principiante.

Donde te deja el títuloSintaxis, consultas, un diagrama, y algo nuevo cada semana
  1. 01Una terminal, y saber que una ruta es una cosaDesde dónde se lanza el comando decide qué puede encontrar
  2. 02Un lockfile, para que las versiones sean tuyas a propósitoCódigo de otros, fijado en vez de recién salido
  3. 03Un repositorio, antes de que haya algo que perderEl deshacer que sobrevive a cerrar el portátil
  4. 04Un conflicto de merge resuelto por tiEl módulo lo explicó en una diapositiva y nadie te puso delante de uno
El ordenador de otra persona, ejecutando tu programaLa misma persona, otra asignatura, y su semana uno

Cuatro tablones y no hay un quinto. Esta asignatura es finita, que es la parte que nadie menciona mientras estás en la primera orilla.

Cuatro herramientas, con el año y lo que sustituyeron

VS Code es el editor por defecto desde alrededor de 2016, es gratis y tiene el código abierto. Sustituyó a Sublime Text y a Atom, y Atom se archivó en diciembre de 2022, cuatro años después de que su fabricante fuera comprado por el de VS Code. Dos alternativas son serias: los editores de JetBrains, para quien pasa el día entero dentro de un solo lenguaje, y Neovim, para quien trabaja sobre máquinas ajenas. El fallo típico son treinta extensiones instaladas antes de escribir nada.

Git se escribió en 2005 para el núcleo de Linux, sustituyó a Subversion y a la costumbre de copiar una carpeta antes de tocar nada, y es gratis. Aquí es un tema entero y no un consejo suelto, y vive en el control de versiones. El fallo típico es aprender add, commit y push como un conjuro de tres palabras: la primera vez que algo sale mal, el único movimiento conocido es volver a clonar y pegar las ediciones a mano.

Un asistente de código dentro del editor es el cambio más grande de este oficio desde que GitHub Copilot salió de forma general en 2022, y sustituyó a buscar a alguien que ya hubiera preguntado lo mismo. La mitad de quien lee esto está aprendiendo con uno.

Es muy bueno en el código que habrías escrito tú despacio, que es la mayor parte del código. Es incorrecto con aplomo en cuanto algo se sale de lo común, y lo entrega bien formateado, idéntico al que sí funciona. Quien empieza no distingue cuál de los dos tiene en pantalla, porque distinguirlos es la asignatura entera.

Los planes gratuitos dan para aprender. El de pago es una cuota mensual con el 21 % de IVA ya dentro del precio, y una cuota mensual pesa distinto cuando los ingresos del mes son irregulares, que es la cuenta del trabajo autónomo. El hábito que sobrevive a esto es pedirle que explique la línea que no escribiste y contrastarla con algo que se ejecute, que es el movimiento de la ingeniería de prompts.

El artículo 50 del Reglamento Europeo de IA es exigible desde el 2 de agosto de 2026: si lo que publicas conversa con una persona, esa persona tiene que saber que quien responde es un modelo, y el contenido sintético que salga de ahí se etiqueta. No afecta al asistente con el que escribes, afecta al producto que escribes con él.

El cuarto no es un editor, porque responde al atasco y no al trabajo. Para Python, uv apareció en 2024, es gratis y de código abierto, y sustituyó a pip, virtualenv y pyenv, que eran tres herramientas haciendo un solo trabajo: instala la versión del intérprete que pide el proyecto y fija cada paquete con su versión exacta. El fallo típico es leerlo como ruido generado, y un lockfile fuera del repositorio tira lo único para lo que servía.

La señal

El mismo programa en cuatro estados, cada uno con menos máquina tuya dentro

Entre el primer fotograma y el último no cambia una línea. Cambia cuánto se apoya el programa en el ordenador donde lo escribiste.

  1. 01Funciona al darle al playDentro del editor que te instaló todo
  2. 02Funciona en una terminal que abriste túLa misma máquina, sin nada que ayude
  3. 03Funciona desde un clon recién hechoTu repositorio, y la primera auditoría honesta de lo que no anotaste
  4. 04Funciona donde no has entrado nuncaEl fotograma en el que el programa deja de ser tuyo

Los fotogramas no están igual de separados en el tiempo. El último suele costar más que los tres anteriores juntos, y una tira no sabe dibujar eso.

A los tres meses puedes nombrar el paso que ha fallado

La medida no es cuánta sintaxis se produce de memoria: eso lo mide bien un examen, y por eso lo mide un examen. Es si puedes coger el proyecto de un desconocido, clonarlo y dejarlo funcionando en tu propio ordenador, sin ayuda, en una tarde.

Al mes esto falla de una forma que no sabes describir: algo no ha ido y no hay nombre para qué cosa. A los tres meses o arranca, o no arranca y puedes nombrar el paso que lo ha parado.

El intérprete va una versión por detrás de lo que pide el proyecto. Falta una librería del sistema contra la que compilan los paquetes. Espera una base de datos contestando en el puerto 5432 y no hay nadie escuchando. Le falta una variable de entorno que nadie anotó. Nombrar el paso que ha fallado es la habilidad; arreglarlo después es una búsqueda.

La otra señal necesita a otra persona: una compañera tendría que poder ejecutar lo que tienes, desde el repositorio, en su mesa, sin ti al teléfono.

Por cuál de los ocho empezar

Casi todo el mundo empieza por Fundamentos y Lenguajes. Lo que los separa es que el primero sigue siendo cierto cuando cambias de lenguaje y el segundo es ese cambio. La puesta en producción vale la pena abrirla antes de lo que parece razonable, porque el control de versiones, las pruebas, los contenedores y un despliegue se aprenden mucho más barato sobre un programa de cuarenta líneas que sobre uno de cuatro mil.

De los cinco lugares, la web es el primero cuando no hay un motivo para preferir otro, y el motivo no es técnico: un desconocido ve lo que has hecho pinchando un enlace, y en el segundo mes eso pesa más que cualquier discusión sobre lenguajes.

El móvil es para cuando la cosa solo tiene sentido en el bolsillo. Las bases de datos se alcanzan tarde y valdría la pena alcanzarlas pronto. Los videojuegos dan el ciclo de respuesta más corto del pilar a cambio de la restricción más dura, y blockchain es el más estrecho de los ocho y el menos indulgente.

Queda la pregunta con la que llega casi todo el mundo: en qué lenguaje empezar. Pesa menos que las horas que se gastan eligiendo, y tampoco da igual: esa pregunta tiene página propia en qué lenguaje elegir, y la versión corta es que el primer lenguaje correcto es el que usa la gente que va a contestarte las preguntas.

Al lado de esto

Por encima de esto