Na przykład w JS istnieje wspólny fragment kodu, aby uzyskać wartość domyślną:
function f(x) {
x = x || 'default_value';
}
Tego rodzaju fragmentu kodu nie jest łatwo zrozumiały dla wszystkich członków mojego zespołu, ponieważ jego poziom JS jest niski.
Czy nie powinienem wtedy korzystać z tej sztuczki? Powoduje to, że kod jest mniej czytelny dla równorzędnych użytkowników, ale bardziej czytelny niż następujący, według dowolnego dewelopera JS:
function f(x) {
if (!x) {
x = 'default_value';
}
}
Jasne, jeśli skorzystam z tej sztuczki, a kolega ją zobaczy, to mogą się czegoś nauczyć. Ale często zdarza się, że postrzegają to jako „próbę bycia sprytnym”.
Czy powinienem obniżyć poziom kodu, jeśli moi koledzy z drużyny mają niższy poziom ode mnie?
teamwork
communication
skills
Florian Margaine
źródło
źródło
Odpowiedzi:
Ok, oto moje podejście do tego dużego i skomplikowanego tematu.
Zalety utrzymania stylu kodowania:
x = x || 10
Takie rzeczy są idiomatyczne w rozwoju JavaScript i oferują formę spójności między twoim kodem a kodem zewnętrznych zasobów, których używasz.Wady za utrzymanie stylu kodowania:
Moja osobista opinia
Nie powinieneś obniżać umiejętności swojego kodu. Powinieneś dążyć do napisania kodu, który będzie wyrazisty, jasny i zwięzły. Jeśli masz wątpliwości co do poziomu swojego zespołu - ucz je . Ludzie są bardziej niż chętni do nauki, niż myślisz, i są gotowi dostosować nowe konstrukty, gdy są przekonani, że są lepsze.
Jeśli uważają, że „jesteś po prostu sprytny”, spróbuj argumentować. Bądź gotów przyznać, że czasem się mylisz i bez względu na wszystko staraj się zachować spójność stylów w całym środowisku pracy. Takie postępowanie pomoże uniknąć wrogości.
Najważniejsze jest zachowanie spójności.
Kod zespołu powinien być napisany tak, jakby kodowała go jedna osoba. Państwo absolutnie muszą uzgodnić wytyczne kodowania. Powinieneś przestrzegać tych wytycznych. Jeśli wytyczne kodowania określają, że odczytywanie parametrów opcjonalnych powinno odbywać się w „mniej sprytny” sposób, to tak właśnie jest.
źródło
Cóż komentarz
Czy powinieneś obniżyć umiejętności korzystania z kodu? Niekoniecznie, ale zdecydowanie powinieneś podnieść umiejętności swoich komentarzy . Pamiętaj o umieszczeniu dobrych komentarzy w kodzie, szczególnie w sekcjach, które Twoim zdaniem mogą być bardziej skomplikowane. Nie używaj tak wielu komentarzy, że kod staje się trudny do naśladowania, ale upewnij się, że cel każdej sekcji jest jasny.
Rzeczywistość jest taka, że nieco bardziej szczegółowe komentarze mogą być przydatne w przypadku mniej wykwalifikowanych członków zespołu, ale ci z najniższymi umiejętnościami ignorują ich, szczególnie jeśli jest ich zbyt wielu, więc nie przesadzaj.
Kwestia stylu?
Podany przykład jest nieco prosty, ale także stylistyczny. Komentarz do każdej zmiennej domyślnej byłby dość żmudny do utrzymania i czytania. Zamiast tego stylowe lub powtarzające się skróty lub wzorce kodu powinny być prawdopodobnie ustanawiane jako standard. Jeśli uważasz, że taka forma domyślnych parametrów powinna być zrozumiała dla wszystkich i stosowana za każdym razem, zapisz te pomysły i poprowadź je do kierownictwa zespołu. Jest możliwe, że wszystko, czego potrzebujesz, aby nauczyć swoich członków drużyny, to proste spotkanie, na którym omawiasz zaproponowane standardy.
Jak już stwierdzono w innej odpowiedzi, zachowaj spójność .
Naucz mężczyznę łowić ...
Nauczanie członków drużyny jest prawdopodobnie najlepszym sposobem, aby pomóc wszystkim zaangażowanym. Wyjaśnij, że jeśli ktoś ma pytanie dotyczące fragmentu kodu z Twoim nazwiskiem w dzienniku zatwierdzeń lub znacznikach czasu, powinien zapytać o to. Jeśli Twój zespół ma recenzje kodu, jest to świetna okazja, aby wyjaśnić kolegom z drużyny wszelkie mylące (ahem) dobrze skomentowane kody. Jeśli twój zespół nie ma recenzji kodu, dlaczego nie? Przejdź do tego!
Musisz jednak uważać. Nie zawsze możesz być w pobliżu, aby uczyć ludzi i możesz nawet zapomnieć o tym, co pierwotnie próbowałeś zrobić w danej sekcji kodu.
„Sprytne” triki
Pamiętając o umiejętnościach członków drużyny, jest zdecydowanie ważne, ale pisanie łatwego do utrzymania kodu często oznacza nieużywanie tajemnych skrótów do problemów, które mogą mieć bardziej powszechne rozwiązania. Jest to ważne, nawet gdy twoi koledzy z drużyny są inteligentni. Nie chcesz, aby kod był zbyt długo zrozumiany, ani nie powodował subtelnych, ale ważnych skutków ubocznych, których można by pominąć. Ogólnie rzecz biorąc, najlepiej unikać „sprytnych” sztuczek, jeśli istnieją odpowiednie alternatywy. Nigdy nie wiadomo, kto może utrzymywać kod w dalszej kolejności - często starsze wersje siebie nie pamiętają szczegółów ani przyczyn tych sztuczek.
Jeśli uznasz, że musisz zastosować sprytną sztuczkę, przynajmniej postępuj zgodnie z następną radą ...
POCAŁUNEK
W razie wątpliwości należy zachować prostotę . To, czy kod jest prosty, czy nie, niekoniecznie musi odpowiadać umiejętnościom programisty, jak mogłoby się wydawać. W rzeczywistości niektóre z najbardziej błyskotliwych rozwiązań problemu są najprostsze, a niektóre z bardziej skomplikowanych rozwiązań trafiają do TheDailyWTF . Utrzymanie prostego i zwięzłego kodu może ułatwić zrozumienie niektórych bardziej inteligentnych, ale być może sprzecznych z intuicją decyzji.
źródło
Wydaje się, że istnieje ogromna awersja do tworzenia funkcji w JS. Ta awersja powoduje, że ludzie starają się być sprytni i stosować absurdalne sztuczki, aby utrzymać rzeczy w jednym wierszu, tak jak byłoby w przypadku wywołania funkcji. Oczywiście nazwa funkcji w wywołaniu działa również jako dodatkowa dokumentacja. Nie możemy dołączyć komentarza do podstępnego wyrażenia, ponieważ wtedy pokonałoby to sens robienia tego, dlatego nazywamy to „idiomem js” i nagle jest to zrozumiałe.
Javascript jest bardzo dostępny, większość ludzi nie je specyfikacji tak jak my. Więc nigdy nie zrozumieją, czym są ukryte założenia i skrajne przypadki idiomu.
Przeciętny Joe albo tego nie zrozumie, albo zapamiętał, że jest to idiom wartości domyślnej. Oba są szkodliwe, w rzeczywistości to drugie jest jeszcze bardziej szkodliwe. Nie zrozumie tu założeń i przypadkowych przypadków. Nie będzie chciał czytać specyfikacji i nigdy jej nie zrozumieć.
Kiedy patrzę na tego kodu widzę „, czy to
null
lubundefined
, a następnie ustawić go do tej wartości domyślnej. Mimo to również w sposób dorozumiany leczyć+0
,-0
,NaN
,false
i""
jak nie odpowiednich wartości. Będę musiał pamiętać, że 3 miesiące od teraz kiedy to potrzeby zmienić. Prawdopodobnie zapomnę. ”.Domniemane założenie jest bardzo prawdopodobne, że spowoduje błąd w przyszłości, a gdy twoja baza kodu jest pełna takich sztuczek, nie ma szans, abyś trzymał je wszystkie w głowie, ilekroć zastanawiasz się, co wpłynie na modyfikację. I to jest dla „JS pro”, przeciętny Joe napisałby błąd, nawet gdyby na początku wymagano przyjęcia wartości falsy.
Twój nowy fragment ma bardziej znaną składnię, ale nadal występuje powyższy problem.
Możesz iść z:
Teraz możesz mieć bardzo złożoną logikę do obsługi przypadków brzegowych, a kod klienta nadal wygląda pięknie i czytelnie.
Jak odróżnić zaawansowaną funkcję języka, taką jak przekazanie funkcji jako argumentu lub sprytna sztuczka
|| "default"
?Sprytne sztuczki zawsze działają przy pewnych ukrytych założeniach, które można zignorować podczas tworzenia kodu. Nigdy nie będę musiał modyfikować IIFE do czegoś innego, ponieważ zmienił się wymóg, zawsze tam będzie. Może w 2020 roku, kiedy będę mógł używać rzeczywistych modułów, ale tak.
| 0
lub wersja kultowa~~num
zastosowana do podłogi zakłada dodatnie i 32-bitowe liczby całkowite ze znakiem.|| "default"
zakłada, że wszystkie wartości fałszowania są takie same, jak nieprzekazanie argumentu.I tak dalej.
źródło
Nie powinieneś obniżać swoich umiejętności programowania, ale może być konieczne dostosowanie sposobu pisania kodu. Niemal przede wszystkim chodzi o to, aby kod był czytelny dla ludzi, którzy muszą go czytać i utrzymywać.
Niestety, może być trochę osądu, czy dany styl jest „sprytny”, czy tylko zaawansowany. Kod w pytaniu jest tego dobrym przykładem - twoje rozwiązanie niekoniecznie jest lepsze od drugiego. Niektórzy twierdzą, że tak, inni się nie zgodzą. Ponieważ oba rozwiązania mają efektywnie równe działanie w czasie wykonywania (czytaj: użytkownik nigdy nie pozna różnicy), wybierz styl, w którym zespół jako całość czuje się najlepiej.
W niektórych przypadkach musisz nauczyć ich lepszych sposobów kodowania, ale w innych przypadkach musisz iść na kompromis w celu zachowania przejrzystości.
źródło
Być może zostało to już powiedziane w innej odpowiedzi, ale chciałbym odpowiedzieć na to pytanie własnymi rozkazami.
Ogólne wytyczne
Pracując w zespole, nie jesteś docelowym odbiorcą fragmentu kodu. Twoi odbiorcy to programiści Twojego zespołu. Nie pisz kodu, którego nie rozumieją bez uzasadnionego powodu.
Konkretny przykład
W naszej bazie kodu mamy wiele skryptów perla. Zwykle używamy perla tylko do bardzo prostych operacji, a ogromna większość kodu jest pisana przez programistów Java, więc jest podobny do Java. Mamy zestaw skryptów Perla i framework napisany przez „guru Perla”, który odszedł z naszej firmy. Ten kod zawiera wiele bardziej niejasnych idiomów Perla i żaden z naszych programistów, w tym ja, nie może odczytać tego kodu Perla bez większego wysiłku. Często go za to przeklinamy. :)
źródło
Jeśli piszesz dobry kod, ale uważasz, że Twoi obecni lub przyszli koledzy mogą mieć trudności z jego przestrzeganiem, dodaj krótki komentarz, aby go wyjaśnić.
W ten sposób możesz nauczyć ich czegoś, nie obrażając ich indywidualnej inteligencji ani nie zawstydzając nikogo w dyskusji grupowej.
źródło
Nie nazwałbym twojego przykładu sztuczką, ale idiomatyczną. To, czy powinieneś go użyć, zależy nie tyle od aktualnego poziomu twojej drużyny, ale od tego, czy (przynajmniej niektórzy) członkowie twojej drużyny chętnie nauczą się nowych idiomów. Oczywiście powinieneś omówić z nimi ten temat i nie wymuszać na nich tego stylu. I nie powinieneś prosić ich, aby codziennie uczyli się 5 nowych rzeczy lub „sztuczek”. Ale szczerze mówiąc, jeśli masz tylko członków drużyny, którzy nie chcą nauczyć się czegoś nowego, nawet jeśli jest to tak proste i małe niż ten idiom, powinieneś rozważyć zmianę na inny zespół.
źródło
Czytanie tego pytania oraz późniejszych odpowiedzi i dyskusji wydaje się mieć dwa punkty. Po pierwsze: czy można korzystać z zaawansowanych funkcji językowych? Po drugie: jak mogę to zrobić, nie wyglądając na „popisującego się”?
W pierwszym przypadku sensowne jest użycie ulepszeń i zaawansowanych funkcji. Na przykład: w języku C # nie musisz używać wyrażeń Linq ani Lambda, ale większość ludzi tak robi, ponieważ sprawia, że kod jest bardziej uporządkowany i łatwiejszy do zrozumienia, kiedy już wiesz, co robi. Na początku wygląda to dziwnie.
Ludzie przyzwyczajają się do wzorców, aw wielu przypadkach ludzie używają ustalonego sposobu robienia rzeczy tylko po to, aby wykonać zadanie. Jestem tak samo winny jak następny człowiek. Wszyscy mamy terminy. Pod pewnymi względami jesteś winny wprowadzania nowych pomysłów i nowych sposobów myślenia! Dochodzi do drugiego punktu i prawdopodobnie w tym miejscu możesz napotkać największy opór.
Dla osoby korzystającej ze strony nie obchodzi ich, który styl jest używany, zależy tylko na tym, czy to działa? Czy to jest szybkie Tak więc, jeśli nie masz przewagi wydajności na twoim sposobie, to nie ma właściwej lub niewłaściwej drogi w podanym przykładzie. Czy twój sposób sprawia, że kod jest bardziej czytelny, czy nie? Może się to zdarzyć, gdy koledzy się do tego przyzwyczają.
Jak więc wprowadzić te zmiany? Staraj się rozmawiać z kolegami na następujące tematy: czy wiesz, że tę funkcję można napisać w ten sposób? Przeglądy kodów i programowanie par mogą być dobrym czasem na „zapylenie krzyżowe” pomysłów. Trudno mi przepisać, co mam robić, ponieważ nie znam środowiska, w którym pracujesz. Uważam, że niektórzy programiści mogą być bardzo defensywni i odporni na zmiany. Znowu byłem tego winny. Najlepszym sposobem na pracę z tego rodzaju programistami jest poświęcenie czasu na naukę tego, co sprawia, że tykają, poznanie ich tła, a następnie porównanie i porównanie stylów i doświadczeń z ich stylami. To wymaga czasu, ale jest to czas dobrze spędzony. Jeśli to możliwe, spróbuj ich zachęcić.
źródło
Po prostu nie idź więc do Royal McBee Computer Corp, bo kto powiedział, że nie jesteś niedoświadczonym programistą.
na pewno świetnie jest pisać zwięzły i krótki kod, który może być przydatny w środowisku javascript (no cóż, dopóki ktoś nie stworzy kompilatora js do pobrania do przeglądarki, ale to już inna historia).
ważne jest jednak to, aby Twój kod przetrwał kilka minut, które zajęło Ci napisanie go. Jasne, jest szybki i łatwy, możesz go poruszyć i przejść dalej, ale jeśli będziesz musiał do niego wrócić po latach, możesz pomyśleć „który muppet to napisał” i zdać sobie sprawę, że to ty! (Zrobiłem to, na pewno większość ludzi też… Winię zbyt agresywne terminy, szczerze mówiąc).
Jest to jedyna ważna rzecz, o której należy pamiętać, więc chociaż powiedziałbym tak - idź z tym konkretnym operatorem, jeśli działa i jest czysty, a twoi „niedoświadczeni” deweloperzy (choć jest to dla nich obraźliwe, wiem dużo niedoświadczonych deweloperów, którzy znają wszystkich operatorów i sztuczki, ponieważ zapamiętali różne tutoriale i odnośniki do stron internetowych, piszą najgorszy kod, mimo że znają każdą najmniejszą sztuczkę ... może być coś więcej niż przypadek)
W każdym razie, gdybyś mógł przeczytać historię Mela , zdałbyś sobie sprawę, że sztuczki nie są najlepszą rzeczą do umieszczenia w kodzie, nawet jeśli Mel był prawdziwym programistą pierwszego rzędu. To kładzie nacisk na każdy argument, w którym ktoś mówi, że umie pisać dobry kod, a wszyscy inni muszą się więcej nauczyć, aby nadążyć.
źródło
Cóż, na początek wygląda mi to na podstawowy JS.
Ale ogólnie - nie powinieneś używać sprytnych hacków, aby sparafrazować „debugowanie jest dwa razy trudniejsze niż programowanie. Jeśli piszesz kod tak sprytnie, jak to tylko możliwe, z definicji nie jesteś w stanie go debugować”.
Nie oznacza to, że powinieneś unikać kodu tylko dlatego, że inni go nie rozumieją - powinieneś pisać kod w tak jasny i spójny sposób, jak to tylko możliwe. Ale twoje kryteria dla jasności powinny brzmieć „czy zrozumiem to podczas pierwszego czytania za rok”, a nie „czy ktoś to zrozumie”.
Pisz w jasny sposób, że nie masz trudności ze zrozumieniem i pozwól innym pracować nad podnoszeniem swoich umiejętności - nie upośledzaj siebie, aby ratować innym hipotetyczne kłopoty.
źródło
Omówię z kolegami z zespołu, jakie standardy kodowania chcemy mieć, ponieważ chodzi przede wszystkim o to, jak można zrobić coś na wiele sposobów dla naszej bazy kodu. Jeśli istnieje konsensus, byłaby to moja pierwsza próba odpowiedzi.
Jeśli nie ma, prawdopodobnie zastanowię się, jaki proponowany standard ma sens i zacznę go wdrażać, gdy wyjaśnię go kierownictwu i niektórym członkom zespołu. Chodzi o to, aby upewnić się, że zarządzanie jest w porządku z tym pomysłem i że nie zamierzam po prostu robić swoich własnych rzeczy, a następnie zmuszać innych do wzięcia go.
Chciałbym spojrzeć na to bardziej na pytanie, jakie standardy i praktyki ma Twój zespół, a nie tylko poziom umiejętności, ponieważ istnieje wiele sposobów oceny kodu. Jak dobrze inni mogą to utrzymywać, jest jednym z tych kryteriów.
źródło
Problem polega na tym, że chcesz dobrej czytelności źródła, ale czytelność jest w oczach patrzącego.
Sugerowałbym, że potrzebujemy lepszych narzędzi do rozwiązania tego problemu. Nic skomplikowanego, pamiętajcie, mamy technologię, aby to zrobić od ponad 50 lat. Dołącz parser do edytora i pozwól edytorowi zapisać źródło w postaci sexps (tak, podobnie jak lisp). Następnie źródło jest czytane, edytor rozpakowuje go na składniową i typograficzną (wiesz, spacje, tabulatory, przecinki), według preferencji użytkownika.
W ten sposób możesz pisać i czytać,
x = x || 10
a inni programiści odczytają to jakoemacs ma wszystkie elementy, które łatwo to zrobić.
źródło
Zamiast głupiego kodu, dlaczego nie poprawić jakości zespołu? Szkolenie, coaching, edukacja i ulepszone praktyki zatrudniania mogą wiele zrobić, aby zapewnić ciągłe doskonalenie.
Etatyzm, zgnilizna kodu, odmawianie ulepszania i wprowadzania innowacji, ponieważ ktoś nie chce pracować nad samodoskonaleniem, powoduje tylko problemy na linii, a raczej wcześniej niż później.
Oczywiście w konkretnym pokazanym przypadku starasz się po prostu być sprytnym i celowo pisać zaciemniony kod, co nigdy nie jest dobrym pomysłem. Kod powinien przede wszystkim być czytelny, zrozumiały, a nie napisany, aby pokazać, jak sprytny jesteś w tworzeniu czegoś w możliwie najmniejszej liczbie instrukcji (wyjątki stanowią wyjątki, na przykład gdy większa liczba instrukcji prowadziłaby do niedopuszczalnie niskiej wydajności, w którym to przypadku wywoływane są obfite komentarze dla).
źródło