La spécialisation pour les développeurs : bonne ou mauvaise idée ?

Cette semaine j’ai profité du club de lecture software craftsmanship pour discuter d’un sujet sur lequel j’étais partagé : la spécialisation.

En partant d’un article de Jhon Sonmez et suite à un premier tour de table l’opinion était majoritairement en faveur de la spécialisation. 
A une nuance près : à l’excès et sans avoir un minimum d’ouverture on risque de s’enfermer dans son expertise, d’être prisonnier d’une technologie obsolète ou encore d’avoir du mal à communiquer avec les autres et à comprendre les enjeux au delà du code.

La réalité n’étant pas binaire nous avons introduit un modèle qui permet d’exprimer la combinaison de généraliste / spécialiste : T-shaped skills

Source http://www.futurecapable.com/?tag=t-shaped-person

- la longueur de la barre horizontale du T exprime la diversité du spectre des connaissances d’une personne.
- la longueur de la barre verticale indique la profondeur de l’expertise d’une personne sur un sujet.

Les 2 extrêmes du modèle posent problème : 
- Une expertise très profonde et peu de connaissances générales ->très peu de souplesse et capacité d’adaptation.
- Une grande variété de sujets vaguement connus mais aucune zone d’expertise -> faible production de valeur

Un accord commun se dégage rapidement sur la situation idéale : avoir un large spectre de connaissance et quelques zones d’expertises profondes.

Quels sont les avantages ?

Le fait de creuser un sujet jusqu’a la moelle permet au bout d’un moment de décortiquer les fondamentaux qui se cachent au coeur d’une technologie. Par exemple: quels sont les patterns qui composent votre framework favori, sauriez vous en reproduire facilement une version simplifiée ?
Si vous arrivez à extraire la quintessence d’une technologie, vous pourrez plus facilement la transposer quand vous devrez apprendre le nouveau framework à la mode (qui au passage ne fait que remettre au gout du jour des concepts vieux de 20 ans).

En plus une fois que vous avez fait le chemin d’approfondir un sujet vous aurez acquis la méthodologie pour le refaire dans un autre domaine.

Ce sera également plus facile de trouver un travail :

Une des bases du fonctionnement du cerveau est la classification, si la personne en face de vous peut vous ranger dans une case (ex: optimisation de moteur de recherche, expert bluetooth android, …), la prochaine fois qu’elle entend parler de ce type de besoin elle se souviendra de vous.

Imaginez la scénario suivant: vous êtes inculpé pour meurtre et vous devez choisir un avocat, est ce que vous allez appeler celui qui est spécialisé en droit des affaires, en droit conjugal et en droit pénal ? ou bien celui qui est spécialisé uniquement dans la défense des accusés de meurtre ?

“Mieux vaut être le gros poisson dans le petit bocal que le petit poisson dans le grand bocal”

Un autre avantage est la créativité : la combinaison de connaissances profondes dans des domaines variés permet d’imaginer de nouvelles solutions (ou de nouveaux produits) impossibles à imaginer par des personnes qui n’auraient qu’une connaissance superficielle de ces domaines.

Et vous qu’en pensez vous ? généraliste ou spécialiste ? :)