En nuestra publicación anterior hablábamos sobre lo que significa ser programador o programadora full-stack (te recomiendo que le des un vistazo porque es muy interesante). Por resumir: un perfil full-stack básicamente es esa persona que trabaja tanto del lado del cliente (frontend) como del lado del servidor (backend), y es capaz de ofrecer soluciones en cualquier parte de la aplicación. Es un rol muy versátil dentro de los equipos tecnológicos y puede asumir diferentes responsabilidades en los proyectos.

Pero hoy la pregunta, o mejor dicho las preguntas son... ¿cuáles son las habilidades que debería tener una persona “todo terreno”, que trabaja o quiere trabajar en el rol de Full-Stack? ¿Debe tener conocimientos en todas las tecnologías y lenguajes? ¿Bastaría con conocer solo un lenguaje en el front y uno en el back? ¿En qué tecnologías debería enfocarse? ¿React, Vue o Angular?, ¿Python, PHP o NodeJS? ¿Cuáles son las principales habilidades Full-Stack? Acompáñame a descubrir juntos las respuestas.

íconos de lenguajes de programación

Las habilidades técnicas que te convierten en un gran Full-Stack Developer siempre tendrán mucho espacio para debates y cada quien tendrá su opinión, desde reclutadores IT hasta programadores seniors y CTO’s, todos tendrán una visión que seguramente estará basada en sus experiencias y stack tecnológicos que utilizan las empresas donde trabajan. Aquí te dejo las que consideramos mi equipo y yo en nuestra escuela de programación.

Empezaré por el front, y luego pasaremos al back, pero también hablaremos de otro tipo de competencias o habilidades importantes

HTML y CSS

Tenemos que empezar claramente por HTML y CSS, tecnologías imprescindibles si quieres trabajar como Full-Stack. Estas dos tecnologías son para el front-end, HTML se usa para añadir contenido a tus aplicaciones web y CSS para aplicar estilos a este contenido, con estas dos tecnologías puedes maquetar tus páginas y hacer la mejor, y más bonita interfaz. Un buen programador full-stack debe desenvolverse con soltura en HTML y CSS.

JavaScript

Es la tecnología por excelencia del lado del cliente, aunque también puede ser utilizada como lenguaje de backend con NodeJS. Para diferenciarlo de NodeJS, al JavaScript “puro” se le conoce tambień como VanillaJS. Es obligatorio que sepas utilizar este lenguaje orientado a objetos si quieres trabajar como full-stack. Es uno de los skills técnicos más importantes, ¿pero qué es y para qué sirve?

JavaScript es el único lenguaje que funciona en los navegadores de manera nativa (sin aditivos, sin instalar nada más). Es un lenguaje interpretado que no necesita compilación, por lo que el navegador lee y entiende el código directamente. Con esta tecnología podemos aportar funcionalidades a la web, crear formularios, responder a un determinado evento dentro de la web (ejecutar una acción cuando el ratón se posiciona sobre una parte específica de la aplicación, por ejemplo). Dato importante: no confundas Java con JavaScript, son dos lenguajes totalmente diferentes.

Toda persona que quiera trabajar como full-stack, además, tiene que saber cómo se realizan las llamadas en la web a través de HTTP (GET, POST…), debe saber cómo usar una API, poder gestionar los eventos, trabajar con el DOM y entender el formato JSON.

Frameworks de JavaScript

Para considerarte programador full-stack, es necesario que conozcas al menos un framework de JavaScript, en este punto te encontrarás muchísimos debates, pero los tres más utilizados en el mundo son: React, Vue y Angular. Cada academia de programación ha  decidido enseñar un framework diferente, cuestión de preferencias. En 4Geeks Academy nos inclinamos por React, pero te dejaré a ti tomar esa decisión con números.

imagen de google trends sobre el aumento de interés de ciertos lenguajes de programación

