Co znaczy pisać czysty kod
W tak rozległej i zróżnicowanej dziedzinie, jaką jest inżynieria oprogramowania, ciągłe czytanie jest niezbędne do zdobywania podstawowej wiedzy i eksploracji innych dziedzin. Każdy zawód ma też swoje lektury obowiązkowe i tak też jest z tworzeniem oprogramowania — każdy specjalista z branży IT powinien przeczytać „Czysty kod. Podręcznik dobrego programisty”. Pozycja ta konsekwentnie pojawia się w wynikach wyszukiwania „najlepszych książek z zakresu inżynierii oprogramowania” w Google i jest dobrze znana w kręgach specjalistów z tej dziedziny. Oto rzeczy, których nauczyłem się po zetknięciu z tą matką wszystkich książek o programowaniu.
"Czysty Kod" ma strukturę przypominającą standardową instrukcję obsługi. Od tej książki (jak od każdej świetnej pozycji literackiej zresztą), czuć pewność siebie w wyrażaniu opinii. Robert C. Martin, autor "Czystego kodu", opisuje najlepsze praktyki i rozbiera te złe na czynniki pierwsze, karcąc przy tym tych, którzy nie wiedzą, dlaczego i w jaki sposób są one niekorzystne. Martin jest otwarty na swoje niepowodzenia. Lata czytania (a czasem i pisania) złego kodu sprawiły, że postanowił pomóc innym programistom tego uniknąć.
Podsumowując, rady i zalecenia z tej książki bez wątpienia pomogą stworzyć nieskazitelny kod. Większość inżynierów uczy się ich jednak na własnej skórze — w pewnym momencie stwierdzają, że przeszli przez zbyt wiele złego kodu i chcą go ulepszyć. Ale Czysty Kod to coś znacznie więcej niż samouczek. Uczy nie tylko jak, ale również, dlaczego należy pisać dobry kod. Bardziej niż żeby mechanicznie zapamiętywać pewne reguły (choć wiele zasad z tej książki się mnie cały czas trzyma), czytam, aby zrozumieć nienaruszalne wartości świetnego programisty. Dla mnie wszystko sprowadza się do trzech kluczowych koncepcji.
1. Bądź rzemieślnikiem
Koder rzadko może sobie pozwolić na pracę z kodem, dopóki nie będzie on doskonały („idealny kod” to iluzja; wszystko ma wady). Pisanie najlepszego możliwego kodu powinno być jednak najwyższym priorytetem twórców oprogramowania. Perfekcja może oznaczać przesunięcie deadline’u, odrzucanie wymagań klientów, niespełnianie wymagań zarządzania i ostatecznie — zmęczenie. Warunki biznesowe często narzucają to, co „możliwe”, ale programista zawsze ma przynajmniej jakąś kontrolę nad tym, co pisze.
Konkluzja: kod, który „działa”, nie zawsze jest „skończony”. Jeśli zadaniem programisty jest wytworzenie produktu, który rozwiązuje problem, czy powinno mieć znaczenie, w jaki sposób rozwiązuje on dany problem? Otóż tak. Dobrze napisany program na dłuższą metę przynosi korzyści wszystkim — klientom, użytkownikom, firmom, no i innym programistom. Kod napisany pośpiesznie lub „wystarczająco dobry” to taki, który ma krótkoterminowe korzyści.
Źle napisany kod może się zwrócić przeciwko Tobie znacznie szybciej, niż Ci się wydaje. Martin sugeruje, że kluczem do napisania super kodu są wysokiej jakości dane wejściowe (przemyślane, łatwe w utrzymaniu i elastyczne), które skutkują wysokiej jakości wynikiem (długoterminowe korzyści biznesowe).
2. Dodatkowy wysiłek dzisiaj zaoszczędzi Ci bólu jutro
Wszyscy doświadczyliśmy rozczarowania związanego z używaniem produktu niskiej jakości. Pomyśl o nowej koszuli, która strzępi się na brzegach po zaledwie kilku praniach, lub o plastikowej zabawce, która psuje się chwilę po tym, jak dziecko wyjmuje ją z pudełka. Słabo napisany kod wiele się od powyższych przykładów nie różni — zaczyna źle działać znacznie szybciej, niż Ci się wydaje. Porównaj to z czymś, co cenisz za wysoką jakość. Kiedyś nosiłem pewną parę butów prawie codziennie przez ponad dekadę, zanim w końcu się zużyły.
Były one nieco droższe, ale ich wysoka jakość była niezaprzeczalna, a na dłuższą metę i tak zaoszczędziłem pieniądze. Co zrobiłem, kiedy wreszcie nadszedł czas, aby je wyrzucić? Kupiłem identyczną parę, ponieważ wiedziałem, że przetrwają kolejną dekadę. Ta sama zasada dotyczy kodu. Wkład wysokiej jakości nie tylko zapewnia lepsze i trwalsze wyniki, ale także oszczędza pieniądze i buduje lojalność klientów. Skrupulatna refaktoryzacja i testowanie kodu może na początku potrwać nieco dłużej, ale oszczędności w długach technicznych i łatwość konserwacji są warte tego dodatkowego wysiłku.
3. Twój kod nie należy tylko do Ciebie
Ważne jest, aby być dumnym z własnej pracy. Równie ważne jest uznanie, że kod, który piszesz, nie należy tylko do Ciebie. Wszystkie wyszukane sztuczki dają radość jedynie autorowi. Może to być pewnego rodzaju paradoks — w końcu pisanie czystego kodu wymaga od ciebie udziału w jego jakości.
Ale dobry kod nie jest tak naprawdę tylko Twój, ponieważ inni też będą go używać: mam tu na myśli Twoich współpracowników, klientów, a nawet Twoje przyszłe ja. Co się stanie, gdy jakiś przyszły opiekun projektu (być może będziesz to nawet Ty) nie będzie mógł zrozumieć, dlaczego napisałeś coś tak, jak napisałeś? Będą bez wątpienia musieli spędzać cenny czas i energię na odszyfrowywaniu Twojej układanki.
Co oznacza “Czysty Kod”?
Każdy ma własną listę tego, co składa się na czysty kod — książka Martina zaczyna się od zbioru definicji podanych przez różne autorytety w dziedzinie programowania. Moje rozumienie jest następujące:
Czysty kod jest prosty
Nie chodzi o prostotę w złożoności algorytmicznej lub systemowej, ale z pewnością w implementacji. Zbyt wyszukane sztuczki dają radość jedynie autorowi kodu i zmniejszają długoterminową wartość kodu. To samo tyczy się kodu, który jest przydługi — każe Ci wtedy czekać, zanim przejdzie do sedna.
Czysty kod jest czytelny
Jeśli nazewnictwo, odstępy, struktura i przepływ używane w programie nie są zaprojektowane z myślą o czytelniku, wówczas prawie na pewno nie zrozumie on intencji autora. Konwencje dotyczące pisania czytelnego kodu mogą wydawać się dogmatyczne lub pozbawione wyrazistości, ale pomagają uczynić kod wspólnym, a nie tajemniczym.
Czysty kod liczy się z innymi
Kod, który nie jest informatywny to kod, który nie szanuje czasu swoich czytelników. Czysty kod powinien być napisany przy założeniu, że przyszli konsumenci są inteligentnymi i myślącymi profesjonalistami (takimi jak Ty) i powinien zrobić wszystko, aby im pomóc.
Czysty kod jest poddawany testom
Za pierwszym razem nikt nie pisze doskonałego, wolnego od błędów kodu. Nawet jeśli byłoby to możliwe, nie ma gwarancji, że idealny kod nie zepsuje się później. Pisanie czystego kodu oznacza pisanie przetestowanego kodu. W ten sposób przyszli użytkownicy mogą być pewni, że wchodzą w interakcje z czymś, co działa. Co więcej, podczas wprowadzania zmian będą mieli gotowy pakiet testowy, aby potwierdzić, że nic się nie zepsuło.
Pisanie czystego kodu to nieustanna praktyka
Pisanie czystego kodu wymaga dobrej pamięci mięśniowej, tak samo, jak gra na instrumencie, kopanie piłki lub smażenie jajka. Najlepszym sposobem na naukę pisania czystego kodu — a co ważniejsze — zachowania umiejętności — jest robienie tego przez cały czas. Kiedy jesteś w domu i pracujesz nad osobistym projektem, rób to z czystym kodem — nawet jeśli nikt inny go nie zobaczy.
Czysty kod jest nieustannie refaktoryzowany
Czysty kod powinien być w stałym stanie refaktoryzacji. Dzięki dobremu pakietowi testowemu do tworzenia kopii zapasowych kodu możesz go dowolnie refaktoryzować i nigdy nie martwić się o popsucie.
Czysty kod jest solidny
Pisanie dobrego kodu dotyczy zarówno dobrego projektu, jak i czystości. Przestrzeganie zasad SOLID jest jednym ze sposobów zapewnienia elastyczności, łatwości konserwacji i trwałości kodu.
Podsumowanie
Jeśli potraktujemy książkę Martina za Biblię programowania, atrybuty tego, co sprawia, że kod jest czysty, mogą się mnożyć wykładniczo, ale to, co wymieniliśmy w tekście, jest dobre na początek. Przestrzeganie tych zasad wymaga ciągłej dbałości o szczegóły i chęci uznania, że to, co napisałeś wczoraj, może być lepsze dzisiaj — nawet jeśli wcześniej działało dobrze.
Chociaż „Czysty Kod” zawiera mnóstwo zasad i dorbych praktyk, być może jest bardziej przydatny dla mentalności, którą nasyca swoich czytelników — kunszt ma znaczenie, dzisiejszy wysiłek oszczędza bólu jutro, a kod nigdy tak naprawdę nie jest twój. Im więcej programistów ją przeczyta, tym czystszy będzie światowy kod, a wszystkie nasze zadania będą łatwiejsze do wykonania.
Oryginał tekstu w języku angielskim możesz przeczytać tutaj.