Jak wziąć odpowiedzialność za kod, gdy kolega wprowadza niepotrzebne poprawki bez uprzedzenia?

71

Jeden z moich kolegów z zespołu jest specjalistą od wszystkich transakcji w naszym sklepie IT i szanuję jego wgląd.

Czasami jednak przegląda mój kod (jest szefem naszego zespołu, więc się tego spodziewałem) bez uprzedzeń. Czasami więc przegląda moje zmiany, zanim osiągną cel końcowy i wprowadzają zmiany od razu ... a nawet raz złamał moją pracę.

Innym razem wprowadził niepotrzebne poprawki do mojego kodu, który ma ponad 3 miesiące.

Denerwuje mnie to z kilku powodów:

  1. Nie zawsze mam szansę naprawić swoje błędy
  2. Nie poświęcił czasu, by zapytać mnie, co próbowałem osiągnąć, gdy jest zdezorientowany, co może wpłynąć na jego testy lub zmiany
  3. Nie zawsze uważam, że jego kod jest czytelny
  4. Terminy nie stanowią problemu, a jego bieżące obciążenie pracą nie wymaga żadnej pracy w moich projektach poza przeglądaniem zmian w kodzie.

W każdym razie, powiedziałem mu w przeszłości, żeby informował mnie na bieżąco, jeśli zobaczy w mojej pracy coś, co chce zmienić, abym mógł przejąć na własność mój kod (być może powinienem powiedzieć „niedociągnięcia”) i nie reaguje .

Obawiam się, że mogę odejść równie agresywnie, gdy poproszę go o wyjaśnienie mi swoich zmian.

Jest tylko cichą osobą, która trzyma się dla siebie, ale jego działania trwają. Nie chcę go wypędzać z dokonywania zmian w kodzie (nie jakbym mógł), ponieważ jesteśmy zespołem - ale chcę zrobić wszystko, aby pomóc naszemu zespołowi.

Dodano wyjaśnienia:

  • Dzielimy 1 dział rozwoju. Nie czekam, aż wszystkie moje zmiany zakończą jedno zadanie, ponieważ ryzykuję utratę znaczącej pracy - więc upewniam się, że moje zmiany się kompilują i niczego nie psują.
  • Obawiam się, że mój kolega z zespołu nie wyjaśnia przyczyny ani celu jego zmian. Nie sądzę, żeby potrzebował mojego błogosławieństwa, ale jeśli nie zgadzamy się co do podejścia, pomyślałem, że najlepiej będzie omówić zalety i wady i podjąć decyzję, gdy oboje zrozumiemy, co się dzieje.
  • Nie rozmawiałem o tym jeszcze z kierownictwem naszego zespołu, ponieważ wolałbym rozwiązywać osobiste spory bez angażowania kierownictwa, chyba że jest to konieczne. Ponieważ moja troska wydawała się bardziej kwestią osobistą niż zagrożeniem dla naszej pracy, postanowiłem nie niepokoić kierownictwa zespołu. Pracuję nad pomysłami na proces recenzji kodu - aby pomóc promować korzyści z bardziej zorganizowanych recenzji kodu bez zajmowania się moimi ulubieńcami.
