Karta odpowiedzialności programistów [zamknięta]

40

Wszyscy więc słyszeliśmy o Programme Bill of Rights, a XP ma podobną koncepcję.

W dzisiejszych czasach powszechną skargą jest to, że dużo słyszymy o prawach ludzi, ale nie tyle o ich obowiązkach, więc co powinno być na liście obowiązków programistów. Są to rzeczy, które powinni robić, co mogą być dla nich niesmaczne, ale które oddzielają programistów działających profesjonalnie i odpowiedzialnie od tych, którzy tego nie robią.

Interesują mnie przede wszystkim te niesmaczne i te, które zwykle się nie zdarzają. To są te, których programiści unikają, a nie te, które 90% programistów naprawdę chce zrobić (takie jak zawsze refaktoryzacja i użycie kontroli źródła).

Co zatem powinno znajdować się w Karcie odpowiedzialności programistów?

Jon Hopkins
źródło
4
ponadto myślę, że pasuje do wytycznych 1, 2, 4 i 6.
Stephen Furlani,
2
Myślę, że to ważne pytanie.
HLGEM,
1
Ważnym następstwem może być „jak trenujesz się, aby być odpowiedzialnym programistą?”
Stephen Furlani,
2
To pytanie wydaje się generować tylko listę pozycji. Chociaż odpowiedzi są raczej imponujące (i pochwalam osoby odpowiadające, które poświęcają czas i wysiłek na swoje posty), koncentrują się na opiniach, a sformułowanie pytania wydaje mi się ankietą.
Thomas Owens
5
@ThomasOwens zdecydowanie nie zgadza się z tym, że „To pytanie nie pasuje do naszego formatu pytań i odpowiedzi”. To już wygenerowało odpowiedź na temat testowania programistów, metodologii programistycznych, freelancingu i problemów biznesowych, zapewniania jakości i inżynierii oprogramowania, naprawdę zaczyna się zastanawiać, dlaczego nawet mamy tę stronę, jeśli pytania takie jak powyższe wciąż się zamykają.
Joshua Drake

Odpowiedzi:

