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.