Czy istnieje sposób na wsparcie różnych stylów kodowania w zespole programistycznym

13

Problem: dwóch programistów => trzy opinie na temat wcięć, nawiasów klamrowych na nowej linii lub nie itd.

Zwykle pracujemy z trzema lub czterema osobami nad naszymi projektami, a każda z nich ma swój własny styl kodu. Wiem, powszechnym rozwiązaniem jest uzgodnienie stylu kodu, z którego wszyscy muszą korzystać, ale nie chcę zmuszać twórczych programistów do garnituru, który im nie pasuje.

Pytanie zatem brzmi: czy istnieje sposób, aby każdy programista żył swoim własnym stylem, ale posiadając wspólną bazę kodu w repozytorium? Myślę o jakiejś wtyczce git / svn / cokolwiek, która zmienia styl między osobistym a wspólnym przy kasie i zatwierdzaniu. Wydaje mi się, że trudną częścią tego podejścia jest obsługa poprawnych różnic między wersjami pliku

Kai
źródło
1
Dostępne są automatyczne formatyzatory kodu dla większości języków, ale w przypadku niektórych (np. C ++) niezwykle trudno jest uzyskać pełną niezawodność ze względu na złożoność parsowania języka.
Joris Timmermans,
5
Naprawdę zły pomysł. Poproś swój zespół, aby opracował konsensualny standard, a następnie niech go zastosuje. Jeśli trochę wina, powiedz im, żeby trochę dorośli.
Clement Herreman
8
Być może należy tu podać inną niezwykle powszechną uwagę: czy istnieje rzeczywisty problem z różnicami w stylach kodu? Nie naprawiaj czegoś, co nie jest zepsute!
Joris Timmermans,
5
„ale nie chcę zmuszać kreatywnych programistów do garnituru, który im nie pasuje” - jeśli programiści nie mogą dostosować się do prostych rzeczy, takich jak wcięcia lub zmiany stylu nawiasów klamrowych, musisz zatrudnić lepszych programistów. Gdy użyjesz nowego stylu przez tydzień lub dwa, zapominasz o nim.
Mike Weller
4
@MikeWeller Czy nie można się sprzeciwić? Konwencje nazewnictwa są jedyną rzeczą, którą kiedykolwiek uważałem za ważną, ponieważ ułatwia identyfikację celu rzeczy poza kontekstem definicji. Tak długo, jak ktoś na wpół konsekwentnie projektuje klarowność miejsca, w którym klocki się zaczynają i kończą, nigdy nie zrozumiałem, dlaczego to taka wielka sprawa.
Erik Reppen,

Odpowiedzi:

20

Nie, musisz stworzyć standard. Jeśli zmienisz członka zespołu B (albo za pomocą automatycznego narzędzia IDE, albo ręcznie), cała kupa kodu członka zespołu A napisała, że ​​zostanie on zatwierdzony i wyświetlony jako zmiana.

Jest to coś, co napotyka prawie każdy zespół, a standardy są z tego powodu „wymuszane”. Sugeruję, abyś przestrzegał standardów władz językowych jako podstawy i dostosował je do swojego zespołu.

Utrzymanie spójnego stylu kodowania pomoże również w utrzymaniu projektu i zmniejszy barierę wejścia dla nowych osób pracujących nad kodem.

Sam
źródło
11

Nie, musisz zdefiniować standard kodowania (najlepiej taki, który już istnieje) i poprosić programistów o jego przestrzeganie. Bycie profesjonalnym programistą oznacza, że ​​możesz dostosować się do standardu kodowania używanego w projekcie, nad którym pracujesz.

JesperE
źródło
2
+1. Pozwól im wybrać jeden, ale niech go zastosują.
Clement Herreman
Chciałem, aby formatowanie było częścią standardowego języka programowania, tak aby programy nie były po prostu „prawidłowe” lub „nieważne”, ale miały również stan trzeci, „prawidłowe i dobrze sformatowane”.
JesperE
4
tak jest (mniej więcej) w przypadku Pythona, gdzie wcięcie jest semantycznym językiem.
Clement Herreman
2
Go nie jest ściśle egzekwowania takich, ale jest wyposażony w wbudowany w kodzie źródłowym formater, go fmt. Zobacz golangtutorials.blogspot.fr/2011/06/…
Clement Herreman
1
@JesperE To jest realizowany w Pythonie z PEP8 i odpowiedniego narzędzia, wynalazkiem o nazwie pep8 .
phihag
8

