El término «desarrollador Full Stack» ha experimentado una transformación radical que merece una reflexión cuidadosa.
Comencemos con la definición de lo que significa ser un «desarrollador Full Stack», tomando como referencia a ChatGPT:
Los "desarrolladores Full Stack" son desarrolladores de software que tienen habilidades tanto en el front-end como en el back-end del desarrollo web o de aplicaciones de software. En otras palabras, son capaces de trabajar en todas las partes de una aplicación o sitio web, desde el lado del cliente que se ejecuta en el navegador del usuario (front-end) hasta el lado del servidor (back-end) que maneja la lógica empresarial y el acceso a los datos.
Lenguaje del código: JavaScript (javascript)
Mi enfoque sobre el término desarrollador Full Stack
En un momento de mi carrera, esta definición reflejaba perfectamente mi estado de ánimo, era lo que sentía que era y lo que deseaba que los demás percibieran al observarme. Orgulloso de este estatus, incluía esta calificación en mi currículum vitae, casi como cuando se obtiene una calificación excelente en la escuela y se desea compartirlo con la familia.
Con el tiempo, descubrí que el encanto de esta definición ha conquistado el corazón de muchas personas, principalmente debido a un pensamiento común: ser Full Stack es ser un programador completo y, para las empresas, contratar a un desarrollador Full Stack representa un valor agregado.
Si asigno un proyecto a este tipo de programador, él es capaz de manejar de manera autónoma todos los aspectos del desarrollo de software: ¡es como tener todo un equipo de desarrollo en una sola persona!
Con el tiempo, me di cuenta de que este enfoque podía tener sentido cuando los proyectos eran simples y las tecnologías eran pocas.
Hoy en día, el mundo ha cambiado, es mucho más complejo cubrir cada faceta de un proyecto. Ahora, ser un «desarrollador Full Stack» parece ser sinónimo de trabajar de manera mediocre en todos los aspectos de un proyecto: no se es un experto en el backend, ni en el frontend, ni en DevOps; se conocen conceptos de UX, UI, SEO, marketing, se sabe un poco de todo, pero nada en profundidad, o tal vez solo una parte.
Intentemos trasladar el concepto de «Full Stack» a su mecánico: su mecánico, cuando hay un problema en la carrocería, no la arregla a martillazos, sino que involucra a un chapista; cuando hay problemas de carburación, llama a un experto en carburadores; cuando hay un problema eléctrico, involucra a un electricista.
De la misma manera, si su médico sospecha de un problema en particular, lo envía a un especialista en esa área, quien realizará un examen exhaustivo para formular un diagnóstico y un tratamiento específicos.
Un programador «Full Stack» no: se le ha elegido para no tener que llamar a nadie, para resolver todo por sí mismo.
Este enfoque no es sostenible, o mejor dicho, no es abordable si se piensa que ser Full Stack es un punto de llegada y no un punto de partida. Muchas profesiones nos hacen comprender que es preferible tener un experto en un campo específico en lugar de un «todólogo» si queremos realizar un trabajo de calidad.
Los programadores experimentados saben lo importante que es especializarse y reconocen las horas perdidas buscando soluciones que un experto habría resuelto rápidamente.
En la cultura popular y a menudo cuando se habla con los clientes, hay una presunción de que un programador debe ser capaz de hacer todo a la perfección. Responder con frases como «no es mi campo, se necesitaría un experto en UI» se ve como una señal de debilidad, a pesar de ser una respuesta legítima, profesional y honesta.
- "Soy un desarrollador Full Stack"
- "Ah, entonces eres un experto en todo?"
- "No, no exactamente"
Lenguaje del código: JavaScript (javascript)
El mercado laboral y el desarrollador Full Stack
El mercado laboral ha comenzado a aprovechar la demanda de «desarrolladores Full Stack», respondiendo a esta necesidad de maneras a veces extrañas.
Están surgiendo figuras como los «desarrolladores Full Stack Junior», que se autodenominan «full stack» pero agregan el término «junior» para resaltar su falta de experiencia. A menudo, este título sigue cursos intensivos del tipo «conviértete en full stack en 6 meses».
No nos damos cuenta, pero nos enfrentamos a un problema serio. Por un lado, estamos inculcando en la mente de los jóvenes programadores la idea de que pueden cubrir de manera autónoma y fácil toda la pila tecnológica, para luego enfrentarlos a la cruda realidad: en el primer proyecto complejo que encuentran, se dan cuenta de que no son capaces de manejarlo solos.
Sin embargo, no todo es culpa de estos nuevos programadores. También existe un problema relacionado con algunas empresas que no tienen la capacidad de evaluar adecuadamente el nivel real de competencia de las personas y asignan roles de responsabilidad basándose en la poca información que tienen.
Responder brillantemente a una entrevista técnica es una cosa, pero como sabiamente sostiene Linus Torvalds:
Hablar es barato. Muéstrame el código.
La calidad del código y la evaluación del programador
El código, el enfoque para resolver problemas y la forma en que se enfrentan las dificultades son los aspectos que distinguen a un programador de otro, incluso si ambos se autodenominan «desarrolladores Full Stack».
Desafortunadamente, evaluar cuánto una persona es realmente capaz de producir no es para nada sencillo. He visto programadores producir grandes cantidades de código, pero de baja calidad, y programadores que producían poco, pero de una calidad muy alta.
Para citar a Antoine de Saint-Exupéry:
La perfección se alcanza no cuando no hay nada más que agregar, sino cuando no hay nada más que quitar.
Evaluar el verdadero valor de un programador es una habilidad muy difícil de adquirir, pero es una competencia fundamental para un buen gerente. No es suficiente evaluar la cantidad de líneas de código producidas, ni el número de proyectos completados o las tecnologías conocidas, especialmente en una era en la que las tecnologías cambian rápidamente y nos ayudan a escribir cada vez más código en menos tiempo.
La cantidad de código no es un indicador de calidad, incluso si funciona perfectamente y está cubierto por numerosas pruebas funcionales. El código no debe evaluarse por kilo, sino por su calidad, mantenibilidad, escalabilidad y legibilidad.
¿Quién puede evaluar la calidad del código? No es fácil responder a esta pregunta.
La respuesta más sencilla podría ser: otro desarrollador Full Stack, pero esa no es la respuesta correcta.
No lo es porque un desarrollador Full Stack no es un experto en todo, sino que debería ser experto principalmente en su área de aplicación específica. Por lo tanto, la evaluación del valor de una persona por parte de un desarrollador Full Stack puede estar influenciada por una serie de sesgos debido a sus experiencias personales, conocimientos previos y habilidades adquiridas.
Entonces, ¿puede ser un departamento de recursos humanos el encargado de evaluar la calidad del código? ¿O un gerente? ¿Un colega? ¿Un cliente? La respuesta correcta es: todos ellos pueden contribuir.
En este caso también, la evaluación se basará en la suma de las experiencias de las diversas personas involucradas, que pueden tener opiniones diferentes y decretar que el mismo desarrollador Full Stack es un genio en una pila tecnológica como LAMP, pero un incompetente en otra como MEAN.
¿Y si trabajáramos en la «actitud de resolución de problemas»?
Hemos asimilado que «desarrollador Full Stack» es un término no calificativo, interpretable de manera diferente según el contexto y, sobre todo, muy costoso en términos de actualizaciones tecnológicas necesarias.
Entonces, intentemos trabajar en un concepto diferente: la «actitud de resolución de problemas».
Artículo recomendado: los lenguajes de programación más buscados por las empresas tech
Un programador que posee una sólida «actitud de resolución de problemas» es capaz de enfrentar cualquier problema, incluso si nunca ha enfrentado uno similar en el pasado. Es capaz de analizar el problema, descomponerlo en partes más pequeñas, encontrar una solución, implementarla y probarla con éxito.
Este tipo de programador no se desanima ante las dificultades, sino que las enfrenta con determinación, adaptándose y aprendiendo en el proceso. Esta mentalidad flexible y analítica es fundamental para enfrentar los desafíos siempre nuevos que se presentan en el desarrollo de software.
Un programador con una sólida «actitud de resolución de problemas» no tiene miedo de pedir ayuda, de admitir «no sé» o «no puedo hacerlo». De hecho, es capaz de trabajar de manera efectiva en equipo, compartiendo sus conocimientos, aprendiendo de aquellos que saben más y enseñando a aquellos que saben menos.
En este contexto, una gran cantidad de experiencias en diferentes contextos y tecnologías, en proyectos internacionales con tecnologías heterogéneas, es sin duda un valor agregado, mucho más que ser un desarrollador Full Stack. Este último, de hecho, no se especializa en la resolución de problemas, sino en el conocimiento profundo de su pila tecnológica específica, resultando fuera de contexto como un jugador de bolos en un juego de briscola.
Ser capaz de resolver problemas incluso en contextos no familiares es un valioso activo dentro de un equipo. Siempre habrá tiempo después para perfeccionar la solución al ponerla en manos de un experto en el producto, pero la capacidad de resolver problemas de manera autónoma es una habilidad invaluable.
Un programador con una mentalidad flexible, analítica y colaborativa, combinada con una amplia gama de experiencias diversas, será capaz de enfrentar con éxito los desafíos más complejos, adaptándose y creciendo constantemente.
Conclusiones
Mi consejo es evitar autodenominarse «desarrollador Full Stack».
Este término está demasiado inflado y, cuando se escribe en el currículum vitae de un programador junior, no agrega ningún valor, excepto la hilaridad de los programadores más experimentados que lo leen.
Es mucho mejor identificar con precisión las tecnologías en las que uno es experto y aquellas en las que se tiene menos experiencia. Esto es válido para todos los programadores: puedes ser un mago de Angular, haber escrito API REST en Node, pero si un experto en backend analiza tu código, probablemente encontrará deficiencias.
Al exponer claramente las habilidades y experiencias propias, será el interlocutor quien evalúe el valor real, un aspecto que vale mucho más que una etiqueta genérica de «desarrollador Full Stack».
Es necesario concentrarse en construir una sólida «actitud de resolución de problemas», adquirir experiencia en diferentes contextos tecnológicos, salir de la zona de confort y promover un enfoque colaborativo en el trabajo. Estas cualidades serán mucho más apreciadas que una autodeclaración como «Full Stack» que corre el riesgo de ser engañosa o excesivamente generalista.