Jeśli mój zespół ma niskie umiejętności, czy powinienem obniżyć umiejętności mojego kodu? [Zamknięte]


156

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?


42
Wierzę, że sprowadza się to do pytania: „Czy powinieneś napisać kod idiomatyczny i zmusić ludzi do tego poziomu? Czy też napisać kod nie idiomatyczny, który wyraźnie określa wszystko?”

53
Nie obniżaj poziomu umiejętności swojego kodu! Wiele się nauczyłem, czytając kod bardziej zaawansowanych programistów. Stwórz kulturę, w której, jeśli twoi rówieśnicy czegoś nie rozumieją, zachęcani są do pytania (i uczenia się). Tylko upewnij się, że jesteś konsekwentny.
Kosta Kontos

6
Czy masz recenzje kodu? To byłoby doskonałe miejsce do zadawania pytań na temat takiego kodu.
thegrinner

3
Częścią umiejętności kodowania jest przejrzystość, biorąc pod uwagę twoich „odbiorców”. Ten szczególny idiom wydaje się warty nauczenia, ale z pewnością będą przypadki, w których bardziej sensowne będzie zastosowanie bardziej przejrzystego stylu kodowania.
LarsH

3
Czy to tylko oznacza, kto uważa, że ​​drugi przykład jest lepszej jakości niż pierwszy przykład, ponieważ to, co się robi, jest krystalicznie czyste? Wydaje się, że drugi przykład jest bardziej czytelny niż krótka wersja, która jest pierwszym przykładem. Czy nie ma narzędzi, które automatycznie pobiorą kod stworzony przez człowieka i zoptymalizują go pod kątem Javascript? W oparciu o moje doświadczenia z Javascriptem, faktycznie uruchamiany kod nie musi być po prostu tak efektywny, jak to możliwe.
Ramhound

Odpowiedzi:


135

Ok, oto moje podejście do tego dużego i skomplikowanego tematu.


Zalety utrzymania stylu kodowania:

  • x = x || 10Takie 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.
  • Wyższy poziom kodu jest często bardziej wyrazisty, wiesz, co dostajesz i łatwiej go odczytać wśród wysoko wykwalifikowanych specjalistów.
  • Będziesz bardziej zadowolony z pracy. Osobiście cenię tworzenie ładnego kodu. Myślę, że przynosi mi to dużo satysfakcji z pracy.
  • Ogólnie tworzy bardziej czytelny styl. Trzymanie się idiomów języka może być bardzo cenne - często są to idiomy z jakiegoś powodu.

Wady za utrzymanie stylu kodowania:

  • Programiści niższego poziomu będą trudniej nadążyć. Często są to osoby obsługujące Twój kod i ci, którzy będą musieli przeczytać rzeczy, które piszesz.
  • Opiekunowie kodu, często kod JavaScript pochodzą z innych języków. Twoi programiści mogą być biegli w Javie lub C #, ale nie rozumieją, w jaki sposób i kiedy JavaScript różni się dokładnie. Te punkty są często idiomatyczne - natychmiast wywoływane wyrażenie funkcyjne (IIFE) jest przykładem takiego konstruktu.

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.


1
Wiem, że uczenie się jest stałą rzeczą, ale czy naprawdę zadaniem tego programisty jest szkolenie innych pracowników? Naprawdę powinno być zadaniem kierownictwa znalezienie najbardziej odpowiedniego dla nich szkolenia.
corsiKa

8
@corsiKa Jest mało prawdopodobne, aby programiści nauczyli się wszystkich osobliwości języka poprzez „płatne szkolenie” (tj. rodzaj zarządzania szkoleniami, do którego wysłaliby pracownicy). Uważam to za chore miejsce pracy, gdy współpracownicy nie uczą się od siebie nawzajem. To nie tak, że OP musiałby zapewnić im szkolenie w klasie. Ludzie mogą po prostu zadawać pytania, gdy utkną, a jak wspomniano w komentarzu powyżej, recenzje kodu mogą być przydatne do dzielenia się tego rodzaju wiedzą.
MetalMikester

2
Jego współpracownicy powinni uczyć się samodzielnie, na podstawie przykładów przedstawionych przez PO (i innych). W przeciwnym razie nigdy nie przekroczą swojej obecnej wiedzy. OP nie powinien codziennie poświęcać godzin na szkolenie ich osobiście, ale recenzje kodu i okazjonalne sesje z brązową torbą mogą pomóc każdemu (no cóż, każdemu, kto chce się uczyć).
alroc

1
@corsiKa zgodził się, że przegląd kodu starszego programisty sam w sobie nie jest odpowiednim szkoleniem, chociaż może to być dobry sposób na zidentyfikowanie rzeczy, które młodszy programista powinien sprawdzić później.
Dan Lyons

