It’s not a żart, I could not stand to have this happen a fourth time, it’s impacting me mentally.
This line is important, because it shows that you feel it is time to change. Pokazuje, że rozpoznajesz to jako wzór, i chciałbyś, aby wzór się zatrzymał. To pragnienie jest prawdopodobnie najważniejszą częścią rozwiązania. Naprawianie tego typu sytuacji często wiąże się ze zmianą sposobu myślenia. Ktoś nie jest w stanie tego zrobić dla Ciebie, więc Twoje pragnienie zmiany będzie jedyną rzeczą, która sprawia, że zmiana się dokonuje.
W pewnym kontekście, byłem już wcześniej w podobnych sytuacjach “zbyt dobry w kodowaniu dla mojej pracy”, choć nigdy w stopniu, który opisujesz. Mógłbym leczyć raka za pomocą metaprogramowania szablonów w C++, ale wielu z nich, z którymi pracuję, ledwo zna podstawy projektowania zorientowanego na obiekty. Napisałem kod, który nadużywał SFINAE i podepchnął się pod dokładne brzmienie specyfikacji C++, kiedy wiele projektów, nad którymi pracowałem, nadal używało przestarzałych i buggy wersji gcc. Moje podejście polegało po prostu na pokazaniu im, jak niesamowite są te narzędzia i wszystkie problemy, które mogły rozwiązać. Uwielbiałem wyjaśniać ludziom małe wskazówki dotyczące programowania i bardzo im się to podobało.
Czy to brzmi znajomo?
“Tak, ale trzeba mieć dobry poziom zrozumienia [kodu Mik'a], ponieważ komponenty są inteligentnie odsprzężone”
Rozważ to stwierdzenie z perspektywy ryzyka. Twój szef musi dbać o to, by wszystko się działo, bez względu na wszystko. Jeśli wyjdziesz na poszukiwanie jakiejś niesamowitej okazji do pracy, Twój szef nadal musi się upewnić, że kod zostanie utrzymany. Twój współpracownik właśnie powiedział, że jeśli będzie musiał cię zastąpić, będzie musiał znaleźć bardzo wykwalifikowanego programistę, ponieważ każdy, kto nie jest tak dobry, nie będzie w stanie go utrzymać. To jest ryzyko. Co jeśli nie mogą znaleźć wystarczająco dobrego programisty, albo nie mogą sobie pozwolić na zapłacenie im wystarczająco dużo?
Być może stworzyłeś coś, co nazwałbyś “dobrym kodem”, ale definicja “dobrego kodu” jest very bardzo zależna od kontekstu. Co to jest “dobry kod” w Google, z ich nowatorskimi sposobami myślenia, może być bardzo złym kodem dla kogoś, kto pracuje w FAA, która zajmuje się głównie niezawodnością, a nie nadążaniem za najnowszymi rozwiązaniami. Definicja twojego szefa jako “dobry kod” obejmuje możliwość utrzymania go w różnych sytuacjach, również bez ciebie. Jeśli twoi współpracownicy nie czują się komfortowo z utrzymaniem kodu, to nagle stajesz się odpowiedzialny dla firmy, ponieważ produkujesz produkt, którego nie mogą utrzymać, jeśli zdecydujesz się pójść gdzie indziej.
Z tej perspektywy można argumentować, że zmuszasz ich do zaakceptowania twojej definicji “dobrego kodu”. Instynktownie może się to wydawać dobre, ale jest to trudne, jak na przykład ten ryzykowny sposób myślenia, o którym być może nie myślałeś.
Mamy sformułowanie: “postawienie wozu przed koniem”. Jednym z wielu znaczeń z nim związanych jest przedkładanie treści, na których Ci najbardziej zależy (umiejętność korzystania z zaawansowanych technik), nad siły, które powinny go ciągnąć do przodu (zrozumienie tych technik przez współpracownika). Napisałeś kod w tym zaawansowanym stylu, a następnie zachęciłeś innych programistów do “dogonienia” tego stylu. Może to być skuteczne, ale jeśli cokolwiek Ci się stanie zanim “dogonią”, firma jest nagle zagrożona, ponieważ nikt nie jest w stanie utrzymać kodu.
Jak mogę tego uniknąć w przyszłości?
Naprawa tego może być strasznie trudna do zrobienia, ponieważ wiąże się z podejściem do problemu w inny sposób, niż jest to zazwyczaj wygodne. Zamiast najpierw pisać kod w tym zaawansowanym stylu, a następnie uczyć współpracowników jak myśleć w ten sposób, powinieneś go odwrócić. Naucz swoich współpracowników lubić ten styl kodowania, a następnie zacznij pisać kod w tym stylu. Może się wydawać, że jest wsteczny, ale jest znacznie bardziej stabilny. Z perspektywy szefa, nie ma większego ryzyka, że zespół nauczy się lepiej kodować. Kiedy już kodują lepiej, styl, w którym chcesz się rozwijać jest nagle mniej ryzykowny.
W międzyczasie, będziesz musiał napisać kod, który według twoich standardów jest “mniej dobry”, ale to jest w porządku. Twój kod nie jest twoim jedynym produktem tutaj. Twój drugi produkt pomaga uczyć innych programistów, a jego wartość może łatwo przekroczyć wartość pisania “doskonałego kodu”.
Oczywiście, trudno jest stwierdzić, kiedy bezpiecznie jest pisać kod w stylu, który chcesz napisać. Gdyby było to łatwe do rozpoznania, na pewno już byś to zrozumiał! Jedną z potężnych technik, których możesz użyć jest pozwalanie innym na naciskanie na zaawansowane style kodowania, a nie naciskanie na to samemu. Jedną rzeczą jest nauczyć kogoś różnicy między dziedziczeniem a kompozycją. Zupełnie inną rzeczą jest nauczenie ich na tyle dobrze, że opowiadają się za zmianą istniejącej bazy kodowej, aby była ona bardziej przejrzysta w momencie jej używania. Ten ostatni przypadek naprawdę daje ci do zrozumienia, że nie tylko oni dostają pojęcie, ale prawdziwie go ogarnąć.
Ideałem do nauczania takich koncepcji jest nie uczyć niczego. Pozwól uczniom coś odkryć, a następnie wskażesz im kierunek, w którym odkrycie może iść. Może jeden z nich odkryje coś schludnego w dziedzictwie, a Ty skierujesz ich w stronę wzorca projektowego Visitora opartego na tym, co odkryli. Nie dawaj im tylko Gościa, ale daj im poczucie kierunku, aby sami mogli wyjść i znaleźć Gościa.
To znacznie trudniejsze podejście i z pewnością będziesz chciał znaleźć szczęśliwy środek pomiędzy tym a Twoim obecnym podejściem, ale może być bardzo satysfakcjonujące. Co ważniejsze dla Twojej odpowiedzi, może zapewnić wartość dodaną dla firmy bez ryzyka. Jeśli zapewniasz wartość firmie, a nie narażasz jej na ryzyko, to praktycznie nigdy nie zostaniesz zwolniony. A w kilku przypadkach, w których nadal możesz zostać zwolniony, kierownictwo poda powód (np. spowolnienie gospodarcze lub zmiana kierunku rozwoju firmy). Jeśli zrobisz to bardzo dobrze, zauważysz, że kierownictwo zamiast tego zacznie kształtować twoją ścieżkę, tak jak kształcisz swoich współpracowników, i znajdziesz ciekawą tendencję do uczenia się just odpowiedniej umiejętności just, kiedy najbardziej jej potrzebują.