Czy powinieneś napisać dobrą dokumentację i czysty kod, aby zwiększyć „współczynnik magistrali”?


48

Jednym z głównych celów firm zajmujących się tworzeniem oprogramowania jest zwiększenie ich współczynnika autobusu. Jest to również zalecane w rozmowie zorganizowanej przez Google .

Oznacza to, że powinieneś zakodować i udokumentować wszystko w taki sposób, że jeśli jutro wpadniesz na autobus, projekt może być kontynuowany. Innymi słowy, powinieneś dać się łatwo zastąpić innemu programistowi o podobnych umiejętnościach.

Wymienianie nie jest sprzeczne z interesem programisty? W książce 48 zasad władzy Reguła 11 stanowi, że powinieneś próbować uzależniać ludzi od ciebie, aby zdobyć władzę, co następnie przekłada się na nagrody pieniężne.

Poza scenariuszem, w którym potrzebujesz dokumentacji dla siebie, aby kontynuować projekt po 6 miesiącach przerwy, wydaje się, że istnieje wyraźny konflikt interesów między deweloperem a firmą programistyczną.

Jako programista powinieneś naprawdę napisać doskonałą dokumentację i czytelny kod dla wszystkich; czy też powinieneś napisać kod i dokumentację w taki sposób, aby spełniał zadanie i sam mógłbyś go zrozumieć, ale inna osoba może mieć problemy ze zrozumieniem?


41
Książka Greene'a jest odpowiednia dla despotów i lokajów, którzy szukają przychylności w lenno. Niezbyt dobra filozofia moralna dla pracy zespołowej. Delikatnie mówiąc! [Uwaga: wikipedia dzieli tę książkę na „socjopatię”]
Steven A. Lowe

27
Nigdy bym cię nie zatrudnił: D
deadalnix

37
Cmentarze są pełne niezastąpionych ludzi.
Job

20
Nigdy nie chcesz być niezastąpiony - jak uzyskać awans, jeśli nie możesz go zastąpić? O ile nie jesteś szczęśliwy dokładnie tam, gdzie jesteś, na zawsze „czynnik autobusowy” jest zawsze ważny.
Dave

11
„Książka zawiera elementy tematyczne z Księciem Niccolò Machiavelli i została porównana z klasycznym traktatem Sun-Tzu„ Sztuka wojny ”. Nie sądzę, żebym chciał współpracować z kimkolwiek, kto postrzega swoje miejsce pracy jak XVI-wieczną włoską politykę lub ... starożytną chińską wojnę.
Cascabel,

Odpowiedzi:


110

Powinieneś dążyć do tego, aby stać się niezastąpionym, nie pisząc kodu, którego nikt nie rozumie, ale gromadząc więcej doświadczenia i wiedzy niż inni. Ten pierwszy sposób sprawia, że ​​jesteś programistą, z którym wszyscy starają się unikać pracy, ponieważ będą się bać i nie znosić pisania kodu. W ten drugi sposób możesz zostać poszukiwanym członkiem zespołu, którego menedżerowie chcą mieć w swoim zespole.

Z mojego doświadczenia wynika, że ​​pisanie czystego, dobrze udokumentowanego (a najlepiej samodokumentującego) kodu zawsze się opłacało. W rzeczywistości korzystałem z prawie każdej okazji, aby pomagać i uczyć innych (a także uczyć się od nich, kiedy wiedzieli coś lepszego) i prawie nigdy nie czułem zagrożenia, że ​​zostanę zastąpiony przez kogoś mniej zdolnego ode mnie. W rzeczywistości zwykle pomogło to całemu zespołowi w lepszej pracy i szybszym rozwiązywaniu problemów, co jest marzeniem każdego menedżera - a rozsądny menedżer nie chce zastępować członków dobrego zespołu.


1
Interesujące jest to, że zostało to poruszone właśnie teraz, ponieważ zaledwie kilka dni temu powiedziano mi, jak cenne są diagramy jednego z projektów, nad którymi obecnie pracuję, dla osób, które prawdopodobnie nigdy nie będą dotknij kodu. To i oczywiście zapewnia mi ogólny widok różnych modułów i ich interakcji. Przegląd ten może nie być szczególnie potrzebny, gdy mam wszystko w świeżej pamięci, ale prawie na pewno pomoże, gdy ponownie odwiedzę kod za rok ...
CVn

