La Senda del Desarrollador Full Stack (Parte 1: Introducción)
Tags: fullstack, javascript, programming, spanish
Published: 2022-12-07 16:02:04

Uno de los tópicos que más me consultan como profesor es “¿por dónde debería empezar?”. Hay muchas tecnologías y una demanda laboral muy alta que incrementó potencialmente estos últimos años.

Por eso decidí crear esta guía que va a aplanar el camino a todo el que se inicie como desarrollador en este mismo instante. También reforzará a los experimentados.

## El Propósito
Lo primero que debes preguntarte es por qué quieres programar. Puede que simplemente quieras meterte en este mundo porque te atrajo lo que has escuchado.

O puede que te hayas decidido a programar web. O incluso te interesan las aplicaciones móviles. O quizá te quieres dedicar a crear aplicaciones para escritorio.

Cualquiera sea la razón, primero que nada bienvenido/a, pero necesitas algo más. Debes encontrar la utilidad en lo que vas a aprender. A fin de cuentas, serán más de 100 horas y meses entendiendo lógica de programación, flujos de comportamiento, buenas prácticas y demás.

Puede que no te lo hayas planteado o lo tengas muy claro, pero la realidad es que necesitas un propósito para programar. Porque sino crearás una calculadora, un ABM (Alta, Baja, Modificación) y alguna otra cosa más de tutoriales y ya no sabrás qué hacer.

Como pretendo cubrir todo lo necesario, te dejaré una serie de posibles proyectos que puedes plantearte como propósito para programar. Los he ordenado por nivel de complejidad, siendo el primero más sencillo y el último más complejo:

- **Calculadora**: El ejercicio más común. Nos sirve para practicar operadores, uno de los primeros conceptos luego de entender qué son las variables y tipos de datos.
- **Elije tu Propia Aventura**: Estamos hablando del juego que empezó con los libros del mismo nombre. Elijes un camino y tiene determinadas consecuencias. Con este proyecto podríamos aprender condicionales y bucles.
- **Sistema de Batallas**: Ya sabemos operar valores numéricos y evaluar situaciones mediante condicionales. Entonces podemos crear un sistema donde un héroe ataca a un enemigo, éste pierde vida y viceversa.
- **Lista de Tareas**: Nos sirve para manejar una interfaz gráfica y a la vez introducir conceptos de Bases de Datos. Crearemos una lista CRUD: Create, Read, Update, Delete. Un ejemplo real es Todoist.
- **Pokedex**: Sabiendo hacer listas, creamos una que nos permita interactuar con la API de Pokemon y empezar a tener conocimientos sólidos en servicios.
- **Gestión de Empleados**: Nuestro primer ABM. Usaremos nuestros conocimientos en Bases de Datos para crear, modificar y borrar empleados. Nos empezamos a acercar a sistemas comerciales que podremos vender a clientes reales.
- **Blog**: Crear tu propio blog es un ejercicio complejo, pero ayuda a reforzar y aprender conocimientos de todo tipo. Un usuario puede publicar un artículo, modificarlo y borrarlo. También se puede comentar dentro de cada artículo. Todo esto implica una gestión de datos sólida, lo cual pondrá a prueba a cualquier desarrollador tanto experimentado como principiante.
- **API Blog**: Imagina que ya tienes un blog funcional. Ahora piensa en la idea de que esos artículos se vean en tu dispositivo móvil. Podrías decirme, si sabes diseño web, que harías el blog con los principios de Responsive Design y Mobile First. Y eso está muy bien. Pero quiero llevarlo más allá: armar una aplicación para Android o iOS con un diseño personalizado para las dos y un sistema de alertas por cada artículo nuevo que sea publicado. Ahí es donde necesitarás una API.
- **Chatbot**: Este proyecto se apoya sobre el conocimiento de todos los anteriores. Hoy día tenemos servicios como Discord, Telegram, Whatsapp, Slack, Twitch. Pero la interacción es humana en el mayor de los casos. Ahora armaremos un bot que mediante comandos conversacionales nos permita subir archivos, consultar nuestra API del Blog, quizá el pronóstico o mandar un mensaje masivo a nuestros compañeros. Las posibilidades son infinitas en este nivel.
- **Gestión de Turnos**: Parece un proyecto simple pero no lo es. Crear un ticket para otorgar un turno que aparecerá en una pantalla es sencillo a esta altura. Pero armar un sistema de sockets donde dicha pantalla crea una conexión persistente y cada ticket nuevo aparecerá al instante requiere un nivel de complejidad elevado.
- **Red Social**: En la época de mayor auge de Facebook, éste era el proyecto ambicioso de muchos aspirantes. No digo que sea imposible, pero cometerás un grave error si es tu primer proyecto. Crear una red social requiere muchos conocimientos técnicos y no solo de programación. Pero sigue siendo viable si has desarrollado los proyectos anteriores. Tendrás que lidiar con web sockets, bases de datos, un manejo de servidores resistente a caídas que tenga estrategias de balanceo, entre otros puntos que no alcanzaría el artículo entero a mencionar. No obstante, aprenderás mucho más de lo que imaginabas en un inicio. Y créeme, necesitarás compañeros de equipo, no es un proyecto de una sola persona.

