Styczeń to na różnych stronach i blogach okres publikowania podsumowań minionego roku. Miałem zamiar napisać artykuł w stylu „3 najlepsze książki programistyczne, jakie przeczytałem w 2019”, ale okazało się, że nie zbiorę trzech: musiałbym albo zaproponować rzeczy, z których nie byłem w pełni zadowolony, albo książki niezwiązane ściśle z branżą IT. Zamiast tego mogę zaproponować 3 rzeczy związane z programowaniem, ale niekoniecznie wydrukowane na papierze: jedną książkę, jedną publikację w sieci i jedno nagranie wideo.
Spis treści
Pragmatic Thinking and Learning
Książka „Pragmatic Thinking and Learning: Refactor Your Wetware” Andy’ego Hunta (autora „The Pragmatic Programmer”) to stworzony przez programistę i przeznaczony dla programistów przewodnik po wydajnej pracy umysłowej. Rozdziały są krótkie, żeby nie nudzić, wiedza psychologiczna podawana w zrozumiały sposób, a jednocześnie dobrze osadzona we współczesnych badaniach, więc nie mamy wrażenia czytania wymysłów jakiegoś newage’owego guru. Jest między innymi o tym, czego potrzeba, by stać się ekspertem, kiedy można ufać intuicji i pamięci, jak podchodzić do problemów, gdy nie możemy wpaść na rozwiązanie, oraz jak ogarniać context switchingu. Mnóstwo pomysłów na usprawnienie swojej pracy, zaskakujących i trafnych przemyśleń. Uważam, że była to świetna inwestycja czasu.
Code Review Developer Guide Google’a
Zestaw niedługich artykułów podzielonych na 2 części: jak tworzyć dobre pull requesty i jak dobrze robić review pull requestów. Reguły napisane pod giganta z Mountain View, ale w ogromnej większości mające zastosowanie wszędzie, niezależnie od wielkości firmy. Przydatne jest, że obok zasad jest często napisane ich uzasadnienie i cele, jakim są podporządkowane — pragmatyczny programista nie powinien traktować reguł jako religijnej świętości, ale właśnie rozumieć, czemu służą.
W wyczerpujący sposób wspomniany jest chyba każdy z wielu aspektów sprawy — od sposobu prowadzenia dyskusji, przez sugestie kierunku nawigacji po review i organizację pracy po rozgraniczanie rzeczy ważnych od nieistotnych.
Taki kompletny przewodnik był dobrą okazją do konfrontacji opisanych zasad z moim sposobem pracy i zastanowienia się, na ile się sprawdza i gdzie mogę coś ulepszyć.
Seven Ineffective Coding Habits of Many Programmers
Nagranie prezentacji Kevlina Henneya. Spojrzenie na programowanie z według mnie bardzo ważnej perspektywy: że kod ma być dostosowany do człowieka, że powinniśmy go traktować jak tradycyjny tekst pisany, gdzie ważny jest dobór słownictwa, a struktura ma być dostosowana do tego, jak ludzie przetwarzają informacje — czyli że powinniśmy przy pisaniu kodu również myśleć jak „humanista” (otwarcie przyznaję się do tej inspiracji w mojej prezentacji Problem sprytnego programisty).
Wystąpienie Kevlina bardzo mocno uderzyło w kilka moich zastałych nawyków i przekonań. Wcześniej wierzyłem na przykład, że formatowanie kodu to rzecz tak subiektywna, że nie ma sensu o niej długo dyskutować, trzeba ustalić jeden standard w zespole, w sumie nieważne jaki, i się go trzymać, a właściwie to IDE będzie o to dbać za nas. W momencie, kiedy przyjmujemy do wiadomości, że kod ma być w postaci jak najbardziej kompatybilnej z „architekturą” ludzkiego myślenia, nie można już powiedzieć, że bez znaczenia jest, czy ustalimy maksymalną długość linii na 200 znaków czy na 120 znaków — bo zgodnie z obecnym stanie wiedzy obie opcje mają inny wpływ na czytającego.
Jako długoletni programista Javy miałem duży dystans do propozycji Kevlina, w których widać było naleciałości C#, ale po zastanowieniu muszę przyznać: słowa „get” i „set” to rak, dodawanie „Exception” do nazw klas psuje czytelność kodu obsługującego wyjątki (przepraszam w tym momencie Tomka i wszystkich innych, którym w dawnych czasach kazałem w imię „trzymania się standardów” dopisywać tę końcówkę), a codzienna ekspozycja na nazwy klas ze Springa powoduje u nas wtórny analfabetyzm (nawet mimo to, że te nazwy są dobrze dobrane dla kodu z wnętrza Springa).
Bonus
Wymieniłem książkę papierową, internetową publikację i nagranie wideo, ładnie pasowałby tu jeszcze podcast. Akurat podcastów o informatyce słucham niewiele i nie trafiłem przez miniony rok na żaden odcinek na tyle wybitny, że mógłbym z pełnym przekonaniem go tu polecić.
W ramach bonusu podrzucę zamiast tego podcast zupełnie nieprzydatny zawodowo i długi, ale za to ciekawy i kwalifikujący się do moich najcenniejszych odkryć z 2019: rozmowa Sama Harrisa z Geoffreyem Westem: o książce Scale: The Universal Laws of Growth, Innovation, Sustainability, and the Pace of Life in Organisms, Cities, Economies, and Companies, o tym, czemu Grecy nie wpadli na fraktale i pytaniach, których długo nikt nie zadawał, czemu firmy upadają a miasta nie, o decyzji, by w wieku 50 lat przenieść się z fizyki kwantowej do nauk biologicznych. Nie mówię, że to „lektura obowiązkowa” — ot, jeśli ktoś lubi poszerzać horyzonty, to polecam.