2
Kilka osób, które napisały kod (zły, zaciemniony), które czyniły ich „niezastąpionymi” w mojej pracy, już tu nie pracuje. Lepsi programiści widzieli swoją pracę podczas przeglądów kodu lub naprawiania rzeczy podczas wakacji. Zobaczyli „jakość” swojej pracy i zostali zakonserwowani.
CaffGeek

44

Jeśli zamierzasz manipulować organizacjami lub ludźmi w sposób tak przejrzysty, lepiej byliby głupi lub w dżemie, który nie pozostawia im innego wyboru. Dobrze prowadzony sklep programistyczny sprawdziłby twój niejasny kod i brakującą dokumentację i po prostu zwolnił cię, zanim mógłbyś wyrządzić wiele szkód. Jeśli są źle zarządzani lub nie są w stanie zmusić innych programistów do pracy dla nich, dlaczego mielibyście mieć u nich zabezpieczenie?

PS Ani pan Greene, ani Machiavelli nie osiągnęli wiele poza pisaniem książek, które starały się schlebiać niedoszłym „twardym ludziom” tamtych czasów. Skorzystaj z ich porady z odrobiną soli.


42

Jeśli jesteś niezastąpiony, nie możesz awansować.


14
Co gorsza, w niektórych miejscach, jeśli kiedykolwiek udowodnisz, że możesz wziąć niedziałający kod innej osoby i sprawić, by działał, nigdy więcej nie będziesz mógł pracować nad własnym kodem, ponieważ będzie to postrzegane jako tańsze, aby pozwolić innym facetom zgrubić ogromny stos parowania, a następnie wyczyścić i wypolerować wspomniany ogromny stos parowania.
John R. Strohm

najlepsza jak dotąd argumentacja na ten temat
ZJR

2
Rzeczywiście klasyczna odpowiedź.
Sarawut Positwinyu

@ JohnR.Strohm Dude !!!! Byłem tam i czuję się tak źle. Będąc bardziej ostrożnym inżynierem, poświęciłbym trochę więcej czasu na zadanie. Menedżer zaczął więc pozwalać innym ludziom szybko pisać odrapany kod, a następnie kazać mi go wyczyścić podczas przeglądu kodu. Czułem się absolutnie niewłaściwie wykorzystany, ponieważ ta rola stała się moją istotą dla zespołu, mimo że nie tego chciałem. Nie trzeba dodawać, że opuściłem zespół wkrótce po tym, jak to zrozumiałem.
davidXYZ

17

Nie chcesz być niezastąpiony. Nie chcesz, aby ludzie czuli się zależni od ciebie, chcesz, żeby cię docenili. Ogólnie rzecz biorąc, chcesz trzymać się z dala od ludzi, którzy uważają, że nawet połowa praw władzy powinna obowiązywać w relacjach (zawodowych lub osobistych).
Reguły te są instrukcją dotyczącą tego, jak skutecznie ustanowić sytuację, w której wygrywa-przegrywa. To, czego chcesz, to sytuacja korzystna dla obu stron.
Gdy tylko ludzie zaczną odczuwać, próbujesz odepchnąć ich od przegranej strony sytuacji wygrana-przegrana, będą walczyć. Próby ustalenia sytuacji wygrana-przegrana często kończą się przegraną, ponieważ efektywnie marnujesz zasoby na doprowadzenie partnera do utraty pozycji, zamiast inwestować je w ogólny sukces partnerstwa.

Jeśli zrobisz to ze swoimi pracodawcami, będą oni próbować narzucić ci środki, aby zmniejszyć monopol na twoją wiedzę. Przeważnie będą to absurdalne wytyczne dotyczące tego, jak musisz wykonywać swoją pracę, a tym samym zamienisz swoje życie zawodowe w piekło. Zadzwonią też o 3 w nocy, gdy coś się zepsuje, ponieważ jesteś jedyną osobą, która może to naprawić. Próba wykorzystania takich sytuacji, jak dźwignia, może przynieść odwrót i spowodować więcej problemów.

Cmentarze są pełne niezbędnych ludzi.
- Gaulle, Charles De

