Original article: The Best Way to Learn Backend Web Development

Mi artículo anterior describía cómo puedes entrar en el desarrollo frontend . También se discutió cómo el front-end puede ser un lugar lleno de minas terrestres: pisa el lugar equivocado y te verás abrumado por los muchos marcos de trabajo (frameworks) del ecosistema de JavaScript.

En este artículo, vamos a ver cómo puedes ingresar al desarrollo de back-end. En el camino, responderé algunas de las preguntas más comunes que la gente me hace al respecto.

¿Qué es el desarrollo back-end?

El desarrollo front-end implica lo que un usuario ve en la pantalla cuando abre una URL específica de tu propiedad. Incluso en un entorno completamente estático (solo con HTML/CSS), cuando alguien abre un sitio web, algún servidor en el planeta necesita responderle con esos archivos HTML y CSS.

Ese servidor es solo un ordenador, como el que usas para navegar por Internet. Pero se ha ajustado para el rendimiento y no tiene componentes innecesarios como un mouse o un teclado adjuntos. Y se encuentra con toneladas de otros ordenadores, probablemente en un almacén de datos.

La programación de esos ordenadores de alguna manera especial se llama desarrollo de back-end .

Puedes pensar que el desarrollo de back-end se llama así porque se ejecuta a espaldas del usuario. Un visitante de tu sitio web nunca "accede" completamente al back-end. Simplemente se comunican con tu servidor, ya sea directamente a través de puertos para un acceso muy limitado (como la transferencia de archivos HTML/CSS) o ni siquiera eso, enterrados profundamente bajo CDN o firewalls (como Cloudflare).

Ahora que tenemos una comprensión básica de lo que significa el desarrollo de back-end, analicemos algunas preguntas reales .

¿Se requieren conocimientos de programación front-end para el back-end?

