Jak radzisz sobie z celowo złym kodem?


21

Istnieje wiele historii o celowo złym kodzie, nie tylko na TheDailyWTF, ale także na SO. Typowe przypadki obejmują:

  • Posiadanie bezużytecznej, marnującej czas konstrukcji (np. Pusta pętla licząca się do ogromnej wartości), dzięki której programiści mogą łatwo „przyspieszyć” aplikację, usuwając ją, gdy jest to wymagane.
  • Dostarczanie celowo wprowadzającej w błąd, błędnej lub żadnej dokumentacji w celu generowania drogich próśb o wsparcie.
  • Łatwe generowanie błędów lub, co gorsza, generowanie, nawet jeśli wszystko działało dobrze, blokowanie aplikacji, więc do odblokowania wymagane jest kosztowne wezwanie pomocy technicznej.

Punkty te wykazują mniej lub bardziej złośliwe nastawienie (choć czasami przypadkowo), szczególnie pierwszy punkt występuje dość często.

Jak należy radzić sobie z takimi konstrukcjami? Zignorować problem lub po prostu usunąć niepoprawny kod? Powiadomić swojego kierownika lub porozmawiać z osobą, która wprowadziła „funkcję”?


10
Czy to „czasami przez przypadek”, czy „celowo zły”? Nie rozumiem, jak to może być jedno i drugie.

Odpowiedzi:


7

Większość złego kodu wynika z braku zrozumienia, a rozwiązaniem jest edukacja.

Celowo zły kod jest zupełnie inny, z powodu czegoś zupełnie niezwiązanego z doświadczeniem programisty lub resztą projektu. W związku z tym musisz dowiedzieć się, dlaczego celowo sabotują kod i rozwiązać ten problem. Oznacza to, częściej niż nie, politykę biurową i rzadko jest to przyjemna sytuacja dla każdego.

To, jak poradzę sobie ze stroną polityczną, zależy od wielu (niepotwierdzonych powyżej) okoliczności. Jak poradziłbym sobie z kodem, najpierw upewniłem się , że nie jestem jedynym nieporozumieniem - że to naprawdę zły kod - a następnie naprawę oczywistych braków. Jeśli to możliwe, napisz testy, że zły kod zawiedzie. Podwójne sprawdzenie, które poprawnie zrozumiałem, oznaczałoby rozmowę z osobą, która napisała kod. Należy to zrobić w bardzo miły, uprzejmy sposób, bez zakładania intencji, i może pomóc w znalezieniu podstawowego (politycznego) powodu potrzebnego później.

Wysyłka jest ważniejsza niż perfekcja wieży z kości słoniowej, ale należy zwrócić uwagę na dwa punkty. Naprawienie oczywistych braków daje 80% wyników przy 20% wysiłku, a tego rodzaju nisko wiszące owoce rzadko warto ignorować. Co ważniejsze, jeśli nie odniesiesz się do podstawowego (politycznego) powodu, prawdopodobnie celowo zostanie napisany zły kod i spowoduje dalsze problemy - i prawdopodobnie uniemożliwi wysyłkę.


28

Nigdy (przez 20 lat) nie spotkałem celowo złego kodu, ale przytaczane przez ciebie przykłady wydają mi się (przynajmniej dla mnie, ale IANAL) próbami oszukania pracodawcy lub klienta, więc prawdopodobnie masz legalny obowiązek wskazania tego swojemu przełożonemu.


2
Zgoda. Nikt nie pisze celowo złego kodu. Rozwiązują problem i rozwiązują go w najlepszy możliwy sposób. Mogą być wprowadzeni w błąd, niewykształceni, nieświadomi itp. Ale tak naprawdę nie mogę pojąć dewelopera celowo piszącego coś, co według nich jest złe.
Dan Ray

8
Nawet jeśli nie jest to legalne, przynajmniej istnieje etyczny obowiązek.
Chris Farmer

@ChrisFarmer Nie można oddzielić obowiązku etycznego od szerszego kontekstu - istnieją sytuacje, w których celowo zły kod stanowi uzasadniony zbiorowy opór, zarówno ekonomiczny, jak i polityczny. (A umowa o pracę zasługuje na honorowanie w dobrej wierze tylko wtedy, gdy formalny związek, który formalizuje, nie jest wyzyskują indywidualnie ani strukturalnie.)
user234461

11

Zależy od kultury firmy. Częściej niż nie, po prostu nie jest twoim zadaniem naprawianie i usuwanie całego złego kodu.

Z Coders at Work , myśl Jamiego Zawińskiego o nadinżynierii, którą można zastosować również w tej sytuacji:

Pod koniec dnia wyślij kurwa! Wspaniale jest przepisać kod i uczynić go czystszym, a po raz trzeci będzie naprawdę ładny. Ale nie o to chodzi - nie ma cię tutaj, aby pisać kod; jesteś tutaj, aby wysyłać produkty.

