No, no he trabajado con AngularJS. ¿Y?

Aunque también realizo proyectos en usabilidad y UX, hace casi 4 años que trabajo como desarrollador freelance para una empresa multinacional. En un principio se trataba de un puesto de front-end, pero con el tiempo uno acaba por “tocarlo” todo; así hasta que en la actualidad me encargo del desarrollo de todos los aspectos de una aplicación, desde la base de datos hasta la interfaz web (full-stack que dicen ahora).

Durante todo este tiempo he utilizado, como no podía ser de otro modo, diferentes tecnologías: aparte de lo básico (HTML, CSS, JavaScript), he usado ( y uso) a diario herramientas y lenguajes como Sass, Grunt, ASP.NET MVC (con C#), Git, TFS, o SQL Server.

Y… ¿sabéis qué? Antes de este trabajo…

  • … no conocía Sass (pero había trabajado durante mucho tiempo con CSS y conocía sus características y limitaciones; y, por supuesto, sabía qué era un compilador).
  • … no había usado Grunt (aunque sí JavaScript, y ya había utilizado otros sistemas de scripting).
  • … tenía poca experiencia usando ASP.NET y C# (pero ya hace bastante tiempo que sé lo que es un lenguaje orientado a objetos y tengo claro lo que es un modelo MVC Model-View-Controller).
  • … no había trabajado con Git o TFS (pero sabía lo que era un sistema de control de versiones y cómo funcionan).
  • … nunca he tenido un perfil específico de especialista en base de datos (pero sé escribir sentencias SQL, stored procedures, definir e implementar modelos de datos; ya sea en MySQL o en SQL Server).

Seguro que a muchos os resulta familiar esa situación: como desarrollador no conoces una herramienta concreta, pero no te asusta enfrentarte a ella porque sabes que, como dice @joanmiespada, vas a aprender a utilizarla en poco tiempo.

Por eso sé que muchos sonreís como yo al leer ofertas de trabajo para las que resultan imprescindibles conocimientos en una versión determinada de un lenguaje concreto, o tener amplia experiencia en el último framework de moda. Muy en la línea de lo que cuenta Adrian Kosmaczewski en su “Ser Programador Después De Los 40", uno tiene la sensación de que hay muy pocas cosas realmente nuevas, que las modas duran poco, y que las ideas realmente importantes tiene ya muchos años: y se trata, básicamente, de hacer las cosas bien. Las tecnologías cambian, vienen y van, se ponen de moda y se pierden en el olvido. Pero los fundamentos y las buenas prácticas son, casi siempre, los mismos: no duplicar código, separar presentación y comportamiento, automatizar tareas, … Y esas cosas no son específicas de ninguna librería concreta.

No hace mucho, en una entrevista telefónica me descartaron para un puesto de trabajo porque no había trabajado con AngularJS; mientras me despedía de la recruiter (que no tenía conocimientos técnicos pero sí una lista de requisitos muy detallados que alguien le había facilitado), en mi cabeza pensaba “bien, me acabas de descartar por no haber trabajado con una tecnología que podría aprender en un par de semanas, sin saber realmente si soy un buen profesional o no”.

Sí, sé que es mucho más fácil evaluar si un profesional tiene unos conocimientos concretos que averiguar si realmente es un buen desarrollador o no. Y también sé que nuestro mercado laboral en España (al menos el que conozco) tiene otros problemas serios. Pero diría que va siendo hora de que los reconozcamos, los hagamos públicos y, al menos, intentemos navegar un poco en otra dirección.

Como responsables de contratar a un programador, ¿elegiríais antes a alguien que tiene experiencia en vuestra plataforma y lenguaje concretos, pero cuyo concepto de reutilizar código es copiar y pegar un archivo fuente? ¿O a alguien que no ha trabajado en la versión concreta de vuestras herramientas, pero que sabéis que desarrolla siguiendo estándares y creando código mantenible? ¿No deberíamos tener ya todos claro que lo importante a la hora de contratar a alguien es su actitud (básicamente, que sea buen profesional), porque las habilidades concretas se aprenden? Y, sinceramente, no se me ocurre otro entorno donde eso sea tan cierto como en el desarrollo de software.