Que peut faire un développeur de logiciels senior techniquement compétent pour continuer à s'améliorer [fermé]

15

Supposons que vous programmez depuis plus de 10 ans. Vous connaissez de nombreuses langues, dont quelques-unes au niveau très détaillé. Vous avez conçu l'architecture des solutions, travaillé et livré des projets plus importants. Vous avez étudié les modèles, les meilleures pratiques, les directives de codage efficaces, les tests unitaires, le multi-threading, etc.

Et puis vous développez lentement le sentiment que la plupart des livres que vous lisez donnent de moins en moins d'informations utiles pour 100 pages de texte. Ils commencent donc à donner des rendements décroissants. Vous apprenez toujours, mais vous ne vous améliorez plus à pas de géant.

Pourquoi l'apprentissage devient-il moins productif par rapport à ce qu'il était auparavant?

À l'époque, il changeait votre façon de penser, vous enseignait de nouvelles choses et élargissait vos horizons qui amélioraient plus tard votre profession actuelle ou permettaient d'inventer / gérer / construire quelque chose de nouveau. Pourquoi n'est-ce plus le cas?

Codeur
la source
9
Selon la FAQ , les questions sur ce que vous devez faire ensuite (projet, livre, technologie ou langue) sont hors sujet. Je peux comprendre votre point de vue, mais vous ne pouvez probablement pas tout savoir sur le développement de logiciels. Votre problème est que vous vous êtes ennuyé, peut-être tombé dans une ornière intellectuelle. La chose qui vous inspire pour sortir de cette ornière dépend beaucoup de vous , et serait probablement quelque chose de complètement différent pour quelqu'un d'autre. Mais voici la réponse: sortez de votre zone de confort . Découvrez les systèmes embarqués, les mathématiques, les graphiques ou tout ce qui vous intéresse.
Caleb
2
Je ne vois pas cette question limitée quant à ce que le PO devrait faire ensuite. Il s'agit plutôt d'approches générales dont disposent les professionnels pour poursuivre leur étude. Peut-être qu'il pourrait être mieux formulé, mais il ne se lit pas comme "que dois- je faire ensuite" pour moi.
Frank
3
Eh bien, honnêtement, je ne sais pas quelles questions ne sont pas hors sujet ces jours-ci. Il devient en fait difficile de trouver des discussions intéressantes ici récemment. Ok, w / e, verrouillez simplement le sujet ...
Codeur
2
Je pense que la question peut être modifiée pour être rouverte. Pour autant que je sache, le problème présenté: "rendements décroissants ... étude des modèles, des meilleures pratiques, des directives de codage efficaces, tests unitaires, multi-threading ..." est assez sur le sujet pour les programmeurs
gnat
2
Vous aurez une meilleure compréhension d'un sujet lorsque vous essayez de l'enseigner à quelqu'un d'autre.
JeffO

Réponses:

23

Premièrement, malgré la façon dont votre question est formulée, il n'y a pas de fin à toute étude, surtout pas dans notre domaine, où de nouvelles choses surgissent plus rapidement que vous ne pouvez les lire. Cela étant dit, lorsque vous souhaitez vous améliorer, il y a les catégories suivantes que je considérerais. Pour le meilleur bénéfice / ROI, vous devez bien sûr choisir quelque chose dans votre zone la plus faible.

Connaissances fondamentales

Malgré la connaissance des langages de programmation et l'expérience pratique, on a souvent (en particulier l'auto-apprentissage) des domaines où les problèmes fondamentaux de base sont laissés incomplets. Pensez à des choses comme les structures de données, les algorithmes, les stratégies de cache, les fonctions de hachage, ...

Notez que cela inclut également les fondements des langages de programmation - tout, depuis les compilateurs, les techniques d'optimisation et les systèmes de types, jusqu'à la théorie des catégories, les monades, etc.

