¿Que implica ser fullstack?
Mucho se habla hoy en día sobre fullstack, tema controvertido además cuando se incluye este término en búsquedas laborales, literalmente hablando cuando decimos que una persona es fullstack, estamos diciendo que su capacidad profesional abarca la pila (stack) completa (full) del ciclo de desarrollo e implementación de un aplicativo, ahora me pregunto cuando hablamos de pila estaremos hablando todos de lo mismo?, existe mas de una pila?
Hace unos días me topé con esta imagen en una publicación de Linkedin con un concepto que no conocía y me pareció muy interesante:
La atmósfera del full-stack, donde cada capa de la atmósfera representa un capa en el ciclo de desarrollo. Sin embargo, me quedo con esta otra que incluye como capa a la Seguridad.
Veamos un poco mas en detalle cada una de ellas.
Frontend Sphere
Se refiere a la capa de presentación, es decir su interfaz de usuario (lo que el usuario "ve"). Su responsabilidad es la de presentar los datos de manera que sean entendibles por el usuario, pero también ser un medio por el cual ingresar datos al sistema. Estas interfaces pueden ser web, de escritorio, hasta incluso mobile, para lo cual se cuentan con tecnologías como: HTML, CSS, Javascript, Angular entre otros para aplicaciones Web; Swing JAVA, WinForms en .NET y en el caso de aplicaciones mobile tenemos Swift, Kotlin o ReactNative entre otros.
DevOps Sphere
Esta capa se enfoca en tecnologías que tienen como objetivo la colaboración entre los equipos de desarrollo y operaciones, permitiendo por ejemplo la automatización del ciclo de vida de desarrollo del software implementando practicas de integración continua, entrega continua, monitoreo y gestión de la infraestructura como código. Aquí encontramos tecnologías como Docker y kubernete para la creación y administración de contenedores; Jira y Jenkigns para CI/CD entre otros.
Backend Sphere
Es aquí donde se plasman las reglas de negocios, o también llamada lógica de negocio, es decir donde se escriben las líneas de código que resuelven un a problemática específica. Además es la capa encargada tanto del procesamiento como de la interacción con la base de datos.
Incluye tecnologías como lenguajes de programación (por ejemplo Python, Java, C#) como así también frameworks de trabajo como Django, Spring o .NetFramework respectivamente.
Database Sphere
Es la encargada de almacenar y gestionar los datos, es decir proporciona mecanismos para la persistencia, manipulación y recuperación de información. vale destacar que el termino Database esta siendo utilizado en un sentido amplio, es decir se contemplan una gran variedad de bases de datos, ya sean relacionales (Oracle, MySQL, PostgreSQL), orientadas a objetos (Mongo DB), clave valor (Redis) o hasta un simple archivo de texto plano.
Recomendado por LinkedIn
En esta capa también se deberían considerarse conocimientos básicos relacionados con el diseño y modelado de la base de datos, optimización, gestión de seguridad, monitorización y mantenimiento entre otros.
Platform Sphere
La capa Plataforma hace referencia a la infraestructura subyacente que debe soportar la aplicación, es decir todos aquellos recursos necesarios para su correcto funcionamiento tales como sistemas operativos, servidores, redes, servicios en la nube.
Si bien no es necesario que el desarrollador tenga un basto conocimiento, tener presente las características básicas permitiría tomar decisiones que garanticen un mejor rendimiento, identificando cuellos de botellas aprovechando las bondades de cada una. Por otro lado conocer las ventajas y desventajas de cada una de ellas ayuda a los desarrolladores a identificar y mitigar posibles puntos de fallo y diseñar las aplicaciones escalables.
Aqu{i deberíamos considerar tecnologías tales como Linux o Windows en lo que respecta a Sistemas Operativos, como así también AWS o Azure como servicios Cloud de infraestructura.
Security Sphere
Podríamos resumir que es la capa encargada de garantizar los 3 pilares de la seguridad de la información (disponibilidad, integridad, confidencialidad), con la salvedad que para esta capa en particular, su alcance debe ser transversal a las ya mencionadas, como así también a la interacción entre ellas. Tal vez es una de las capas mas desafiantes al momento de determinar el nivel de conocimiento, ya que involucra una gran variedad de tecnologías, aplicable a una o mas de las capas, desde autenticación y autorización (JWT, OAuth) hasta protección de la información (Encriptación, HTTPs) sin olvidar además la aplicación de buenas prácticas (OWASP, CSR) por nombrar algunas.
Conclusión
Como podemos ver, al hablar de fullstack estamos hablando tanto de un gran número de tecnologías como de una gran variedad, por lo que es difícil determinar su alcance.
Tal vez una forma de acotar esto es planteando pilas específicas, como el stack MERN (MongoDB, ExpressJS, React, Node), MEAN MongoDB, ExpressJS, Angular, Node) o LAMP (Linux, Apache, MySQL, PHP).
Feedback
¿Cual es tu opinión con respecto al uso habitual que se hace del termino desarrollador fullstack? ¿Conoces o trabajas con algún otro stac? Los leo...