41
  • Programista jest odpowiedzialny za odepchnięcie złych wymagań zamiast ich ślepego ich wdrażania. Obejmuje to mówienie klientom, że to, czego chcą, jest droższe niż inne opcje lub wiąże się z określonym zestawem ryzyka. Obejmuje to również przekazywanie złych wiadomości w profesjonalny sposób - nie krzyczenie, nazywanie ludzi głupimi, sugerowanie, że są głupie lub inne dziecinne zachowanie. Jeśli odpycha, powinien mieć szereg powodów (więcej niż „Nie lubię SQL Servera i nie będę go używać”) oraz alternatywny plan przedstawienia.

  • Jednak programista jest również odpowiedzialny za przyjmowanie decyzji i korzystanie z narzędzi lub projektów, które mogą im się nie podobać, jeśli ich odpowiedź zwrotna nie zostanie zaakceptowana. Jeśli zażądano raportu w SSRS, dostarczenie go w Crystal Reports (którego klient może nie mieć) jest niedopuszczalne. Jeśli wymagane było rozwiązanie .net, dostarczenie go w Haskell jest niedopuszczalne. Jeśli nikt w zespole nie używa narzędzia lub języka, którego chcesz używać, nieprofesjonalne jest korzystanie z niego, jeśli kierownictwo nie zgadza się, że jest to najlepsze narzędzie do danego zadania.

  • Programista ma obowiązek przetestować swoją pracę. (To nie powinien być jedyny test, ale żaden profesjonalny programista nie powinien wysyłać kodu, którego nie przetestował). Obejmuje to testowanie nawet gałęzi kodu, których nie spodziewasz się zbyt często. Jeśli masz zestaw zagnieżdżonych IF, przetestuj wszystkie możliwe trasy.

  • Programista ma obowiązek łagodnie obsługiwać błędy i wyjątki oraz pisać komunikaty o błędach, które zobaczy użytkownik, które są profesjonalne i neutralne, a nie żarty i obelgi.

  • Programista ma obowiązek chronić prywatne dane, chronić własny kod, który pisze dla firmy oraz chronić użytkowników przed katastrofą (nawet własną) przed użyciem aplikacji.

  • Programista ma obowiązek upewnić się, że jego kod jest łatwy do utrzymania i że ma kontrolę nad źródłem.

  • Programista ma obowiązek koordynować z innymi, aby upewnić się, że jego zmiany nie wpływają negatywnie na to, co robią.

  • Programista ma obowiązek polecić klientowi najlepszy wybór narzędzi lub języków w fazie projektowania, a nie narzędzie / język, w którym chce się bawić i uczyć.

  • Programista ma obowiązek współpracować z całym odpowiednim personelem projektu, w tym z tymi, których nie lubi. Lubienie ludzi nie jest twoim obowiązkiem, praca z nimi i bycie grzecznym.

  • Programista ma obowiązek wyprodukować produkt, który spełnia wymagania określone w rozsądnych ramach czasowych. Jeżeli termin nie zostanie dotrzymany, on lub ona ma obowiązek poinformować o tym zarząd, gdy tylko będzie to znane.

  • Programista ma obowiązek poinformować kierownictwo projektu o przeszkodach w wykonaniu zadania. Nie mogą naprawić tego, o czym nie wiedzą.

  • Programista jest odpowiedzialny za wykonanie całego zadania, a nie tylko zabawnych, interesujących części. Każda praca ma nudne części, które wciąż trzeba wykonać. Obejmuje to między innymi karty czasu pracy i dodawanie elementów dyskusji do oprogramowania do zarządzania projektami. Zawiera rzeczy takie jak dokumentacja, przegląd kodu itp.

  • Programista ma obowiązek dowiedzieć się, jaką domenę biznesową wspiera, nie tylko koncepcje programistyczne.

  • Programista ma obowiązek aktualizować swoje umiejętności.

  • Kiedy programiści wpadają w błąd, ma obowiązek zrobić wszystko, co w jego mocy, aby rozwiązać problemy tak szybko, jak to możliwe. Może to obejmować przekazanie złych wiadomości kierownictwu, a nie próbowanie ukrywania, że ​​właśnie usunąłeś krytyczną tabelę w produkcyjnej bazie danych.

  • Programista ma takie same obowiązki jak każdy inny pracownik - stawić się na czas, pracować na podstawie umówionych godzin, poprosić z wyprzedzeniem o urlop, odpowiadać na wiadomości telefoniczne i e-mailowe (poczytaj, aby przeczytać e-maile), wypełnić wymagane formularze HR itp.

HLGEM
źródło
7
Ja kocham komunikaty o błędach żart. Sytuacja jest już wystarczająco zła, nie trzeba traktować tego poważniej - przynajmniej przynajmniej rozśmiesz mnie, uderzając mnie błędem!
dr Hannibal Lecter,
2
Kwestionuję odpowiedzialność programisty za osobiste przetestowanie jego kodu we wszystkich sytuacjach ... Chciałbym przeformułować to, aby upewnić się, że jego kod jest testowany ... Jeśli organizacja ma profesjonalnych testerów (zarówno automatycznych, jak i ludzkich) i ma solidny proces aby upewnić się, że kod został przetestowany, nie rozumiem, dlaczego programista musi to zrobić osobiście. Jeśli opracowuję nową funkcję lub naprawiam błąd, z pewnością przetestuję go sam, w przeciwnym razie nie będę wiedział, czy skończę swoją pracę. Jeśli jednak robię duże refaktoryzacje, nie ma dla mnie sensu wyczerpujące testowanie regresji całego produktu.
JoelFan,
Nie powiedziałem testu regresji, ale powinieneś testować jednostkowo swoje zmiany, aby upewnić się, że robią to, co zamierzałeś.
HLGEM,
2
Co powiesz na brak wykrzykników w komunikatach o błędach ... tzn. „Data jest nieprawidłowa!”
JoelFan
1
Te muszą być neutralne pod względem płci. Ustanowienie ich imperatywów ułatwiłoby to, np. Zamiast „programista jest odpowiedzialny za przetestowanie swojej pracy” powinno być „Testuj swoją pracę”.
sigil,
42

