Wpis z mikrobloga

Jakie są przykłady dobrego oraz złego kodu, z którym obecnie pracujecie, lub który rozważalibyście do obrania jako punkt odniesienia i dlaczego ten kod akurat jest dobry oraz zły?
(Proszę, jeżeli to możliwe o wklejenie przykładów.)

#programowanie #naukaprogramowania
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@FNwsk: generalnie temat dlugi jak rzeka, ale: zle nazwy, niejasny przeplyw sterowania, nie dzielenie kodu na pojedyncze jednostki (metody i klasy), ktore powinny byc odpowiedzialne za jedno zadanie.
  • Odpowiedz
@pmez @Morituria
Dziękuję.

Jednak mam na myśli, takie przykłady, z którymi macie doczynienia lub jakoś zapadły w pamięć, i które uważacie za dobre oraz złe. (Krótkie lub długie fragmenty bez znaczenia)
  • Odpowiedz
@FNwsk: Generalnie, większość 'złego' kodu, z jakim się teraz spotykam, jest zła na poziomie samego designu. Bo o ile średniorozgarnięty, dość doświadczony deweloper raczej rzadko popełnia fundamentalne błędy, tak już o przemyślany design może być czasem ciężko. Jak to się objawia? Bezsensownym skomplikowaniem kodu, nadmiernym abstrahowaniem zachowań, 'onanizmem' technologicznym.

Wyróżniłbym jeszcze kod #!$%@? pod względem, hmm, 'wyglądu'. Czyli działa dobrze, robi to, co ma robić, ale wygląda jak gówno, i
  • Odpowiedz
@fegwegw:

Czy mógłbyś wkleić kilka fragmentów tego kodu i napisać dlaczego to jest dziwiacznie napisane oraz alternatywę, którą wolałbyś widzieć? (Wystarczy kilka linijek)
  • Odpowiedz
@FNwsk: Wkleić może nie, bo nie jest moją własnością, ale mam na myśli przede wszystkim nietrzymanie się pewnych standardów, brak konsekwencji, spójności, itp.

Ew. głupoty na zasadzie:

if (foo()) { return 0;} else {return 1;}

czy np. nielogiczna kolejność bloków kodu, deklaracje zmiennych w dziwnych miejscach, itp.
  • Odpowiedz
@FNwsk: Ja dodam jeszcze od siebie, że bardzo, ale to bardzo mnie irytuje, gdy ktoś nie przejmuje się zupełnie zasobami i czasochłonnością wykonywania zadań podczas pisania kodu. Pracuję przy systemie, z którego korzysta kilka tysięcy użytkowników przez ok. 12 godzin dziennie. Tworzone są pewnego rodzaju dokumenty, które posiadają ogrom atrybutów (XMLe z danymi to 20-50 MB). Podczas wykonywania niektórych operacji przez użytkownika, dokonywane są walidacje na tych dokumentach z częstym wykorzystaniem agregacji. Jednym z przykładów złego kodu prezentuję poniżej (nie jest to aktualny kod, a jedynie uproszczony w celu przedstawienia problemu):

public void validate(Document doc){
BigDecimal sumA = calculateSumA(doc);
BigDecimal sumB = calculateSumB(doc);
BigDecimal sumC
  • Odpowiedz
@tomp3:
Czy mógłbyś opisać co jest negatywne w tym przykładowym kodzie na podstawie przykładowego scenariusza (od strony programisty lub użytkownika)?
Np. czy to, że skoro walidacja jest czasochłonna to błędne jest, że jest zbyt często wykonywana?
Czy np. to, że pochłania zbyt dużo pamięci?
Lub, że można by efektywniej ją zaimplemenotwać?
  • Odpowiedz
@FNwsk: W powyższym przykładzie, wykonywana jest iteracja po tych samych kolekcjach 4 razy w celu obliczenia sum z 4 różnych atrybutów, zamiast jeden raz. W takiej sytuacji, złożoność algorytmu wzrasta 4-krotnie. Zakładając, że czas iteracji jeden raz to 0,05 s, przy 4 powtórzeniach iteracji - 0,2 s. Dokumenty można walidować grupowo - tj. wiele jednocześnie. Przy wybranych 50 dokumentach, taka jedna reguła będzie zajmowała 10 s. Gdyby zredukować to do
  • Odpowiedz
@tomp3:
Co jest źródłem tego rodzaju kodu? W jakim stopniu wynika on z projektu a w jakim z podejścia programisty do jego implementacji?
Co się z nim dzieje, kiedy zostanie przeznaczony do refaktoryzacji?
  • Odpowiedz
@FNwsk: Źródłem takiego kodu jest początkujący student stażysta, któremu na uczelni powiedzieli, że w dzisiejszych czasach mamy tak szybkie procesory i tak wiele pamięci, że nie ma sensu się przejmować takimi drobiazgami. A dodatkowo, programując w Javie, wirtualna maszyna wraz z kompilatorem JIT oraz GC, nie trzeba już się w ogóle zasobami ani jakością kodu przejmować. A później, po podpięciu profilera, okazuje się, że biedny GC co chwilę usuwa miliony
  • Odpowiedz