Cómo empezar a aprender desarrollo de software: elegir un lenguaje, configurar el entorno, primer proyecto, recursos comunitarios
Si has probado tutoriales de programación y quieres un camino claro y práctico para volverte productivo, esta guía es para ti. Elegirás un lenguaje que se ajuste a tus objetivos, configurarás un entorno de nivel profesional, lanzarás un primer proyecto pequeño pero completo y te conectarás con comunidades que aceleran tu crecimiento. El enfoque está en el impulso y las prácticas modernas para que evites el “infierno de los tutoriales” y empieces a construir cosas reales rápidamente.
![]()
Elige un primer lenguaje con intención
Elegir un lenguaje no se trata tanto de encontrar “el mejor” como de alinearlo con tus objetivos, el ecosistema y las herramientas. Usa estas heurísticas:
- Quieres algo de propósito general y orientado a datos: elige Python.
- Quieres enfocarte en front-end web: comienza con JavaScript en el navegador y luego TypeScript a medida que avances.
- Quieres backend multiplataforma/empleos empresariales: elige Java o C#.
- Quieres servicios/CLI cloud-native con despliegue sencillo: prueba Go.
- Quieres programación de sistemas y rendimiento: explora Rust (curva de aprendizaje más pronunciada).
- Quieres apps para iOS: Swift; apps Android: Kotlin. Lo que realmente importa:
- Ecosistema: gestores de paquetes, frameworks, tamaño de la comunidad y calidad de la documentación.
- Herramientas: ¿hay un formateador maduro, linter, ejecutor de pruebas, depurador y soporte en IDE?
- Portabilidad: ¿se ejecuta fácilmente en tu máquina y se despliega con facilidad (en Docker, serverless o PaaS)?
- Mercado laboral y portafolio: ¿puedes mostrar trabajo que coincida con los puestos a los que aplicarás? Atajos para decidir:
- Si no estás seguro, elige Python (camino rápido a datos/scripts/APIs) o JavaScript/TypeScript (web en todas partes).
- Comprométete con un lenguaje durante 6–8 semanas; evita saltar entre stacks. Errores comunes:
- Coleccionar frameworks en lugar de construir proyectos.
- Evitar opciones tipadas porque parecen más difíciles. El tipado fuerte (TypeScript, Java, C#) compensa en proyectos grandes—considéralo temprano si planeas escalar.
- Sobreoptimizar por la “velocidad”. La velocidad de desarrollo viene de la familiaridad y las herramientas, no solo de la elección del lenguaje.
Configura un entorno de desarrollo productivo
Tu entorno debe ser reproducible, versionado y cómodo para sesiones largas.
Componentes principales
- SO y shell:
- macOS/Linux: bash/zsh predeterminado está bien.
- Windows: usa Windows Subsystem for Linux (WSL) para una experiencia tipo Unix más fluida.
- Gestor de paquetes:
- macOS: Homebrew (brew).
- Ubuntu/Debian: apt.
- Windows: winget o Chocolatey; además del apt de WSL si usas WSL.
- Editor/IDE:
- VS Code para cobertura amplia de lenguajes y extensiones.
- IDEs de JetBrains (PyCharm, IntelliJ, Rider) para soporte profundo de lenguaje.
- Control de versiones:
- Git + GitHub (o GitLab/Bitbucket).
- Gestores de versiones de lenguaje:
- Python: pyenv + venv (o Conda).
- Node: nvm para versiones de Node.js.
- Java: SDKMAN! para JDKs.
- Opcional pero valioso:
- Docker para entornos de desarrollo limpios y reproducibles.
- Un linter y un formateador configurados para ejecutarse al guardar.
Pasos esenciales de configuración (multiplataforma)
- Instala Git y configura tu identidad:
- macOS: brew install git
- Ubuntu: sudo apt update && sudo apt install -y git
- Windows: winget install --id Git.Git -e --source winget
- Configura Git:
- git config --global user.name "Your Name"
- git config --global user.email "you@example.com"
- git config --global init.defaultBranch main
- Crea claves SSH y añádelas a GitHub:
- ssh-keygen -t ed25519 -C "you@example.com"
- Inicia el agente SSH y añade la clave (eval "$(ssh-agent -s)"; ssh-add ~/.ssh/id_ed25519)
- Copia tu clave pública (cat ~/.ssh/id_ed25519.pub) y añádela a tu cuenta de GitHub.
- Instala el lenguaje y las herramientas elegidas:
- Python: brew install pyenv; pyenv install 3.12.6; pyenv global 3.12.6
- Node: instala NVM; nvm install --lts; nvm use --lts
- Instala un formateador de código y un linter para tu lenguaje:
- Python: pip install black ruff pytest
- JavaScript/TypeScript: npm i -D typescript eslint prettier jest ts-node @types/node
Lista de verificación de configuración del editor
- Habilita “format on save” (Black para Python, Prettier para JS/TS).
- Instala extensiones específicas del lenguaje (Python, ESLint, Prettier).
- Configura el ejecutor de pruebas (pytest, Jest) y las configuraciones de lanzamiento del depurador.
- Activa el autosave o guardado frecuente; mantiene el panel de problemas visible para detectar fallos temprano.

Construye tu primer proyecto: un CLI pequeño y completo
Para lograr una victoria rápida y practicar un flujo de trabajo profesional, crea una CLI llamada “Task Tracker” que:
- Añada, liste y marque tareas como completadas.
- Guarde datos localmente en un archivo JSON.
- Incluya pruebas, un README y una interfaz scriptable. A continuación se muestra una variante en Python; adapta la misma estructura a Node/TypeScript si prefieres.
1) Crea el repositorio y el entorno
- Crea un repo en GitHub llamado task-tracker.
- Clona e inicializa:
- git clone git@github.com:you/task-tracker.git
- cd task-tracker
- python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
- pip install black ruff pytest
- Crea la estructura inicial:
- mkdir task_tracker tests
- touch task_tracker/init.py task_tracker/cli.py tests/test_cli.py README.md
2) Implementa un conjunto mínimo de funciones
task_tracker/cli.py:
import json, sys, pathlib DATA = pathlib.Path(__file__).parent / "tasks.json" def load(): if DATA.exists(): return json.loads(DATA.read_text()) return [] def save(tasks): DATA.write_text(json.dumps(tasks, indent=2)) def add(task_text): tasks = load() tasks.append({"id": len(tasks)+1, "text": task_text, "done": False}) save(tasks) def list_tasks(): tasks = load() for t in tasks: status = "✓" if t["done"] else " " print(f"[{status}] {t['id']}: {t['text']}") def done(task_id): tasks = load() for t in tasks: if t["id"] == task_id: t["done"] = True save(tasks) return print("Task not found", file=sys.stderr) if __name__ == "__main__": cmd, *args = sys.argv[1:] or ["list"] if cmd == "add": add(" ".join(args)) elif cmd == "done": done(int(args[0])) else: list_tasks()
tests/test_cli.py:
from task_tracker import cli def test_add_and_done(tmp_path, monkeypatch, capsys): monkeypatch.setattr(cli, "DATA", tmp_path / "tasks.json") cli.add("Write tests") cli.add("Ship it") cli.done(1) cli.list_tasks() out = capsys.readouterr().out assert "✓ 1: Write tests" in out assert "] 2: Ship it" in out
Ejecuta las pruebas y formatea:
- pytest -q
- ruff check . && black .
3) Añade scripts y documentación
En README.md:
- Describe lo que hace la herramienta.
- Documenta los pasos de instalación/ejecución:
- python -m venv .venv && source .venv/bin/activate
- pip install -e .
- python -m task_tracker.cli add "Try the app" Añade un pyproject.toml para declarar las herramientas:
[project] name = "task-tracker" version = "0.1.0" requires-python = ">=3.11" [tool.black] line-length = 88 [tool.ruff] select = ["E", "F"]
Haz commit y push:
- git add .
- git commit -m "feat: initial CLI with tests and formatting"
- git push -u origin main Objetivos extra:
- Añadir argparse o Typer (para una ayuda de CLI más bonita).
- Persistir tareas en SQLite usando sqlite3.
- Empaquetar con entry points para que los usuarios ejecuten task-tracker directamente.
- Añadir un workflow simple de GitHub Actions para ejecutar pruebas al hacer push.
Esenciales de control de versiones y colaboración
- Haz commits en incrementos pequeños. Cada commit debe compilar y pasar pruebas.
- Escribe mensajes significativos usando una convención (p. ej., feat:, fix:, chore:, docs:).
- Crea ramas para características (git switch -c feat/argparse), abre un pull request para practicar revisión de código—incluso en proyectos en solitario.
- Usa issues para rastrear tareas y bugs. Ciérralos vía PRs (p. ej., “Fixes #2”).
- Protege main con CI ejecutando pruebas; exige PRs para fusionar. Comandos útiles:
- git status, git diff, git add -p
- git commit -m "feat: ..."
- git switch -c feat/new-thing
- git push -u origin feat/new-thing
- git pull --rebase Errores comunes:
- Commits grandes y con muchos archivos que son difíciles de revisar.
- Saltarse las pruebas antes de hacer push.
- Cometer secretos. Usa .gitignore y variables de entorno; considera git-secrets o hooks de pre-commit.
Usa los recursos comunitarios de forma estratégica
Los grandes desarrolladores se apoyan en el trabajo de otros. Curate fuentes de alta señal:
- Documentación oficial y guías del lenguaje: documentación de Python, Node.js docs, Java Tutorials, Rust Book. Son precisas y se mantienen actualizadas.
- Práctica interactiva:
- Exercism para fundamentos de lenguaje con feedback de mentores.
- LeetCode/HackerRank para resolución de problemas (limita el tiempo para evitar agujeros de conejo).
- Advent of Code para desafíos divertidos y estacionales.
- Sitios centrados en proyectos:
- Frontend Mentor para proyectos de front-end.
- Build Your Own X (lista buscable) para clonar sistemas y herramientas.
- Comunidades:
- Stack Overflow (formula preguntas bien, con ejemplos reproducibles mínimos).
- r/learnprogramming, r/coding, r/python, r/javascript.
- Grupos en Discord/Slack de tu lenguaje; meetups locales vía Meetup.com.
- Mentoría:
- Programa en pareja con compañeros via Discord o grupos de estudio locales.
- Pide revisiones de código; intercambia revisiones para aprender más rápido.
- Open source:
- Busca “good first issue” en repositorios que uses. Lee CONTRIBUTING.md, ejecuta pruebas, haz correcciones pequeñas. Consejos de etiqueta:
- Muestra lo que ya intentaste; incluye mensajes de error e info del entorno.
- Sé amable en las respuestas; prefiere sugerencias sobre directivas.
- Cierra el ciclo—publica lo que resolvió tu problema para ayudar a futuros buscadores.
Evita trampas comunes y adopta buenas prácticas
Errores a evitar:
- Saltar de tutorial en tutorial sin entregar nada. Equilibra el aprendizaje con la entrega: por cada hora de lectura, haz una hora de construcción.
- Sobreingeniería: evita frameworks hasta que los necesites. Python/Node simples + pruebas + formateo es suficiente al principio.
- Ignorar las pruebas: incluso un par de pruebas te protegen de regresiones y aumentan la confianza.
- Estilo inconsistente: configura el formateo al guardar; deja que las herramientas resuelvan debates de estilo.
- Descuidar la documentación: un README claro es parte del producto. Buenas prácticas:
- Mantén tu backlog en issues. Trabaja desde la parte superior. Prioriza pequeñas victorias.
- Automatiza tareas repetitivas con scripts o Makefiles (make test, make format).
- Registra errores y maneja casos borde temprano (entrada vacía, archivos faltantes).
- Aprende a usar el depurador; recorrer el código paso a paso supera la conjetura.
- Revisa tus propios PRs antes de pedir a otros—encuentra problemas fáciles de corregir.
Hoja de ruta de 90 días para ganar impulso
Semanas 1–2: Fundamentos
- Elige un lenguaje y configura tu entorno.
- Termina el Task Tracker CLI con pruebas, formateo y un README limpio.
- Crea un README de perfil en GitHub; fija tu proyecto. Semanas 3–4: Calidad y automatización
- Añade GitHub Actions para ejecutar pruebas y linters.
- Empaqueta y publica (PyPI o un registro npm privado/local) o produce un Homebrew tap/manifest de scoop para practicar instalación.
- Refactoriza el código para mayor claridad; añade comandos de ayuda y manejo de errores. Semanas 5–6: Construcción de servicios
- Construye una pequeña API REST (FastAPI en Python o Express en Node). Añade un endpoint que liste tareas y otro que cree tareas.
- Escribe 3–5 pruebas para tus endpoints; considera una DB SQLite ligera y migraciones. Semanas 7–8: Despliegue
- Conteneriza con Docker; añade un Dockerfile y docker-compose para desarrollo local.
- Despliega a un servicio gestionado (Fly.io, Render, Railway o AWS Elastic Beanstalk/Google Cloud Run).
- Añade observabilidad básica: endpoint de salud, logs y una sección de despliegue en el README. Semanas 9–10: Pulido de front-end o CLI
- Si es web: crea un front-end mínimo (React/Vue/Svelte) para consumir tu API.
- Si es CLI: añade archivos de configuración, subcomandos y salida más rica (colores, tablas). Semanas 11–12: Colaboración y pulido
- Contribuye con un PR pequeño a un repo de código abierto.
- Escribe una entrada de blog o un video demo sobre tu proyecto. Compártelo en una comunidad para recibir feedback.
- Recopila una lista corta de aprendizajes y próximos pasos; actualiza tu hoja de ruta.
Lista de verificación final
- Lenguaje elegido con intención; herramientas principales instaladas y funcionando.
- Editor configurado con formateo al guardar, linter y depuración.
- Git y GitHub configurados con claves SSH; push y pull con confianza.
- Un primer proyecto completo con pruebas, README y CI.
- Conexiones comunitarias: al menos un foro, un sitio de práctica y un canal para hacer preguntas.
- Un plan para los próximos 90 días enfocado en incrementos pequeños y entregables. Con el lenguaje adecuado, un entorno limpio, un primer proyecto lanzable y comunidades de apoyo, avanzarás rápidamente de “conozco algo de sintaxis” a “entrego software que funciona”. Revisa este plan mensualmente, elimina distracciones y sigue entregando—el impulso es tu mayor aliado.
Califica este tutorial
Iniciar sesión para calificar este tutorial
Comentarios (0)
Iniciar sesión para unirte a la discusión
Desplázate hacia abajo para cargar comentarios y calificaciones