Jesslyn
źródło
20
Czy używasz git, CVS lub TFS do repozytorium kodu? Po prostu wycofaj swoje zobowiązania. W końcu go dostanie :)
6
W mojej organizacji wszystkie zmiany w kodzie powinny przejść jakąś recenzję, a sprawdzanie zmiany uważane jest za kiepską formę bez odnotowywania w opisie listy zmian, kto był recenzentem. Wprowadzenie tej zasady w twojej organizacji może być długoterminowym rozwiązaniem problemu współpracowników sprawdzających zmiany w kodzie, który napisałeś bez recenzji.
Carolyn
13
Dlaczego masz nieukończone zmiany we wspólnym oddziale? To zły pomysł, i to nie tylko z tego powodu.
hyde
15
Oczywiście zależy to od tego, jakiego VCS używasz, ale może to być coś do rozważenia, zaczynając częściej używać gałęzi. Dzięki gałęzi osobistej jest to IMO świetne, gdy możesz zatwierdzać (i wypychać za pomocą DVCS), kiedy tylko masz na to ochotę, nie martwiąc się, i scalać tylko wtedy, gdy jest to zrobione z częścią, lub scalać tylko częściowo, gdy jest to konieczne (dobry DVCS czyni to całkiem łatwym). Świetnie działa również z przeglądem kodu, ponieważ jest w stanie to zrobić i naprawić problemy przed scaleniem.
hyde
4
@Jesslyn - Czy Twój zespół w ogóle obawia się, że twój kolega z zespołu spędza czas na wprowadzaniu niepotrzebnych ulepszeń do starego kodu? Przynajmniej wydaje się nieefektywne, aby twój członek zespołu spędzał czas na wprowadzaniu niepotrzebnych zmian w przeciwieństwie do wykonywania zadań o wyższym priorytecie. Ponadto, jeśli twój kolega z drużyny woli spędzać czas na „naprawianiu” kodu dla ciebie, niż upoważnianiu go do samodzielnego zrobienia tego, wydaje się to również dość nieefektywne. Czy omawiasz którekolwiek z tych problemów ze swoim szefem zespołu?
Cliff

Odpowiedzi:

81

Myślę, że większość programistów znajduje się w takiej sytuacji w pewnym momencie i mam nadzieję, że każdy programista, który poczuł się ofiarą, zdaje sobie sprawę, jak frustrujące będzie, gdy stanie się starszy i poczuje się zmuszony do czyszczenia kodu napisanego przez juniorów.

Dla mnie unikanie konfliktu w tej sytuacji sprowadza się do dwóch rzeczy:

  1. Dzięki uprzejmości . Rozmowa z kimś o jego / jej kodzie pozwala deweloperowi wiedzieć, że jesteś zainteresowany i możesz omówić go jako dorośli profesjonaliści.

  2. Zapomnij o „posiadaniu kodu” - zespół jest właścicielem kodu . Inni ludzie, którzy chcą wprowadzić zmiany, to dobra rzecz. Jeśli starszy programista wprowadza zmiany, które są „nieczytelne” lub gorsze, wycofaj je. Nie musisz być agresywny, po prostu daj redaktorowi znać, że jego / jej zmiany nie zadziałały i chętnie porozmawiasz o swoim powrocie.

Pamiętaj, własność kodu w zespole jest świetna i tnie na dwa sposoby. Jeśli widzisz coś, co nie ma sensu w czyimś kodzie, napraw to. Bycie nadmiernie zaborczym i niedostatecznie komunikatywnym to pewny sposób na stworzenie trującego środowiska programistycznego.

Michael
źródło
4
Myślę, że sprowadza się to do punktu 1 - porozmawiaj z nim. Liczenie faktu, że zmiany kodu w stosunku do pierwotnego programisty to okropne zarządzanie (nie twierdzę, że tak się nie dzieje) i twierdzę, że należy złożyć wniosek o lepsze wskaźniki. Przekrocz ten most, jeśli i kiedy to się stanie.
Michael
2
Myślę, że na tym wszyscy powinniśmy się skupić - ogólnie rzecz biorąc, twoi koledzy z drużyny nie są po to, aby wyglądać źle - nie marnuj czasu na analizowanie, po prostu stań się lepszy i bardziej wartościowy członek zespołu (wiem, że łatwiej to powiedzieć niż zrobione!)
Michael
7
@Jesslyn, jeśli robi to tobie, są szanse, że robi to wszystkim. Wątpię, czy ktokolwiek liczy to przeciwko tobie. (Jeśli nie robi tego wszystkim, możesz mieć inny problem)
user606723,
3
@tgkprog: (1) Oczywiście, uzyskiwanie informacji zwrotnych od innych jest bardzo ważne i nauczyłem się kilku rzeczy, patrząc na kod innych, ale (2) jeśli chcesz się od siebie uczyć, powinieneś zasugerować zmianę i przedyskutować ją razem . Po prostu zmiana losowych rzeczy, ponieważ uważasz, że kod jest lepszy po zmianie, nie jest właściwym podejściem. Istnieją lepsze podejścia, takie jak recenzje kodu przy użyciu narzędzi do przeglądania.
Giorgio
2
tak, myślałem o czasach, kiedy
poprawiłem
86

