Pytanie:
Czytelność kodu, konwencje i czy powinienem odpuścić
Stankar0x
2017-11-12 20:53:33 UTC
view on stackexchange narkive permalink

Szukając błędu, znalazłem kilka wierszy kodu, które okazały się trudne do odczytania i poprawiłem je pod kątem czytelności.

Ta zmiana przybliżyła kod do tego, co mówi nasza Konwencja kodowania, która również stwierdza, że powinniśmy „poprawić kod, który nie został napisany w tym stylu”.

Jeden z moich kolegów, który ma staż pracy, powiedzmy, ze względu na długość jego kadencji. Mądry facet, oddany kodowi i napisał ważne elementy. Odciąga mnie na bok i mówi:

Dlaczego to robisz? Zmieniasz mój kod. Jesteśmy drużyną. Ten kod został napisany w taki sposób, aby był zrozumiały dla wszystkich członków zespołu. I musi dać się utrzymać nawet po 100 latach. Jeśli nie będziesz postępować zgodnie z konwencjami zespołu, musimy się rozstać lub porozmawiam z menedżerami, abyś nigdy więcej nie musiał dotykać tego kodu. Ta rzecz ... nie zostanie zrozumiana przez młodszych programistów i wiem, co tam robisz, tylko dlatego, że widzę różnicę. Napisałem ten kod i znam każdą jego linię, a teraz ciężko mi go śledzić. Nie jest czytelny i piszę swój kod, więc wyjaśnia, co myślę. Powinieneś zrobić to, co ci każę - oznacza to, że nie dotykaj mojego kodu, a jeśli są błędy, po prostu napraw błąd i to wszystko.

OK, przyznaję, że jestem winny Nie stosowałem się do Code Convention do T, ale generalnie myślę, że moja wersja jest bardziej czytelna niż poprzednia.

Odwróciłem zmiany i po prostu naprawiłem błąd, który był kilka wierszy poniżej. Ale to mnie niepokoi, ponieważ jestem współwinny pozostawienia niechlujnego kodu. Nie jest to jedyne miejsce w bazie kodu, które ma długie wiersze i wiele instrukcji w jednym wierszu, ale przynajmniej nie musiałem spędzać z nim tylu iteracji.

Czy powinienem odpuścić, czy iść i porozmawiać z przełożonymi, jego menadżerami, ich menadżerami itp. Z jednej strony dla 3 linii będzie głupio, biorąc pod uwagę fakt, że niedawno dołączyłem, więc nie znają mnie tak dobrze, z drugiej strony to sprawa zasad i bardzo mnie to wkurza.