2
@yms W porządku, to jest słuszne stanowisko. Nigdy nie twierdziłem, że czytelność jest najważniejsza. Mam silny sprzeciw wobec używania wielu języków, tak jakby były one tym samym językiem. Sprzeciw „zasłużył” na setki godzin debugowania. Chociaż całkowicie zgadzam się, że czytelność jest najważniejsza, uważam, że nie można traktować kodów w kilku językach w podobny sposób. Co więcej, myślę, że większość „złej reputacji” JavaScript ma właśnie to. Ludzie oczekują, że zachowa się jak jakiś inny język, ale tak nie jest. Zgadzam się, że czytelność ma kluczowe znaczenie dla misji. Lepszy kod jest zawsze bardziej czytelny :)
Benjamin Gruenbaum

47

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.


10
Problem polega na tym, że funkcje językowe są postrzegane jako „sprytne sztuczki”, nawet jeśli uważam, że tak nie jest. Widziałeś kiedyś zamknięcie? Widziałeś kiedyś IIFE? Widziałeś kiedyś odwołanie do funkcji przekazane jako wywołanie zwrotne? Są to cechy językowe, które zna każdy doświadczony programista JS. Są to jednak „sprytne sztuczki” dla mniej doświadczonych twórców JS.
Florian Margaine

1
@FlorianMargaine brzmi dla mnie, jakbyś musiał popracować nad zmianą terminologii, tzn .: nie są to „sprytne sztuczki”, to bardziej zaawansowane funkcje języka ... 1 oznacza, że ​​Twój kod nie jest łatwo zrozumiały / coś złego, 2 oznacza możliwość uczenia się i doskonalenia „moich” umiejętności kodowania (jak zmusić innych do zmiany terminologii? Komentarze, zachęcanie do pytań, dzielenie się artykułami kodowymi wyjaśniającymi, w jaki sposób te funkcje są przydatne, itp.)
Andrew Bickerton

3
Jeśli łagodzi to ból głowy, frustracją może być to, że JavaScript jako język ... nie ma sensu. To ma sens dla USA, ludzi tutaj zamieszczających, ponieważ zrobiliśmy to już od dawna. Ale bez względu na to, jak sprawiliśmy, że język działa „dobrze”, dla neutralnego oka to po prostu nie ma sensu. Z drugiej strony; możesz niestety wykazać wartość zatrudniania doświadczonych programistów , a najlepiej deweloperów „w dowolnym języku” z dużą chęcią uczenia się nowych paradygmatów.
Katana314,

1
@FlorianMargaine Pracuję również przede wszystkim w JavaScript, znam ból, który odczuwasz. Podszedłem do tego, próbując edukować członków drużyny. Pomoc w filmach Crockford JavaScript ( 1 , 2 ). Nie sądzę, aby te rzeczy, które wymieniłeś, należą do „sprytnych” sztuczek - twoi koledzy z drużyny powinni się ich nauczyć - ale niektóre rzeczy, które robisz z tymi funkcjami językowymi, mogą być złym „sprytnym”. Jak przekonać firmę do zatrudniania doświadczonych deweloperów to prawdopodobnie zupełnie inne pytanie ...
Corion,

2
Komentarze nie zawsze są dobre. Jakiś czas temu przeczytałem „Wyczyść kod”, a niektóre uwagi, które mówi o komentarzach, są doskonałe. Jeśli odczuwasz potrzebę pisania komentarzy w celu wyjaśnienia kodu, istnieje duża szansa, że ​​kod jest źle napisany. Jeśli kod był bardziej wyrazisty, komentarz jest zbyteczny. Za każdym razem, gdy masz zamiar napisać komentarz, zatrzymaj się na chwilę, aby zastanowić się, czy refaktoryzacja może być lepszym rozwiązaniem. Jeśli kod jest ekspresyjny, wyjaśnienie jego celu staje się niepotrzebne. Ponadto komentarze mogą stać się mylące lub po prostu błędne, jeśli kod zostanie zmieniony, ale komentarze nie zostaną zaktualizowane, aby pasowały.
Pappa,

34

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.

x = x || 'default_value';

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 nulllub undefined, a następnie ustawić go do tej wartości domyślnej. Mimo to również w sposób dorozumiany leczyć +0, -0, NaN, falsei ""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:

function f(x) {
    x = valueOrDefault(x, "default_value");
}

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.

| 0lub wersja kultowa ~~numzastosowana 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.


4
Koncentrujesz się na jednym przykładzie. A co z używaniem takich rzeczy jak IIFE, zamknięcia, odwołania do funkcji? To jest główny punkt mojego pytania.
Florian Margaine

1
@FlorianMargaine Nie sądzisz, że zająłem się tym wystarczająco dobrze w drugiej części?
Esailija,