Si vous êtes bien enseigné, comme si vous avez poursuivi un diplôme de niveau universitaire pendant plusieurs années, vous êtes probablement déjà fort dans cette catégorie (loin d'être terminé bien sûr, mais une base solide). Sinon, essayez de lire quelques livres dans ces domaines pour savoir s'il manque quelque chose que vous ne saviez même pas dans votre répertoire. Cette catégorie est la plus facile à surestimer.

Connaissance paradigmatique

Je suis toujours étonné lorsque des programmeurs se présentent qui pensent qu'ils sont tout-savoir, tout en étant complètement ignorants sur les paradigmes traditionnels. Si vous pensez que l'orientation objet est la fin, c'est votre catégorie à améliorer. Si vous pensez que la programmation fonctionnelle existe aussi et que vous avez peut-être même entendu parler de programmation logique, alors c'est toujours un bon choix. Il existe bien plus de paradigmes et leur apprentissage a pour effet profond de vous donner quelque chose qui ressemble à une nouvelle vision du monde de la programmation.

N'oubliez pas: il y a souvent des arguments (plutôt philosophiques dans leur nature) sur ce qui peut être considéré comme un paradigme ou non. Ne vous laissez pas distraire par ces derniers. Votre objectif devrait être d'élargir votre horizon et cela signifie que vous devez en apprendre davantage sur ces choses, que quelqu'un d'autre considère ou non X comme un paradigme, cela ne fait aucune différence.

Connaissances spécialisées

Le plus simple de tous - et le moins utile en même temps. Bien sûr, vous pouvez vous engager dans une seule technologie et connaître tous ses tenants et aboutissants, mais vous devez être prêt à en payer le prix. Les technologies vieillissent et elles le font à une vitesse toujours croissante, ce qui en fait presque une garantie que le temps investi ici sera sans valeur plusieurs années plus tard.

Le problème du rendement décroissant brille également ici. Par la nature même, être un spécialiste sur quelque chose signifie que vous devez passer d'innombrables heures sur ce sujet étroit, et donc, par définition, cela vous prendra beaucoup de temps pour apprendre quelque chose de nouveau et cette nouvelle chose sera une toute petite pièce de puzzle qui est ne va changer le point de vue de personne sur quoi que ce soit.

Connaissance du domaine

Que ce soit parce que c'est le domaine de votre travail, ou simplement en fonction de votre intérêt personnel, mais être un expert en informatique et un certain domaine est très précieux et gratifiant. Je ne parle pas ici des zones latérales de CS, comme l'infographie ou l'IA. Au lieu de cela, notez que les ordinateurs ont pris racine dans la vie de chacun et que tous les autres domaines sont soumis aux ordinateurs et à un domaine dans lequel vous pouvez entrer.

Celui-ci tombe clairement dans la catégorie «hors de votre domaine», mais ce n'est pas un «extérieur» mathématique pointu, mais plutôt un champ d'application. Pensez à la médecine: je ne vous conseille pas de devenir médecin. Cependant, apprendre les fondements de la médecine afin d'appliquer vos connaissances existantes en informatique aux problèmes de ce domaine vaut vraiment la peine. Cela va des techniques de visualisation, à la robotique, aux systèmes experts et à la simple gestion des données pour la comptabilité / l'administration. Bien que vous ayez déjà fait tout cela auparavant, le faire dans un autre domaine peut devenir une toute nouvelle expérience.

Gardez cependant à l'esprit que c'est un changement beaucoup plus radical dans votre direction que les autres catégories. Il se peut que vous n'ayez aucun contact avec ce domaine dans votre travail quotidien, ce qui rend la tâche extrêmement difficile à réaliser. Cela peut même signifier un changement d'emploi. De plus, vous aurez besoin d'une sorte de certification sur votre nouveau domaine - vous êtes un débutant complet dans ce domaine après tout, et vous devez rivaliser avec des diplômés d'études interdisciplinaires, qui ont déjà commencé leur voyage pour devenir des experts dans ce créneau.

Connaissances supplémentaires

Comme l'a ajouté Mike Brown, il y a aussi le domaine de la connaissance qui, d'une certaine manière, accompagne votre travail actuel, mais n'est pas strictement nécessaire. Vous n'avez pas besoin d'être un chef de projet pour en savoir plus sur la gestion de projet, mais comme d'habitude, des connaissances supplémentaires vous donneront un aperçu plus large de la façon dont l'autre côté fonctionne. On pourrait même généraliser cela au point de se concentrer sur les compétences générales. Je suppose que tous ceux qui ont travaillé sur un vrai projet avec d'autres personnes connaissent leur valeur.

Franc
la source
+1, en particulier pour "Connaissance du domaine" - c'est quelque chose qui a fonctionné au moins pour moi.
Doc Brown
1
Je suis d'accord à 100% avec ce que vous dites. Je porte un vif intérêt à des connaissances fondamentales plus approfondies. À l'effet que je suis actuellement inscrit à un cours sur les compilateurs. Ce que vous n'avez pas abordé, c'est ce que je qualifierais de connaissances supplémentaires: conception graphique, gestion de projet, etc.
Michael Brown
+1 pour le paradigme - je faisais de la POO / procédurale depuis environ 10 ans (et je m'en lassais), puis j'ai commencé à apprendre la programmation fonctionnelle et mes yeux étaient ouverts sur un tout nouveau monde.
paul
9

Je pense que le logiciel est en constante évolution et en tant que tel, l'accent est mis sur l'amélioration constante. Je comprends d'où vous venez, je me suis senti quelque peu similaire récemment et je poursuis maintenant un MCSM dans SQL Server.

Apprenez le prochain nouveau langage ou framework, ou ce qui est actuellement "à chaud". Chaque année, une technologie, un cadre ou un langage sort ou atteint une masse critique qui devient un mot à la mode. Je peux en penser quelques-unes au cours des dernières années: node.js, Ruby, jQuery. Cela aura également probablement un impact sur votre façon de penser pour d'autres plates-formes, par exemple, regardez ce que ROR a fait à Java avec Grails.

Il y a toujours moyen de s'améliorer. Je pense qu'il est très peu probable que vous puissiez être un expert sur tout, et je lis beaucoup et j'apprends toujours. Je suis d'accord avec ce que vous dites sur l'apprentissage de moins en moins par 100 pages, mais il faut s'y attendre lorsque vous êtes un expert en la matière.

En termes de ce que vous pouvez faire, voici quelques suggestions:

  1. Tenez-vous au courant des changements dans la communauté et de ce que les gens "entrent". Apprenez les nouvelles piles, au moins pour que vous en ayez assez pour les recommander le cas échéant

  2. Participez à des sites de questions / réponses tels que celui-ci, où vous pouvez transmettre vos connaissances aux autres. Si vous prenez le temps de lire les contributions des autres, vous apprendrez probablement quelque chose et, à tout le moins, vous verrez probablement les perspectives des autres.

  3. Choisissez un passe-temps qui a un rapport avec votre travail. Il y a beaucoup de passe-temps avec le cross over, pensez à l'IA, aux legstorms, au RaspPi, etc.

  4. En plus d'essayer d'augmenter la largeur de vos connaissances, essayez d'augmenter la profondeur. Par exemple, découvrez comment EF fonctionne sous le couvercle, afin de pouvoir diagnostiquer ces cas de coins étranges plutôt que d'utiliser simplement le cadre.

  5. Poursuivez la certification de haut niveau juste pour prouver que vous connaissez votre métier

Personnellement, je vais vous dire ce qui m'ouvre l'esprit en ce moment. Je lis 97 choses que tout architecte logiciel devrait savoir et je ne le pense que partiellement, mais il contient de nombreux conseils avisés. Le livre est libre de lire en ligne sur le lien que j'ai fourni.

En ce qui concerne le passe-temps que j'ai finalement adopté, je me suis lancé dans le diagnostic du véhicule (avec l'ordinateur, évidemment), ce qui m'a permis d'entretenir pleinement ma propre voiture. En fait, j'aime vraiment le temps que je passe à travailler avec mes mains.

Sam
la source
Drôle, je connais l'un des auteurs de 97 Things;)
Michael Brown
C'est un bon livre.
Sam
Je vous en prie. C'est super, non.
Sam
1

Après un certain point, vous en avez suffisamment appris sur un sujet spécifique pour pouvoir acquérir de nouvelles connaissances de manière ponctuelle. Lorsque vous sentez qu'il n'y a pas grand-chose de plus à apprendre sur votre domaine principal, il est temps de commencer à acquérir des connaissances supplémentaires qui complètent vos connaissances primaires.

Pour moi, je plonge dans l'UX et le graphisme car je pense que cela me rendra meilleur en tant que développeur de fournir non seulement des structures élégantes en code mais aussi des interfaces élégantes pour l'utilisateur final.

Les autres sujets que vous pouvez aborder incluent la gestion de projet, l'analyse commerciale, l'administration système et l'amélioration des processus logiciels. Si vous vous retrouvez à travailler dans un domaine spécifique, il pourrait être judicieux d'approfondir ce domaine. Par exemple, j'ai travaillé récemment dans le secteur des services financiers. Je me suis inscrit à des cours sur Coursera autour de la modélisation financière et autres qui m'aideront à parler avec mes clients à leurs conditions.

Il y a toujours plus à apprendre, il suffit de sortir des sentiers battus.

Michael Brown
la source
0

Cette question comporte deux parties: pourquoi est-il plus difficile à apprendre et que pouvez-vous faire?

La première partie est assez simple - les sujets plus avancés sont plus difficiles. Aussi difficile que cela soit d'apprendre à programmer, il est un peu plus difficile d'apprendre à bien concevoir des programmes, et encore plus difficile à apprendre à concevoir de grandes applications. Le fait est que les sujets avancés sont plus difficiles, sinon ils ne seraient pas avancés. Vous devrez passer plus de temps à les apprendre; plus de temps à pratiquer pour les maîtriser.

Quant à ce que vous pouvez faire, vous semblez concentré sur les aspects techniques d'être un ingénieur logiciel senior. Vous pouvez faire beaucoup plus de choses pour aider votre équipe à créer des logiciels que d'apprendre des langages et des frameworks. Compétences générales, telles que le mentorat d'autres développeurs, la négociation des exigences, la gestion de projet, la conception de programmes, la communication de la vision, la mise en œuvre des normes d'équipe ... Toutes ces choses importantes nécessaires pour rendre une équipe de développeurs efficace dans la création de logiciels, pas seulement vous.

Telastyn
la source
-3

Chaque fois que je vais sur le site Lambda The Ultimate , je ne pense pas / ne peux vraiment pas penser que je sais tout dans le domaine de l'informatique.

LtU vous donnera un bon point de départ pour le paradigme et les connaissances théoriques qui restent à apprendre.

"Plus tu en sais, plus tu sais combien tu en sais peu."

Stéphane Rolland
la source
1
comment cela répond-il à la question posée: "Pourquoi l'apprentissage devient-il moins productif par rapport à ce qu'il était avant?"
moucher
Parce que quand j'y vais, il y a des articles avec quelque chose comme 90% de nouvelles choses que je dois apprendre. C'est précisément ce dont se plaint le PO: le rapport des choses apprises par le nombre de lignes lues qui devient trop faible dans son cas. Vous ne connaissez pas non plus ce site?
Stephane Rolland
@gnat, et vous vous trompez la question , qui est intitulée: "Qu'est-ce qu'un développeur de logiciels senior techniquement compétent peut continuer à améliorer"?
Stephane Rolland
avez-vous lu le contenu de la question après le titre?
moucher
@gnat Oui bien sûr, j'ai lu sa question: c'est plutôt une affirmation si OP ne demande que pourquoi : après 10 ans un soi-disant ingénieur logiciel senior lit des livres qui ne changent plus d'horizon car un senior en sait beaucoup. Oui, je l'ai lu. J'ai souri. Je me répète "Plus tu en sais, plus tu sais combien tu en sais peu."
Stephane Rolland