Wyjaśnienia:”

  • Osoba, z którą rozmawiałem w tej rozmowie, nie jest moim menedżerem, jest rówieśnikiem. Jesteśmy na tym samym poziomie. Jego postrzegany staż pracy wynika z faktu, że był tam dłużej niż ja.
  • Konwencja kodowania jasno mówi, że mogę zmienić kod, aby był zgodny z duchem konwencji kodowania. Konwencja została napisana przez jego bezpośredniego menedżera.
  • @Fattie - generalnie zgadzam się, że obie wersje kodu są śmieciami. Jestem fanem Wujka Boba, Grady Boocha, Kenta Backa, Martina Fowlera itd. Więc wiem, co sugerujesz. Teraz nie poszedłem na całość, aby uczynić go nierozpoznawalnym, ponieważ bałem się po prostu wdać się w ten spór terytorialny. W tym przypadku po prostu postępowałem zgodnie z konwencją.
  • Mam wrażenie, że niektórzy z was zakładają, że bycie nowym w tym miejscu oznacza niedoświadczony. Proszę, nie zakładaj tego.
  • Dla mnie czytelność kodu jest wstępem do łatwiejszej konserwacji w przyszłości. Wiem, że mogę iść na skróty i zostawić to tak, jak jest. W końcu zamierzam zmienić statek. Przyszli deweloperzy będą musieli sobie z tym poradzić. Nie muszę komplikować sobie życia o 3 linijki kodu. Chciałem tylko zebrać opinie, czy walka jest tego warta. Pod tym względem (w tym przypadku) najbardziej sensowna jest odpowiedź @ A.O.
Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (http://chat.stackexchange.com/rooms/68672/discussion-on-question-by-stankar0x-code-readability-conventions-and-should-i-l).
Patrząc na kod w starej edycji (i mówiąc jako programista): Myślę, że podzielenie długich, skomplikowanych wierszy na wiele wierszy to dobra zmiana, znacznie ułatwiająca czytanie.Część, w której wprowadzasz operator `%`, jest bardziej dyskusyjna.Prawdopodobnie stary kod był łatwiejszy do zrozumienia, szczególnie dla młodszych programistów, którzy mogą nie używać tego operatora często (z wyjątkiem FizzBuzz).Czy myślisz, że narzekałby tak gwałtownie, gdybyś tylko rozdzielił linie?To powiedziawszy, jego reakcja była bardzo słaba.Uważaj na tego gościa w przyszłości ...
Zgadzam się, operator mod (%) dodaje do oszustwa.Ale nawet bez tego jestem pewien, że reakcja byłaby taka sama.
Ogólnie uważam, że konwencje kodowania są często zbyt szczegółowe i ogólnie przeceniane.Służą one ważnym celom: unikają niebezpiecznych nawyków i sprawiają, że kod jest czytelny, częściowo poprzez redukcję różnic stylów w ramach wspólnego projektu.Skupianie się na szczegółach wykraczających poza te cele rozprasza i może przynieść efekt przeciwny do zamierzonego.Nie chcę być złośliwy, ale: Często podejrzewam, że ludzie, którzy koncentrują się na kodowaniu szczegółów stylu, cieszą się mocą przyznaną przez zasady, aby ingerować tam, gdzie inaczej nie mogliby.Rada: Skoncentruj się na substancji.To * może * obejmować istotne naruszenia zasad kodowania.
@Stankar0x, Odpowiedziałem na podobne pytanie lata temu na podstawie mojego doświadczenia sprzed ponad dekady.Możesz go przeczytać tutaj i być może będzie pomocny: [Jak powstrzymać się od refaktoryzacji działającego, ale okropnego kodu?] (Https://stackoverflow.com/questions/455271/how-do-you-stop-siebie-z-refaktoryzacji-działający-ale-okropny-kod / 455427 # 455427) Byłem wtedy na twoich butach i odkryłem, że są dobre powody, aby zostawić zły kod w spokoju (choć jest to bolesne).
Dwanaście odpowiedzi:
meriton
2017-11-12 23:04:19 UTC
view on stackexchange narkive permalink

Więc twój starszy i ty nie zgadzacie się co do tego, co oznaczają konwencje kodowania i który sposób jest bardziej czytelny. Sposobem na rozwiązanie tego problemu jest wyjaśnienie zrozumienia, aby wszyscy byli na tej samej stronie.

Dlatego zareagowałbym w następujący sposób:

S: Dlaczego robiąc to? Zmieniasz mój kod. Jesteśmy zespołem ...

J: Starałem się, aby było zgodne z konwencją kodowania. Mówi, że powinniśmy zrobić XXX i ulepszyć istniejący kod, gdy go zobaczymy?

A potem posłuchaj, co mówi i naprawdę spróbuj zrozumieć jego punkt widzenia.

Po zakończeniu debaty technicznej (i miejmy nadzieję, że nastroje opadły), odniosę się do społecznej strony jego opinii. Ponownie, najlepiej działa jako pytanie:

Co mam zrobić, jeśli w kodzie znajduje się coś, czego nie rozumiem lub myślę, że można to zrobić prościej?

I jeszcze raz słuchaj, czego chce.

Dzięki temu osiąga się kilka rzeczy:

  1. Jego raczej emocjonalna reakcja wskazuje, że jest emocjonalnie zaangażowany w swój kod i czuje swoją ekspercką ocenę lekceważony. Prosząc o jego wiedzę, pokazujesz, że cenisz jego wiedzę, która powinna uspokoić dyskusję.
  2. Komunikuje, że nie chciałeś go lekceważyć lub afiszować się z normami społecznymi. Raczej uświadamia mu to, że po prostu jeszcze nie wiedziałeś, czego się od ciebie oczekuje, i że próbujesz to naprawić.
  3. Wyjaśnia, czego się od ciebie oczekuje, aby uniknąć dalszych przypadkowych konfliktów.
_ „Wyjaśnia, czego oczekuje się od ciebie, aby uniknąć dalszych przypadkowych konfliktów.” _ Myślę, że współpracownik już to powiedział: „Dotknij mojego kodu jeszcze raz! Dotknij mojego kodu jeszcze raz!myślę, że zaangażowanie się w sugerowaną rozmowę będzie konstruktywne.
Słuchanie jest jednym z najpotężniejszych narzędzi do zdobywania zaufania.Czasami jesteśmy tak pochłonięci pokazaniem komuś, że nasza droga jest lepsza, że zapominamy, że nie ma znaczenia, czy nasza droga jest lepsza, jeśli nikt nam nie ufa.I od czasu do czasu możemy odkryć, że nasza droga nie jest lepsza!
@Fildor: W gniewie ludzie czasami wypowiadają pochopne stwierdzenia, które po spokojnej refleksji uznają za mniej niż doskonałe rozwiązania.W tym przypadku uważam, że powrót jest konieczny, ponieważ proponowane rozwiązanie nie jest trwałe: co ma zrobić OP, jeśli otrzyma zadania wymagające istotnych modyfikacji kodu tego seniora?
Generalnie w ten sposób podchodzę do tego rodzaju problemów.Chociaż podoba mi się twoja odpowiedź, w tym przypadku nie można jej zastosować.Próbowałem już wcześniej ocenić oczekiwania, ale zostałem zignorowany odpowiedziami typu: „No cóż, konwencja kodu nie jest przestrzegana” lub „Kod został napisany dawno temu, i tak nikt go nie czyta.Wszyscy w zespole to rozumieją i tak powinno być ”.
A.S
2017-11-12 21:12:50 UTC
view on stackexchange narkive permalink

Odpuść. Próbujesz pójść na kompromis między 3 lub 4 priorytetami: swoimi preferencjami, konwencjami kodowania, preferencjami starszego programisty, którego kod został zmieniony, oraz umiejętnością zespołu do zrozumienia kodu. Według starszego programisty jego styl kodowania ma sens dla zespołu. Zatem priorytety 3 i 4 można łączyć. Teraz jest między wami, konwencjami kodowania i starszym zespołem programistów +.

Pomiędzy tymi opcjami, konwencje zespołu i twoja relacja ze starszym programistą, moim zdaniem, mają większe znaczenie dla zdolności zespołu do wykonania pracy niż twoje preferencje i konwencje kodu.

Biorąc pod uwagę to, że jesteś nowy, radziłbym odpuścić i nauczyć się z tego, że to, co uważasz za słuszne, nie jest konieczne, co zawsze powinno się wydarzyć.

Podejrzewam, że inni tutaj mogą się cofnąć i zdecydowanie jest miejsce na inną kolejność priorytetów, ale prawdopodobnie jest to droga, którą wybrałbym, przynajmniej będąc stosunkowo nowym pracownikiem. Powodzenia!

Opierając się na cytacie ze współpracownika, pomiędzy groźbami, zastraszaniem i przesadą, bardzo wątpię, czy są one typem osób, które potrafią właściwie mówić w imieniu innych, biorąc pod uwagę opinię kogokolwiek innego.
Re * Według starszego programisty, jego styl kodowania ma sens dla zespołu. * Podejrzewam, że tak nie jest.To „jego kod”, że ten nowicjusz miał czelność dotknąć.Podejrzewam, że * nikt * nie dotyka jego kodu, ponieważ (a) jest całkowicie nieczytelny, ale magicznie wydaje się działać i (b) facet jest tak wrażliwy na temat „swojego kodu”, że każdy, kto ośmieli się go dotknąć, dostaje wykład.
@DavidHammen: Najbardziej toksyczny współpracownik w historii.Przypomina mi starszego kolegę, który był kompletnie nastawiony do recenzji kodu, ponieważ nie chciał, aby ktokolwiek przeglądał * jego * kod ...
Chociaż przeważnie zgadzam się z odpowiedzią, nie zgadzam się z uzasadnieniem _ „Według starszego programisty jego styl kodowania ma sens dla zespołu”. _ (1) Kod każdego ma sens dla siebie.Powinieneś sprawdzić opinie ** innych **.(2) Senior może egzekwować standardy kodowania w oparciu o bycie starszym, w pewnym stopniu niezależnie od standardu, który ustala.Fakt, że główny programista angażuje OP na poziomie _osobowym_ („dlaczego ** ty ** to robisz?” W przeciwieństwie do „standard kodowania jest [taki i taki]”) sugeruje, że główny programista decydujezamiast [..]
[..] zgodnie z ustalonymi wytycznymi, które są obiektywnie zdefiniowane.Jeśli istnieje taka ustalona wytyczna, powinien odnosić się do wytycznych, a nie do obrażania się działaniami OP, wyolbrzymiając twierdzenia o „100 latach łatwości konserwacji”, grożąc usunięciem dostępu OP do kodu lub arogancko twierdząc, że _ jego_ kod jest(jednoznacznie) nie dotykać.Jeśli cytat głównego dewelopera jest w jakikolwiek sposób dokładny, istnieje poważny problem z nadmierną pewnością siebie głównego dewelopera i proaktywnym zapobieganiem wszystkim, co wskazuje na jego uczciwy błąd (lub niedoskonałe rozwiązanie).
Każdy, kto mówi „to jest mój kod… nie dotykaj mojego kodu” natychmiast traci prawie całą wiarygodność w zakresie umiejętności komunikacyjnych i pracy zespołowej.Nawet jeśli ma rację co do tego, że jest lepszy, jest to najgorszy możliwy sposób, aby to wyrazić.Oczywiście nie znam wszystkich szczegółów i może po prostu miał zły dzień, ale tak toksyczna interakcja ze starszym programistą jest wystarczającą motywacją, aby zacząć dopracowywać swoje CV w wielu scenariuszach.
Stephan Branczyk
2017-11-13 08:17:56 UTC
view on stackexchange narkive permalink

Już cofnąłeś zmiany. Więc odpuść.

Biorąc to pod uwagę, następnym razem tak się stanie. Upewnij się, że nie ma miejsca na wahania przy interpretacji konwencji kodowania. Ponieważ, jeśli masz zamiar stoczyć z kimś bitwę, wybierz bitwę, w której masz 100% szans na wygranie.

Jest to ważne zwłaszcza jeśli nie masz tak dużego kapitału społecznego zarządzanie jak ta osoba.

Pamiętaj też, aby dodać testy jednostkowe, zanim zmodyfikujesz zbyt dużą część jego kodu. Jeśli wprowadzisz błędy do jego kodu, nigdy nie usłyszysz końca. A kiedy znajdziesz coś z jego strony, warto to zmienić. Następnie idź dalej, ale bądź ostrożny i przestrzegaj oficjalnych konwencji (a jeśli nie, oficjalne konwencje nie dotyczą konkretnego problemu, postępuj przynajmniej zgodnie z konwencjami Code Complete).

Jeśli narzeka do Ciebie, możesz po prostu powiedzieć mu, żeby walczył o zmianę konwencji kodowania, a kiedy uzyska zgodę na te nowe konwencje kodowania, które ma na myśli, z przyjemnością się im przyjrzysz i wdrożyć je, ale nie wcześniej.

Ponadto prawdopodobnie powinieneś poprosić kierownictwo o zorganizowanie cotygodniowych przeglądów kodu. W końcu, jeśli masz okazję omówić decyzje dotyczące kodowania podczas przeglądu kodu. Zapewni ci to bezpieczniejszy i mniej konfrontacyjny sposób zrozumienia i / lub zakwestionowania niektórych złych nawyków rówieśników.

+ 20zillionów za wspomnienie testów jednostkowych.; D Dzięki temu wprowadzanie zmian będzie niezmiernie bezpieczniejsze!
@akaioi Poszedłbym dalej.Nie dotykaj kodu, chyba że jest to konieczne do naprawienia niepowodzenia testu jednostkowego.Nie naprawiaj tego, co nie jest zepsute.
@emory, Nie zgadzam się.
@emory cała społeczność [codereview.se] nie zgadza się z tym stwierdzeniem.
@Mat'sMug, nie jesteś w stanie napisać pojedynczego testu jednostkowego, który zakończył się niepowodzeniem, ale nadal chcesz grzebać w kodzie.Albo kod jest doskonały, jak jest, albo tak naprawdę go nie rozumiesz.Pisz testy jednostkowe, aż znajdziesz błąd, a następnie dokonaj refaktoryzacji.
@emory no.Testy jednostkowe dotyczą tego, czy kod robi to, co powinien - a nie czy jest zaimplementowany w czytelny sposób.A jeśli twoje testy zmienią szczegóły implementacji w specyfikacje, wtedy twoje testy wyleją całą bazę kodu na cement.
@Mat'sMug, dlaczego miałbyś chcieć czytać kod inny niż (1) naprawianie błędu lub (2) dodawanie nowej funkcji.jeśli naprawiasz błąd, powinieneś zacząć od napisania tego negatywnego testu jednostkowego.jeśli dodajesz nową funkcję, brak tej funkcji oznacza niepowodzenie testu jednostkowego.jeśli czytasz kod dla przyjemności, zatrzymaj się i zrób prawdziwą pracę.
@emory - OP próbował naprawić błąd.Kod był słabo napisany i wymagał refaktoryzacji, a dopiero potem znaleziono błąd w innym miejscu (kilka linii poniżej refaktoryzowanej części).To absolutnie kod, który musiałbym zmienić tylko po to, aby go przestrzegać, a kiedy konfrontuje się z „starszym”, ich nastawieniem, podpowiedziałbym im, że nie naprawiałbym błędu, gdyby go tam nie zostawili inie musiałby reformować, gdyby spełniał standardy korporacji.Jedyne „wyjście”, które im dałbym, to to, że ta sekcja bazy kodu była wcześniejsza niż te (co może zrobić).
Jasper
2017-11-13 19:54:26 UTC
view on stackexchange narkive permalink

Wiele się dzieje

Dzieje się tu sporo rzeczy. Wiele z nich zostało już omówionych i krótko o nich wspomnę oraz o mojej wizji tego, co należy, a czego nie należy z nimi robić. Jest jednak jeden punkt, którego jeszcze nie widziałem, a który uważam za największy problem i omówię go bardziej szczegółowo.

Błędy Poprawki w stylu &

Naprawiłeś problem przy jednoczesnej zmianie kodu.

Moim zdaniem nie jest to duży problem, ale ogólnie lepiej jest trzymać osobne rzeczy w osobnych zatwierdzeniach. To wymagałoby dodania oddzielenia konfliktu od poprawki błędu również tutaj.

Różne poglądy

Nie zgadzasz się co do tego, która wersja jest lepiej zgodna z konwencjami, jest bardziej czytelna i bardziej do utrzymania.

Jeśli jest twoim seniorem, dobrze byłoby pójść za jego przykładem. Ewentualnie dobrze byłoby, gdyby ktoś z firmy spojrzał na kod razem z wami i spojrzał na niego z tych trzech perspektyw.

Trudny kod

kod był trudny do zrozumienia.

Uważam, że przydatne jest zadawanie pytań dotyczących kodu w takich sytuacjach, zwłaszcza jeśli wiesz, kto napisał kod (i / lub kod został napisany niedawno). Zadawanie pytań może zarówno doprowadzić cię do lepszego zrozumienia kodu, jak i pomóc drugiej osobie zrozumieć, dlaczego kod był trudny do zrozumienia na początku. Często prowadzi to do tego, jak sam kod może stać się jaśniejszy, co możesz następnie omówić przed jego wdrożeniem.

Atak

Druga osoba staje się dość agresywna, sugerując, że ty muszą się rozstać i udają się do twojego przełożonego, aby powstrzymać cię przed pewnym kodem.

Jak napisano, jest to dość poważne. Zależy to trochę od tego, w jaki sposób zachodzi różnica między faktycznymi rzeczami, które powiedział, a sposobem, w jaki go tu sparafrazowałeś, ale sam sposób, w jaki to napisałeś, powinien być powodem do rozmowy z przełożonym. Jeśli tak, nie mów o kodzie, ale o jego stosunku do ciebie, w którym wydaje się, że rozważa grożenie ci w porządku.

Jego kod

Nie chce, żebyś edytował jego kod.

Moim zdaniem to jest największy problem. Jest to dość toksyczne podejście i myślę, że uderza w sedno problemu. Programiści-hobbyści często bardzo chronią swój kod, a czasami można to zobaczyć w przypadku profesjonalnych programistów, którzy sami pracowali nad kodem. Jednak nie ma miejsca w żadnym profesjonalnym otoczeniu i jest wyjątkowo toksyczny, gdy jesteś odpowiedzialny za kod jako zespół.

Ostatecznie problem polega na tym, że kod nie jest jego. Kod należy do firmy lub zespołu, ale nie do niego. Zamiast tego jest to kod, który napisał. Myślę, że ważne jest, aby nie nazywać tego jego kodem, ale kodem, który napisał. Bez stwierdzenia, że ​​to nie jest jego kod lub poprawiania go, gdy mówi, że to jego kod, warto konsekwentnie nazywać go kodem, który sam napisał. Dotyczy to zarówno momentu, w którym omawiasz z nim sytuację, jak i podczas omawiania sytuacji z innymi członkami zespołu lub menedżerem.

Przede wszystkim powiedziałbym, że pozwoliłbym na ten incydent bądź tym, czym na razie jest. Jednak nie wychodziłbym też z drogi, aby uniknąć dotykania kodu, który napisał w przyszłości. Wygląda na to, że to znowu się pojawi, a chodzenie po skorupkach jajek przez cały dzień nikomu nie pomoże.

Zakładając, że jesteś w zespole składającym się z większej liczby członków niż wy dwoje, pierwszą rzeczą, jaką możesz zrobić, jest porozmawianie o problemie z innymi członkami zespołu. Zapytaj ich, czy doświadczyli tego samego zachowania i jak sobie z tym poradzili lub jak sobie z tym poradzili. Twoi współpracownicy to zasób, którego nie należy lekceważyć. Jeśli w Twoim zespole nie ma innych członków, możesz zamiast tego zapytać innych kolegów, którzy w przeszłości musieli z tą osobą współpracować.

W takim przypadku, jeśli ten programista okaże się nadopiekuńczy wobec napisanego przez siebie kodu przy innej okazji postaraj się zastosować sugestie kolegów. Poza tym możesz go również zapytać, czy jest zdenerwowany, ponieważ zmieniłeś kod, który napisał, lub że jego zdaniem zmiana wpływa negatywnie na kod. Są to dwie zupełnie odrębne kwestie i ważne jest, aby uświadomić mu, że tak jest.

Po tym momencie wydaje się, że nadszedł czas, aby eskalować problem. Porozmawiaj z kierownikiem zespołu lub menedżerem (w zależności od tego, który jest bardziej odpowiedni) i wyjaśnij im, że ta osoba wydaje się mieć problem z dotknięciem napisanego przez siebie kodu. Chociaż jesteś otwarty na dyskusję na temat jakości dowolnego kodu (którym powinieneś być), wydaje się, że wydaje się, że to fakt, że ta osoba chce, aby kod, który napisał, nie był dotykany (przez Ciebie - jeśli takie jest Twoje wrażenie jest). Wyjaśnij, jak to fałszywie dzieli własność, odpowiedzialność i zrozumienie kodu oraz jak to jest szkodliwe dla produktu i zwiększa sposób, w jaki firma polega na określonych ludziach. (Oczywiście takie wyjaśnienie nie powinno być prawie tak szczegółowe podczas rozmowy z kierownikiem zespołu, jak w przypadku rozmowy z menedżerem).

Podsumowując

Zasadniczo, Myślę, że najważniejsze jest wyodrębnienie poszczególnych problemów i indywidualne podejście do nich. Powinno to również znacznie ułatwić radzenie sobie z każdym z nich, ponieważ teraz wiesz, co się dzieje.

+1 dla kodu hobbystów - wielu starszych programistów pochodzi z tej szkoły hobbystów / RockStar, gdzie „błędy robią tylko inni ludzie” i potrzeba sporo autorefleksji i doświadczenia, aby zrozumieć, dlaczego wszyscy potrzebujemy innych aspektów oprogramowaniainżynieria, taka jak testowanie jednostkowe i czytelność.
Doceniam rozwiązanie problemu tak, jak ty.Zwykle używam techniki Martina Fowlera i na bieżąco zmieniam kod, aby nadać mu sens lub go uprościć.Tak więc zmiany stylu i poprawki błędów, a także trudny kod są przez niego rozwiązywane.Jest to świetne rozwiązanie, gdy masz testy jednostkowe na poparcie swoich założeń.Ale działa również, gdy wykonujesz test ręczny podczas ścigania błędów.Również wtedy, gdy pierwotni programiści są niedostępni lub gdy ludzie są zajęci i nie chcą lub nie mają czasu na omawianie z tobą szczegółów. [..]
[..] Oto kilka referencji dla tych z Was, którzy są tym zainteresowani: [link] (https://martinfowler.com/distributedComputing/refactoring.pdf) lub jego książka: Refactoring Improving the Design of Existing Code.
@Stankar0x Ciekawa lektura (choć trochę przestarzała).Nie jestem do końca pewien, że to właśnie sugerujesz, ale pod nagłówkiem „Błędy i poprawki stylu” nigdy nie chciałem powiedzieć, że nie powinieneś tego robić.Chciałem tylko powiedzieć, że może być lepiej zrobić refactor-commit-refactor-commit-fix-commit, zamiast refactor-refactor-fix-commit.Wiem, że jestem trochę po skrajnej stronie, jeśli chodzi o oddzielanie różnych rzeczy w różnych zatwierdzeniach, ale mówiłem, że jeśli poprawka znajdowała się kilka linii poniżej refaktoryzacji, mogłaby pomóc w rozwiązaniu problemutrochę, gdyby były oddzielnymi zatwierdzeniami.
akaioi
2017-11-13 12:29:13 UTC
view on stackexchange narkive permalink

Widziałem kilka odpowiedzi „Odpuść sobie”. Nie mogę się z tym zgodzić, ponieważ problem będzie się powtarzał.

Zespół potrzebuje standardów, szczególnie po to, aby uniknąć takich kłótni. Powiedziałbym, żebym ponownie porozmawiał ze swoim współpracownikiem, kiedy temperament nieco opadnie. Poproś go, aby przejrzał z tobą standardy kodowania i wspólnie ustalili - jeśli to możliwe - jak Twoim zdaniem powinien być zorganizowany kod. Jeśli wszyscy dojdziecie do porozumienia, coolio. Jeśli nie, bez urazy rozpoznaj, że po prostu nie jesteś na tej samej stronie, i poproś menedżera o pomoc w rozwiązaniu problemu.

Usunąłeś swój konkretny przykład (który uważałem za zły, oferuje jakiś kontekst), ale pozwólcie, że dodam tylko jedną rzecz ... Ta potencjalnie trudna część (zwiększanie liczby modulo indeksu w celu zawinięcia do 0) powinna być zrozumiała dla J Random Programmer, ale nie zaszkodzi wpaść w szybki numerek komentarz na początku wiersza jako przypomnienie ...; D

Zgadzam się, że konkretny przykład był pomocny i jest związany z modulo: ponieważ nie ułatwił odczytywania obliczenia wskaźnika, zmienił obliczenie wskaźnika.To był stary indeks + 1> = liczba?0: oldIndex +1;new is oldIndex +1% count.oldIndex wartość 4 i liczba 3, stary = 5> = 3 wynik 0. Nowy = 5% 3 wynik 2. Być może tak się nie stanie, nadal ... kod ma zarówno składnię, jak i semantykę.Zmiana semantyki wpływa na czytelność - zmienia koncepcję, nawet jeśli nie zmienia wyniku.Naprawienie błędu granicznego w pętli for nie zmienia intencji, przepisywanie za pomocą LINQ może.
IMO w tym przypadku modulo zmieniło nie tylko obliczoną wartość, ale także koncepcję tego, co się dzieje.Teraz oldIndex jest indeksem opakowalnym lub kołowym, gdzie 0, 10 i 2,145,690 są tymi samymi, jednakowo poprawnymi wartościami dla liczby 10.
Flummox - don't be evil SE
2017-11-13 19:14:29 UTC
view on stackexchange narkive permalink

Nie sądzę, żebyś odpuścił: Twój kolega bardzo chroni napisany przez siebie kod. Więc za każdym razem, gdy zmienisz fragment kodu, który napisał i nie zawiera on błędu, jest bardzo prawdopodobne, że przyjdzie z Tobą „porozmawiać” o tym.

A Twój kolega próbuje Cię zastraszyć, nie pomyl się.

Po pierwsze , kod, nad którym oboje pracujesz, nie jest jego ani twój. Jest własnością tego, kto ci płaci.

Po drugie , nie powinieneś robić tego, co mówi, że powinieneś robić, chyba że jest twoim szefem, a on nie. Powinieneś robić to, czego żąda od ciebie pracodawca.

Po trzecie , zgadzam się z tobą, że powinieneś zostawić rzeczy lepsze od tego, co znalazłeś, więc uczynienie kodu bardziej czytelnym jest dobra rzecz.


Nie chcesz więc komplikować sobie życia trzema liniami kodu. Dobrze na tobie! Ale co zamierzasz zrobić następnym razem?

Sugeruję, aby następnym razem zaangażować kierownika / menedżera zespołu. Zobacz punkty, jeden, dwa i trzy.

Chociaż wszystkie są ważne, ta sytuacja mi się przytrafiła i mogę doradzić, aby uniknąć konfliktu i skalowania.Ludzie nie są logiczni, starszy facet może upaść, to zniewaga: „Twój kod jest kiepski, zmienię wszystko w taki sposób, żebyś wyglądał żałośnie”. Tak, ludzie mogą być tak wrażliwi.Kierownictwo jest zawsze pełne problemów i może pomyśleć „o rany, teraz muszę tracić czas na rozwiązywanie konfliktów z dwojgiem dużych dzieci i dlaczego nowi faceci tracą czas na naprawianie działającego kodu, jeśli jest brzydki”.Oczywiście to zależy od Was, kolegów.Jeśli jestem starszy, nie mogę się tym przejmować.
Konflikty członków zespołu to najszybszy sposób na uprzykrzenie sobie życia
@jean, zgadza się, że konflikty członków zespołu są nieszczęśliwe, ale kolega z tego miejsca może zaczynać taką sytuację.Myślę, że najlepiej rozwiązać tę sytuację, czyniąc z niej problem lidera zespołu, to jego / jej zespołu.
IMil
2017-11-13 17:55:35 UTC
view on stackexchange narkive permalink

Chociaż Twój „starszy” rówieśnik mógł przesadzić, powinieneś również wziąć pod uwagę możliwość, że miał on w pewnym sensie rację.

Niestety, zmiany usunęły sam kod: być może jest to zazwyczaj lepsze użytkownicy spoza IT, ale w tym przypadku utracono ważną informację.

Sposób, w jaki to widzę, poprawił czytelność kodu według większości formalnych metryk: warunki są bardziej logicznie zorganizowane, są szelki i takie tam. Jednak wprowadzenie przez ciebie operatora % (reszta liczby całkowitej) jest sprytną sztuczką, która zmyli 90% młodszych programistów i najwyraźniej również seniorów. Teraz zbyt rozwlekły kod jest zły, zbędne testy są złe, ale sprytne sztuczki są po prostu okropne, chyba że masz pewność, że wszyscy programiści są co najmniej tak sprytni jak ty. I masz już dowód, że tak nie jest.

Ponadto, chociaż dokumenty Twojej firmy mówią, że powinieneś „poprawiać kod, który nie jest napisany w tym stylu”, prawdopodobnie lepiej byłoby wspomnieć takie zmiany pierwotnego autora, jeśli jest dostępny. Szybka wiadomość w stylu „Słuchaj, miałem problemy z debugowaniem tego kodu, nie sądzisz, że w ten sposób jest bardziej czytelny?” mogło zaoszczędzić wam obu kłopotów.

+1 za prośbę o wejście przed dokonaniem zmiany.To może już rozładować tego rodzaju sytuacje, zanim do nich dojdzie.Większość ludzi z tak silnym poczuciem własności kodu poradzi sobie ze zmianami, jeśli mogą zostawić swój ślad lub zrobić to razem.
Sztuczka jest sprytna tylko wtedy, gdy działa.W tym przypadku użycie% zamiast warunku zmienia zachowanie.Wynikowy kod może być nieprawidłowy.Podstępny poprawny kod jest zawsze lepszy niż „wyczyść” niepoprawny kod.Oczywiście zachowując ostrożność, można uzyskać jasny i poprawny kod.
@Brandin IMHO nie nastąpiła zmiana zachowania.Oryginalny kod mówił w zasadzie: (jeśli x + 1> = długość to 0 w przeciwnym razie x + 1).Sprytną sztuczką było przepisanie go na ((x + 1)% długości).To jest dokładnie to samo.Główna różnica polega na tym, że Sztuczka Cleaver nie jest oczywista.
Bryan Goggin
2017-11-12 22:35:01 UTC
view on stackexchange narkive permalink

Kiedy jesteś nowy, zwykle dobrze jest poświęcić trochę czasu na obserwację dynamiki i wyczucie zespołu itp., zanim podejmiesz się wprowadzenia jakichkolwiek dużych zmian. Dobra praktyczna zasada brzmi: „Jeśli coś nie jest zepsute, nie naprawiaj tego” lub następstwem tego: „Gdyby było zepsute, ktoś by to teraz naprawił”. Jeśli kod, o którym mowa, był dużym problemem, prawdopodobnie zostałby (a przynajmniej powinien zostać już naprawiony). Możliwe, że część kodu, który napotkasz w tym zadaniu, będzie wymagała naprawy, ale poczekaj, aż jesteś lepiej zaznajomiony z systemem grupy, zanim zdecydujesz, czy jakikolwiek taki kod się kwalifikuje.

Pomimo tego, ile wysiłku włożono w opracowanie uniwersalnych standardów kodowania / dokumentacji, KAŻDE MIEJSCE PRACY BĘDZIE POSIADAŁ WŁASNE STANDARDY i potrzeba czasu, aby wywnioskować, co to dokładnie jest.

Do ** CAPS **… Normy w sposób oczywisty nie są standardami, jeśli trzeba je „wywnioskować”… Są standardami, jeśli są jasno zdefiniowane w dokumentach strategicznych.Coś, co istnieje tylko jako zbiór dynamiki społecznej i konwencji, przekazywanych jedynie przez obserwację, nie jest standardem.Żadne miejsce pracy nie jest w stanie tego wymusić, zwłaszcza agresywnością współpracownika.Nie sądzę, aby rada, aby usiąść i się zamknąć, jest dobra;jeśli pracodawca PO ma formalne standardy, ma prawo być zaskoczony taką sprzeczną i dobitną nagrodą za przestrzeganie (zakładając, że dobrze to przeczytają)
Czy to tylko podwójny [wrzask] (https://newrepublic.com/article/117390/netiquette-capitalization-how-caps-became-code-yelling) czy potrójny, kiedy wszystko jest WIELKIE LITERY ** I POGRUBIONE **?:)
* Gdyby było zepsute, ktoś by to teraz naprawił. * - najwyraźniej nigdy nie pracowałeś nad odpowiednim starym kodem.:)
@underscore_d Och, uwierz mi, zgadzam się z każdym słowem, które powiedziałeś.Jednak w praktyce wydaje mi się, że oboje wiemy, jak rozmyte mogą być niektóre „standardy:”.
@cale_b Nie, chodziło bardziej o podkreślenie.Zobacz inne odpowiedzi, w których nagłówki są pogrubione lub duże.Robiłem to w środku zdania, aby podkreślić główny punkt.
Danikov
2017-11-13 17:22:05 UTC
view on stackexchange narkive permalink

Możesz pozwolić temu incydentowi minąć, ale nie powinieneś czuć się źle. Musisz tylko wybrać swoje bitwy.

Twoja mentalność jest absolutnie poprawna. Ilekroć wracamy do starego kodu, jeśli nie jest on łatwy w utrzymaniu, musimy najpierw go zrozumieć. Kiedy to zrozumienie zostanie osiągnięte, jeśli nie udokumentujemy lub nie ułatwimy drogi do tego zrozumienia, marnujemy czas dalszych opiekunów w przyszłości, podobnie jak oryginalny programista obniżył ten koszt. Dlatego obowiązkiem każdego programisty wartego swojej soli jest dokumentowanie lub ulepszanie kodu na bieżąco (to drugie jest mniej ryzykowne, gdy masz solidny i wyczerpujący zestaw testów, który zapewnia, że ​​refaktory i ulepszenia nie psują funkcjonalności). Pozostawianie komentarzy nie jest idealne, ale pozostawia zapach, że kod potrzebuje trochę miłości w przyszłości.

Twój zespół również stosuje właściwe podejście do konwencji kodowania. Konwencje to nie zasady, więc musi istnieć możliwość ich łamania, gdy ma to sens. Ale reprezentują ideał, który nie zawsze był osiągany, i bardziej praktyczne jest egzekwowanie konwencji kodowych w nowym i zaktualizowanym kodzie, niż wyczerpująca refaktoryzacja. W idealnym projekcie kod nigdy nie powinien wyglądać tak, jakby ktoś go napisał. Dzięki temu wszyscy programiści mogą sprawdzić swoje ego przy drzwiach i traktować kod jako kod zespołu, martwić się o jakość kodu, a nie o to, kto co napisał.

To prowadzi nas do Twojego współpracownika. Ich zachowanie nie jest niczym niezwykłym, jak mogłoby się wydawać, ponieważ programiści mają tendencję do odczuwania dumy i własności nad swoim kodem (lub czasami starają się obwiniać innych tylko po to, aby zobaczyć siebie w historii) i mogą rozwinąć ego pomimo wysiłków, aby temu przeciwdziałać . Inni w ogóle się nie opierają. „Mój kod” to złe podejście, cały kod powinien należeć do zespołu. Istnieje niespójność między jego twierdzeniem, że zakodował rzeczy tak, aby były zrozumiałe dla zespołu, jeśli jest to sprzeczne z wytycznymi zespołu dotyczącymi kodowania. Daje do zrozumienia, że ​​jest to zakodowane tak, aby było zrozumiałe najpierw dla niego, a nie dla zespołu, i jest zdenerwowany, że zrujnowałeś jego rozumienie, mając odwagę zmieniać rzeczy (cały dobry kod powinien być napisany tak, aby był łatwy do utrzymania i usunięcia nie bądź nieśmiertelny).

Pogarsza się, gdy twierdzi, że nigdy nie możesz zrozumieć jego kodu i grozi, że wykorzystasz jego wpływ, aby wyrzucić Cię z pracy. Samo to jest ogromnie nieprofesjonalne, ale w odpowiedzi na niewielkie formatowanie jest ogromnie nieproporcjonalne.

Musisz wybierać swoje bitwy, a ja odpuściłem stronę formatowania. Jeśli jesteś nowy w zespole i ktoś mówi, że nie przestrzegasz konwencji kodowania, wszystko, co naprawdę możesz zrobić, to oprzeć się jego doświadczeniu i zasugerować aktualizację dokumentacji, jeśli stała się myląca. Jeśli powoduje to tarcia, musisz zaapelować do szefa, ponieważ trzymanie jednego standardu na papierze, a drugiego w praktyce (szczególnie na żądanie poszczególnych programistów) jest niezgodne i podważa.

Jednak bardziej prawdopodobne jest, że skupię się na zagrożeniu, które jest skierowane przeciwko tobie. Jeśli zostało to zrobione ustnie, nie masz w tym momencie dobrych dowodów i nie masz dobrej opcji, aby działać w tym momencie, ale będę bardzo ostrożny w stosunku do niego w przyszłości i spróbuję uzyskać wszystko, co powie na piśmie, np. jak najwięcej interakcji za pośrednictwem poczty elektronicznej. Jeśli ponownie zagrozi Ci na piśmie, możesz zacząć rozmawiać o tym z szefem. Sądząc po dźwiękach rzeczy, jego ego jest na tyle kruche, że prędzej czy później znowu będziesz miał z nim problemy.

Problem może się zdarzyć, jeśli nie znasz prawdy z krainy. Jeśli ten facet naprawdę jest tak zły, jak się wydaje, możliwe, że zostały przez niego napisane duże fragmenty kodu i nikt poza nim nie może ich obsługiwać. W związku z tym skutecznie uczynił siebie niepożądanym, ponieważ firma nie może sobie pozwolić na utratę go, co umożliwiło jego kiepskie zachowanie. Może to być dobre w perspektywie krótkoterminowej, jeśli chodzi o bezpieczeństwo pracy, ale w dłuższej perspektywie jest to degeneracja, efekt przeciwny do zamierzonego i może zrujnować Twoją reputację. Nie aspiruj do tego.

Mając to na uwadze, uważaj, aby nie dawać firmie możliwości wyboru, ponieważ interesy firmy będą stawiać na pierwszym miejscu. Traktuj swoją obecną pracę jako doświadczenie w radzeniu sobie z trudnymi ludźmi. Spędź czas z kolegami i dowiedz się, jak sobie radzą z tym facetem, i nie przegap okazji, by nauczyć się od nich innych rzeczy. W międzyczasie miej oko na inne okazje i bądź gotów wylądować na nogach, na wypadek gdyby miał przewagę i wyrzucił cię z powodu innego domniemanego wykroczenia.

L.Dutch - Reinstate Monica
2017-11-12 21:09:43 UTC
view on stackexchange narkive permalink

Odpowiedź na to w dużej mierze zależy od ogólnego podejścia do „przestrzegania procesów” w firmie i powinieneś już mieć to przeczucie.

Pracowałem w firmie, która była, na papierze, z certyfikatem ISO9001, ale dyrektor generalny zawsze podsłuchiwał nam zapytania ofertowe składane przez szybkie i niekompletne rozmowy telefoniczne, chociaż mieliśmy formularz zapytania, w którym można było zebrać wszystkie informacje. Prawdopodobnie domyślasz się, że w tym przypadku egzekwowanie standardów było przegraną bitwą.

Masz dwie możliwości:

  1. Firma ma kulturę przestrzegania procesów : masz rację postępując zgodnie z firmową konwencją kodowania, a jeśli sprawa ulegnie eskalacji, po prostu wyjaśnij, że postępujesz zgodnie ze standardem.
  2. Przestrzeganie procesu jest tylko na papierze : zapomnij o instrukcji i postępuj zgodnie z „wskazówką” tego seniora.
Zgodność procesu jest tylko na papierze.Klucz do przetrwania, nie podejmuj jednostronnych decyzji i upewnij się, że dokumentujesz swoje przestrzeganie procesów firmy, w trzech egzemplarzach, jeśli możesz.Jeśli ktoś sprawdza rzeczywistą produktywność, być może będziesz musiał podjąć pewne ryzyko i zrobić coś kreatywnego, ale uważaj, aby się nie wyróżniać.
Hotlush
2017-11-13 19:32:11 UTC
view on stackexchange narkive permalink

„Konwencja kodowania jasno mówi, że mogę zmienić kod, aby był zgodny z duchem konwencji. Konwencja została napisana przez jego bezpośredniego przełożonego”.

Nie mogę przestać myśleć, że to jest straszna dyrektywa. Mimo wszystko oznacza wygenerowanie biletu na „ulepszenie” określonej sekcji kodu lub dostosowanie go do standardu, ale „zmień to, jeśli nie podoba ci się wygląd” to przepis na katastrofę. Jak kontrolujesz te zmiany, gdy są one wprowadzane w ramach innej poprawki? Jak testujesz zmiany?

Timothy Truckle
2017-11-14 15:23:02 UTC
view on stackexchange narkive permalink

O ile widzę, twój problem z kodem rówieśników to formalna konwencja kodowania, którą rozumiesz inaczej niż starszy.

Istnieje wiele narzędzi, które automatycznie formatują kod za pomocą zestawu konfigurowalnych reguł. Nie pozostawiają wiele miejsca na interpretację konwencji.

Tak więc podczas regularnego spotkania zespołu (najlepiej retrospektywy scrum) możesz odnieść się do dyskusji z seniorem i powiedzieć, że czujesz się niezadowolony z sytuacji, a następnie zasugerować, aby Twój zespół (a przynajmniej używając takiego automatycznego programu formatującego i wyznacz seniora do skonfigurowania zestawu reguł.

Następnym razem, gdy zmienisz kod seniora (aby naprawić błąd), ponowne formatowanie jest wykonywane przez narzędzie, które skonfigurował. Ciekaw jestem, jak może wtedy obwiniać cię ...



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...