Więc wytnij gówno i wykonuj swoją pracę właściwie. Jeśli nie dla niczego innego, to dla ciebie, ponieważ prawdopodobnie będziesz biedną duszą, która musi wprowadzić pewne zmiany w kodzie za 2 lata.


Zauważyłem, że za każdym razem, gdy próbuję ustanowić sytuację, w której wygrywają wszyscy, ludzie będą chcieli wygrać i wyglądać na lepszych. To prawie jak ta książka o tym, jak działa mafia: jeśli potraktujesz rówieśnika, już wkrótce uzna, że ​​jest lepszy od ciebie. Działa z grafikiem, który właśnie wyszedł ze szkoły na 3 lata - im bardziej go szanowałem, tym bardziej traktował mnie jak brud. A teraz z początku wyglądam na wyższego i coraz więcej ludzi mnie szanuje. To jest dziwne. Ale miejsce różnic powinno mieć inną kulturę. Pracuję w nowatorskich startupach z Doliny Krzemowej.
nopole

1
@ 動靜 能量: To brzmi bardziej jak przegrana. Istotą wygranej nie jest bycie miłym dla wszystkich bezwarunkowo. Jeśli masz wrażenie, że ktoś traktuje cię jak brud, powinieneś zająć się nim otwarcie, jasno i rozsądnie. Łatwo można wykazać, że jeśli ktoś w twoim zespole zachowuje się jak dupek, nie wpływa to korzystnie na ogólną wydajność drużyny.
back2dos,

czy „przegrana-wygrana” jest szczególną sytuacją w systemie „wygrana-wygrana” lub „wygrana-przegrana”? Nie mogę znaleźć wielu informacji na ten temat ... ale zauważ, że nie wszystko na świecie może być korzystne dla wszystkich. Współpracownik, który chce zostać dyrektorem lub liderem zespołu, zdecydowanie nie wygra. Albo współpracownicy, którzy chcą pojawić się jako supergwiazda, uzyskać awans, uzyskać podwyżkę, ochronić swój tytuł „architekta” lub nie zostać zwolnionym przed roczną datą nabycia opcji na akcje, na pewno nie uznają tego za „wygrana-wygrana”, gdy musi cię przygnębić. Teraz nawet nie chcę wpaść w sytuację „przegranej” na początek ...
nopole

Powodem jest to, że jeśli najpierw traktuje mnie jak brud, prawdopodobnie go trochę nienawidzę, a potem nie będzie to dobry związek. Jeśli wyglądam na wyższego i szanuje mnie trochę, to związek może trwać lepiej bez upadku i wzlotu. Ale to prawda, odkryłem, że w krzemianowej dolinie gardła, jeśli „akceptujesz” i „tolerujesz”, stajesz się wycieraczką, na którą ludzie lubią wchodzić. Zdecydowanie odwet odpowiednio lub powiadom go, że ma to konsekwencje.
nopole

@ 動靜 能量: Postępuj zgodnie z linkiem w moim poście. W twoim przypadku powinieneś otwarcie opowiadać się za wygraną lub brakiem porozumienia. Często wszelkiego rodzaju interakcje zamieniają się w bójki, gdy faktyczne spędzanie czasu na omawianiu podejścia do interakcji rozwiązałoby problemy. To tak proste, jak: „Wolałbym, żeby nasz związek był współpracą, niż konkursem i jestem gotów podjąć odpowiednie zobowiązania. Jeśli nie widzisz takiej opcji, bądź na tyle uczciwy, aby powiedzieć mi teraz. Jeśli spróbujesz żeby to wykorzystać, aby mnie przechytrzyć, zdzieram wasze jaja. " Chociaż możesz chcieć przeformułować ostatni bit;)
back2dos

15

Negatywne odpowiedzi nie są zbyt zaskakujące, biorąc pod uwagę liczbę lepszych niż przeciętni programistów, których przyciąga ta strona. Utalentowani ludzie na ogół nie muszą uciekać się do tego rodzaju taktyk bezpieczeństwa poprzez zaciemnianie. Ale pracowałem u dostawcy motoryzacyjnego z listy Fortune 500 z kilkoma niezbyt utalentowanymi programistami, którzy sami dla siebie stworzyli małe lenna, których gorliwie strzegli, tworząc mnóstwo dokumentacji dla przerażających interfejsów, które zaprojektowali.