Każdy programista powinien udostępnić swój kod innym użytkownikom.

dan_waterworth
źródło
@Kevin D: To jest odpowiedzialność. Jesteś odpowiedzialny za stworzenie kodu czytelnego dla człowieka.
doppelgreener
1
@Axidos, To dlatego, że zmieniłem odpowiedź, kiedy zdałem sobie sprawę z tego, co zrobiłem.
dan_waterworth
Usunę mój oryginalny komentarz, ponieważ nie jest już istotny.
Kevin D
1
Przez kogo „czytelny”? Moi „rówieśnicy” (tj. Ktoś z wykształceniem i doświadczeniem podobnym do mojego)? Ktoś, kto jest naprawdę dobrze wykształcony w sztuce i nauce? A może Flying Flying Monkey, który NIE ma nic wspólnego z czymś bardziej zaawansowanym niż Dartmouth BASIC?
John R. Strohm,
7
@John, inni w tym kontekście implikują innych programistów. W zdaniu: „Żyrafa była większa od innych.”, Nie mamy na myśli latających małp. „Inne” oznaczają „więcej tego samego typu, o których jeszcze nie wspomniano”.
dan_waterworth
22

Programista jest odpowiedzialny za prywatność i bezpieczeństwo wszystkich danych dostarczonych przez użytkownika. Zwłaszcza hasła, numery kart kredytowych, adresy e-mail i fizyczna lokalizacja.

Malfist
źródło
To naprawdę należałoby do dziedziny architekta systemu. W wielu scenariuszach korporacyjnych programiści nie mają nic do powiedzenia ani kontroli nad magazynami danych. Jak mogę być odpowiedzialny za adres e-mail w bazie danych, kiedy wszystko, co robię, to uzyskiwanie dostępu do tej bazy danych, a nie jej tworzenie?
Neal Tibrewala,
2
Wydaje mi się, że ludzie z Facebooka nie muszą stosować się do większości powyższych obowiązków. :)
MetalMikester
4
-1 to zbyt duża odpowiedzialność.
Peter Turner,
6
Być może w przypadku systemów na dużą skalę jeden programista może zdecydować zbyt wiele. Ale w zdecydowanej większości witryn, w których pracuje jeden lub kilku programistów, absolutnie konieczne jest prawidłowe przechowywanie danych. Bez szyfrowania, gdy potrzebne jest mieszanie, żadnych niestandardowych algorytmów lub bezpieczeństwa przez zaciemnienie. Prawdziwe, sprawdzone bezpieczeństwo.
Malfist,
@Neal: Architekt systemu jest tylko kolejnym programistą. Jasne, w przypadku dużych projektów prawdopodobnie nie będzie mógł programować, ale to nie znaczy, że nie jest programistą. Dotyczy to tylko dużych projektów; w projektach dwu- lub trzyosobowych programista zazwyczaj odpowiada za część bazy danych lub za całość; do jego obowiązków należy zapewnienie bezpiecznego zapisywania danych.
konfigurator
20

Nie zmuszaj użytkownika do utraty pracy.

Jest to trudniejsze niż się wydaje ... praca to coś więcej niż „dane w pliku” ... to czas, który użytkownik spędza z oprogramowaniem.

