Czy szukam skutecznego sposobu, który również nie jest obelgą, aby wprowadzić koncepcje OOP do istniejących członków zespołu? Moi koledzy z zespołu nie są nowi w językach OO. Robimy C ++ / C # od dawna, więc sama technologia jest znana.
Jednak rozglądam się i bez większego wysiłku (głównie w formie recenzji kodu), wydaje się, że produkujemy kod C, który zdarza się wewnątrz klas. Prawie nie ma zastosowania zasada pojedynczej odpowiedzialności, abstrakcje ani próby zminimalizowania sprzężenia, żeby wymienić tylko kilka. Widziałem klasy, które nie mają konstruktora, ale ustawiają memset na 0 za każdym razem, gdy są tworzone.
Ale za każdym razem, gdy uruchamiam OOP, wszyscy zawsze kiwa głową i sprawia wrażenie, jakby wiedzieli dokładnie, o czym mówię. Znajomość pojęć jest dobra, ale wydaje się, że my (niektórzy bardziej niż inni) bardzo ciężko jest je zastosować, jeśli chodzi o wykonanie rzeczywistej pracy.
Recenzje kodu są bardzo pomocne, ale problem z recenzjami kodu polega na tym, że pojawiają się one dopiero po fakcie, więc niektórym wydaje się, że ostatecznie przepisujemy (to głównie refaktoryzacja, ale wciąż zajmuje dużo czasu) napisany właśnie kod. Również recenzje kodu przekazują opinie tylko innemu inżynierowi, a nie całemu zespołowi.
Bawię się pomysłem robienia prezentacji (lub serii) i próbuję ponownie przywołać OOP wraz z kilkoma przykładami istniejącego kodu, który mógł zostać napisany lepiej i który mógłby zostać ponownie opracowany. Mógłbym użyć naprawdę starych projektów, których nikt już nie ma, więc przynajmniej ta część nie powinna być delikatną kwestią. Czy to jednak zadziała? Jak powiedziałem, większość ludzi używa C ++ od dawna, więc zgaduję, że a) usiądą i zastanowią się, dlaczego mówię im rzeczy, które już znają lub b) mogą uznać to za zniewagę, ponieważ jestem mówiąc im, że nie wiedzą, jak wykonać pracę, którą wykonują od lat, jeśli nie od dziesięcioleci.
Czy istnieje inne podejście, które dotarłoby do szerszego grona odbiorców niż przegląd kodu, ale jednocześnie nie czułoby się jak wykład karny?
Nie jestem świeżo upieczonym studentem college'u, który ma utopijne ideały doskonale zaprojektowanego kodu i nie oczekuję tego od nikogo. Piszę to dlatego, że właśnie dokonałem przeglądu osoby, która rzeczywiście miała przyzwoity projekt na wysokim poziomie na papierze. Jeśli jednak wyobrażasz sobie klasy: A -> B -> C -> D, w kodzie B, C i D wszystkie implementują prawie ten sam interfejs publiczny, a B / C mają jedną funkcję liniową, dzięki czemu najwyższa klasa A robi absolutnie cała praca (do zarządzania pamięcią, parsowania ciągów, negocjacji konfiguracji ...) przede wszystkim w 4 metodach mongo i, dla wszystkich celów i celów, wywołuje prawie bezpośrednio do D.
Aktualizacja: Jestem liderem technologicznym (6 miesięcy w tej roli) i mam pełne wsparcie kierownika grupy. Pracujemy nad bardzo dojrzałym produktem, a koszty utrzymania zdecydowanie dają się poznać.