Całe zadanie jednego faceta polegało na utrzymywaniu kodu modułu, który zmostkował dwa całkowicie oddzielne podsystemy, umożliwiając modułom w każdym systemie komunikację za pośrednictwem UART. Zasadniczo był to Serial Programming 101. Zamiast po prostu stworzyć ogólny interfejs, który wyglądałby mniej więcej tak:

  int sendData (int targetModule, void * data, size_t byteCount);
  int recvData (int sourceModule, void * data, size_t maxBytes);

stworzył osobne kody dla każdej wiadomości, którą dowolne dwa komunikujące się moduły mogłyby chcieć wysłać sobie nawzajem. Co oznaczało, że jego moduł musiał wiedzieć o każdej wiadomości i był aktualizowany za każdym razem, gdy wiadomość była dodawana lub zmieniana. Mów o niewłaściwej intymności!

Chodzi o to, że ten facet starannie prowadził dokument Word zawierający wszystkie kody operacyjne / wiadomości i odpowiednio go aktualizował. To stała się jego cała praca . Kilka razy w tygodniu wysyłał nową wersję do wszystkich nieszczęśliwych ludzi, którzy mieli go na swojej krytycznej ścieżce. I było to postrzegane jako „profesjonalne”, ponieważ zarząd uwielbiał widzieć dokumentację. W pewnym sensie płaczę dla przemysłu motoryzacyjnego.

Chyba o to mi chodzi: czasami pisanie dokumentacji może w rzeczywistości chronić przeciętnych programistów. Menedżerowie często nie potrafią odróżnić dobrego projektu od złego, a wielu jest zmuszonych do podejmowania decyzji technicznych przy ograniczonej ilości informacji. Jest to dla nich niezwykle stresujące. Widok dokumentu Word z dziesiątkami starannie sformatowanych tabel może być bardzo pocieszający - nawet jeśli to, co opisuje, jest zasadniczo złym pomysłem.


Ciekawa perspektywa.
scribu

Nie ogranicza się to tylko do przemysłu motoryzacyjnego. Myślę, że każda duża organizacja, która nie jest w branży oprogramowania / technologii, ale zatrudnia programistów (wśród innych pracowników IT), będzie cierpieć z tego powodu w mniejszym lub większym stopniu.
CraigTP

Wierzę w wartość dokumentacji, ale dokumentacja nie jest tym, co chroni pracę tego faceta. Jest tam tylko z powodu niekompetentnego zarządzania i samozadowolenia. To zadziwiające, że nikt nie poświęcił 90 minut na dzień na napisanie notatki zatytułowanej: Jak zaoszczędzić miliony dolarów ORAZ zbudować lepszy produkt. Być może jest to jeden z powodów, dla których firmy takie jak GM i Chrysler znalazły się w bardzo głębokich, bardzo drogich dziurach.
Caleb

1
@Caleb: W żadnej dużej organizacji żaden dobry uczynek nie pozostaje bezkarny. O wiele łatwiej jest pozwolić innym na ich lenno i samemu sobie je stworzyć, jeśli możesz.
Gilbert Le Blanc,

3
@Caleb: Zaczynamy od tematu, ale ja i inni, tacy jak ja, postanowiliśmy nie walczyć z ludzką naturą. Możesz osiągnąć merytokrację w małej (<20) grupie informatycznej, ale gdy miniesz około 100 programistów, Twoja organizacja będzie lennem, czy ci się to podoba, czy nie.
Gilbert Le Blanc,

14

Wymienianie nie jest sprzeczne z interesem programisty?

Nie chcę ci tego łamać, ale wszyscy są wymienni. Jasne, czasami może to być niewielkie wyzwanie, aby cię zastąpić (jeśli jesteś wystarczająco doświadczony i bystry), ale lata świetlne od niemożliwego.

Sposobem, aby być naprawdę cennym towarem dla pracodawcy (nie tylko obecnego pracodawcy, ale każdego pracodawcy), jest wykazanie umiejętności pisania kodu tak łatwego do odczytania przez każdego, kto go czyta (krótki czas potrzebny na rozpoczęcie pracy) i dokumentowania kod (każdy może uzyskać ogólny przegląd twoich systemów bez konieczności zagłębiania się w kod).

