Miałem (prawdopodobnie) ten sam problem wiele lat temu, trwał kilka lat i go pokonałem. Być może zainteresuje Cię to, jak to osiągnąłem, nawet jeśli nie jestem pewien, czy moja droga będzie dotyczyła Ciebie.
Powinieneś także rzucić okiem: Siedem etapów wiedzy specjalistycznej w zakresie inżynierii oprogramowania Pokazuje, że produktywność jest w dużej mierze efektem ubocznym poziomu umiejętności. Możliwe, że nadal znajdujesz się w pewnym momencie pomiędzy etapem 3 a etapem 4 w technologii, której obecnie używasz (biegłość w umiejętnościach zależy od technologii, możesz opanować niektóre technologie, jednocześnie ucząc się innych).
Teraz zaczynam od świadectwa biograficznego.
Trochę kontekstu. Mam 47 lat. Zacząłem programować w wieku 12 lat 80-tych. Podczas liceum pracowałem również jako profesjonalny programista gier w niepełnym wymiarze godzin. Zasadniczo nie dostałem tyle pieniędzy, tylko tyle, żeby kupić sprzęt, ale podobało mi się to i wiele się nauczyłem. W wieku 18 lat rozpocząłem formalną naukę informatyki.
W rezultacie, kiedy skończyłem 20 lat, za każdym razem, gdy zaczynałem jakieś zadanie programistyczne, znałem wiele sposobów rozwiązania zadanych problemów i byłem bardzo świadomy wielu parametrów i pułapek pod ręką, a także wad i ograniczeń dowolnej metody.
W pewnym momencie (powiedzmy, że ma około 26 lat) napisanie jakiegokolwiek programu stało się dla mnie naprawdę trudne. Było tak wiele możliwości, że nie mogłem już wybierać między nimi. Przez kilka lat (zrób to 6) przestałem nawet programować i stałem się pisarzem wiadomości technicznych.
Niemniej jednak nigdy całkowicie nie przestałem próbować programować. I w pewnym momencie wrócił. Kluczem było dla mnie ekstremalne programowanie, a dokładniej zasada prostoty: „Napisz najprostszą rzecz, która może zadziałać”.
Zasadniczo zmusiłem się, żeby nie dbać o wydajność kodu (to była moja główna blokada, unikaj nieefektywnych projektów), ale po prostu idź najłatwiej. Zmusiłem też mnie do mniejszej dbałości o błędy i odłożyłem obsługę błędów na później, po napisaniu testów podnoszących błąd (tak naprawdę to TDD).
Tego się nauczyłem, kiedy pisałem. Kiedy nie wiem, co napisać, lub wiedziałem, że to, co piszę, było złe . Po prostu idź dalej. Właściwie napisz złe rzeczy. W końcu poprawię to później. Lub jeśli naprawdę jest tak źle, usuń go i przepisz, ale szybciej jest napisać rzeczy dwa razy, które napiszą wszystko za pierwszym razem.
Naprawdę bardzo prawdopodobne jest, że kod, który Twoim zdaniem jest dobry na początku, będzie wymagał tyle samo usprawnienia, co naprawdę zły.
Jeśli podążysz ścieżką prostoty, otrzymasz również dodatkową premię. Łatwo akceptujesz usunięcie / zmianę wstępnego projektu / kodowania. Masz bardziej elastyczny umysł.
Przyzwyczaiłem się także umieszczać tymczasowy komentarz w kodzie, wyjaśniając, czego nie robiłem teraz i zamierzałem zrobić później, gdy kod będzie funkcjonować w normalnym przypadku użycia.
Uczestniczyłem również w XP Dojo i ćwiczyłem kata kodu z innymi programistami, aby zinternalizować praktyki XP. Pomogło. Dzięki temu powyższe metody formalne stały się instynktowne. Pomogło również programowanie w parach. Praca z młodymi programistami nabiera rozpędu, ale z doświadczeniem widać także to, czego nie robią. Na przykład w moim przypadku często widzę, jak angażują się w zbyt skomplikowane projekty i znam koszmar projektowania, który może do nich doprowadzić. Tak poszło. Zrobił to. Miałem problemy.
Najważniejszym dla mnie jest utrzymanie przepływu. Bycie szybkim naprawdę udaje się utrzymać przepływ.
Teraz wróciłem jako profesjonalny programista i wierzę, że jestem lepszy i szybszy dzięki głębszemu zrozumieniu tego, co robię. Ćwicząc TDD, wciąż mogę być nieco wolniejszy niż gdy byłem młodym bykiem (i niczego nie testowałem), ale nie mam też refaktoryzacji strachu i na pewno spędzam znacznie mniej czasu na debugowaniu (prawie wcale nie ma czasu, zrób to mniej niż 10% czasu) ).
Podsumowując: Pokonałem blokadę kodu za pomocą zwinnych metod (XP), przechodząc do uproszczenia, a następnie refaktoryzacji i ćwicząc, aby zrobić to instynktownie. To zadziałało dla mnie. Nie jestem pewien, czy można go uogólnić na kogokolwiek innego.
Jeśli chodzi o poziom nabywania umiejętności, głównie nauczyłem się akceptować to, że za każdym razem, gdy zmieniam technologię (uczę się nowego języka, nowych ram itp.), Przechodzę przez etap, w którym zwalniam. Jest to normalne i ostatecznie to przezwycięży. Mogę to również zrekompensować dobrą metodologią i umiejętnościami programowania ogólnego i nie będzie to stanowić większego problemu.