
À l'époque où je commençais tout juste à apprendre à coder, je faisais confiance aux anciennes sages avec leur mantra «Les langages de programmation n'ont pas d'importance». Je suis devenu obsédé par l'idée de devenir un jour un développeur capable de faire n'importe quoi. Ce gars qui transfère son expérience d'une technologie à une autre et transcende la minutie. Mais cette idée a lamentablement échoué.
L'obsession de tout savoir
J'ai appris C # et .NET dans différents domaines d'application (asp.net, wpf, xamarin), js / ts (react / redux, node) et je me suis convaincu que j'avais le pouvoir de faire tout ce que je voulais. Ma pensée était abstraite, j'étais efficace dans plusieurs paradigmes de programmation en même temps et j'avais des compétences pratiques dans tous les aspects du génie logiciel professionnel. J'étais prêt à ridiculiser ces personnes âgées d'une quarantaine d'années avec leur dépendance à une seule technologie, qui avaient passé la moitié de leur vie à comprendre ce que je pouvais comprendre en une semaine. J'étais sur le point de déclarer que pénétrer profondément dans un domaine de connaissance était pour les crétins qui étaient heureux d'avoir le même travail pour le reste de leur vie, alors que j'étais abstrait de tout cela.
Je pensais que tout était exactement la même chose, alors j'ai vu un schéma cohérent. Maintenant, lorsque mon travail consistait à coder dans un Python ridicule, je répondais: `` Donnez-moi un peu de temps pour lire rapidement la spécification, et je serai prêt à travailler avec cette merde à un niveau supérieur. Pourquoi, quelles complications pourraient probablement être là du genre que je n'ai jamais vu auparavant? Et donc je suis devenu la proie du culte de la négligence des détails. Laissez les juniors jouer avec les détails, car ils sont incompétents avec l'abstraction.
Une fois, j'ai lancé un design basé sur des classes abstraites dans TypeScript, et j'ai été ridiculisé parce que personne ne le fait apparemment de cette façon dans TypeScript. J'ai certainement prétendu que mes collègues étaient des idiots désespérés. Avant, cela m'a aidé, mais cette fois-ci, cela m'a laissé un mauvais arrière-goût.
Votre réputation de bon développeur peut masquer vos lacunes dans les connaissances de vos collègues et de vous-même. Vous ignorez donc un nombre énorme de détails critiques, mais bien sûr vous ne pouvez pas les voir, exactement parce que vous ne les connaissez pas.
C'est alors que ma mauvaise séquence a commencé. Pouf! Je n'avais aucune idée des types d'index en SQL. Bam! J'ai oublié quand je devrais appeler un constructeur statique en C #. Oups! Je ne pouvais pas implémenter IDisposable correctement sans le rechercher sur Google. Oh, et j'essayais de muter l'état d'un composant réactif.
J'ai alors soupçonné que mon abstraction ne fonctionnait pas vraiment. Que les types de technologie avec lesquels je faisais face étaient différents après tout et que les détails importaient. Chaque écosystème technique a ses propres meilleures pratiques uniques. Votre expérience .NET ne fera pas de mal lorsque vous travaillez avec jvm, mais elle ne peut pas le remplacer. Mon habileté auto-évaluée à «avoir appris à apprendre» s'est avérée être un jeu d'imagination. Ma vitesse d'apprentissage n'était pas plus rapide que celle des autres. Cette prise de conscience est arrivée bien trop tard.
Ma compétence n'était qu'un sac d'idées contradictoires - j'étais déchiré avec des morceaux de connaissances d'ici et là. Je ne suis pas devenu automatiquement Jack-of-all-trades senior. Au lieu de cela, je suis devenu un développeur de niveau intermédiaire polyvalent, une risée pour les personnes âgées d'une quarantaine d'années qui maîtrisaient une technologie. Ainsi, j'ai réalisé que le choix du chemin de la pile complète était une erreur.
Me battre à ce sujet
Le problème est que les entreprises ont besoin de développeurs full-stack. Non, pas les imitations comme moi, mais les seniors polyvalents, les gars qui ont cinq ans d'expérience dans chacune des technologies full stack sous leur ceinture.
Cependant, ces licornes n'existent pas, alors les entreprises se trompent. Ils prennent un ingénieur de niveau intermédiaire médiocre qui se spécialise dans trois technologies de grande envergure et l'appellent un développeur senior full-stack. Ce titre de poste fait de l'ingénieur un imposteur et sert de source inépuisable d'un complexe d'infériorité. Tout développeur ordinaire qui se concentre sur une seule technologie le sait mieux. Maintenant, je peux admettre ne pas être prêt à collaborer sur un pied d'égalité avec des gens qui sont bien meilleurs que moi dans quelque chose. Sinon, il faudra une semaine avant de me battre à mort.
L'auto-récrimination est une énorme maladie dans notre industrie, mais nous la guérissons avec le mauvais remède. Nous échangeons des proclamations sur la façon dont nous sommes des super-héros entourés de connards. Nous nions une dévaluation senior, nous continuons à dire que nous nous sous-estimons, nous avons juste besoin de jeter notre humilité et de croire en notre déesse interne du développement logiciel. Nous pensons que nous devons mettre le chapeau d'arrogance et donner le doigt à quiconque a trop peu confiance en nous.
Eh bien, nous devons simplement reconnaître que le développement est difficile non seulement pour les étrangers, mais aussi pour nous. Ne pas savoir quelque chose à un moment donné est OK. Si vous avez un écart, cela ne signifie pas que vous valez moins et que vous devez être expulsé de la communauté.
Mais quelque part au niveau le plus profond de l'autoréflexion, nous nous battons toujours. Les développeurs full-stack se maudissent de ne pas avoir une connaissance approfondie de la technologie. Les experts monodisciplinaires déplorent de ne pas avoir un large éventail de compétences.
Apprendre en profondeur vs apprendre en profondeur
Ici, nous avons le même vieux dilemme: vous pouvez soit apprendre en profondeur ou en profondeur, mais pas les deux en même temps. J'ai remarqué un effet secondaire intéressant: lorsque vous commencez à apprendre une nouvelle technologie, l'ancienne semble moins intéressante. Mais dans le monde informatique, si vous ne rafraîchissez pas vos connaissances technologiques dans un délai d'un an, cela vous rend obsolète.
Si vous voulez continuer à être un développeur full-stack, vous devrez vous obliger à lire les notes de publication de certains TypeScript, en testant tout cela pendant que vous lisez, même si vous n'en avez pas envie. Pourtant, vous serez à des kilomètres d'un développeur qui code tous les jours spécifiquement en TypeScript.
Le problème majeur de ce conflit est que nous n'avons aucune idée de ce qui est le mieux. Nous, et en particulier les entreprises, voulons que ce soit dans les deux sens. Pour que tout le monde ait les bonnes compétences en profondeur.
Je ne sais pas ce qui est le mieux, mais je sais ce que ça fait du point de vue d'un développeur full-stack. Vous passerez beaucoup plus de temps à apprendre que les développeurs unilingues. Cela continuera aussi longtemps que durera votre carrière, et vous manquerez toujours de leur niveau de compétence.
Vous serez les bienvenus partout, mais nulle part vraiment chez vous. Malgré vos énormes efforts, tous les gourous de la prochaine grande affaire mousseront à la bouche en affirmant que vous ne valez pas la peine d'être appelé senior.
Vous serez coincé au niveau intermédiaire pour toujours.
Pour ma part, j'ai décidé de rester sur mon chemin. Je pourrais essayer d'apprendre quelque chose de vraiment approfondi, je pourrais me recycler en gestion (le domaine où la connaissance superficielle est une norme de l'industrie), mais je préfère rester comme je suis et endurerai la souffrance jusqu'à ce que j'apprenne vraiment tout sur quoi que ce soit.