Para el backend existen numerosos lenguajes de programación (Python, NodeJS, PHP, Ruby, Java, C++), cada uno con sus comunidades y sus detractores. Pero, ¿debo conocer todos los lenguajes de programación? ¿O me basta con uno solo? No hay una respuesta única a esta pregunta, pero sí sería importante conocer más de un lenguaje de programación, aunque seas especialista en solo uno de ellos. Esto te permitirá tener opciones Sin embargo, tener conocimientos del backend, no solamente implica dominar lenguajes, también es necesario conocer sobre bases de datos.

Lenguajes de programación

Empecemos con los lenguajes de programación:

Python: muy fácil de aprender y te permite evolucionar muy rápidamente. Es uno de los lenguajes más utilizados en el mundo gracias a su versatilidad. Hoy día puedes encontrar Python en programación web, machine learning e inteligencia artificial, entre otros, por lo tanto, conocer este lenguaje te abrirá muchísimas puertas. Sus frameworks más populares son Django y Flask.

PHP: durante mucho tiempo fue el lenguaje de programación más utilizado en el mundo web, hoy en día sigue siendo uno de los más utilizados, encontrarás muchas aplicaciones web desarrolladas en esta tecnología. Lo incluyo dentro de la lista de las habilidades técnicas de para ser full-stack ya que el 60% de la web está programada en este lenguaje, y aunque esta tendencia desde hace años está cambiando, sigue habiendo una gran cantidad de empresas que se basan en PHP para hacer sus desarrollos. Los principales frameworks son Symfony y Laravel.

NodeJS: es JavaScript del lado del servidor. Si dominas JavaScript y ya te has familiarizado con cualquier otro lenguaje de backend, no se te hará nada complicado aprender NodeJS. NodeJS es capaz de manejar una inmensa cantidad de conexiones, en simultáneo, manteniendo un alto nivel de rendimiento, por esta razón es muy escalable. Su principal framework es Express.js.

Como decía antes, las habilidades técnicas del backend no solo se centran en lenguajes de programación, así que, ahora hablaremos de las bases de datos.

Bases de datos

Empecemos por lo primero, ¿qué es una base de datos? Una base de datos es un conjunto organizado y estructurado de información, o datos, que se almacenan en un ordenador o en la nube. Normalmente las bases de datos se controlan mediante un sistema de gestión de base de datos (SMBD, por sus siglas en inglés) y permiten almacenar, hacer consultas o búsquedas, agregar nuevos datos o eliminar anteriores.

En lo referente a las bases de datos, también surge otra pregunta, ¿para tener grandes habilidades como full-stack, es necesario saber bases de datos relacionales, no relacionales, jerárquicas, deductivas…? Lo cierto es que hay muchísimos tipos de bases de datos. Entonces, ¿cuál debo dominar? Hay dos tipos que son las más utilizadas en el mundo y desde 4Geeks te recomendamos que te enfoques en ellas si tu objetivo es desarrollar tus habilidades en el desarrollo web: Las bases de datos relacionales, que usan el lenguaje SQL para trabajar con ellas, y las no relacionales, conocidas como bases de datos “NoSQL”.

Bases de datos relacionales

Organizan la información en pequeños trozos (tablas) que se relacionan entre sí a través de identificadores. Sus principales propiedades son: atomicidad, consistencia, aislamiento y durabilidad. Los motores de bases de datos más utilizados son MySQL y PostgreSQL.

Bases de datos no relacionales

Una vez escuché a un alumno de la academia que decía, “si sabes programación orientada objetos puedes trabajar con bases de datos no relacionales, lo vas a pillar muy rápido”. Se lo decía a una persona que tenía una entrevista y le pedían trabajar con este tipo de bases de datos. Lo cierto es que es justamente así. Las bases de datos no relacionales no se almacenan en tablas, sino en estructuras de datos BSON, similares a los JSON, que consiste en una lista de elementos (objetos). La principal ventaja de este tipo de bases de datos es la flexibilidad, escalabilidad y rendimiento.

Por último, pero no menos importante, toda persona que quiera ser full-stack developer tiene saber utilizar Git, GitHub (o cualquier otro servicio de repositorios de código en la nube) y la terminal.

