Robert C. Martin "Uncle Bob" (Clean Code), John Ousterhout (A Philosophy of Software Design).
Ciekawi mnie wasze podejscie do twierdzeń tych dwóch panów, oraz do tego na ile korzystacie z ich rad do pisania kodu (myśenia o kodzie).
Czytelność
- Martin - skupia się na niej. Metody mają być mikroskopijne (4-6 linii). Jeśli metoda jest długa, to znaczy, że jest "brudna" i wypada ją rozdzielić.
- Ousterhout - Skupia się na "cognitive load". Twierdzi, że rozbijanie wszystkiego na mikroskopijne metody tworzy "shallow modules"- płytkie moduły. W efekcie musisz skakać po 10 plikach, żeby zrozumieć jeden proces. Dla niego "czysty" kod to taki, który ma prosty interfejs, ale "głęboką" i kompletną implementację w jednym miejscu.
Abstrakcja
- Martin - "Abstrakcja ponad wszystko" - argumentuje testowalnością. Interfejsy, fabryki, wstrzykiwanie – nawet jeśli mamy tylko jedną implementację.
- Ousterhout - "Define errors out of existence" - zaprojektuj system tak, żeby błędy były niemożliwe. Abstrakcja jest kosztem – jeśli nie ukrywa dużej złożoności, to jest szkodliwa. Dobra abstrakcja ukrywa decyzje projektowe, nie tylko złożoność.
Classitis
- Martin - małe klasy są zawsze lepsze.
- Ousterhout - Twierdzi, że zbyt duża liczba małych klas rozmywa to, co system faktycznie robi.
Komentarze
- Martin - "Komentarze to porażka" - kod ma być self-documenting.
- Ousterhout - Komentarze są kluczowe - wyjaśniają dlaczego i w jakim kontekście.
Złożoność
- Martin - Walcz ze złożonością przez rozbijanie - klasy, metody.
- Ousterhout - Walcz ze złożonością przez enkapsulację (chowaj ją głęboko).
Wyjątki
- Martin - rzucaj wyjątki zamiast kodów błędu. Oddzielaj "happy path" od obsługi błędów tak bardzo, jak to możliwe. Wyjątek to przerwanie, które czyści kod z if-ologii.
- Ousterhout - każdy wyjątek to nowa ścieżka w systemie, którą trzeba zarządzać. Zamiast rzucać wyjątek, spróbuj zaprojektować metodę tak, żeby wynik był poprawny nawet w dziwnych sytuacjach (np. zwrócenie pustego stringa zamiast błędu).