Właściwie bycie dobrym w dokumentowaniu kodu jest trudną do zdobycia w dzisiejszych czasach, więc to samo pomoże odróżnić cię od innych.

Czysty i dobrze udokumentowany kod również zasługuje na wznowienie (przynajmniej namacalne wyniki, tj. „Byliśmy w stanie zaangażować nnowych programistów przy minimalnym przyspieszeniu i pomocy dzięki mojej dokumentacji), gdzie podstępnie podchodzimy do tworzenia „niezastąpiony” nie jest.


-1: Nie chcę ci tego łamać, ale wszyscy są wymienni. - Tak, ale niektóre osoby są trudniejsze do zastąpienia niż inne.
Jim G.

10

Wymienianie nie jest sprzeczne z interesem programisty?

Zależy, jakie są interesy tego programisty. Jeśli jesteś tym, który chce przetrwać w jednym zadaniu przez całą karierę, bądź całkowicie niezbędny dla firmy, która nagradza niekompetencję i zarabia dobre pieniądze, to tak, absolutnie.

Ale co się dzieje, gdy firma ulega awarii, prawdopodobnie dlatego, że zatrudniła zbyt wielu takich ludzi? Gdzie idziesz dalej? Co, gdy zapytają cię, dlaczego pozostawałeś w tej samej pracy przez 15 lat? I tak dalej.

Teraz spójrz na to inaczej: ilu programistów straciło pracę, będąc kimś, kto pisze kod, który każdy może przeczytać?

Jedynym prawdopodobieństwem takiego zdarzenia jest sytuacja, gdy firma ma kłopoty i zwalnia ludzi. Jeśli tak się dzieje, lepiej wyjdź i będziesz bardzo dobrze przygotowany na nadchodzące wywiady. Dodatkowo twoje sumienie będzie całkowicie darmowe - nie pozostawisz po sobie niewytłumaczalnego kodu, który napisałeś dla własnego zysku.

Nie wiem, jaką jesteś osobą, ale to lepiej służy moim zainteresowaniom.

Osobiście uważam, że jedną z moich największych zalet jest automatyzacja własnej pracy. Jak myślisz, co zwykle myśli firma, gdy stałem się nadwyżką moich własnych wymagań? Czy myślą, że „ok, pozbędziemy się go teraz”, czy też myślą, „dlaczego nie przeniesiemy go na inną rolę i nie pozwolimy mu zrobić tego ponownie”?


9

Wymienianie nie jest sprzeczne z interesem programisty?

Masz rację, ale myślę, że źle zrozumiałeś znaczenie zamiennika. Mogłem znaleźć 1000 programistów, którzy piszą gorączkowy kod, nieudokumentowany, który może szybko przekształcić się w niemożliwy do utrzymania bałagan.

Programiści, którzy produkują nie tylko stałe programy, ale także czysty kod, dokumentację informacyjną i zapewniają ciągłość projektu, który jest nie tylko niezastąpiony, ale bezcenny .


7

Odpowiem na to pytanie z innej perspektywy, ponieważ istnieje już kilka doskonałych odpowiedzi.

Zastanów się, co się dzieje, gdy grasz w małe gry, próbując uczynić siebie „niezastąpionym”, uniemożliwiając innym osobom nauczenie się, jak działa Twój kod. Pozostajesz w tym samym zadaniu, utrzymując własne bałagany, dopóki firma cię toleruje. I to jest najlepszy scenariusz, najgorszym scenariuszem jest to, że inni, bardziej utalentowani i bardziej etyczni inżynierowie i menedżerowie w twojej firmie dostrzegają przeszkodę, jaką narzucają ci złe praktyki, i postanawiają coś z tym zrobić: zwalniając cię i przepisując wszystko od zera. To zostało zrobione. W rzeczywistości zdarza się dość często.