Na przykład, jeśli użytkownik wypełni 30-polowy formularz z 29 ważnymi pozycjami i 1 nieprawidłowym, nie usuwaj wszystkich swoich ważnych danych, aby złożyć skargę na 1 nieprawidłowy (cholera, nawet nie usuwaj nieprawidłowego .. (być może jest długi i wymaga tylko niewielkiej korekty, inaczej użytkownik nie pamięta, co to było wcześniej, jeśli go wyczyścisz)

Nieoczywistym, ale ważnym przykładem jest to, co dzieje się w systemie Windows i praktycznie w każdym innym oprogramowaniu do „zarządzania plikami” ... jeśli spędziłem pół godziny ostrożnie, przytrzymując klawisz Ctrl-Click'ing, aby wybrać zestaw plików i przypadkowo wykonałem Click zamiast Ctrl-kliknięcie, nie powinno wyczyścić wszystkich wcześniej wybranych plików, dzięki czemu zacznę od nowa.

Kolejny, że się pomylili ... jeśli przypadkowo uderzę Ctrl-A (zamiast Ctrl-S tuż obok), nie powinien stracić mojego miejsca w pliku i umieścić kursor na początku .... właściwe miejsce w pliku „praca”, które program „utracił”.

Jeszcze jedno: okno dialogowe „zatwierdzenia” TortoiseSVN ma długą listę plików. Przed naciśnięciem przycisku „Zatwierdź” możesz przejść do listy plików, klikając dwukrotnie każdy z nich, aby zobaczyć jego zmiany w drugim oknie dialogowym. Aby to zrobić szybko, czasami używam tylko klawiatury, naciskając, <Esc>by zamknąć drugie okno dialogowe i wrócić do pierwszego. Jeśli przypadkowo uderzę <Esc> dwa razy, to również zamyka pierwsze okno dialogowe, co powoduje, że zapominam, do którego pliku byłem.

JoelFan
źródło
5
Staraj się nie tworzyć skrótów klawiaturowych, które powodują przeciwieństwo rzeczy przypisanych do klawiszy bezpośrednio obok siebie (na przykład CTRL-C i CTRL-V, nie mogę powiedzieć, ile razy Jeśli skopiowano, kiedy zamierzałem wkleić i odwrotnie)
HLGEM,
5
@HLGEM, Paradoksalnie, ktokolwiek to zaprojektował, prawdopodobnie myślał, że wyświadcza nam przysługę, stawiając ich obok siebie
JoelFan
4
A on nie był? Mam na myśli, że nie masz pełnej mocy Emacsa ani nic, ale możesz kopiować i wklejać, nie ruszając zbyt często dłoni.
compman
1
Użyj Total Commander. Kliknij prawym przyciskiem myszy, aby wybrać, a prawym przyciskiem myszy, aby odznaczyć. O ile nie nawigujesz w innym miejscu lub nie tracisz ostrości przez długi czas, podczas gdy bieżący folder jest zmieniany, nie stracisz swojego wyboru.
konfigurator
1
W ostatnim przykładzie (Ctrl-A traci moje miejsce w pliku) niedawno znalazłem częściowe obejście, które działa w wielu programach ... Ctrl-Z, Ctrl-Y .... które cofnie moją ostatnią edycję do zawartość pliku, a następnie „ponów”, aby zawartość była taka sama jak poprzednio, a ja jestem w miejscu edycji. To niekoniecznie jest to samo, co miejsce, w którym mój kursor był tuż przed moim błędnym Ctrl-A, ale często jest wystarczająco blisko ... to oczywiście nie usprawiedliwia złego zachowania programu na Ctrl-A ... to tylko częściowe obejście i zabrało mi trochę czasu
JoelFan
15

Programista jest odpowiedzialny za przestrzeganie systemu, na którym będzie działał jego program. Po zakończeniu programowania i testowania program zostanie wdrożony w celu użycia zgodnie z jego przeznaczeniem, co zwykle wiąże się z uruchomieniem go przez inne osoby na jego komputerach. Programista musi o tym pamiętać: jego program działa na czyimś cudzym majątku , a nie na jego własnej, i musi zachowywać się jak gość w domu, zamiast się wtrącać, jakby to było jego miejsce.

Na przykład jego program nie powinien:

Mason Wheeler
źródło
1
Naprawdę lubię je zarówno jako użytkownik, jak i programista. Odbijające się ikony w doku to moja pierwsza przyczyna wściekłości wobec ludzi, których nigdy nie spotkałem.
Agos,
7
Lubię je wszystkie oprócz „samej aktualizacji bez zgody użytkownika”. Uważam, że sposób, w jaki Chrome sam się aktualizuje - uwielbiam tylko znajdować nowe funkcje. Sposób, w jaki robią to inne programy, jest jednak obrzydliwy. Patrzę na ciebie, Java, i na ciebie, Acrobat Anything. Czy nie pytają mnie, czy chcę zaktualizować was codziennie. Powiedziałem nie raz, podpowiedź!
konfigurator
2
Jeśli program ma się aktualizować automatycznie, przynajmniej powinien poprosić użytkownika o zgodę za pierwszym razem.
gablin
Kolejne naruszenie przez TortoiseSVN ... robienie z nim prawie wszystkiego powoduje zatrzymanie systemu
JoelFan
@SpashHit: Hmm? Używam TortoiseSVN na co dzień i nigdy nie zauważyłem, że ...
Mason Wheeler
8

Z Manifestu dla Rzemieślnika Oprogramowania :

Jako ambitni rzemieślnicy oprogramowania podnosimy poprzeczkę profesjonalnego tworzenia oprogramowania, ćwicząc je i pomagając innym w nauce rzemiosła. Dzięki tej pracy doceniliśmy:

  • Nie tylko działające oprogramowanie, ale także dobrze wykonane oprogramowanie

  • Nie tylko reaguje na zmiany, ale także stale podnosi wartość

  • Nie tylko osoby i interakcje, ale także społeczność profesjonalistów

  • Nie tylko współpraca z klientami, ale także produktywne partnerstwa

Oznacza to, że w pogoni za przedmiotami po lewej stronie okazało się, że przedmioty po prawej są niezbędne.

gąbka
źródło
8

Spójrz w lustro i prawdopodobnie rozpoznaj w sobie najgorsze cechy programisty. Następnie pracuj nad ich eliminowaniem każdego dnia.

  1. Nie uczyłem się niczego nowego
  2. Nie staram się poszerzać swoich umiejętności
  3. Nie być otwartym na nowe, trzymać się starych nawyków
  4. Nie dbając o jakość swojej pracy
  5. Nie dążąc do poprawy jakości swojej pracy
  6. Będąc pracownikiem od 9 do 5 lat bez pasji
  7. Nie mam własnego zdania na ten temat
  8. Akceptowanie opinii innych bez pytania
  9. Wierząc, że nauczyłeś się tego wszystkiego
  10. Nie toleruje żadnej krytyki
  11. Nie słucham zewnętrznego wejścia
  12. Będąc egoistycznym, znającym się na rzeczy indywidualnym
  13. Mając negatywną osobowość i krytykując innych ludzi
user8685
źródło
+1, ale sformułowanie go w ten sposób powoduje, że jest dość negatywne.
dan_waterworth
1
Uważam, że numer 13 jest bardzo ironiczny, ponieważ w zasadzie to właśnie tutaj robisz, choć w ogólnym sensie.
Dustin Rasener
6
  • Obowiązkiem programisty jest tworzenie oprogramowania, które spełnia wymagania, analizę, projekt i specyfikacje określone we wszelkich umowach między programistą a klientem.
  • Zadaniem programisty jest tworzenie oprogramowania, które jest ekonomiczne, niezawodne i działa skutecznie na prawdziwych maszynach.
  • Obowiązkiem programisty jest praca tak wydajnie, etycznie i przy zachowaniu jak największej uczciwości oraz postępowanie z najwyższym profesjonalizmem.

Niektóre z nich dotyczą obowiązków „ firmy programistycznej ”.

Stephen Furlani
źródło
4
  • Programista powinien znać podstawowe biblioteki i platformę oraz z nich korzystać.

Zwłaszcza, gdy programista pochodzi z innej platformy / języka. Strasznie jest znaleźć programistę walczącego o coś, co zapewnia biblioteka podstawowa lub niewłaściwie wykorzystać przewagę platformy z powodu niewiedzy.

  • Programista powinien utworzyć kod samokontrujący

Bardzo ważne jest, aby kod udokumentować do użycia w inny sposób, ale jeśli chodzi o łatwość konserwacji, kod samodokumentujący może dosłownie zaoszczędzić wiele godzin frustracji.

Na przykład porównaj:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

do

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}
OscarRyz
źródło
4

