Radzisz sobie ze współpracownikami, którzy nie mają spójnego stylu kodowania?

30

Co robisz, gdy pracujesz z kimś, kto ma tendencję do pisania złym stylistycznie kodem? Kod, o którym mówię, jest zwykle poprawny technicznie, ma rozsądną strukturę, a nawet może być algorytmicznie elegancki, ale po prostu wygląda brzydko . Mamy:

  • Mieszanina różnych konwencji nazewnictwa i tytuły ( underscore_stylei camelCasei UpperCameli CAPSwszystkie zastosowane mniej lub bardziej losowo do różnych zmiennych w tej samej funkcji)
  • Dziwne i niespójne odstępy, np Functioncall (arg1 ,arg2,arg3 );
  • Wiele błędnie napisanych słów w komentarzach i nazwach zmiennych

Mamy dobry system sprawdzania kodu, w którym pracuję, więc musimy przyjrzeć się i naprawić najgorsze rzeczy. Jednak wysyłanie recenzji kodu, która składa się z 50 wierszy „Dodaj spację, jest naprawdę błahostką. Poprawnie przeliteruj„ itarator ”. Zmień tę wielkość liter. Itd.”

Jak zachęciłbyś tę osobę do większej ostrożności i zgodności z tego rodzaju szczegółami?

JSB ձոգչ
źródło
2
Pomoc „Ładnych drukarek”. Ponadto, czy Twoja firma ma przewodnik po stylu?
chrisaycock,
1
co ze współpracownikami, którzy nie mają żadnej gramatyki? ;)
Muad'Dib,
4
@JSBangs: zainstaluj moduł sprawdzania stylu przed zatwierdzeniem i odmawiaj zatwierdzeń. Dzięki temu szybko sformatują się poprawnie. Lub poproś, aby hak poprzedzający zatwierdzenie uruchomił dla ciebie formater. Niektóre rzeczy będą wyglądać, ale wydaje mi się, że to lepsze niż dziwne, lepsze niż „okropne”.
haylem,
3
Jeszcze jedna myśl - może się to wydawać małostkowe, ale ma niewielkie znaczenie dla celu (zakładając, że a) istnieje standard kodowania i że b) wszyscy inni się z nim zgadzają i przestrzegają go)
Murph
3
Jakie jest tło tego programisty? Wygląda na to, że pracował dla zbyt wielu różnych firm, posiadających zbyt wiele różnych konwencji formatowania kodu, a jego mózg zinternalizował je wszystkie w pomieszany bałagan. :-)
Carson63000,

Odpowiedzi:

19

Uzgodnij konwencję kodowania

Nawet jeśli jest to jeden pager. Sugeruję, aby cały zespół usiadł i wszyscy zgodzili się na podstawową roboczą konwencję kodowania, z której może korzystać cały zespół.

Ciemna noc
źródło
1
Absolutnie - wtedy a) wszyscy starają się osiągnąć ten sam standard i wiedzą, co to jest, oraz b) twoje odrzucenie podczas przeglądu kodu można zredukować do „nie przestrzega standardów kodowania” (przynajmniej jeśli plik jako całość jest bałagan - jeśli to tylko jedna lub dwie rzeczy, musisz być konkretny)
Murph
Zwykle nigdy nie widziałem zespołu, który potrafiłby „zgodzić się” w ciągu godziny na pełną konwencję kodowania dla dowolnego języka :) Ale jeśli się zgadzasz, masz na myśli „dyskutuj do nieporozumienia, a następnie narzucaj według rangi i autorytetu”, to że Prace. Musisz oprzeć się na niektórych punktach, ponieważ nie znajdziesz konsensusu lub masz szczęście ze swoim zespołem.
haylem,
28

Myślę, że po prostu musisz robić to, co robisz. Miej jasny zestaw wytycznych dotyczących kodowania i egzekwuj je podczas przeglądów kodu. Jeśli deweloper otrzyma 50 lub 100 wierszy „Dodaj miejsce tutaj” i „Poprawnie iterator pisowni” za każdym razem, gdy próbuje coś sprawdzić, a tak naprawdę nie jest w stanie się zalogować, zanim wszystkie te zostaną naprawione, ostatecznie Będę musiał zacząć pisać czystszy kod, aby uniknąć kłopotów.

Myślę, że jeśli naprawisz te rzeczy sam, jak sugerował NimChimpsky, będziesz sprzątał po tej osobie na zawsze.

Dima
źródło
5

