Dans nos métiers de développeurs, il faut apprendre pour survivre. Si on ne se forme pas sur les nouvelles technologies et outils, on peut se retrouver perdu si on change de contexte (projet, mission, …), voire humilié par un petit jeune tout frais sorti de l’école.

En suivant nombre de blogs et de comptes twitter de technophiles, la tentation et grande d’apprendre à utiliser les technologies qui buzzent le plus, ou qui ont l’air le plus attirantes.

Cependant le temps et l’énergie étant des ressources limitées, on ne peut juste prendre une liste de tout ce qui à l’air intéressant, sans autre discrimination. Il faut donc faire des choix stratégiques dans la veille technologique.

Le buzz

Suivre l’actualité permet d’avoir une idée de ce dont la technosphère parle et d’apprendre l’existence de sujets d’étude potentiels.

Mais le buzz n’est pas forcement un bon indicateur. Il y a des exemples de technologies ou de méthodes qui ont beaucoup fait parler d’elles et sont aujourd’hui un peu moins en tête d’affiche. Prenez par exemple les DSLs dont on parlait beaucoup il y a quelques années, ou encore Scala, qui a disparu du tableau de l’index de Tiobe de popularité des langages.

Sans être un critère suffisant, le buzz est cependant bon signe : une innovation sans intérêt ou sans appui (par une grosse boite type Apple ou Red Hat) a peu de chance de faire parler d’elle.

Intérêt et valeurs

Une technologie peut avoir un intérêt professionnel, c’est à dire que la connaître est un plus indéniable pour la recherche d’un travail ou d’une mission. Dans le monde Java c’est le cas par exemple de Maven et de ses satellites (Nexus, …) : pas passionnant en soi mais quasiment standard de fait dans le monde des applications d’entreprise.

Par contre je ne trouve pas judicieux d’apprendre un truc vraiment ennuyeux parce qu’il y a de la demande. Je ne vois pas apprendre Cobol ou Visual Basic par moi même. Je pourrais le faire si je me trouve dans un contexte, par exemple en mission, où c’est nécessaire pour l’avancée de mon projet.

Une technologie peut également avoir un intérêt intellectuel : peu ou pas encore vraiment répandu en entreprise, mais indéniablement enrichissant pour l’esprit du programmeur et permettant donc de progresser, de manière horizontale. C’est le cas par exemple des langages alternatifs, comme Scala, avec pas mal de concepts peu connus et peu utilisés dans le monde Java. La programmation parait réellement différente quand on a lu Programming In Scala.

En revanche, il y a des sujets qui, même s’ils sont intéressant a priori n’apportent pas grand chose à un développeur Java EE. Pas vraiment la peine par exemple de devenir un maître en réseaux de neurones ou en système d’information géographique (ce n’est pas non plus condamnable hein, c’est juste que c’est comme apprendre l’histoire de France ou la couture : de la culture).

Il est également important de ne pas aller contre ses valeurs. Si on est convaincu par les standards ouverts du web, on ne va pas apprendre flash ou silverlight. Si on est un libriste fanatique, on ne paiera pas pour apprendre une technologie propriétaire (encore une fois, de soi même et en dehors d’un contexte de mission).

Doser l’effort

Comme le temps et l’énergie que l’on peut dédier à la veille ne sont pas infinis, il vaut mieux doser son effort, et faire son choix sur un rapport du coût d’apprentissage et de l’opportunité de connaître le sujet.

Pas mal de technologies ont un aspect sexy vu de l’extérieur mais sont en vérité peu utiles en pratique. C’est le cas (à mon avis) de Drools : ça a l’air de faire le café mieux que Georges Clooney, mais en fait en pratique c’est lourd à apprendre, à utiliser et à exécuter. L’apport est discutable par rapport à du code écrit en  Java traditionnel, sans l’aide de l’API.

De même les certifications, type SCJP, réclament un effort important pour un résultat piètre : un badge comme quoi vous connaissez Java. Waouh. Et mes années de Fac, de stage et d’entreprise ne m’apporte pas la même garantie ?

Les technologies simples et apportant beaucoup semblent donc être une cible de choix. Le meilleur exemple étant JUnit, dont on peut apprendre l’essentiel en une heure et qui permet de révolutionner la façon de développer et d’améliorer grandement la qualité d’un projet.

Pour autant il existe des outils dont l’apprentissage n’est pas forcement trivial et qui apportent vraiment beaucoup à un environnement ou à un projet. On pense à Java EE, Spring ou Hibernate, mais pour moi le meilleur exemple est Git. Les commandes stash et cherry-pick révolutionnent vraiment le quotidien.

Utilité de certains technologies par rapport à leur difficulté d'apprentissage (sans échelle)

Finalement le mieux est peut-être de tenter de se forger une vision globale de l’état de la technique, sans trop se laisser influencer par son projet actuel, voire son monde actuel (Java EE vs .Net, vs PHP, vs RoR) avec un esprit critique, modéré par ses valeurs et ses centres d’intérêt.