Según la "Developer survey 2016" de StackOverflow, una mayoría de desarrolladores se consideran a sí mismos "full-stack developers", un perfil intrínsecamente senior, muy exigente en conocimientos y con alta demanda en el sector.
Hablamos de un desarrollador capaz de diseñar e implementar proyectos tanto en el lado servidor como en el lado cliente, lo que implica conocer los puntos fuertes y débiles de cada tecnología y mantenerse actualizado según estas vayan evolucionando y/o aparezcan otras nuevas.
Con la evolución tecnológica del Web stack, mantenerse actualizado y productivo en el front y en el back-end resulta cada vez más complicado, hasta el punto de cuestionarnos si poder cumplir esas expectativas ya es más un mito que una realidad.
Cuando se creó este perfil, a principios de los años 2000, las tecnologías Web eran claramente menos complejas y las opciones entre las que escoger, menos numerosas:
- Existían tres o cuatro servidores de aplicaciones mayoritarios, todos encargados de mantener el estado de la aplicación, aplicar las reglas de negocio y generar el UI de los clientes. Los lenguajes y entornos podían variar, pero el modelo cliente-servidor, los patrones de desarrollo y las técnicas utilizadas eran relativamente similares.
- Todas las BBDD seguían el modelo relacional, con lenguajes de consulta SQL. Teniendo un dominio del estándar SQL-92, era posible saltar de un SGDB a otro en un tiempo reducido.
- El front-end utilizaba un Javascript menos potente y un DOM basado en HTML4/CSS2, orientado únicamente a presentar documentos en ordenadores de sobremesa con pantallas de resoluciones y densidades de pixel similares.
- El ancho de banda de Internet podía ser hasta 100 veces menor que el actual.
En este contexto era perfectamente posible para un mismo desarrollador asumir la responsabilidad de todo el desarrollo.
El perfil full-stack había nacido, haciéndose popular con la expansión de Facebook, la cual, aparentemente sólo contrataba desarrolladores con este perfil.
Desde entonces, la evolución de las tecnologías front y back-end ha sido considerable:
- Se ha dado un cambio fundamental de paradigma sobre dónde reside el estado de una aplicación, que ha migrado claramente desde el back-end hacia el front.
- Este cambio de paradigma ha modificado también el centro de gravedad de los conocimientos del desarrollador full-stack, que ha pasado de ser, al inicio, un experto en back-end con conocimientos de front, para ser ahora más un experto en front-end con buenos conocimientos de back.
- Javascript se ha sofisticado (ECMAScript 5, 6 y 7) al punto de poder implementarse soluciones de ingeniería de software a un nivel muy parecido al de C
- La máquina virtual del navegador ha seguido evolucionando, desde la mera presentación de documentos del comienzo hasta convertirse en una verdadera plataforma de aplicaciones.
- La última característica del paradigma de orientación a objetos que le faltaba, el encapsulamiento, ya lleva tiempo resuelta a nivel JS y ahora lo está también a nivel del DOM, con estándares como el Shadow DOM o los Custom Elements.
- Las soluciones que hacen uso de esto nos empiezan a ofrecer la posibilidad de una verdadera “componentización” en las aplicaciones Web: AngularJS 2.x, Polymer o React, entre otros, tratan de dar respuesta a esta filosofía (los antiguos expertos en FLEX se van a sentir como en casa ahora).
- Al inicio de la década actual, al entorno desktop se añadió el entorno móvil con una experiencia de usuario propia.
- Tanto iOS como Android exigen dominar su ecosistema, rico y complejo, si se desean ofrecer soluciones nativas y, sólo en el caso de utilizar tecnologías híbridas basadas en el DOM del navegador (Apache Cordova, por ejemplo), es posible ahorrar esfuerzos de desarrollo, si bien con contrapartidas de rendimiento.Lo último son tecnologías híbridas donde se administran recursos nativos orquestados mediante Javascript, ofreciendo experiencias de uso indistinguibles de las nativas (NativeScript o React Native).
- Las posibilidades de layout son ahora mucho más potentes. Los estándares de CSS y el DOM permiten maquetaciones muy sofisticadas, necesarias para adaptarse a los múltiples clientes: mobile/desktop, diferentes tamaños y densidades de pantalla, UIs táctiles, etc. Y son estándares que siguen creciendo (CSS4, FlexBox) no ya solo en 2D, sino también en 3D (WebGL).
- En el back-end, las BBDD ya no siguen en exclusiva el modelo relacional. Las capas de persistencia “NoSQL” han llegado para quedarse y son varios los actores en esta película.
- De aplicaciones de arquitectura monolítica se está pasando a arquitecturas más distribuidas, basadas en microservicios, mucho más escalables y a las que se les deriva, no ya aspectos clásicos como el almacenamiento de la información, sino también parte del procesamiento de esa información.
Fuente: Carlosja.com
Aún con este panorama tecnológico tan amplio, el desarrollador con vocación full-stack aún tiene alguna posibilidad. Un ejemplo de ello es que, escogiendo bien el stack de tecnologías, ahora se puede utilizar el mismo lenguaje en todos los contextos del desarrollo: Javascript en el cliente desktop (DOM), en el cliente móvil (Cordova, React Native), en el servidor (Node.js) o en la BBDD (MongoDB).
Y sin embargo, esperar que una misma persona pueda escoger las tecnologías óptimas en toda circunstancia, realizar los desarrollos front y back con alta productividad y todo en un plazo de tiempo razonable, parece algo cada vez menos realista.
Sin negar que siga habiendo casos en los que esté justificado un perfil full-stack clásico, como en start-ups creadas en torno a un stack concreto o en proyectos más pequeños, ¿no deberíamos jubilar definitivamente este perfil tal y como lo conocemos?
¿O quizás solo es cuestión de buscar una nueva etiqueta para alguien que, teniendo que conocer hasta cierto nivel todas las capas, su responsabilidad principal sea sólo integrarlas?
Arturo Batanero
Con 14 años descubrí que, tecleando ciertas cosas, podías hacer aparecer en la pantalla lo que quisieras y desde entonces no he parado. Tras estudiar informática en la Universidad Pontificia de Salamanca me especialicé en el diseño y desarrollo de sistemas multimedia, tanto dentro como fuera de la pantalla, siempre interesado en la experiencia de usuario final. Actualmente soy uno de los arquitectos del departamento Front-end de Paradigma Digital.
Ver más contenido de Arturo.
Cuéntanos qué te parece.