Wzywam BS wszystkich, którzy twierdzą, że błędy w pisowni nazw zmiennych i formatowanie nie mają znaczenia. Oczywiście przeczytali tylko własny kod. I zauważ to słowo tutaj - przeczytaj. Wyobraź sobie, że czytasz książkę z dużą ilością błędów ortograficznych, niepoprawnie sformatowanego formatowania, niespójnych odstępów między wierszami i różnych innych lenistw rozpowszechnionych w wielu kodach źródłowych. Byłoby to nudne.

Dla zawodu, w którym składnia musi być w 100% poprawna, nie ma po prostu usprawiedliwienia dla żadnego prawdziwego programisty, aby nie mieć czystego, spójnego stylu kodu. Wszystko inne to niechlujstwo i lenistwo. Zawsze kwestionuję poprawność sformatowanego kodu w implementacji.

HardCode
źródło
4

Mamy dobry system sprawdzania kodu, w którym pracuję, więc musimy przyjrzeć się i naprawić najgorsze rzeczy. Jednak wysyłanie recenzji kodu, która składa się z 50 wierszy „Dodaj spację, jest naprawdę błahostką. Poprawnie przeliteruj„ itarator ”. Zmień tę wielkość liter. Itd.”

Zmieniłbym to sam, a następnie dodałem uprzejmy komentarz w kodzie.

zakłada to, że istnieje już przewodnik po stylu, jak podano w pytaniu:

Mamy dobry system sprawdzania kodu

Tak więc moja sugestia jest ostatecznością. Uważam, że równie szybko mogę ją zmienić i zostawić komentarz, jak wysłać wiadomość e-mail lub cokolwiek innego.

Nim Chimpsky
źródło
10
To szybko się starzeje.
Robert Harvey
3
Prawdopodobnie jest to szybsze niż wysłanie wiadomości e-mail i ogólnie szybsze rozwiązanie problemu, ale jest wolniejsze niż w przypadku, gdy problem nie występuje w pierwszej kolejności.
haylem,
4

Myślę, że konwencje, takie jak nazywanie klas i zmiennych, są ważne i powinny być przestrzegane, również elegancki i wydajny kod, ale ryzykując wielokrotnym odrzuceniem mojej odpowiedzi, muszę powiedzieć, że ogólnie paradygmat „ładnego kodu”, który jest bardzo popychany jest w IMHO bardzo przereklamowany.

Po pierwsze, programista, który go napisał, będzie musiał przede wszystkim go utrzymać, a jeśli kiedykolwiek trafi go autobus, a inny programista nie będzie w stanie zrozumieć, jak to działa, ponieważ kod nie jest „ładny”, powiedziałbym, że drugi programista i tak nie jest zbyt dobry. Istnieje wiele automatycznych formaterów / upiększaczy, więc każdy może użyć ich do upiększenia kodu, jeśli to konieczne, bez marnowania czasu będąc „w przepływie” / „w strefie”.

Należy pamiętać, że nie zalecam tutaj kodowania w stylu spaghetti / kowboja, w rzeczywistości widziałem bardzo ładnie sformatowany kod spaghetti (ciała funkcji obejmujące 4-5 ekranów, zmienne globalne rozproszone wokół różnych plików kodu źródłowego, ogólnie złe nazwy) itp.).

Jas
źródło
Co powiesz o takim kodzie: stackoverflow.com/questions/6221098/save-mapview-as-a-bitmap/… Czy nadal uważasz, że programista, który ma do czynienia z tym „stylem”, jest złym programistą, jeśli: masz z tym poważny problem?
WarrenFaith
@WarrenFaith, możesz ponownie przejrzeć mój trzeci akapit, szczególnie ten fragment tutaj: „Pamiętaj, że nie zalecam tutaj kodowania w stylu spaghetti / kowbojskim ...”.
Jas
3

Jeden z moich kolegów pisze HTML w taki sposób, że skóra mi się czołga. Wyobraź sobie mój html ładny i uporządkowany z dwoma wcięciami spacji, zhakowanymi na kawałki tagami dodanymi na końcu mojego, które kończą się na tej samej linii lub na następnej, jak jakiś pijany, który musi objąć cię ramieniem, aby stać. Nowe linie rzadko są wcięte, ale jeśli tak, to jestem pewien, że w pewnej części galaktyki jest jakaś chaotyczna czarna dziura wypluwająca irracjonalne wartości temperatury w taki sposób, że jej cyfry odzwierciedlają liczbę spacji lub tabulatorów używanych w takim wcięciu przez tę kobietę. Jeśli będę miał szczęście, zobaczę tag wejściowy, który jest zamknięty za pomocą „ </input>”. Całkowity koszmar, który możesz zrozumieć.

