Książki tego typu są jak chodzenie do kościoła – każdy raz na jakiś czas powinien do tych pozycji wracać, aby zrobić sobie rachunek sumienia.
Jednak nie wiedziałem do jakiego kościoła się z nią wybiorę. Nie zawsze poglądy autorytetów w dziedzinie programowania są takie same. Robert „Uncle Bob” Martin jest programistą z ponad 40-letnim stażem, czerpanie wiedzy z jego doświadczeń jest czymś oczywistym, więc nie wahając się ani chwili zabrałem się za lekturę… i nie żałuję.
Na wstępie chcę zaznaczyć, że jest to książka przeznaczona dla osób, które już mają pewne doświadczenie w programowaniu. Aby zrozumieć ideę czystego kodu, musimy mieć świadomość jak może wyglądać kod „brudny”. Dodatkowo wszystkie przykłady są w języku Java, więc jego dobra znajomość na pewno będzie ułatwieniem, jednak nie jest niezbędna. Przykłady nie są skomplikowane, poza nielicznymi wyjątkami.
Książkę zasadniczo można podzielić na trzy części:
- Teoria - zasady, wzorce i praktyki czystego kodu
- Przykłady i ćwiczenia zmuszające do zastosowania tej teorii
- Udokumentowane powody każdej modyfikacji z części drugiej, zapisane jako zapachy kodu i heurystyki.
Oczywiście można przeczytać część pierwszą i trzecią i nabyć tylko teorię, jednak część druga pozwala zobaczyć jak Martin wykorzystuje teorię w praktyce, dzięki czemu dużo łatwiej można zrozumieć sens zasad, które nam przekazuje.
Choć tematyka książki na to nie wskazuje, cały czas czuć w niej bardzo silne nastawienie na TDD oraz jak największe pokrycie kodu dobrymi testami jednostkowymi. Dla autora jest wręcz niemożliwe, aby uznać kod za czysty bez czytelnych i pokrywających go testów. Czytelne testy są dla niego tak samo istotne jak czytelny kod.
Główne zagadnienia poruszane w książce to:
- zmienne, funkcje, metody i klasy oraz ich nazewnictwo
- komentarze, kiedy i jak je pisać
- formatowanie kodu
- testy jednostkowe
- struktury danych
- współbieżność.
Martin nie lubi długich klas, nie lubi długich funkcji. Klasy i funkcje powinny być pisane kierując się zasadą pojedynczej odpowiedzialności. Nie lubi przekazywania wielu argumentów do funkcji, w szczególności przekazywania argumentów flagowych powodujących różne zachowania funkcji w zależności od swojego stanu. Nie lubi komentarzy oraz nieczytelnych nazw, uważa że czytelna nazwa, która daje nam wyobrażenie za co odpowiada dana zmienna, funkcja lub klasa powinna zastępować komentarz. Co więcej, jeśli odczujemy potrzebę pisania komentarza, to znaczy że zrobiliśmy coś nie tak i powinniśmy się zastanowić nad zmianą nazewnictwa bądź struktury.
Są to tylko przykłady zasad, które chce nam przekazać i z większością się w zupełności zgadzam.
Było dosłownie kilka momentów, gdzie zacząłem się zastanawiać nad sensem stosowania co poniektórych. Przykładowo w 100% trafia do mnie zasada pojedynczej odpowiedzialności funkcji i klas, jednak trudność zdefiniowania czym jest ta odpowiedzialność w niektórych sytuacjach budziła moją wątpliwość co do jej stosowania w takiej sytuacji.
Jednak właśnie tak powinno wyglądać czytanie tej książki. Sam Martin od samego początku zaznacza, że są to jego subiektywne opinie co do czystości kodu, poparte jego doświadczeniem. Każdy sam powinien zastanowić się nad sensem każdej z nich, a nie jedynie przeczytać je jak niektóre lektury ze szkoły i zapomnieć.
Celem wszystkich tych zasad jest napisanie kodu, który opowiada jakąś historię na temat tworzonego systemu. Historia ta nie może być napisana byle jak, czytelnik powinien się nią zachwycić, zupełnie tak jak dobrą powieścią. Aby to zrobić, najpierw musi ją łatwo i szybko zrozumieć.
Nie jest łatwo taki kod napisać za pierwszym razem. Niekiedy musi powstać kilkanaście bądź kilkadziesiąt wersji, zanim osiągniemy zadowalający efekt. I właśnie tak Martin widzi pracę programisty, bardziej jako rzemiosło pisania i ciągłego ulepszania kodu.
Podsumowanie
Zdecydowanie książka jest godna polecenia. Jedyne zastrzeżenia mogę mieć do:
- zbyt głębokiego wchodzenia w aspekty specyficzne do samego języka Java w niektórych rozdziałach. Jeżeli już parę rozdziałów musi zagłębiać się w Java, to na okładce powinna być umieszczona widoczna informacja dla czytelnika o tym fakcie;
- kilka przykładów także dotykało mocno Java, a niektóre były niepotrzebnie rozwlekłe. Sam sens przykładu można było przedstawić krócej, wykorzystując np. pseudokod;
- brakowało mi więcej ćwiczeń dla czytelnika na zasadzie: zrób to sam.
Ideę książki najlepiej opisuje przytoczona w niej zasada skautów: „Pozostaw obóz czyściejszym niż go zastałeś”. Każdy programista powinien zawsze poprawiać kod, nawet małą rzecz, która kwalifikuje się do zmiany. Autor mówi o tym, aby zwracać szczególną uwagę na każdy najmniejszy element kodu i robić go uczciwie wobec siebie i współpracowników, żaden kod nie jest doskonały, a jedynie najlepszy jaki mogliśmy wykonać w danym momencie, zawsze można go usprawnić. I trzeba to robić teraz, nie odkładać na później, później znaczy nigdy (prawo LeBlanca). I jak tu się z tym nie zgodzić, niby takie oczywiste, ale czy zawsze stosujemy się do tych zasad?
I właśnie taka jest ta książka - przekazuje wiedzę, pokazuje jak zastosować tę wiedzę w praktyce poprzez przykłady przeanalizowane krok po kroku. Zmusza do refleksji nad własnym kodem oraz swoimi praktykami.
Dziękujemy wydawnictwu Helion za nieodpłatne przekazanie książki do recenzji.
Książkę można nabyć na stronach Wydawnictwa.