Ty i większość osób udzielających odpowiedzi traktujecie to jako kwestię komunikacji między dwoma kolegami, ale tak naprawdę nie sądzę. To, co opisujesz, przypomina bardziej okropnie zepsuty proces sprawdzania kodu niż cokolwiek innego.

Po pierwsze, wspominasz, że twój kolega jest drugim dowódcą i oczekuje się, że sprawdzi twój kod. Po prostu źle. Z definicji przeglądy kodów równorzędnych nie są hierarchiczne i na pewno nie polegają wyłącznie na znajdowaniu defektów. Mogą również zapewnić doświadczenia edukacyjne (dla wszystkich zaangażowanych), okazję do interakcji społecznych i okazać się cennym narzędziem do budowania własności kodu zbiorowego. Powinieneś także od czasu do czasu sprawdzać jego kod, uczyć się od niego i poprawiać go, gdy się myli (za każdym razem nikt go nie poprawia ).

Ponadto wspominasz, że twój kolega wprowadza zmiany od razu. To również źle, ale oczywiście już to wiesz; nie zadałbyś tego pytania, gdyby jego podejście nie było problemem. Myślę jednak, że szukasz rozwiązania w niewłaściwym miejscu. Szczerze mówiąc, twój kolega przypomina mi trochę ... mnie, a tym, co działało dla mnie w podobnych sytuacjach, był dobrze zdefiniowany i solidny proces recenzji oraz zestaw niesamowitych narzędzi. Naprawdę nie chcesz powstrzymywać swojego kolegi od sprawdzania twojego kodu i proszenia go, aby przestał i rozmawiał z tobą, zanim każda drobna zmiana tak naprawdę nie zadziała. Może to chwilę potrwać, ale wkrótce osiągnie punkt, w którym stanie się to zbyt denerwujące, a ty wrócisz tam, gdzie zacząłeś, albo gorzej: po prostu przestanie sprawdzać twój kod.

Kluczem do rozwiązania tutaj może być narzędzie do przeglądu kodu równorzędnego. Zwykle unikam rekomendacji produktów, ale w przypadku recenzji kodu Atlassian's Cruciblenaprawdę ratuje życie. To, co robi, może wydawać się bardzo proste i tak jest, ale to nie znaczy, że nie jest niesamowicie niesamowite. Łączy się z Twoim repozytorium i umożliwia przeglądanie poszczególnych zestawów zmian, plików lub grup plików. Nie możesz zmienić żadnego kodu, zamiast tego komentujesz wszystko, co nie jest w porządku. A jeśli absolutnie musisz zmienić kod innej osoby, możesz po prostu zostawić komentarz z zestawem zmian wyjaśniającym twoje zmiany. Film wprowadzający na stronie produktu Crucible jest wart obejrzenia, jeśli chcesz uzyskać więcej szczegółów. Ceny Crucible nie są dla wszystkich, ale istnieje wiele darmowo dostępnych narzędzi do wzajemnej oceny. Jedną z nich, z którą pracowałem i która mi się podobała, jest komisja rewizyjna i jestem pewien, że znajdziesz wiele innych dzięki prostej wyszukiwarce Google.

Niezależnie od wybranego narzędzia, całkowicie zmieni Twój proces. Nie musisz się zatrzymywać, wstać z krzesła, przerwać drugiej osobie i omówić zmiany; wszystko co musisz zrobić, to zrobić sobie przerwę co tydzień i przejrzeć komentarze (raz w tygodniu to tylko sugestia. Znasz swój harmonogram i codzienną rutynę lepiej niż ja). Co ważniejsze, podstawowe recenzje są przechowywane gdzieś w bazie danych i można je odzyskać w dowolnym momencie. Nie są to efemeryczne dyskusje wokół chłodnicy wody. Moim ulubionym przypadkiem użycia starych recenzji jest wprowadzenie nowego członka zespołu do naszej bazy kodów. Zawsze jest miło, gdy mogę wprowadzić kogoś nowego przez bazę kodów, wskazując, gdzie dokładnie utknęliśmy, gdzie mieliśmy różne opinie itp.