TAK, może działać, dopóki wszystkie style są rozsądne, a ludzie nie zmieniają kodu innych ludzi, aby dopasować ich preferencje i / lub mieszać style w jednym pliku kodu.
Nie jest idealny, ale nie różni się od dziedziczenia starego kodu utworzonego według innego „standardu” niż własny i konieczności zintegrowania go z bazą kodu.
Więc jeśli musisz to zrobić, kilka wskazówek:

  • bez zmiany kodu w innym stylu, aby dopasować go do twoich preferencji, kosztuje to czas i wprowadza błędy
  • pozostają spójne w obrębie dowolnego pojedynczego pliku. Jeśli więc styl A został użyty do jego napisania, wszyscy będą używać stylu A podczas jego modyfikacji
  • stwórz wspólny standard dla swojego publicznego interfejsu, więc dla wszystkiego, co jest widoczne na zewnątrz (i tak, inne podskładniki systemu są na zewnątrz).
jwenting
źródło
2
Dodam, że profesjonalni programiści i tak często łączą style. Odbędą krótkie nieformalne dyskusje na temat niektórych kwestii i dojdą do porozumienia.
Joris Timmermans,
Działa świetnie, z zastrzeżeniem, że użycie automatycznego formatowania kodu musi być ograniczone do minimum (jeśli nie całkowicie zabronione).
grahamparki
2
„brak zmiany kodu w innym stylu, aby dopasować go do twoich preferencji, kosztuje czas i wprowadza błędy” - wręcz przeciwnie - ręczne dopasowanie niezautomatyzowanego standardu jest bardzo stratą czasu, uruchamianie formatera kodu, zatwierdzanie zmiany jako „sformatowanej z opcjami - cokolwiek ”, wówczas wprowadzanie zmian funkcjonalnych jest znacznie szybsze.
Pete Kirkham,
Wydaje mi się, że ta odpowiedź mogła pominąć część pytania dotyczącą „automatycznego formatowania”?
Joris Timmermans,
Różnorodność stylów między plikami jest znacznie trudniejsza do opanowania niż tylko spójny styl.
Andy,
4

Krótka odpowiedź brzmi: nie.

Podczas gdy opinie powinny być cenione w pracy, szczególnie w pracy opartej na wiedzy, takiej jak Software Development, programiści muszą zdać sobie sprawę, że opinia jest właśnie taką opinią i że są po to, aby napisać oprogramowanie, które nie spiera się o to, który standard linii wcięcia jest najlepszy.