3
Cóż, nie mówi nic o tym, jak poradzić sobie z sytuacją, w której po prostu używam „zaawansowanej funkcji językowej”, co oznacza, że ​​członkowie drużyny źle rozumieją „sprytną sztuczkę”.
Florian Margaine

Podoba mi się ta odpowiedź +1, myślę, że pomija dużą część pytania, ale mówi o innych częściach i scenariuszach na jej temat dogłębnie i wyjaśnia problemy innych deweloperów zespołów, którzy podejmują takie koncepcje samodzielnie, bez wskazówek po przeczytaniu twojego kod.
Benjamin Gruenbaum

@FlorianMargaine masz na myśli, jak faktycznie poradzić sobie z sytuacją w praktyce w miejscu pracy, w którym używasz IIFE i ktoś myśli, że to sprytna sztuczka? Jak wyjaśniłem, ponieważ nie ma ukrytych założeń, zapamiętywanie typu „zmienne nie będą globalne” będzie dobrze działać dla średniej.
Esailija,

23

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.


+1. Żaden konkretny przykład podany przez PO nie jest lepszy empirycznie od drugiego, są one po prostu inne.
Ross Patterson

bardzo ładna odpowiedź @ bryan-oakley. Pozdrawiam
Andy K

7

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.

  1. O ile nie ma to konkretnego minusu, cały kod powinien być napisany według określonego wzorca lub wytycznych, które umożliwią łatwą konserwację przez programistów, którzy będą go utrzymywać. (Ostrzeżenie: stosowanie złych wzorców tylko dlatego, że są one obecnie w bazie kodu, jest straszną praktyką.)
  2. Jeśli znajdziesz dobry powód, aby użyć idiomu specyficznego dla języka, który nie jest łatwy do odczytania przez odbiorców docelowych, dodaj komentarz. Jeśli uznasz, że musisz dodać komentarz do każdej innej linii, możesz przepisać kod, aby był bardziej czytelny dla odbiorców. Nie uważam za wartościowe bycie idiomatycznym ze względu na bycie idiomatycznym.

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. :)


5

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.


3

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ół.


3

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ć.


Jeśli uważasz, że łatwiej byłoby ci wyjaśnić, co masz na myśli w środowisku C #, wątpię, by OP nie miałoby nic przeciwko - na pewno nie. To pytanie nie dotyczy JavaScript :) Wyobraź sobie, że rezygnujesz z opcjonalnych parametrów lub lambdów w swoim kodzie, ponieważ inni programiści nie rozumieją tego - zrobiłbyś to? Chyba podnieść kilka ciekawych pomysłów tutaj, ale jeśli przestać się martwić o określonym języku można napisać go w bardziej atrakcyjny sposób :)
Benjamin Gruenbaum

1
Pracuję głównie z C #, więc był to przykład, który przyszedł mi do głowy najbardziej. Robisz doskonały punkt, jeśli chodzi o to, czy zrezygnowałbym z użytecznych funkcji językowych tylko dlatego, że inni nie są ich świadomi. Odpowiedź musiałaby być przecząca, ale oczywiście trudnym zadaniem jest sprawienie, aby inni zobaczyli zalety tego nowego sposobu, który wydaje się być głównym problemem Floriana.
Daniel Hollinrake,

3

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ć.


1
Nie znam żadnego programisty, który nie wrócił do swojego kodu (sprzed miesiąca!) I powiedział „kto do diabła to napisał”. Zawsze ewoluujemy stylowo (przynajmniej próbujemy). W tym konkretnym przypadku OP pisze kod standardu, a nie kod WTFish. OP nie dyskutuje o pisaniu kodu „sprytnego” lub „krótszego, aby być fajnym”, to idiomatyczny JS.
Benjamin Gruenbaum,

2

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.


1

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.


1

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 || 10a inni programiści odczytają to jako

if (0 == x) { x = 10;}

emacs ma wszystkie elementy, które łatwo to zrobić.


1
W tym przypadku wiemy, kim jest obserwujący. Są naszymi współpracownikami. Myślę, że to wyrażenie jest zwykle używane, gdy nie znasz swoich odbiorców.
dcaswell

-1

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).


5
W tym przypadku nie jestem bystry. Piszę kod idiomatyczny dla każdego doświadczonego programisty. Czy rozumiesz, dlaczego teraz walczę? :)
Florian Margaine

3
Pierwszy akapit jest na miejscu, ale -1, ponieważ drugi akapit jest daleko od znaku. Twierdzenie, że ten przykład jest celową próbą bycia sprytnym, jest niedokładne. Jest to właściwie bardzo jasne, a co ważniejsze, jest to styl idiomatyczny, na który zgadza się wielu dobrych programistów javascript. To nie jedyny idiom w javascript dla domyślnych parametrów funkcji, ale jest powszechny.
Ben Lee,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.