Habrás notado que la mayor parte de los **proyectos están orientados a web**, y dicha razón te la explicaré en las siguientes secciones.

## La Plataforma
Todo lo que quieras programar debe estar asentado en una determinada plataforma o varias. Por ejemplo, Netflix tiene dos aplicaciones mobile en Android y iOS; una aplicación adaptable para TV; un sitio web y una o varias APIs. Esto es lo que se llama una solución.

Como desarrolladores full stack, seremos capaces de crear soluciones completas. Pero debemos empezar por apuntar a una plataforma y luego ir explorando la comunicación con el resto.

El desarrollo web es nuestra opción más flexible para centrarnos en una plataforma e ir mutando en otras. Librerías como Electron, nos permiten crear nuestra aplicación en Javascript (un lenguaje web) y exportarlo a una app de escritorio.

También puede que desarrollemos una API en PHP con Laravel, por ejemplo, y luego armemos una app nativa en Android y otra en iOS. No hay una regla que determine cómo queremos crear nuestra senda de creadores de soluciones.

Y esa es la parte mas interesante del camino. Porque significa que podemos elegir muchas opciones prefabricadas o armar nuestro propio set de tecnologías.

Pero es importante crear un ecosistema. Una plataforma debe comunicarse con la otra y todas deben compartir la misma información o al menos partes estratégicas de la misma.

Por ejemplo un diario debe tener su sitio web, una app donde ver las noticias que soporte tanto en un celular como en una tableta y quizá una app para la TV donde se reproduzcan vídeos destacados de informes porque leer noticias ahí no tiene mucho sentido.

Si tomamos siempre en cuenta este concepto, podremos crear soluciones mucho más solidas y modernas, dado que hoy día los productos mas grandes y medianos manejan esta dinámica constantemente.

## Las Herramientas
Este punto es muy relativo a la tecnología que utilicemos, pero intentaré señalar una serie de herramientas que probablemente uses en la mayoría de ellas:

- **Una consola o terminal**: La consola nos permitirá ejecutar una serie de tareas necesarias para compilar nuestras aplicaciones, generar ciertos archivos, descargar dependencias, etcétera. En Windows personalmente recomiendo [Cmder](https://cmder.net/). Para cualquier distribución Linux o MacOS, la terminal que traen por defecto es bastante funcional.
- **Un editor de texto**: Necesitas escribir tu código en algun lugar. Algunas tecnologías como Android tienen su propio IDE (Android Studio) pero en general para desarrollar web necesitaremos un editor más general. Les dejo una lista de posibles editores confiables: [Visual Studio Code](https://code.visualstudio.com/) | [Notepad++](https://notepad-plus-plus.org/download/v7.7.1.html) | [Webstorm](https://www.jetbrains.com/webstorm/) | [Sublime Text](https://www.sublimetext.com/).
- **Git**: En cualquier momento requerirás trabajar en un sistema de versionado de código. El más usado hasta la fecha es Git. Si no me crees, date una vuelta por Github. Por cierto, tengo un [curso de Git gratuito en Udemy](https://www.udemy.com/aprende-a-dominar-git-de-cero-a-experto/) :D.
- **Cliente para Git**: Muchos prefieren usar sólo la consola que git trae por defecto, pero cuando se trata de resolver conflictos complejos, es mejor usar un cliente. Yo personalmente recomiendo [GitKraken](https://www.gitkraken.com/).

## Conclusiones
En esta primera parte generamos un punto de partida, una base para las siguientes. Ya te vas haciendo una idea de lo que requiere ser un Full Stack Dev, pero el camino recien comienza. En la siguiente parte veremos la parte de desarrollo Frontend.