Wydaje się, że nikt też tego nie rozumie, widząc, jak dla większości wyższych tutaj, zorganizowany kod lub niezorganizowany kod jest dla nich różnicą między naszym nakładaniem szwajcarskiego sera lub amerykańskiego sera na nasze kanapki, co oznacza, że ​​naprawdę mogliby się mniej przejmować. Zacząłem się przesuwać, ponieważ byłem zestresowany innym projektem i myślę, że zaczęła zdawać sobie sprawę, jak trudno było zrozumieć taki kod, zanim chciała poprawić. Moją radą byłoby wykazanie, dlaczego lepiej stylizować kod, niż po prostu poinstruować go, aby to zrobił.

Neil
źródło
3

Kod, o którym mówię, jest zwykle poprawny technicznie, ma rozsądną strukturę, a nawet może być elegancki algorytmicznie ...

Ciesz się, że masz to wszystko. Większość programistów da ci pierwszą rzecz na tej liście. Myślę, że zmienne nazewnictwo i odstępy to najmniej ważna rzecz, o którą należy się martwić.

jjnguy
źródło
3
Programiści spędzają więcej czasu na czytaniu kodu niż na pisaniu kodu. Jeśli kod jest nieczytelny, koszt jego rozszerzenia lub utrzymania staje się ogromny. A jeśli nazwy zmiennych są niespójne, zawierają błędy i nie mają charakteru opisowego, kod staje się nieczytelny.
Dima,
@Dima, prawda, ale ten kod, który działa i jest elegancki, jest już łatwiejszy do odczytania niż kod, który jest zepsuty i nieelegancki.
jjnguy,
1
Chodzi mi o to, że powinieneś być w stanie spojrzeć na nazwę zmiennej, nazwę klasy lub nazwę funkcji i od razu wiedzieć, jak jej używać bez konieczności przekopywania całej bazy kodu. Powinieneś być także w stanie wpisać nazwę zgodnie z konwencjami i uzyskać ją poprawnie bez konieczności wyszukiwania. Polecam przeczytanie „Czystego kodu” Roberta C. Martina.
Dima,
@Dima, zgadzam się, że zmienne powinny mieć opisowe nazwy. OP nie wspomina, że ​​nazwy są złe, tylko że są niespójne.
jjnguy,
1
Z mojego doświadczenia wynika, że ​​imiona, które są niespójne, wydają się być również nieopisowe. Ale jest inny problem. Kiedy nazwy są niespójne, dłużej trwa pamiętanie, jakie są, i musisz poświęcić czas na ich wyszukiwanie. Dobre IDE może nieco pomóc, ale nie rozwiązałoby to całkowicie problemu. Programowanie już obciąża twój mózg, więc chcesz w jak największym stopniu zmniejszyć ilość mapowania mentalnego i podwójnej kontroli.
Dima,
2

Wygląda na to, że musisz skonfigurować i zaakceptować konwencję stylów. Jeśli tego nie zrobisz, będziesz mieć biblioteki z 3 wcięciami spacji, inne z 4, niektóre używające Camel Case i inne wykorzystujące underscore_case.

pszenica
źródło
2

Czy zmiany, które chcesz wprowadzić do swoich osobistych preferencji, czy też masz jakiś rzeczywisty standard do naśladowania? Jeśli nie masz rzeczywistego standardu, nie rób tego. Najpierw ustal standard. Następnie można uzyskać oprogramowanie, które można ustawić tak, aby kod był refaktoryzowany do ustawień standadrd (przynajmniej niektóre rzeczy).

Jeśli masz standard, zacznij go egzekwować podczas przeglądania kodu. Nie ma sensu mieć standardu, jeśli nie egzekwujesz go podczas przeglądania kodu. Będzie to oznaczało dużo dodatkowej pracy w utrzymaniu, ponieważ ludzie będą musieli naprawić stary kod, który nie spełniał normalnie normalnie, gdy go dotknie.

Nawet bez standardu nalegaj na poprawianie błędów w pisowni w nazwach zmiennych (nie martwiłbym się szczególnie komentarzami), ponieważ doprowadzą one wszystkich do szaleństwa na zawsze.

HLGEM
źródło
2

Standardy kodowania muszą zostać zidentyfikowane, aby każdy wiedział, czym są, a następnie należy je egzekwować. Nieprzestrzeganie zasad powinno mieć konsekwencje.

Oto rzeczy, które powinny stanowić zachętę:

  1. Recenzje kodu będą nużące i dłuższe niż to konieczne.
  2. Kod będzie częściej odrzucany.
  3. Harmonogramy nie zostaną spełnione.

Jeśli ta osoba albo nie musi się o to martwić, ponieważ nikt nie egzekwuje twoich zasad lub nie obchodzi go, czy są bezproduktywne (i nikt nic z tym nie robi), niewiele możesz na to poradzić.