Git es un sistema de control de versiones, con el que podrás administrar todos aquellos cambios que realices en tus aplicaciones, códigos, software, documentación, etc. Gracias a Git los equipos de programación pueden trabajar en equipo, y para ello utilizan GitHub, un portal en el que puedes alojar todos tus desarrollos, si controlas las versiones usando Git. Por supuesto, para poder utilizar Git y otras tecnologías, es necesario que sepas utilizar la línea de comandos (o terminal, o consola) que, además, te permite ejecutar acciones dentro del servidor, como instalar paquetes, configurar el entorno, o gestionar estructuras de archivos y directorios, entre otras.

Seguramente estés pensando.. ¿acaso una persona que quiere dedicarse a la programación full-stack, solo debe tener habilidades técnicas? La respuesta es clara y rotundamente negativa. Las competencias técnicas son importantes, sí, pero para ser un gran programador full-stack, es importantísimo que tengas otras habilidades. Las llamadas habilidades blandas o soft skills.

Curiosidad: qué importante es para un programador la curiosidad, la tecnología avanza muy rápido y si no somos personas curiosas nos quedaremos atrás. Además, la curiosidad nos hace indagar mucho más, buscar otras alternativas para resolver el mismo inconveniente. Si quieres las habilidades que te convierten en un gran full-stack, definitivamente la curiosidad tiene que ser parte de ti.

Aprendizaje autodidacta: muchas veces te encontrarás con proyectos que demanden conocimientos que aún no has desarrollado, o te toque trabajar con tecnologías que hasta ese momento eran desconocidas para ti, y también tendrás que leer documentación oficial. Lo cierto es que, para lidiar con estos “gajes del oficio”, debes ser una persona autodidacta, debes ser capaz de entender y aprender por ti mismo nuevas tecnologías, sistemas, modelos, etc. Pero no te preocupes, esta habilidad se desarrolla con la práctica, no digo que será “pan comido” en el futuro pero cada vez se te hará más fácil aprender cosas por tu cuenta.

Trabajo en equipo: y no solo para trabajar con Git, sino también porque los proyectos ágiles, metodología con la que trabaja en el sector tecnológico, suelen ser bastante colaborativos, todos hacemos diferentes tareas dentro de un determinado proyecto, nos comunicamos, nos ayudamos y tratamos de resolver entre todos cualquier inconveniente técnico que se nos pueda presentar. Además, la comunidad geeks es muy unida y se realizan muchos eventos colaborativos.

Paciencia: como dicen, “la madre de todas las ciencias”, la paciencia es muy importante para un programador o programadora, bien sea full-stack, o que se enfoque solamente en front o solamente en back. Cualquier persona que programa debe tener paciencia. Muchas veces se tienen que dedicar horas revisando cada línea de código para detectar dónde está el error.

Comunicación: qué importante, no solo para los developers, sino para todo el mundo, saber comunicarse. Escuchar activamente al cliente o a líder de equipo para luego poder plasmar los requisitos en el código, o transmitirlos tú correctamente, compartir con los compis los avances, retos y barreras en cada reunión del scrum, etc. la comunicación sin duda es una soft skill imprescindible que deberás desarrollar.

Pero lo más importante de absolutamente todo siempre será tu actitud, con ella lograrás superar cualquier obstáculo, asumir cualquier reto que se te presente y aprender todos y cada uno de los lenguajes que te plantees. La actitud es muy importante para ser full-stack porque gracias a ella podrás resolver cientos de problemas sin que te afecten sobremanera.

¿Tú qué opinas acerca de las habilidades técnicas que considero debe tener todo desarrollador o desarrolladora full-stack? ¿Recomendarías algún otro lenguaje en el back o en el front? ¿Qué otras habilidades suaves, o soft skills, consideras necesarias u obligatorias?

No olvides dejar tus comentarios, ya que como decía antes, cada quien tendrá su opinión y mientras más opciones conozcamos, más cerca estaremos de describir las habilidades de un desarrollador full-stack.