Przechodząc dalej, wspominasz, że nie zawsze można odczytać kod tego kolegi. To pozwala mi wiedzieć, że nie masz wspólnego zestawu standardów kodowania, a to źle. Ponownie możesz podejść do tego jako problemu ludzi lub możesz podejść do tego jako problemu procesowego, i ponownie zdecydowanie sugeruję to drugie. Zbierz zespół i jak najszybciej zastosuj wspólny styl kodowania i zestaw standardów. Tak naprawdę nie ma znaczenia, czy wybierzesz zestaw standardów, które są wspólne dla ekosystemu rozwoju, czy sam wymyślisz własne. To, co naprawdę się liczy, to spójność standardów i ich przestrzeganie. Wiele narzędzi może ci pomóc, ale to zupełnie inna dyskusja. Na początek, bardzo prostą rzeczą jest posiadanie haka przed zatwierdzeniem, który uruchamia w twoim kodzie jakiś formatator stylu. Możesz kontynuować pisanie kodu w dowolny sposób i pozwolić narzędziu „naprawić” automatycznie, zanim ktokolwiek go zobaczy.

Na koniec wspominasz w komentarzu, że kierownictwo nie uważa, aby poszczególne oddziały programistów były konieczne. Istnieje powód, dla którego nazywamy je „gałęziami deweloperów”, a nie „gałęziami zarządzania”. Zatrzymam się tutaj, ponieważ nie ma powodu, aby rant, który formuje się w mojej głowie, miał się wydostać.

Wszystko, co powiedziałem, wiedz, że nie wątpię, że twój kolega jest (trochę) winny tutaj. Nie o to mi chodzi, chodzi mi o to, że cały twój proces rozwoju jest również winny, i to jest coś, co jest łatwiejsze do naprawienia. Uzbrój się w odpowiednie narzędzia, poznaj liczne formalne i nieformalne procesy i wybierz te, które pasują do Twojego zespołu. Wkrótce osiągniesz punkt, w którym zdasz sobie sprawę, że większość twoich „problemów z ludźmi” już nie istnieje. I proszę, nie słuchaj nikogo (w tym siebie), który przedstawia „jesteśmy małym zespołem, nie potrzebujemy tego wszystkiego”. Zespół kompetentnych programistów może skonfigurować niezbędne narzędzia w niecały tydzień, zautomatyzować wszystko, co można zautomatyzować, i nigdy nie oglądać się za siebie.

PS. „Własność kodu” jest mglistym terminem, stale dyskutowanym i oznacza różne rzeczy dla różnych ludzi. Możesz znaleźć genialny zbiór większości różnych (a czasem antytezycznych) opinii na temat C2 .

Yannis
źródło
7
+1 i więcej, gdybym mógł. Świetna odpowiedź, która dotyczy najlepszych sposobów ulepszenia takiego procesu.
Waldfee,
2
Tak, OP potrzebuje narzędzia do przeglądu kodu, w ten sposób możesz przeglądać kod razem, to nie tylko ktoś zmienia kod, ponieważ ma na to ochotę. Właśnie zaczął używać smartbear.com/products/software-development/code-review w pracy
Juan Mendes
19

Co takiego jest w procesie, który sprawia, że ​​chcesz wziąć odpowiedzialność za „swój kod”? Czy ponosisz wyłączną odpowiedzialność za działanie niektórych funkcji? Czy szef powiedział „Michael, chcę, żebyś wziął odpowiedzialność za ...”? A może Twoja odpowiedzialność wynika domyślnie z tego, że kierownictwo i reszta zespołu patrzą na ciebie za każdym razem, gdy niektóre funkcje są zepsute?

