¿Cómo aprendería un desarrollador web autodidacta a construir un sistema back-end distribuido?

Aprender haciendo.

El trabajo de un desarrollador no es saberlo todo. Es conocer los fundamentos de cómo funciona una computadora y aplicar esos fundamentos para resolver problemas complejos. Tenemos los mejores recursos que el mundo haya conocido disponibles a nuestro alcance las 24 horas del día.

Para aprender, si ese es su objetivo, encuentre los mejores recursos que pueda, concéntrese en aprender los fundamentos del desarrollo de software o si está más avanzado, luego enfóquese específicamente en aprender cómo funcionan los sistemas distribuidos. Use herramientas que lo ayuden siempre que sea posible (vea a continuación una introducción a las herramientas que utiliza un desarrollador de aplicaciones web si lo necesita), experimente, aprenda las mejores prácticas y nunca se rinda. Los problemas complejos requieren un pensamiento complejo y lleva tiempo.

Un excelente punto de partida es encontrar sistemas de back-end distribuidos a gran escala que ya se hayan creado. Puede aprender mucho sobre la arquitectura de las aplicaciones web modernas mirando los repositorios a los que contribuyen los desarrolladores de software de Silicon Valley. GitHub es un gran recurso para esto. También puedes encontrar mentores en github. A las personas que crean software de código abierto les gusta quedarse en github y gitter para ayudarlo si tiene algún problema al usar su software. Solo asegúrate de agotar todas tus opciones antes de pedir consejo.

Encuentre un proveedor de educación en línea. Yo personalmente uso Udacity para mi educación “superior” de desarrollo, por así decirlo. Udacity te enseña exactamente lo que los empleados de Silicon Valley esperan de ti como Devleoper. Aprenderá las mejores prácticas, que son importantes para usted y para cualquier persona para la que trabaje.

En cuanto a las herramientas en el cinturón de herramientas de los desarrolladores de back-end, aquí hay información sobre las herramientas que me gusta usar. Fui criado como desarrollador de Rails y he pasado tiempo trabajando en Python y Java Stacks, pero recientemente he estado usando NodeJS, así que me enfocaré en eso.

NodeJS es un entorno de tiempo de ejecución para compilar el lado del servidor JavaScript. Es genial, especialmente si ya conoce JavaScript para el desarrollo del cliente frontal.

Linux es un fantástico sistema operativo de código abierto que literalmente ejecuta la web. Aprenda a usarlo y administrarlo. Aprenda la línea de comandos y todas las herramientas de línea de comandos que pueden ayudarlo. No te frustres demasiado. Se necesita mucho tiempo para aprender y puede ser doloroso.

Uso Docker para administrar mi pila dentro de entornos virtuales en contenedores. A veces también uso Vagrant con Chef para ayudar a ejecutar y aprovisionar máquinas virtuales locales en mi computadora. Ambas herramientas lo ayudan a desarrollar código que se ejecutará igual en su máquina de desarrollo local que en los servidores de producción. Docker te ayuda seriamente a construir sistemas distribuidos, no puedo enfatizar eso lo suficiente. Puede agrupar muchos contenedores que ejecutan las mismas bases de datos y escalar horizontalmente con facilidad.

Yo uso gruñido o trago para la automatización. La automatización es absolutamente crítica para el desarrollo de software. Sin automatización, el desarrollo de software aún estaría en la edad de piedra. Como desarrollador de backend, detesto la repetición. Creo que todos lo hacemos. Puede usar uno de estos sistemas de compilación para crear la estructura de directorios de su aplicación junto con los archivos de inicio, puede ejecutar scripts, descargar código y cualquier otra cosa. NPM, Bower y Yeoman merecen mención aquí ya que todos ayudan enormemente a mantenerse organizado.

Como se mencionó anteriormente, use git. Será tu mejor amigo y puede salvarte la vida.

Los datos controlan las aplicaciones web y su elección de una base de datos es crucial. MySQL y Postgre han existido por un tiempo y están bien soportados. MongoDB es otra buena opción para muchos casos. Hay otros que funcionan en una variedad de formas diferentes, pero la idea es que puede realizar solicitudes desde su aplicación a su base de datos y su base de datos servirá datos a su aplicación web. Esto (operaciones CRUD) es una piedra angular del desarrollo de aplicaciones web. Al elegir una base de datos para un sistema de datos distribuido a gran escala, es extremadamente importante comprender las limitaciones y las fortalezas que uno puede tener sobre el otro. SQL puede ser lento a gran escala, pero algunos sienten que Mongo tiene sus limitaciones [1]

Aprende sobre las redes. Puede volverse extremadamente complejo, pero muchas veces es bastante simple. Aprenda sobre los diferentes servidores web disponibles y cómo puede usarlos (nginx, Apache, Express, etc.)

Finalmente, las API (interfaces de programación de aplicaciones) manejan la web. Aprenda cómo funcionan y qué son. Siga los principios RESTful al crear sus API.

Recuerdo cuando las cosas realmente comenzaron a hacerme clic cuando aprendí a desarrollar software hace años. Me di cuenta de que el software es muy humano en cierto sentido. Fue diseñado para ser entendido por los humanos y le hemos dado un cierto toque humano a la forma en que hacemos las cosas. Al llegar a este entendimiento, me di cuenta de que podía entender cualquier cosa. Aunque alguna idea puede parecerle totalmente extraña, probablemente sea mucho más simple de lo que piensa, o al menos es algo que puede aprender.

Definitivamente, puedes aprender por ti mismo para desarrollar software de backend distribuido escalable. La web fue construida por personas como tú y yo. Si ellos pueden hacerlo, nosotros tambien.

EDITAR: no tengo claro su conocimiento específico del desarrollo de software de back-end, por lo que me disculpo de antemano si algo de esto es demasiado básico. Todo se aplica.

Notas al pie

[1] Episodio 1 – Mongo DB es una escala web

Hay toneladas de videos tutoriales en YouTube. Puede elegir una serie completa para estudiar sistemáticamente los conceptos básicos de los sistemas distribuidos. Si quieres entrar en teorías, también hay conferencias completas de universidades famosas como uc Berkeley, MIT, etc. Yo, también, profundizo mis conocimientos a través de esas conferencias.