Programowanie to zawód, a nie umiejętność. Oznacza to, że programista ma obowiązek utrzymywania aktualności w swojej dziedzinie w zakresie najnowszych narzędzi, technik i technologii.

Może to oznaczać odpychanie się od menedżerów, aby dać czas na ciągłe uczenie się i szkolenie lub robienie tego we własnym czasie.

Neal Tibrewala
źródło
2

1) Wyjaśnij jasno, że rozwiązaniem każdego problemu będzie kompromis między wydajnością, kosztami, czasem i jakością.

2) Uzupełnij odpowiednią dokumentację, niezależnie od tego, czy wydaje ona notatki czy plany testów. (dokumentacja będzie się różnić w zależności od rodzaju i wielkości firmy)

3) Poproś o odpowiednie narzędzia do swojej pracy (tak wielu po prostu narzeka na to, ale nigdy nie podchodzi do szefa z uzasadnionym powodem, aby dostać to, czego potrzebują)

... Inni bez wątpienia podążą.

Kevin D.
źródło
2

Pytaj o cokolwiek - programista powinien być odpowiedzialny za zapytanie o wszystko, co może być wymagane do wykonania lub obsługi przez system. Może to obejmować zadawanie pytań, które użytkownicy mogą uznać za głupie pytania, ponieważ istnieją różne witryny poświęcone pokazaniu, co użytkownicy mogą zrobić. Codzienne WTF i SharkTank to kilka przykładów, choć jestem pewien, że są jeszcze inne.

