Ich hatte vor vielen Jahren (wahrscheinlich) das gleiche Problem, es dauerte ein paar Jahre und ich habe es überwunden. Vielleicht wäre es für Sie interessant zu wissen, wie ich das geschafft habe, auch wenn ich nicht sicher bin, ob mein Weg auch für Sie gilt.
Hier sollten Sie auch einen Blick werfen: Die sieben Stufen der Erfahrung im Software Engineering Es zeigt, dass Produktivität zu einem großen Teil ein Nebeneffekt des Kenntnisstands ist. Es kann sein, dass Sie sich zwischen Stufe 3 und Stufe 4 der Technologie befinden, die Sie derzeit verwenden (die Fähigkeit hängt von der Technologie ab, Sie können einige Technologien beherrschen, während Sie andere noch erlernen).
Jetzt beginne ich mit einem biografischen Zeugnis.
Ein bisschen Kontext. Ich bin 47 Jahre alt. Ich habe mit 12 in den 80ern angefangen zu programmieren. Während meiner Schulzeit arbeitete ich auch als Teilzeit-Spielprofi. Im Grunde hat es mir nicht so viel Geld gebracht, gerade genug, um Hardware zu kaufen, aber ich habe es genossen und viel gelernt. Mit 18 Jahren begann ich ein formales Informatikstudium.
Als ich 20 Jahre alt war, kannte ich beim Starten einer Programmieraufgabe viele Möglichkeiten, um die gegebenen Probleme zu lösen, und war mir der vielen Parameter und Fallen sowie der Nachteile und Grenzen jeder Methode sehr bewusst.
An manchen Stellen (etwa im Alter von 26 Jahren) wurde es für mich wirklich schwierig, überhaupt ein Programm zu schreiben. Es eröffneten sich so viele Möglichkeiten, dass ich nicht mehr zwischen ihnen wählen konnte. Für ein paar Jahre (mache es 6) habe ich sogar aufgehört zu programmieren und bin technischer Nachrichtenschreiber geworden.
Trotzdem habe ich nie aufgehört zu programmieren. Und irgendwann kam es zurück. Der Schlüssel für mich war extreme Programmierung, genauer gesagt das Prinzip der Einfachheit: "Schreiben Sie die einfachste Sache, die möglicherweise funktionieren könnte".
Grundsätzlich habe ich mich gezwungen, mich nicht um Code-Effizienz zu kümmern (das war mein Hauptproblem, um ineffiziente Designs zu vermeiden), sondern einfach den einfachsten Weg zu gehen. Ich habe mich auch gezwungen, mich weniger um Fehler zu kümmern und die Fehlerbehandlung auf einen späteren Zeitpunkt zu verschieben, nachdem ich Tests geschrieben habe, die den Fehler auslösen (das ist eigentlich TDD).
Das habe ich beim Schreiben gelernt. Wenn ich nicht weiß, was ich schreiben soll oder was ich schreibe, ist das schlecht . Mach einfach weiter. Schreibe eigentlich die schlechten Sachen. Ich werde es später korrigieren. Oder wenn es wirklich so schlimm ist, löschen Sie es und schreiben Sie es neu, aber es ist schneller, Dinge zweimal zu schreiben, die beim ersten Mal alles Perfekte schreiben.
Es ist sehr wahrscheinlich, dass ein Code, von dem Sie glauben, dass er auf den ersten Blick gut ist, genauso verbessert werden muss wie ein wirklich schlechter.
Wenn Sie dem Einfachheitspfad folgen, erhalten Sie zusätzlich einen Bonus. Sie akzeptieren es einfach, das ursprüngliche Design / die Codierung zu entfernen / zu ändern. Sie erhalten einen flexibleren Verstand.
Ich hatte auch die Angewohnheit, einen temporären Kommentar in den Code einzufügen und zu erklären, was ich jetzt nicht tue und später tun möchte, wenn der Code im normalen Anwendungsfall funktionsfähig wäre.
Ich habe auch an einem XP Dojo teilgenommen und mich mit anderen Programmierern über geübte Code Katas ausgetauscht, um die XP-Praktiken zu verinnerlichen. Es half. Es hat die obigen formalen Methoden instinktiv gemacht. Pair-Programmierung hat auch geholfen. Die Arbeit mit jungen Programmierern gibt etwas Schwung, aber mit der Erfahrung sieht man auch, was sie nicht tun. In meinem Fall sehe ich zum Beispiel oft, dass sie sich mit übermäßig komplizierten Designs beschäftigen, und ich kenne den Design-Albtraum, der dazu führen kann. Auf diese Weise gegangen. Tat dies. Hatte Probleme.
Der wichtigste Punkt für mich ist, den Fluss zu halten. Schnell zu sein gelingt es wirklich, den Fluss zu halten.
Jetzt bin ich zurück als professioneller Programmierer und ich glaube, ich bin besser und schneller mit einem tieferen Verständnis dessen, was ich tue. Übe ich TDD? Ich bin vielleicht noch etwas langsamer als in jungen Jahren (und habe nichts getestet), aber ich habe auch keine Angst vor dem Refactoring und verbringe viel weniger Zeit mit dem Debuggen (fast keine Zeit, mache es weniger als 10% der Zeit) ).
Fazit: Ich habe meinen Codeblock mit agilen Methoden (XP) überwunden, mich der Einfachheit und dann dem Refactoring verschrieben und mich darauf geübt, diesen instinktiv zu machen. Es hat bei mir funktioniert. Ich bin nicht sicher, ob es auf andere verallgemeinert werden kann.
In Bezug auf das Niveau des Erwerbs von Fähigkeiten habe ich meistens gelernt zu akzeptieren, dass ich jedes Mal, wenn ich die Technologie ändere (neue Sprache, neue Rahmenbedingungen usw.), eine Phase durchlaufen werde, in der ich langsamer werde. Das ist normal und wird das irgendwann überwinden. Ich kann das auch mit guter Methodik und allgemeinen Programmierkenntnissen ausgleichen und es wird kein so großes Problem sein.