Teraz zastanów się, co się stanie, gdy napiszesz dobry kod i dobrą dokumentację. Tworzysz komponent lub system, który działa dobrze, że po pewnym czasie działania błędy działają płynnie i nie trzeba na nie patrzeć. Utrzymanie go zajmuje niewiele wysiłku. Następnie możesz przejść do większych i lepszych projektów, z solidnym zwycięstwem pod swoim pasem. Ludzie rozpoznają cię za dobrą pracę i zaczną szanować twoją opinię. Będziesz mieć możliwość poruszania się w górę łańcucha żywnościowego i podejmowania bardziej znaczących decyzji, wykonywania ważniejszej i bardziej wpływowej pracy lub zarządzania projektami na wyższym poziomie. Twoja kariera się poprawi, dostaniesz awans, zarobisz więcej pieniędzy, zyskasz uznanie i aprobatę rówieśników, dodasz do sukcesów coraz ważniejszych projektów.

Którą trasę wolisz?


4

Jeśli jesteś pojedynczym punktem awarii, Twój klient (lub pracodawca) prawdopodobnie spróbuje cię zastąpić; zawsze jest punkt, w którym wymiana oprogramowania jest mniej kosztowna niż jego konserwacja, bez względu na to, jak ważne wydaje się to być. Jest powód, dla którego IT jest jednym z najbardziej zlecanych zawodów.

Z drugiej strony bycie wymiennym daje kilka bezcennych korzyści:

  • móc wziąć urlop
  • nie będąc na dyżurze
  • wolność odejścia i pracy nad nowym i ekscytującym projektem

-1: Jeśli jesteś jedynym punktem awarii, twój klient (lub pracodawca) prawdopodobnie spróbuje cię zastąpić; - Nie z mojego doświadczenia. Zobacz odpowiedź @evadeflow.
Jim G.

3

Jeśli nie poświęcisz 5 minut na napisanie szybkiej dokumentacji, spędzisz godzinę na ponownym czytaniu i wyjaśnianiu ludziom, kiedy będą musieli użyć twojego kodu.

Jeszcze gorzej może być spędzanie dni na szukaniu nowej pracy, ponieważ twój szef odkrył, że nie piszesz łatwego do utrzymania kodu.


3

Doskonała dokumentacja ostatecznie stanie się przestarzała przy refaktoryzacji / ewolucji, a jej aktualizowanie jest naprawdę czasochłonne.

Czysty kod + test jednostkowy> doskonała dokumentacja


1
Zgoda. Nie mogę ci powiedzieć, nad iloma projektami pracowałem, w których wszyscy w zespole (w tym ja) zdecydowali, że tym razem „zrobimy to dobrze” i wykorzystamy doxygen lub CppDoc do udokumentowania wszystkiego i utrzymania go na bieżąco - data. To się jeszcze nie wydarzyło. Ponieważ harmonogramy projektu są takie, jakie są, dokumenty nieuchronnie nie zsynchronizują się z kodem, a nasz zasięg testów będzie minimalny lub nie będzie go wcale. Teraz mam tendencję do wpatrywania się w rzutki na każdego, kto sugeruje stosowanie doxygen, i proszę, aby najpierw pokazał mi swoje testy. Dokumentacja kodu bez żadnych testów to tylko kłamstwo.
evadeflow,

Jest to trochę poza tym - dobre testy jednostkowe dokumentacją. Po prostu opowiadasz się za określoną różnorodnością czystego, udokumentowanego kodu, nie mówiąc, że nie należy tego robić.
Cascabel,

2

Odpowiedź na twoje pytanie brzmi „tak”. Tak, powinieneś napisać dobrą dokumentację i czysty kod. Umyślne działanie w inny sposób pokazuje brak uczciwości, który, choć coraz bardziej rozpowszechniony w świecie biznesu, nie jest nagle „dobrą” rzeczą.

Nikt nie jest niezastąpiony. Ludzie, którzy produkują sytuację, w której uważają, że mają tendencję do trudnego odkrycia, że ​​tak nie jest. Wytworzenie współzależności dla siebie przynosi efekt przeciwny do zamierzonego, ponieważ ogranicza także ciebie, a nie tylko pracodawcę.


2

Jednym z głównych celów firm tworzących oprogramowanie jest zwiększenie współczynnika Bus