Istnieje wiele złych koderów i kodu, a po prostu próba ich naprawienia, gdy się z nim spotkasz, kosztem bieżącego projektu / zadania, może po prostu nie być tego warta, jeśli produkt „działa”. Zbyt często wszyscy jesteśmy programistami taśm klejących.

Zobacz także post Joela Spolsky'ego: The Duct Tape Programmer


+1 Jestem naprawdę fanem koncepcji wysyłki produktów. Myślę, że zbyt wielu profilom technicznym brakuje tej koncepcji.

Daj mi też +1. Istnieje zbyt wiele książek typu „Czysty kod”, które popierają wypaczony pogląd na to, co ważne. Jakość kodu jest tylko bardzo ważna. Zwycięzcami nie są ci, którzy mają najlepszy produkt. To ci, którzy mają wystarczająco dobry produkt wysłany wystarczająco szybko.
Joonas Pulakka

4
Myślę, że nie trafiłeś w sedno pytania - facet mówił o umyślnie złym kodzie, a nie tylko o kodzie napisanym przez złych programistów.
Hila

@Hila Uważam, że mój punkt widzenia nadal dotyczy tego, czy zły kod był zamierzony, czy nie. O ile nie jest to problem, który został przypisany do listy projektów / zadań, programista taśmowy nie jest odpowiedzialny za naprawienie i wyczyszczenie całego złego kodu . Kultura tam nie jest akademicka i pisze czysty / piękny kod. Chodzi o wysyłkę i wsparcie produktu / firmy. Osobiście chciałbym naprawić cały zły kod, który napotkałem, ale nie mogę poświęcić na to 100% mojego czasu - po prostu nigdy nie byłbym w stanie ukończyć przypisanego mi zadania / projektu.
gąbka

3
@sunpech Ale celowe czyszczenie złego kodu to nie to samo, co czyszczenie dowolnego kodu. Nie chodzi o to, aby Twoja aplikacja była „piękniejsza”, chodzi o naprawienie szkodliwego kodu, który został tam umieszczony specjalnie. To tak jakby powiedzieć, że lekarz nie powinien wyciągać nożyczek, o których kolega zapomniał w ciele pacjenta, ponieważ operacja kardiotorakiczna polega na ratowaniu życia, a nie na tym, jak ładne są szwy.
Hila

4

Takie podejście jest objawem czegoś gorszego.

  • Czy zarząd zachęca do konkurencji deweloperów?

  • Gdzie jest duch zespołu?

  • Czy zadania są przydzielane przez kogoś innego niż sam zespół?

  • ...

W każdym razie usunięcie szkodliwego kodu nie wystarczy. Skarga do swojego menedżera z pewnością nie pomoże poprawić ducha zespołu.

Spróbowałbym porozmawiać z osobą bezpośrednio i spróbować zrozumieć, zadając wiele pytań bez osądzania go. Cały zespół musi to zrobić bez agresji.

W większości przypadków to konstruktywne zachowanie ujawnia prawdziwy problem (najgorszy), a następnie możesz nad nim popracować.

Jeśli to naprawdę nie działa. Usuń tego programistę z zespołu.


4

Gdybym myślał, że to celowe, prawdopodobnie zwolniłbym faceta! Jeśli jest to wynikiem tego, że ktoś nie jest wystarczająco dobrym programistą, pracowałbym nad jego umiejętnościami. Gdyby został zepchnięty z góry, prawdopodobnie zacząłbym szukać nowej pracy.


2

Jak należy radzić sobie z takimi konstrukcjami? Zignorować problem lub po prostu usunąć niepoprawny kod? Powiadomić swojego kierownika lub porozmawiać z osobą, która wprowadziła „funkcję”?

W zależności od kontekstu dowolny z nich może być najbardziej odpowiedni. Inne możliwości obejmują prośbę o przeniesienie do innego projektu, znalezienie nowej pracy oraz różne akty wątpliwej moralności i / lub legalności.

Biorąc jednak pod uwagę fakt, że nie znamy prawdziwych faktów i prawdziwych zaangażowanych osób, nie ma mowy, aby ktoś w pozycji, którą opisujesz, zwracał dużą uwagę na nasze porady / warte 2 centy.

Jeśli jest to prawdziwa sytuacja, o której mówisz, warto porozmawiać ze swoim menedżerem i zapytać go, co należy zrobić. Jeśli to możliwe, spróbuj rozmawiać o tym , co możesz / powinieneś zrobić, a nie o wskazywaniu palcem. Jeśli to możliwe, nie wymieniaj nazwisk. Istnieje spora szansa, że ​​Twój menedżer już rozumie problem.

Ale drugą stroną jest to, że możesz wydmuchać to z proporcji. Zastanów się długo, zanim cokolwiek zrobisz. Pomyśl o konsekwencjach, w tym o możliwości, że jakiekolwiek kroki, które podejmiesz, mogą cię odbić ... źle.

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.