JeffO
źródło
2

Kusiłbym cię, aby zasugerować prywatny czat i sprawdzić, czy oboje moglibyście znaleźć podstawową przyczynę:

  1. Czy współpracownik się spieszy, a ponieważ ktoś chciał wczoraj kodu, stara się, aby coś działało tak szybko, jak to możliwe? Może to być okazja do poinformowania tej osoby, aby w pracy bardziej koncentrowała się na jakości niż szybkości. Mantra typu „Nie spiesz się” może być przydatna, jeśli nie przynosi efektu przeciwnego do zamierzonego.

  2. Jak dana osoba postrzega swoją pracę? Jeśli masz poczucie dumy, możesz mieć kąt, który możesz wykorzystać, aby poprawić swoją postawę. Jeśli jest to praca, która płaci rachunki, wprowadzenie zmian może być o wiele trudniejsze. Czy wiedzą, że nie wykonują świetnej roboty, ale są tak blisko?

  3. Czy ta osoba nie zgadza się z konwencjami i próbuje kodować w proteście? Jeśli tak, to możesz mieć duży problem, ale warto dowiedzieć się, czy tak jest, czy osoba ta jest po prostu leniwa? Jakie rodzaje motywacji mogą być przydatne tutaj, np. Czy możesz odwołać się do chciwości, dumy lub innej wady, aby skłonić osobę do poprawy. Jest to podstępne, ale być może skuteczne, jeśli próba trasy miłego faceta nie prowadzi do nikąd.

  4. Jak zdobywać przyjaciół i wpływać na ludzi Ludzie mają kilka sugestii, jeśli chodzi o przekonywanie, które może zadziałać, takie jak chwalenie ulepszeń i zapewnianie dobrej reputacji.

Jeśli chodzi o to, dlaczego należy to zrobić prywatnie, oto kilka powodów:

  1. Istnieje duża szansa na upokorzenie, krytykę lub inne nieprzyjemności, które lepiej trzymać za drzwiami niż pozostawić na otwartej przestrzeni, gdzie ktoś może poczuć, że ich charakter jest zamordowany.

  2. Chcesz zachęcić tę inną osobę do otwarcia się. Wyzwanie polega na tym, że niektórzy ludzie są tak strzeżeni, że ich zburzenie może zająć dużo czasu.

  3. Jeśli to możliwe, proponuję spróbować zrobić to trochę poza biurem. Wyjdź na lunch, wybierz się na spacer lub zrób coś, aby zmienić otoczenie na tyle, aby dana osoba mogła czuć się bardziej komfortowo. Może to być wyzwanie i wymaga znajomości osoby, ale chodzi tutaj o to, że w biurze niektórzy ludzie będą nosić maskę roboczą, która prawdopodobnie nie będzie tutaj pomocna.

  4. Przygotuj się na rozmowę, która stanie się raczej gorąca lub brzydka, ale może to być dobry znak, jeśli możesz zaangażować drugą osobę i prowadzić dobry dialog. Niektórzy ludzie lubią trzymać rzeczy na otwartej przestrzeni, a inni mogą preferować bardziej subtelne sposoby ich wykonania. Kluczem do sukcesu jest upewnienie się, że słuchasz drugiej osoby na tyle, by wczuwać się w nią i starać się zrozumieć jej stronę.

JB King
źródło
2

Mamy test JUnit, który wyszukuje problemy z formatowaniem. Działa jako część kompilacji. Nieustannie się miewam, pomijając spację między nawiasami otwierającymi if, while lub for. Nasz kod jest jednak konsekwentnie formatowany.

http://code.google.com/p/kawala/wiki/BadCodeSnippetsRunner

Kevin Peterson
źródło
1

Upiększanie kodu, takie jak brak kontroli, będzie w stanie rozwiązać niektóre z twoich problemów. Jeśli jesteś gotowy za to zapłacić, istnieje oprogramowanie wysokiego poziomu, które osadza reguły w samym kodzie źródłowym, takie jak Parasoft . Parasoft nakłada obowiązek pisania kodu w jednolitym stylu. Możesz także osadzić własne zasady. Gdy takie narzędzia są używane, programiści są zmuszeni do stosowania jednolitego stylu. A po jakimś czasie przyzwyczają się do tego.

Manoj R.
źródło
1

Jeśli używasz Eclipse, włącz opcję Zapisz akcje dla edytorów Java i powiedz wszystkim, aby z niej korzystali. To rozwiązuje problemy z formatowaniem przy każdym zapisie, ale nie naprawia złych wielkich liter. Może to być bardzo pomocne!