Fałszywa przesłanka. Głównymi celami firmy zajmującej się tworzeniem oprogramowania (w każdym razie, nad którą pracowałem) jest wytwarzanie najlepszego oprogramowania, jakie potrafią, i zarabianie pieniędzy, niekoniecznie w tej kolejności. Zmniejszenie „współczynnika autobusu” to tylko jeden ze sposobów uniknięcia utraty pieniędzy.

Artykuł 11 Naucz się utrzymywać ludzi na tobie.

Co to dla ciebie znaczy?

Czy chcesz, aby ludzie polegali na tobie, ponieważ podważyłeś ich w taki sposób, że mogą tylko iść naprzód z twoją pomocą? A może chcesz, aby ludzie polegali na tobie, ponieważ jesteś mądry i wnikliwy, niezawodny, godny zaufania i może pomagać innym w wykonywaniu ich zadań? Czy chcesz, aby Twoi koledzy wyglądali źle bez Twojej pomocy, czy chcesz, aby docenili Cię za to, że wyglądają dobrze?

To Twoja decyzja.


1

(przy założeniu kodu produkcyjnego)

Staram się iść trochę dalej. Pisałem o robieniu programów „idiotycznymi”, ale nie zawsze to kwalifikuję: piszę dużo kodu, którego inni ludzie nie zobaczą lub z którym nie będą pracować (przynajmniej takie są oczekiwania, kiedy zostaną napisane). jajestem idiotą, przed którym staram się obronić w tej sprawie. Dobrze jest, gdy Twój program wykrywa problemy, a problem został tak uproszczony, że oczywiste jest, że wystąpił błąd i jego pochodzenie. Prawda jest taka, że ​​szczegóły implementacji są oczywiste, gdy piszesz program (chyba że wdrażasz go przedwcześnie), ale powinny być abstrakcyjne i odporne na błędy dla klientów (nawet jeśli istnieje lokalizacja modułu). Powodem jest to, że programy stają się bardzo złożone. Czasami możesz rozdzielić problemy, ale nie przez cały czas. Jeśli trzymasz swoje komponenty bardzo surowe, proste, dobrze zamknięte i idiotyczne, zwykle dobrze się skalują, a większość wad wykrywa się przed ich wysłaniem. Łatwiej jest ponownie użyć, a Ty masz więcej pewności siebie i łatwiejszego ponownego użycia programów. te złożone programy, które piszesz, stają się bardziej złożone (nawet dla ciebie) po pewnym czasie nieobecności w programie. Gdy przeczytasz go w ciągu 6 miesięcy, zrozumienie i debugowanie może potrwać absurdalnie długo w porównaniu z wersją idiotyczną. Jeśli składnik wprowadza przełomową zmianę, w przeciwnym razie może pozostać niewykryty przez długi czas. Programy są złożone; nie możesz uciec od tej rzeczywistości, ale możesz uczynić ją idiotyczną dowodem, co znacznie ułatwi ci życie, gdy coś pójdzie nie tak lub gdy trzeba go ponownie wykorzystać lub zmienić. Dlatego podejście idiotyzmu oznacza, że ​​twoje oprogramowanie może być zrozumiane, ponownie użyte lub utrzymywane przez twoich juniorów lub osoby w zespole również (nie tylko kogoś tak dobrego / doświadczonego jak ty). Zastąpienie to osobny problem: jeśli ludzie uwielbiają pracować z twoimi programami, robisz dobrą robotę - nie martw się o wymianę. Jasne, mógłbym wymyślić scenariusze, w których niezrozumiałe programy mogłyby uratować twoją pracę, ale napisanie dobrego programu, z którego inni mogą korzystać i które jest utrzymywane, jest wyraźnie mniejszym złem (spójrz na odrodzenie się innych). Jeśli złapię się na pisaniu czegoś, co nie jest idiotycznym dowodem, staram się to naprawić.

Poza scenariuszem, w którym potrzebujesz dokumentacji dla siebie, aby kontynuować projekt po 6 miesiącach przerwy, wydaje się, że istnieje wyraźny konflikt interesów między deweloperem a firmą programistyczną.