JB King
źródło
1

Programista jest odpowiedzialny za przekształcanie historii użytkowników z rejestru produktów w działające i nadające się do wysyłki przyrosty oprogramowania

Dlatego menedżerowie powinni upewnić się, że mają wszystko do osiągnięcia celu.

użytkownik2567
źródło
1

Oto moja propozycja.

  1. Programista powinien wymagać warunków pracy wyszczególnionych w Karcie programisty, aby nie obniżyć standardów stanowiska.

(Dla „programisty” mam na myśli „programistę”, a nie „weekendowego hakera”, więc sugerowane są wszystkie standardowe rzeczy, które programista powinien zrobić).

cbrandolino
źródło
-1. Nie sądzę, aby odpowiedzialność mogła być „wymagająca” prawa.
Craige
1

5 zasad gildii programisty

1.) sprawdzaj swój kod co tydzień i w święta.

2.) uwzględniać potrzeby społeczności programistów.

3.) czytaj przynajmniej jedną książkę programową rocznie.

4.) udaj się na przynajmniej jedną konferencję programową rocznie.

5.) przyznać się do swoich błędów.

Peter Turner
źródło
„odprawia swój kod co tydzień i w święta”? Masz na myśli godzinę?
konfigurator
@configurator Mam na myśli to jako absolutne minimum, aby nazwać się programistą. Ale im więcej odpraw, tym lepiej
Peter Turner
1

Dodam „zawsze dokumentuj wszelkie przyjęte założenia” do listy. :-)

John Parker
źródło
Lub ... nigdy nie zakładać?
Stephen Furlani,
2
@Stephen Furlani - To niestety prawie niemożliwe w przypadku projektu dowolnej wielkości.
John Parker,
0

Programista nie powinien robić ani implementować niczego, co jest nieetyczne lub nielegalne, np. Pisać wirusów lub hakować systemy innych osób (chyba że ma to na celu wykrycie luk bezpieczeństwa, a następnie poinformowanie ofiary o tym i co może zrobić, aby tego uniknąć wykorzystywane przez złośliwych hakerów).

gablin
źródło