Celem dokumentu normalizacyjnego powinno być egzekwowanie / zasugerowanie zestawu wspólnych standardów / konwencji kodowania, które dotyczą

  1. Elementy układu, takie jak tabulacje, wcięcia, użycie {, (,
  2. Zmienna, nazwa obiektu i funkcji, tj. CamelCase, notacja węgierska
  3. Wyjątek Obsługa sposobu / kiedy / gdzie ma zostać wykonana
  4. Komentarze do kodu. Czy zawsze odwołujesz się do dokumentu projektowego, numeru błędu itp

Dokumenty dotyczące standardów pomagają zapewnić, że kod jest łatwy do odczytania, utrzymania i zachowania zgodności z konwencjami.

Jest to nieocenione podczas przeglądania kodu przed meldowaniem, debugowania czyjegoś kodu lub modyfikowania kodu kilka lat po odejściu pierwotnego programisty.

Zwykle podczas tworzenia dokumentu standardów kodowania przeglądam standardy branżowe dla używanego przeze mnie języka (C, C #, SQL), stosuję najbardziej odpowiednie standardy, przesyłam komentarze do najbardziej zaawansowanych / wpływowych programistów w celu komentowania, w razie potrzeby uwzględniam komentarze, a następnie zwolnij dokument.

Armitage
źródło
1
W rzeczywistości wiele sklepów ma jednego programistę, którym zwykle jest Old Hand lub PrimaDonna, który wydaje się być zachwycony tworzeniem Formatowania Holy Wars dla reszty ludzi, z którymi ma do czynienia. Professional == Cokolwiek powiem. Cokolwiek powiecie == Nieprofesjonalni. A potem ewoluuje. Widziałem standardy kodowania nakazujące rażące rzeczy, takie jak: „Używaj wielu zmiennych globalnych, nigdy nie twórz nowych klas, unikaj programowania obiektowego za wszelką cenę i nigdy niczego nie zmieniaj”. Niestety, nie ma ograniczeń co do tego, co ludzie próbują wcisnąć w zakres czegoś zwanego „standardami kodowania”.
Warren P
4

Teoretycznie możliwe jest automatyczne formatowanie kodu przed przypisaniem go do systemu kontroli wersji.

Jest jednak jeden duży problem: narzędzia do automatycznego formatowania kodu nie są w 100% niezawodne. W ten sposób można wprowadzić problemy w kodzie z tym systemem. Moim zdaniem to zabija pomysł. Zawsze ważniejsze jest posiadanie kodu funkcjonalnego niż kodu o poprawnym stylu!

Jeśli projekt jest podzielony na przedziały, a większość części kodu jest „własnością” poszczególnych programistów, może być w porządku pozwolić im używać ich własnych stylów (z uzasadnionego powodu). Jeśli jednak kilka osób często pracuje nad tym samym fragmentem kodu, prawdopodobnie konieczne jest wymuszenie stylu.

Oto podobna dyskusja na temat przepełnienia stosu .

Społeczność
źródło
2
Zwróć też uwagę na zaakceptowaną odpowiedź w powiązanej dyskusji!
Joris Timmermans,
1

Jednokierunkowe automatyczne formatowanie kodu może być praktycznym rozwiązaniem, jeśli:

  1. Znajdź autoformatator, który faktycznie działa zgodnie z konwencją, którą chcesz zaimplementować, i swoim językiem programowania.
  2. Można to zrobić przed zatwierdzeniem, aby formatowanie nie było wyświetlane w dziennikach zmian zmieszanych z rzeczywistymi zmianami funkcjonalnymi i nie do odróżnienia.
  3. Udaj się, aby twój zespół uzgodnił, która konwencja powinna zostać zastosowana (ponieważ ogólnie rzecz biorąc, nie ma „drogi powrotnej” przy kasie do osobistych preferencji dewelopera, przynajmniej nie wiem o tym).

W wielu przypadkach żadna z nich nie jest łatwa do zrobienia, więc rozważ wybór bitew tutaj! Widziałem zespoły robiące to z powodzeniem dla projektu C # / .NET, w którym przeformatowanie odbyło się już na komputerze programisty, więc w niektórych okolicznościach jest to możliwe.

Joris Timmermans
źródło
1

absolutnie możesz. Chodzi o to, aby nie pocić się z tych małych rzeczy.

Jedyny standard, który ma znaczenie, to „utrzymuj zmiany w tym samym stylu co istniejący kod”. Tak długo, jak możesz dopasować się do stylu kodowania, który nie jest twoim ulubionym, możesz pracować z dowolnym stylem kodowania.

Więc o co chodzi z pracą w 3 różnych stylach w tej samej firmie. Twoi programiści muszą to zrozumieć, że pisanie kodu tak, jak im się podoba, znajduje się w ich kodzie, ale gdy wprowadzą zmiany w innym pliku, który używa innego stylu, muszą zachować ten styl (inaczej będzie wyglądać źle) . Ponowne formatowanie jest niedozwolone (lub po prostu będą się ciągle formatować, a diffs scm będą bezużyteczne) (a jeśli to zrobisz, należy zastosować formatowanie automatyczne).

Są szanse, że kiedy już to zrobią, dojdą do pewnego konsensusu co do tego, którego stylu użyć, lub będą w większości dryfować razem. Jeśli będą się z tym zachowywać dziecinnie i cały czas formatują się nawzajem, nadejdzie czas, aby pobrać standard z Internetu i zażądać jego użycia. Możesz to zrobić mimo wszystko, po prostu machając nim w twarz jako kartę „zagraj ładnie lub inaczej”.

gbjbaanb
źródło