TLDR; No. (Too Long; Didn't read | Demasiado largo; no lo leí)

El desarrollo de back-end, como se mencionó anteriormente, implica la programación de un ordenador ubicado probablemente en el otro lado del planeta responsable de responder a lo que sus usuarios dicen desde sus propios ordenadores.

Si eres un desarrollador back-end a tiempo completo, realmente no necesitas preocuparte por lo que sucede dentro de esos archivos HTML, CSS y JavaScript que envías al navegador del usuario. En su lugar, debes centrarte más en el rendimiento y el código del servidor.

¿Qué implica el desarrollo de back-end?

Bueno, siguiendo los libros, puedes decir que una persona que codifica una aplicación que puede responder a solicitudes HTTP es un desarrollador de back-end.

Pero en realidad, a veces los desarrolladores de back-end pueden hacer mucho más que simplemente escribir scripts de servidor. Tienen el conocimiento para configurar servidores proxy inversos (NGiNX/HAProxy), habilitar la compresión y otras formas de acelerar el sitio, y configurar un entorno contenedor (docker) de producción.

Para calificar como desarrollador back-end, diría que las habilidades mínimas que necesitas son:

  1. Buen conocimiento sobre un lenguaje de programación en el que puedes escribir servidores HTTP. Ejemplos: C#, Java, Node, PHP, Python, etc. (¡hay muchos!)
  2. Administrar para hospedar usando cPanel (tradicional) o usando terminal bash (alojamiento en la nube/tradicional)
  3. Trabajar con sistemas de control de versiones (VCS) como git para administrar e implementar compilaciones

Al igual que todos los juegos vienen con especificaciones mínimas y recomendadas, para los desarrolladores de back-end, mis especificaciones recomendadas serían (incluidas las habilidades mínimas):

  1. NGiNX para activos de archivos estáticos y administración de servidores
  2. Habilidades de gestión de bases de datos (SQL/NoSQL)
  3. Seguridad de backend (Escribir código seguro y robusto, ejecutar aplicaciones en contenedores docker con privilegios limitados, protección contra ataques DoS)
  4. Autoescalado/balanceo de carga

De acuerdo, demasiada charla sobre lo que sucede en el desarrollo de back-end. Pero, ¿cómo te conviertes en uno?

Comienza con los requisitos mínimos

Como dije, para el back-end, al igual que los juegos, tenemos un conjunto de requisitos mínimos y requisitos recomendados. Los requisitos mínimos consisten en 3 cosas:

Aprender un lenguaje de programación backend

Cuando las personas aprenden por sí mismas, por lo general no tienen un equipo ni nadie que pueda desarrollar el front-end. Están totalmente solos. Por lo tanto, a menudo tendrás que crear páginas web y servidores tú mismo, al menos al principio.

Aunque hay muchas opciones para los lenguajes de programación de back-end, y no puedo pensar en ningún lenguaje de sistema popular que no admita servidores HTTP listos para usar. La ventaja de elegir Node es que sus habilidades de  front-end JavaScript son transferibles al back-end.

No obstante, puedes elegir entre una variedad de lenguajes como Java, C++, C#, Python, PHP, etc.

¿Cómo elijo uno?, podrías preguntar. La respuesta es la misma que en el artículo de desarrollo front-end: tienes que probar todo inicialmente y ver cuál encaja mejor contigo.

Node es fácil, ya que es posible que ya hayas realizado la programación JS para el front-end. Pero si eres un desarrollador de Python o Java, es posible que los encuentre fáciles de aprender. Depende completamente de tu profesión y gusto.

Más información sobre la gestión del alojamiento

Atrás quedaron los días en los que tendrías que comprar servidores manualmente y configurarlos en tu casa, conectarte a tu ISP, hacerlo todo tú mismo. Esta es la era de la computación en la nube. Ahora, al alojar tu sitio web, tienes principalmente 2 opciones:

  1. Optar por servidores de alojamiento administrados como HostGator o GoDaddy.
  2. Optar por proveedores de alojamiento en la nube como GCP, AWS o DigitalOcean.

¿Cuál es la diferencia entre los dos? En ambos casos, los servidores son propiedad y están operados por las respectivas empresas. Pero la principal diferencia es que el alojamiento administrado es más amigable con la GUI, tiene un amplio conjunto de herramientas para ver el sistema de archivos, monitorear el uso, administrar los correos electrónicos de tu dominio oficial, cargar/descargar archivos de tu servidor, etc. Es básicamente una configuración para personas con menos habilidades técnicas.

Por esa razón, no recomiendo sitios administrados como HostGator o GoDaddy para desarrolladores experimentados. Aún así, podrían ser una buena plataforma para cometer errores y aprender, principalmente porque generalmente tienen planes de prepago para ello. También tendrás una buena interfaz de usuario para administrar las cosas, lo que te permite que no se disparen accidentalmente tus facturas.

Pero cuando empieces a ganar velocidad, te recomiendo que cambies a un proveedor de nube. Esto elimina todas las buenas herramientas de cPanel que usaste para administrar archivos y carpetas en los servidores. Pero al mismo tiempo, te desafiará a subir mucho de nivel tus habilidades.

Hoy en día, muchos proveedores de la nube también ofrecen una prueba gratuita decente, para que puedas probar su plataforma antes de entrar por completo. Yo alojo mi sitio web para desarrolladores en DigitalOcean y encuentro que tiene un dulce equilibrio de complejidad y características del sitio.

Puedes usar este enlace para registrarte en DigitalOcean y obtener un crédito de 100 dólares  gratis . Las instancias de DigitalOcean son baratas,  como unos 5 dólares por mes, por lo que tienes crédito aproximadamente para 20 meses, gran oferta, ¿no?

De todos modos, puedes elegir cualquier proveedor de nube. Entonces, es importante aprender a administrar el servidor usando solo la línea de comandos ingresando por ssh en él.

Más información sobre los sistemas de control de versiones

Hay otras soluciones además de Git como VCS (Sistema de Control de Versiones por sus siglas en inglés). Pero Git es el más usado y el más simple de entender.

Como individuo, es posible que no lo aprecies de inmediato. Pero comprenderás por qué es tan importante en el momento en que comiences a trabajar en equipo en varias funciones simultáneamente en tu proyecto.

Git te permite administrar tu flujo de trabajo usando confirmaciones y ramas. Las confirmaciones son como puntos de control en tu código base, a los que siempre puedes volver si cometes un error.

Las ramas (branches) son como realidades alternativas de tu proyecto, donde algo completamente diferente podría suceder. Estas realidades alternativas se pueden crear desde cualquier momento y se pueden fusionar nuevamente en cualquier momento.

Si esas realidades se pueden fusionar con compatibilidad, entonces está bien. Pero si hay un conflicto (como si estuvieras vivo en una realidad y muerto en otra), entonces tienes que hacer una elección manualmente. Otros cambios se pueden fusionar automáticamente.

Git es súper interesante, y una vez que lo domines, querrás usarlo en cada proyecto. Puedes mantener un historial de tu trabajo de manera eficiente (git comprime y almacena solo la diferencia entre confirmaciones).

También te permite crear repositorios git en línea en sitios como GitHub, que actúa como una fuente central de información para tu sitio web. Los sitios como GitHub se pueden configurar con webhooks especiales que realmente pueden actualizar tu sitio web cada vez que agregas un nuevo punto de control (una nueva confirmación) sin necesidad de ir manualmente al servidor y actualizarlo tu mismo.

Ir a las habilidades recomendadas

Soy un gran creyente en aprender haciendo. Y la mejor manera de hacer algo surge de la necesidad o el interés. Una vez que te consideres lo suficientemente bueno con los requisitos mínimos, es hora de adquirir las habilidades recomendadas. Esto incluye todas las herramientas como Docker y NGiNX mencionadas anteriormente.

DevOps también es algo que encaja muy bien con los desarrolladores de back-end. Puedes probar y explorar TravisCI o CircleCI para implementaciones de compilación automatizadas. La integración e implementación continuas (CI/CD) es un tema que podría ocupar otra publicación de blog completa, por lo que no entraré en eso.

Luego vienen las bases de datos, que coloqué en habilidades recomendadas. Pero vas a necesitar bases de datos para prácticamente cualquier aplicación que implique algún tipo de persistencia de datos generados por el usuario.

Las bases de datos suelen ser fáciles para empezar a trabajar, pero más difíciles de mantener y ajustar correctamente. La mejor manera de comenzar a trabajar en una pila tecnológica de back-end es tener todo junto en un solo servidor: el código de tu aplicación, los servidores proxy inversos, la base de datos, etc. Luego, a medida que te vuelves más competente en cada cosa, puedes desacoplarlo de la lógica empresarial existente.

Al hacer esto, estás habilitando una arquitectura que se puede escalar mucho. Una aplicación intensiva de operación de base de datos podría tener una solución optimizada para bases de datos. Y un sitio con mucho tráfico debe tener un buen mecanismo de CDN para descargar activos estáticos, etc.

Conclusión

Hay mucho que aprender, pero todo se puede lograr si no te rindes. Déjame saber lo que piensas sobre esta publicación a través de mis cuentas de Twitter e Instagram . ¡Significará mucho para mí si nos conectamos allí!

Además, si estás interesado, consulta codedamn , una plataforma centrada en el desarrollador para tecnologías de aprendizaje como el desarrollo de back-end. ¡Incluso publiqué un video de YT sobre cómo hacer funcionar tu propio servidor web simple en 2 minutos ! ¡Miralo y déjame saber lo que piensas!

¡Paz!