J'ai eu le même problème (probable) il y a plusieurs années, cela a duré quelques années et je l'ai surmonté. Vous voudrez peut-être alors savoir comment j’ai atteint cet objectif, même si je ne suis pas sûr que ma façon de procéder s’appliquera également à vous.
Vous devriez également jeter un coup d'oeil ici: Les sept étapes de l'expertise en génie logiciel Cela montre que la productivité est en grande partie un effet secondaire du niveau de compétence. Il se peut que vous soyez encore à un moment donné entre les étapes 3 et 4 de la technologie que vous utilisez actuellement (la maîtrise des compétences dépend de la technologie, vous pouvez maîtriser certaines technologies tout en en apprenant d'autres).
Maintenant, je commence par un témoignage biographique.
Un peu de contexte. J'ai 47 ans. J'ai commencé à programmer à 12 ans dans les années 80. Au lycée, j'ai également travaillé comme programmeur professionnel de jeux vidéo à temps partiel. En gros, cela ne m'a pas rapporté beaucoup d'argent, juste assez pour acheter du matériel, mais je l'ai apprécié et j'ai beaucoup appris. À 18 ans, j'ai commencé un apprentissage formel en informatique.
En conséquence, à 20 ans, chaque fois que je commençais une tâche de programmation, je connaissais de nombreuses façons de résoudre les problèmes posés et j'étais très conscient des nombreux paramètres et pièges à résoudre, ainsi que des inconvénients et des limites de toute méthode.
À certains moments (par exemple environ 26 ans), il est devenu très difficile pour moi d'écrire un programme. Il y avait tellement de possibilités ouvertes que je ne pouvais plus choisir entre elles. Pendant quelques années (make it 6), j'ai même arrêté la programmation et je suis devenu rédacteur technique.
Je n'ai jamais totalement arrêté d'essayer de programmer quand même. Et à un moment donné, il est revenu. La clé pour moi était la programmation extrême, plus particulièrement le principe de simplicité: «écrivez la chose la plus simple qui pourrait fonctionner».
En gros, je me suis forcé de ne pas me soucier de l’efficacité du code (c’était mon principal obstacle, éviter les conceptions inefficaces), mais j’allais de la manière la plus simple. Je me suis aussi obligé de ne pas me soucier des erreurs et de reporter le traitement des erreurs à une date ultérieure, après avoir écrit des tests qui génèrent l'erreur (en réalité, il s'agit de TDD).
C'est quelque chose que j'ai appris en écrivant. Quand je ne sais pas quoi écrire, ou je savais que ce que j'écrivais était mauvais . Continue. En fait, écrivez les mauvaises choses. Je vais éventuellement le corriger plus tard. Ou si c'est vraiment si mauvais, effacez-le et réécrivez-le, mais il est plus rapide d'écrire des choses deux fois qui écrivent quelque chose de parfait la première fois.
En réalité, il est très probable qu'un code que vous croyez bon en première écriture nécessitera autant d'amélioration qu'un très mauvais code.
Si vous suivez le chemin de la simplicité, vous obtenez également un bonus supplémentaire. Vous acceptez facilement de supprimer / modifier la conception / le codage initial. Vous obtenez un esprit plus flexible.
J'ai également pris l'habitude de mettre un commentaire temporaire dans le code, expliquant ce que je ne faisais pas maintenant et que je voulais faire plus tard, lorsque le code serait fonctionnel dans le cas d'utilisation normale.
J'ai également assisté à un kata de code pratiqué par un dojo XP et pratiqué avec d'autres programmeurs pour internaliser les pratiques XP. Ça m'a aidé. Cela a rendu les méthodes formelles ci-dessus instinctives. La programmation en binôme a également aidé. Travailler avec de jeunes programmeurs donne un certain élan, mais avec l'expérience, vous voyez aussi ce qu'ils ne voient pas. Par exemple, dans mon cas, je les vois souvent s'engager dans des conceptions trop compliquées et je connais le cauchemar en matière de conception auquel elles peuvent donner lieu. Allé de cette façon. Fait ça. Eu des problèmes.
Le point primordial pour moi est de garder le cap. Être rapide, c'est vraiment réussir à garder le flux.
Maintenant, je suis de retour en tant que programmeur professionnel et je crois que je suis à la fois meilleur et plus rapide avec une compréhension plus profonde de ce que je fais. En pratiquant le TDD, je suis peut-être encore un peu plus lent que lorsque j'étais un jeune taureau (et je n’ai rien testé), mais je n’ai également pas de refactoring sur la peur et je passe certainement beaucoup moins de temps à déboguer (presque pas de temps, moins de 10% du temps) ).
En résumé: j'ai surmonté mon codeblock en utilisant des méthodes agiles (XP), en optant pour la simplicité, puis en le refacturant, et en pratiquant pour rendre cela instinctif. Cela a fonctionné pour moi. Pas sûr que cela puisse être généralisé à quelqu'un d'autre.
En ce qui concerne le niveau d’acquisition des compétences, j’ai surtout appris à accepter que chaque fois que je changerais de technologie (apprendre un nouveau langage, un nouveau cadre, etc.), je passerais par une étape de ralentissement. Ceci est normal et finira par surmonter cela. Je peux aussi compenser cela avec une bonne méthodologie et des compétences en programmation à usage général et ce ne sera pas un problème.