Tak czy inaczej, jeśli ponosisz odpowiedzialność, potrzebujesz autorytetu nad kodem. Następnym razem, gdy drugi dokona jednostronnych zmian, a trop powróci do ciebie, aby je naprawić, powinieneś usiąść z tropem i poprosić o wyrównanie swoich uprawnień i odpowiedzialności.

Kevin Cline
źródło
5
+1 Za wskazanie ważnego faktu: albo istnieje własność zespołu i (1) wszyscy są odpowiedzialni (2) każdy może zmienić kod, albo istnieje własność indywidualna i (1) właściciel modułu jest odpowiedzialny (2) każda zmiana musi musi zostać zatwierdzony przez właściciela modułu. Często pojawia się zamieszanie, gdy oczekuje się, że członek zespołu będzie odpowiedzialny za moduł, ale starszy członek czuje się uprawniony do wprowadzania losowych zmian w kodzie. Innymi słowy, należy unikać sytuacji „odpowiedzialności bez autorytetu”.
Giorgio,
4

Nie to rozwiąże całą sytuację, ale możesz spróbować dodać więcej komentarzy do swojego kodu źródłowego.

  1. Jeśli kod nie jest kompletny, może zostać oznaczony jako taki.
  2. Jeśli celem bloku kodu nie jest samo-dokumentowanie, powinieneś to udokumentować.

W sumie staraj się, aby lemoniada zamiast marnować czas na ssanie cytryn. Jak powiedział Michael, koledzy z drużyny nie robią nic, aby wyglądać źle. Spróbuj uczyć się na swoich błędach i zastosować je w przyszłych wersjach.

Jeśli uważasz, że jego zmiany mają negatywny wpływ, wypowiedz to (dyplomatycznie). Gdybym to był ja, po prostu zapytałbym, dlaczego dokonano określonych zmian i sprawdziłbym, czy możesz obronić swoje oryginalne zmiany. Twoi starsi współpracownicy są również ludźmi. Jest całkiem możliwe, że coś przeoczył i / lub nie jest świadomy żadnego negatywnego wpływu, jaki wywiera.

użytkownik606723
źródło
3
Chłopak, który może być mylący. Wyobraź sobie - dodanie komentarza zatytułowanego „Ten kod nie jest kompletny”, a następnie zapomnienie o jego usunięciu po wypełnieniu.
riwalk
1
@ Stargazer712, Bardziej mylące niż niepełny kod w oddziale?
user606723
Po to są zestawy półek. Nie wpisuj niekompletnego kodu.
riwalk
2
Nie. Jeśli wpiszesz niekompletny kod, który wymaga komentarza do oznaczenia go jako takiego, oznacza to, że jesteś już w piekle. Komentarze po prostu zabiorą Cię do innego zakątka piekła.
riwalk
1
Nazywają się TODO, cały czas pracują w kodzie
Juan Mendes
4

Każdy domyślnie „posiada swój własny kod”, niezależnie od polityki, legalizmu lub ekonomii - jest to „natura rzeczy” - naturalnie odczuwasz osobisty związek ze swoją pracą.

Jeśli twój współpracownik angażuje się w zachowanie, które opisałeś i nie reaguje, gdy poprosisz o awans , ten współpracownik jest co najmniej nieuprzejmy i może próbować cię osłabić (mówiąc najgorzej ... .) - NIE brzmi jak gracz zespołowy.

Dobry współpracownik będzie dotykać podstawy z wami i wskazać na problem z kodem do ciebie - i niech to naprawić / zmienić go lub odpowiednio reagować. Jestem bardzo wdzięczny, że nawet gdy byłem nowicjuszem, moi mentorzy zawsze wskazywali mi, co robię źle, wyjaśniali dlaczego i pozwalali mi (lub zmuszali ) to naprawić. To uczyniło mnie lepszym programistą i wszyscy na tym skorzystali. I to zawsze robiłem, kiedy przeglądałem pracę wykonaną przez innych. Wtedy ty (lub ktokolwiek) faktycznie uczy się czegoś od twojego „waleta wszystkich zawodów”, a kod i zespół stają się coraz lepsi, w tym twój nauczyciel: Nauczanie pomaga zrozumieć.

