W przeszłości dużo pisałem na ten temat na SoftwareEngineering.SE i sam byłem w podobnych sytuacjach. Dlatego postaram się podać kilka wskazówek i podkreślić kilka problemów, które zauważyłem podczas czytania twojego pytania.
Ale najpierw porozmawiajmy o ważnym aspekcie: twojej roli w firmie.
Twoja rola
Możesz mieć wyraźny mandat od swojego szefa na ulepszenie rzeczy, a także miejsce w hierarchii, w którym inni programiści muszą słuchać twoich zamówień . Lub możesz być wśród rówieśników, pełniąc tę samą rolę i ten sam autorytet, a twoją opcją jest tylko ... cóż ... opinia .
W obu przypadkach liczy się mniej miejsce w hierarchii i więcej:
Co myślą o tobie inni programiści. Jeśli traktują cię jak irytującego faceta, który pyta ich o głupie rzeczy, nie zajdziesz daleko. Widziałem wiele przypadków, w których liderzy techniczni i kierownicy projektów nie mieli absolutnie żadnego wpływu na zespół, ponieważ zespół wiedział (lub myślał), że ci „liderzy” nie mają zaplecza technicznego wymaganego do podejmowania decyzji, które podejmują. Z drugiej strony widziałem kilku programistów, którzy byli faktycznie słuchani przez swoich rówieśników, ponieważ wiedzieli, że ci programiści są zręczni i doświadczeni.
Jak solidny jest Twój zespół i co go motywuje. Wyobraź sobie firmę, w której każdy programista płaci za KLOC / miesiąc. Czy cokolwiek powiesz o stylu ma znaczenie dla twoich kolegów? Prawdopodobnie nie, ponieważ rzadkie są osoby, które chcą otrzymywać niższe wynagrodzenie. Ogólnie rzecz biorąc, jeśli nie jest to zespół, a tylko grupa osób pracujących nad tym samym projektem, nie będziesz w stanie niczego poprawić.
W zależności od tego możesz zdecydować, czy warto dokonać zmiany. Jeśli nie masz głosu i nie ma spójności zespołu, poszukaj innej pracy. Jeśli jesteś znany jako utalentowany, szanowany programista i masz silne poczucie zespołu, będziesz w stanie stosunkowo łatwo poprawić sytuację, nawet w obliczu wrogości ze strony szefa lub innych zespołów.
We wszystkich przypadkach bardzo ważne jest, aby nie wywierać presji na swój zespół. Pracujcie z nimi, a nie przeciwko nim. Nie wydawaj im rozkazów, ale prowadź ich do celu.
Teraz wskazówki.
Styl
Kiedyś ładnie poprosiłem o przestrzeganie stylu kodowania i formatowania większości istniejącego kodu (niestety nie mamy formalnego dokumentu w stylu kodowania). Ale to nie działało ...
Oczywiście, że tak nie było, ponieważ nie należy tak robić.
Styl jest nudny .
Kolejny styl jest nudny .
Pisanie dokumentu w stylu kodowania jest nudne ( i cholernie trudne ; nawet nie próbuj go robić, chyba że pracujesz z tym językiem od ponad dziesięciu lat).
Czytanie dokumentu w stylu jest nudne .
Przeglądanie kodu pod kątem błędów stylu jest nudne .
Trollowanie, że mój styl jest lepszy od twojego, jest ekscytujące , szczególnie gdy absolutnie nie ma obiektywnej przewagi jednego stylu nad drugim. Poważnie, każda rozsądna osoba wie, że właściwym sposobem pisania if (x)jest sposób, w jaki ją napisałem, nie if(x)lub if ( x )!
W związku z tym:
Nie rób recenzji stylu. To jest zadanie sprawdzania stylu. Te urocze aplikacje mają kilka zalet nad mózgiem: sprawdzają cały projekt w ciągu milisekund, a nie godzin lub dni, i nie popełniają błędów i nie pomijają błędów stylu.
Nie pisz własnego standardu stylu. I tak zrobisz to źle, a twoi współpracownicy będą cię trollować, że dokonałeś złych wyborów.
Nie zmuszaj programistów do naprawiania błędów w stylu 2000.
Czy wymuszaj styl automatycznie po zatwierdzeniu. Kod z błędami stylu nie ma miejsca w kontroli wersji.
Zrób to od początku projektu. Ustawienie kontroli stylu w istniejącym projekcie jest trudne do niemożliwego.
Dla bardziej na tym, czytać pierwszą część tej drugiej odpowiedzi na SE.SE .
Również:
- Nie bądź zbyt surowy. Na przykład pisanie
jslintkodu zgodnego jest dość irytujące, więc powinno się to odbywać wyłącznie wtedy, gdy jest to absolutnie potrzebne (lub jeśli wszyscy członkowie zespołu są zadowoleni z jego używania). To samo dotyczy narzędzi do sprawdzania statycznego; na przykład Analiza kodu .NET na maksymalnym poziomie może być bardzo uciążliwa i przygnębiająca, przynosząc przy tym niewielkie korzyści; z drugiej strony ten sam zestaw narzędzi na umiarkowanym poziomie okazuje się bardzo pomocny.
Recenzje kodu
Teraz, gdy nie musisz przejmować się stylem podczas przeglądów kodu, możesz skupić się na ciekawszych rzeczach: ulepszaniu (a nie naprawianiu) kodu źródłowego.
Różne osoby różnie reagują na recenzje kodu. Niektórzy uważają to za okazję. Inni tego nie znoszą. Niektórzy słuchają wszystkiego, co im mówisz, robią notatki i nie dyskutują, nawet jeśli mogą mieć rację. Inni próbują kłócić się w każdym punkcie. Od Ciebie zależy znalezienie sposobu radzenia sobie z każdym deweloperem zgodnie z jego osobowością. Zazwyczaj pomocne jest:
Rób recenzje kodu prywatnie, szczególnie gdy programista jest młodszy i pisze naprawdę zły kod.
Pokaż, że nie ma nic osobistego: przeglądasz kod, a nie umiejętności danej osoby.
Pokaż rzeczywisty cel przeglądu kodu. Celem nie jest pokazanie, jak zły jest programista. Celem jest zapewnienie możliwości poprawy.
Nigdy się nie kłóć. Nie jesteś tu po to, by przekonać, ale po to, by zapewnić swoją wiedzę.
Nigdy nie zakładaj, że recenzent jest jedynym, który może nauczyć się czegoś na podstawie recenzji. Ty też możesz się uczyć, czytając kod i prosząc o wyjaśnienie części, których nie rozumiesz.
Po sprawdzeniu kodu upewnij się, że osoba rzeczywiście poprawia swój kod. Miałem kilka przypadków, w których programiści sądzili, że przegląd kodu kończy się, gdy kończy się faktyczne spotkanie. Opuszczają i wracają do swoich nowych funkcji, próbując zastosować to, co im udostępniłeś, tylko dla nowego kodu. Posiadanie przyzwoitego narzędzia śledzącego do przeglądu kodu pomaga.
Pamiętaj, że niezależnie od twojej szczególnej roli w firmie i twojej wiedzy specjalistycznej w porównaniu do innych, twój kod powinien również podlegać przeglądowi. Nie powinieneś być jedynym, który przegląda kod innych osób.
W ostatnim projekcie, w którym pracowałem jako lider techniczny, miałem trudności z wyjaśnieniem moim współpracownikom, że ich rolą jest wzajemne sprawdzanie kodu, w tym mojego. Strach przed stażystą, który ma zamiar przejrzeć kod swojego lidera technicznego, znika, gdy tylko znajdzie on pierwsze problemy w kodzie - a kto z nas napisze bezbłędny kod?
Trening
Przeglądy kodu są świetną okazją do uczenia i uczenia się niektórych aspektów programowania i projektowania oprogramowania, ale inne wymagają szkolenia.
Jeśli jesteś w stanie szkolić swoich współpracowników, zrób to. Jeśli twoje kierownictwo jest wrogo nastawione do szkolenia, zrób to nieformalnie. Przeprowadziłem takie szkolenia w formie nieformalnych spotkań, a czasem nawet jako zwykłe dyskusje, czasem przerywane przez kierownictwo i kontynuowane później.
Oprócz bezpośredniego szkolenia, upewnij się, że znasz wystarczająco dużo książek, takich jak Kod Kompletny McConnela , i porozmawiaj o nich z kolegami. Zaproponuj, aby przeczytali kod źródłowy projektów open source, podaj konkretne przykłady kodu wysokiej jakości. I oczywiście sam napisz kod wysokiej jakości.
Skoncentruj się na kontekście, a nie na osobach
Jak poradzić sobie z tą sytuacją, nie koncentrując się jedynie na „złej kulturze firmy”, „niedoświadczonych absolwentach” itp.
Ci absolwenci mają cel: zdobyć doświadczenie, uczyć się rzeczy, stać się bardziej zręcznymi. Jeśli rok po roku piszą kiepski kod i nie wiedzą nic o programowaniu, to prawdopodobnie dlatego, że Twój zespół lub firma nie daje im takiej możliwości.
Jeśli skupiasz się na tym, że twój zespół ma niedoświadczonych absolwentów, to nie pomoże. Zamiast tego skup się na tym, co możesz dla nich zrobić i z nimi. Przegląd kodu i szkolenie to dwie techniki poprawy sytuacji.
Zła kultura towarzystwa to inna bestia. Czasami można to zmienić. Czasami nie może. We wszystkich przypadkach należy pamiętać, że są częścią tej firmy, dzięki czemu są częścią kultury firmy. Jeśli nie możesz go zmienić i okaże się, że jest z natury zły, prędzej czy później będziesz musiał wyjść.
Popraw swoje dane
Jak dokładnie mierzysz teraz kod? Czy mierzysz liczbę zatwierdzeń dziennie na programistę? Czy KLOC miesięcznie na programistę? A może zasięg kodu? Lub liczba znalezionych i naprawionych błędów? Czy liczba potencjalnych błędów wykrytych podczas testów regresji? Lub liczba powrotów wykonanych przez serwer Continuous Deployment?
Rzeczy, które mierzysz, mają znaczenie, ponieważ członkowie zespołu dostosowują swoją pracę do mierzonych czynników. Na przykład w jednej firmie, w której musiałem pracować kilka lat temu, jedyną rzeczą, która została zmierzona, był czas spędzony w biurze. Nie trzeba dodawać, że nie zachęcało to do dostarczania lepszego kodu, do inteligentniejszej pracy lub ... cóż, do pracy w ogóle.
Wykrywanie pozytywnych i negatywnych wzmocnień oraz dostosowywanie mierzonych czynników w czasie jest zasadniczo efektem dźwigni dla członków zespołu. Właściwie wykonane pozwala osiągnąć wyniki, których nie osiągnie prosta hierarchia.
Rzeczy, które ci przeszkadzają, czynią je mierzalnymi. Zmierz je i upublicznij wyniki. Następnie współpracuj z innymi członkami zespołu, aby poprawić wyniki.
Rozważmy na przykład, że członkowie zespołu popełniają zbyt wiele błędów ortograficznych w nazwach klas, członków klasy i zmiennych. To denerwujące. Jak mogłeś to zmierzyć? Za pomocą analizatora składni możesz wyodrębnić wszystkie słowa z kodu i za pomocą modułu sprawdzania pisowni określić stosunek słów zawierających błędy i literówki, na przykład 16,7%.
Następnym krokiem jest uzgodnienie ze swoim zespołem docelowego współczynnika. Może to być 15% na kolejny sprint, 10% na następny, 5% za sześć tygodni i 0% za dwa miesiące. Dane te są przeliczane automatycznie przy każdym zatwierdzeniu i wyświetlane na dużym ekranie w biurze.
Jeśli nie osiągniesz docelowego współczynnika, Twój zespół może postanowić poświęcić trochę więcej czasu na naprawę błędów ortograficznych. Lub twój zespół może uznać, że lepiej jest obliczyć współczynnik na programistę i wyświetlić te informacje również na dużym ekranie. Albo twój zespół może uznać, że cel był zbyt optymistyczny i że powinieneś go zweryfikować.
Jeśli osiągniesz docelowy współczynnik, następnym krokiem jest upewnienie się, że liczba błędów i literówek nie wzrośnie z czasem. W tym celu możesz utworzyć dodatkowe zadanie w swojej kompilacji, które sprawdza błędy ortograficzne i kończy się niepowodzeniem, jeśli przynajmniej jeden błąd zostanie znaleziony. Teraz, gdy pozbyłeś się tego problemu, duży ekran może zostać ponownie wykorzystany do wyświetlenia nowych odpowiednich statystyk.
Wniosek
Uważam, że każdy aspekt wymieniony w pytaniu można rozwiązać za pomocą technik, które zawarłem w mojej odpowiedzi:
Kiedy inni programiści dołączyli do projektu, zauważyłem, że używają innego stylu kodowania (czasem zupełnie innego stylu)
Trzeba było wymusić styl automatycznie po zatwierdzeniu.
i często nie używają nowoczesnych funkcji językowych, takich jak akcesoria do nieruchomości (jest to stosunkowo nowa funkcja w Objective-C).
Zarówno przeglądy kodu, jak i szkolenia są tutaj, aby przenieść Twoją znajomość języka.
Czasami wymyślali własne rowery zamiast korzystać z podobnych funkcji ramy
Zarówno przeglądy kodu, jak i szkolenia są tutaj, aby przenieść twoją wiedzę na temat frameworka.
lub przenieś koncepcje z innych języków programowania lub wzorców, których się nauczyli, do naszej bazy kodu.
To jest doskonała rzecz. Wydaje się, że możesz się od nich uczyć.
Często nie potrafią poprawnie nazwać metod lub zmiennych z powodu złego angielskiego
Przeglądy kodu powinny również koncentrować się na właściwym nazywaniu. Niektóre IDE mają również sprawdzanie pisowni.
Czasami myślę, że gdyby nie IDE, myślę, że napisaliby cały kod bez wcięć i formatowania.
Oczywiście, że tak. Styl jest nudny i powinien być zautomatyzowany.
Zasadniczo nienawidzę kodu, który piszą.
Pamiętaj o części z recenzji kodu: „Celem nie jest pokazanie, jak zły jest programista. Celem jest zapewnienie możliwości poprawy. ”
Jest źle sformatowany / zorganizowany, a czasem radykalnie różni się od reszty projektu.
Zautomatyzowane sprawdzanie stylu .
Czuję się bardzo zdenerwowany, kiedy dodają swoje spaghetti do mojego dzieła sztuki
Czekaj, co?! Dzieło sztuki?! Zgadnij co? Niektóre osoby (w tym ty za sześć miesięcy) mogą uznać twój kod za daleki od dzieła sztuki. Tymczasem zrozumcie, że uznanie waszej pracy za dzieło sztuki, a ich praca za bzdury, nikomu nie pomoże. Włączając Ciebie.
Coraz bardziej wydaje się, że nie przeszkadza im nauka lub ich to nie obchodzi: po prostu robią to, co się od nich wymaga i wracają do domu.
Oczywiście zrobią to, co jest od nich wymagane. Pamiętaj: kontekst, a nie osoby i odpowiednio dobieraj swoje dane . Jeśli kontekst wymaga od nich bycia najlepszym w tym, co robią, zrobią to. Jeśli kontekst wymaga wyprodukowania jak największej liczby KLOC miesięcznie i nic więcej, zrobią to również.