alternatywny tekst


źródło
1

Jak trudno jest przestrzegać konwencji stylu? Rozumiem błędy ortograficzne, ale reszta jest wskaźnikiem niechlujnego myślenia i kodowania. Powiedz osobie, że musi być bardziej konsekwentna, jeśli chodzi o kod produkcyjny, ponieważ nie tylko oni będą na niego patrzeć. Pisanie kodu produkcyjnego w niespójnym stylu jest po prostu niegrzeczne, samolubne i nierozważne.

davidk01
źródło
0

LOL. Absolutnie nienawidzisz mojego kodu. Nie mogę przeliterować, żeby uratować mi życie i nie obchodzi mnie to.

Ale wiem, że niektórzy ludzie tak naprawdę dbają o te rzeczy.

Proponuję zwolnić osobę, która pisze ten brzydki kod, jeśli się nie zmieni, a następnie znajdź kogoś, kto sprawi, że będzie naprawdę ładna, i mam nadzieję, że może napisać kod

jest zwykle technicznie poprawny, ma rozsądną strukturę, a nawet może być algorytmicznie elegancki

a jeśli nie mogą, to przynajmniej możesz pokazać klientowi zepsuty ładny kod i go sprzedać!

Ale poważnie. Najpierw skoncentruj się na naprawdę ważnych rzeczach. Jeśli nie możesz znaleźć dobrego, solidnego powodu poza „szkodzi mojej delikatnej wrażliwości”, zignoruj ​​to na razie. Jeśli jest to rzeczywiście ważne, usiądź z osobą i przekonaj ją o tym znaczeniu. Rzeczy takie jak standardy, które ułatwiają odróżnienie poziomu klasy, poziomu metody, wspólnych, stałych zmiennych, mają znaczenie. Jeśli dany programista w ogóle dba o swój zawód, zrozumie i spróbuje zrobić właściwą rzecz.

ElGringoGrande
źródło
5
Jeśli twoje nazwy zmiennych są błędnie napisane, następny facet, który użyje twojego kodu, będzie musiał poświęcić dodatkowy czas na naprawienie błędów kompilatora, kiedy poprawnie je przeliteruje. Tu nie chodzi o „delikatną wrażliwość”. Te pozornie trywialne rzeczy powodują błędy, które powodują frustrację, co powoduje więcej błędów. Wszystko to składa się na ogromne koszty utrzymania kodu.
Dima,
4
To coś więcej niż „delikatna wrażliwość”, ale produktywność Nie przeszkadza mi ktoś z nieco innym stylem kodowania, czasami zapominającym o spacji itp. Nie jesteśmy idealni. Ale kiedy cały plik wygląda tak, jakby został napisany przez licencjata, z niespójnymi odstępami między wierszami, pozycjami, wcięciem i ogólnym przepływem kodu, po prostu bardzo szybko nacisnę przycisk „odrzuć” (lub cofnij).
haylem,
2
Robi to wiele udanych projektów open source (w tym Linux): jeśli nie masz odpowiedniego stylu (i testów jednostkowych), to jest odrzucany. Szkoda, jeśli był dobry i rozwiązał prawdziwy problem: nie zawsze można naprawić kod innej osoby. Ogólnie rzecz biorąc, tracisz mniej czasu i pieniędzy, przekazując od czasu do czasu geniusz, który przechodzi, ale wygląda jak piekło lub jest nie do utrzymania.
haylem,
1
Śmieszne rzeczy. Ale oczywiście główny punkt wydaje się przeoczyć. Najpierw dostajesz faceta na pokład z oczywistymi rzeczami, na które możesz naprawdę poprzeć. Następnie pracujesz nad mniej ważnymi rzeczami. Istnieją sposoby pracy z ludźmi poza dławieniem ich regułami. A może, może tylko, tłum OCD może nieco pójść na kompromis lub dowiedzieć się, dlaczego w kodzie innych jest tak różnie. Może istnieć przyczyna lub przyczyna.
ElGringoGrande,
0

Moim rozwiązaniem w przypadku zasobów zleconych na zewnątrz, które nie dały &% $ # na temat formowania (lub łatwych do uniknięcia błędów w tym zakresie) było wymuszenie tego przez serwer kompilacji. Utworzyłem zadanie serwera CI, które uruchamiało się co noc, sprawdzało kod, uruchamiało Jalopy i findbugs, a następnie ponownie sprawdzało kod. Gdy inny zespół dowiedział się, że niestosowanie standardowych konwencji kodu utrudniłoby mu pracę, zaczęli używać swoich IDE w celu utrzymania standardowego formatu.

sal
źródło