Jeśli to w ogóle możliwe, porozmawiam o tym na osobności z kierownikiem zespołu. Opierając się na twoim opisie sytuacji, dobry lider zespołu weźmie twoją stronę - zły nie zrobi tego ... Oczywiście wymaga to ostrożności - musisz to ocenić sam.

Wektor
źródło
1
Oprócz wstępnego oświadczenia (istnieją zespoły, które przejmują własność zespołu i inne zespoły, które przyjmują własność indywidualną), uważam, że spostrzeżenia w tej odpowiedzi są OK (+1 dla tego): Zauważyłem również, że własność współdzielonego kodu jest wykorzystywana do osłabiania zespołu pozycja członka w zespole poprzez dowolną modyfikację kodu. Więc nie rozumiem głosów negatywnych. Byłoby dobrze, gdyby downvoters starał się wyjaśnić.
Giorgio
1
Myślę, że odpowiedź Mikeya jest dobrym wyjaśnieniem, jak zostać graczem zespołowym. Może to zbyt skoncentrowani na ludziach? Jak sugerował Yannis, proces rozwoju mojego zespołu wydaje się być prawdziwym problemem. Niezależnie od tego jestem ciekawy, dlaczego zostało to odrzucone.
Jesslyn
1
@Jesslyn - Podejrzewam, że zostałem przegłosowany z powodu mojego stwierdzenia „Każdy domyślnie„ posiada swój własny kod ””. To pytanie filozoficzne, a nie polityczne. :-)
Wektor
1
@Mikey: „Każdy domyślnie„ ma swój własny kod ”” Oczywiście może to być kwestia debaty. Programiści, którzy nie są samozatrudnieni, zwykle podpisują umowę, która mówi, że nie są właścicielami kodu źródłowego. Poza tym uważam, że autor kodu najlepiej rozumie kod, a jeśli ktoś inny zmieni kod, to ani autor, ani drugi programista tak naprawdę nie rozumieją kodu w 100%.
Giorgio
1
@Mikey: Własność współdzielonego kodu stara się zapewnić wystarczającą liczbę członków zespołu wystarczająco dobrze rozumiejących kod (podczas gdy nikt tak naprawdę nie rozumie go naprawdę dobrze). Jest to lepsze niż własność indywidualnego kodu, gdzie każdy moduł jest (przynajmniej w zasadzie) w pełni zrozumiały dla jednego programisty, ale istnieje ryzyko, że wiedza ta zostanie utracona, jeśli programista zakończy pracę.
Giorgio
1

Jeśli piszesz kod, powinienem go przejrzeć.

Jeśli zmienię kod podczas sprawdzania, kod nie jest już kodem, który sprawdziłem, ale kod, który zmieniłem. Dlatego należy to zweryfikować. Prawdopodobnie przez ciebie.

Jeśli zatwierdzę twój nowy kod wraz z moimi zmianami, a ktoś nie sprawdzi moich zmian, to popełniłem (1) nie sprawdzoną zmianę i (2) najgorszy możliwy grzech, jeśli recenzje kodu są traktowane poważnie.

gnasher729
źródło
0

Myślę, że na razie radzisz sobie z tym we właściwy sposób - ale wkrótce pojawi się punkt zwrotny, który rozproszy Cię w stopniu, w którym możesz nie być zadowolony z pisania w ten sposób.

Gdybym był tobą, poprosiłbym o szybką rozmowę indywidualną z tą osobą i wyjaśniłbym mój POV spokojnie, ale stanowczo. Własność zespołu w zakresie kodu itp. Jest w porządku, ale chyba że dasz każdemu programistowi wystarczająco dużo miejsca, aby mógł on rozpracować swoją pracę, popełniać błędy i ulepszać, nigdy nie zbudujesz dobrego kodu. Może to być obszar tarcia wcześniej niż później.

(Odpowiedź jest zupełnie inna, jeśli dotyczy to wymiany pracy. Wymiana stosów. Łatwo jest znaleźć właściwy sposób na przeglądanie kodu. Przekonanie współpracownika do przestrzegania tego jest znacznie trudniejsze).

Sandeep
źródło