Naprawdę nie masz pojęcia, co myślisz, kiedy wracasz do uśpionych implementacji. Kiedy jesteś naprawdę doświadczony, problem jest prostszy, ponieważ możesz polegać bardziej na ustalonych metodach lub podejściach, których używasz. To jednak zakłada również, że metody te są niezmienne. Mimo że dokumentacja może być luźna, nadal musisz być defensywny w swoich implementacjach (np. Wiesz, że w tym scenariuszu nie należy zdawać NULL - sprawdź ten warunek).

Jako programista powinieneś naprawdę napisać doskonałą dokumentację i czytelny kod dla wszystkich; czy też powinieneś napisać kod i dokumentację w taki sposób, aby spełniał zadanie i sam mógłbyś go zrozumieć, ale inna osoba może mieć problemy ze zrozumieniem?

Polecam idiotyczne podejście, które jest jeszcze jaśniejsze i bardziej odporne na błędy niż podejście oparte na współczynniku magistrali. Napisz swoje programy i dokumentację w taki sposób, aby były zrozumiałe dla osób spoza projektu - to też jest dobre dla ciebie. Takie postępowanie zwiększy twoją wartość dla twojej firmy i zespołu, nie będą chcieli cię zastąpić.


1

Zasadniczo źle zrozumiałeś grę. Ta gra nie polega na robieniu tych samych starych rzeczy, które robiłeś wcześniej, będąc odpowiedzialnym za cały napisany kod, ponieważ nikt go nie rozumie. Gra polega na ukończeniu projektu i przejściu do następnego, pozostawiając za sobą kod, który ktoś może łatwo zrozumieć i pracować pod twoją nieobecność, abyś mógł robić nowe rzeczy i podejmować coraz więcej różnych obowiązków. Twoje założenie działa tylko wtedy, gdy jesteś szczęśliwy, że utknąłeś w kółko, robiąc to samo, bez szansy na naukę lub poprawę.


1

Zwrócę też uwagę, że jeśli nie będziesz miał okazji często patrzeć na ten kod, ty również będziesz miał problem z jego zrozumieniem za sześć miesięcy, jeśli umyślnie go zaciemnisz.


0

I udokumentować co trochę kodu piszę, nie jest tak, że inni mogą go czytać, ale tak, że ja może go odczytać w ciągu 3 miesięcy czasu! Chodzi o ułatwienie konserwacji. Jeśli jesteś odpowiedzialny za napisany kod i nie możesz naprawić błędów, które pojawią się później, to będziesz chciał, aby było dobrze udokumentowane ... Nie ma znaczenia, jak możesz być wymienny, jeśli nie jesteś w stanie wykonać swoją pracę!


-1: Dlaczego nie dążysz do samodokumentowania kodu? W przeciwieństwie do w najlepszym razie zbędnej dokumentacji, aw najgorszym przypadku dokumentacji, która bardzo szybko stanie się przestarzała? Zobacz odpowiedź @xsAce.
Jim G.

0

Każdy „niezastąpiony” profesjonalista komputerowy, z którym miałem nieszczęście wchodzić w interakcje, został zastąpiony, w dużej mierze dlatego, że starali się utrzymać zakładników w swoich zasobach. Kiedy ludzie, którzy zgłaszają się do mnie, mówią mi, że ich czas jest cenny, aby „zmarnować” dokumentację, wymieniam ich tak szybko, jak to możliwe.

Wydaje się, że jeśli potencjalny pracownik uważa 48 praw władzy za etycznie lub moralnie akceptowalne, to lepiej byś je bez nich.


-1: Kiedy ludzie, którzy zgłaszają się do mnie, mówią mi, że ich czas jest zbyt cenny, aby „zmarnować” dokumentację, wymieniam ich jak najszybciej.
Jim G.

@Jim G: Fajnie. Zakładam, że poświęcasz czas na marnowanie dokumentacji ...
John Percival Hackworth,

0

Jeśli NAPRAWDĘ chcesz być niezastąpiony (co możesz chcieć ponownie rozważyć po przeczytaniu wszystkich odpowiedzi ...) - po co przestać dokumentować kod?

Jest naprawdę genialny przewodnik na temat pisania nieusuwalnego kodu, który koniecznie powinieneś przeczytać: http://thc.org/root/phun/unmaintain.html

Cieszyć się! (Z pewnością tak ...)


Jest też „Refuctoring” :)
CraigTP
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.