Diversity w polskim IT
Rafał Kotusiewicz
Rafał KotusiewiczCo-Owner @ nexonIT

10 książek, które powinien znać Senior Developer

Poznaj 10 książek dla Senior Developera. To pozycje, które powinien znać każdy dobry programista na poziomie seniorskim.
31.05.20209 min
10 książek, które powinien znać Senior Developer

Ta lista powstawała najdłużej z dotychczasowych. Wciąż nie mam pewności, czy jest najlepszą wersją. Raczej nie. 10 książek, które umieściłem ostatecznie na liście, zostało wybranych z ponad 30. Pojawiały się i znikały. Niektóre przejrzałem dokładnie w związku z tym zestawieniem, niektóre przeczytałem ponownie (z przyjemnością). Są to książki z jednej strony dość różne, ale z drugiej - gdy spojrzy się na listę z boku - to bardzo spójny wybór. Zapraszam do przejrzenia listy propozycji oraz przeczytania samych książek. Każda z nich to perełka i wyborna lektura. Jedne do "zamknięcia" w jeden wieczór, inne w trochę więcej.

1. "Microservices patterns" C. Richardson

Świetna pozycja. Autor przedstawia fikcyjne przedsięwzięcie (Food to Go) i wprowadza nas w historię jego rozwoju i problemów ze skalowaniem wraz ze wzrostem. Innymi słowy, historia, jakiej życzymy każdej nowo powstałej aplikacji internetowej :) Oczywiście najpierw książka! Będzie łatwiej pokonać wyzwania, które taki wzrost niesie za sobą.

Osią książki jest podział monolitycznej aplikacji na mikroserwisy i wszystkie wiążące się z tym wyzwania natury technicznej (a także trochę organizacyjnej). Większość tych wyzwań jest wspólna dla wszystkich takich aplikacji, stąd też wzięły się ich “wzorcowe rozwiązania”.

Dowiemy się z niej wiele na temat architektury takich rozwiązań, sporo o dobrych praktykach, które należy wziąć pod uwagę, co nieco o testowaniu (no dobra, sporo o testowaniu), ale przede wszystkim wzorce. Wzorce komunikacji w systemach rozproszonych (mikroserwisy, no wiecie..), “wzorzec saga”, czyli coś, co w pewnym sensie zastępuje transakcje XA tam, gdzie nie możemy (lub nie chcemy) ich stosować. Event sourcing - jest, DDD - jest, CQRS - oczywiście! 

To w sumie kawał książki (ang. wersja to około 500 stron) napakowanej wiedzą niezbędną dla osób zajmujących się mikroserwisami. Naprawdę bardzo polecam! Nie dość, że jest bogata w informacje, to jeszcze świetnie napisana!

2. "Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe" M. Fowler

Ta książka to już właściwie klasyka (premierę miała na początku wieku, chyba w 2002 roku). Trudno myśleć o sobie jako o dojrzałym programiście i jednocześnie jej nie znać. Co w niej znajdziemy? Jest to przede wszystkim rozszerzenie (w pewnym sensie) książki Bandy Czworga, tym razem jednak uogólnione wzorce ukazane są w kontekście aplikacji wspierających biznes. Mamy bardzo bogaty przegląd wzorców obsługi dziedziny, wzorce warstwy prezentacji, czy po prostu wzorce mapowania obiektowo-relacyjnego. Wybór jest ogromny, niektóre z nazw wzorców rozszerzają metajęzyk inżynierów-programistów. Dzięki temu sformułowanie “Active Record” nie musi być każdorazowo wyjaśnianie podczas dyskusji. To konkretne znalazło nawet zastosowanie jako nazwa biblioteki będącej częścią wspaniałego frameworka Ruby on Rails.

W książce wszystkie przykłady zostały zapisane w dwóch najpopularniejszych (w dziedzinie zastosowań biznesowych, w czasie pisania książki) językach, czyli Javie oraz C#. Wybór moim zdaniem bardzo trafny, gdyż kod jest zrozumiały nawet dla osób niekoniecznie na co dzień w nich programujących.

Przyznam szczerze, że do potrzeb pisania tego tekstu postanowiłem odświeżyć sobie zawartość książki i kupiłem nowy egzemplarz, gdyż stary gdzieś (prawdopodobnie u kogoś) mi się zapodział. Mam nadzieję, że tam, gdzie jest, robi wciąż dobrą robotę, propagując tę ponadczasową - dla programistów - wiedzę i że od teraz nie spotkam na swojej drodze architekta, który nie zna tej pozycji (do tej pory zdarzyło mi się to kilkakrotnie), ale tak naprawdę jest to obowiązkowa lektura dla każdego starszego programisty (skorzystają z niej także programiści na wcześniejszych etapach kariery).

3. "Więcej niż architektura oprogramowania" L. Hohmann

To książka o tym, że za niemal każdym projektem programistycznym kryje się produkt. Często jako programiści skłaniamy się do projektocentrycznego sposobu postrzegania świata, tymczasem to tylko część większej całości. I właśnie spoglądając na naszą pracę jak na część produktu dostrzegamy znacznie więcej niż tylko nowe seksowne biblioteki czy frameworki. Okazuje się, że użytkownika końcowego rzadko interesuje jaki wykorzystujemy język programowania czy użyliśmy najnowszej wersji IDE itd… jego bóle są zupełnie inne - niejasna licencja, słaba konfigurowalność, wysoki zużycie pamięci i inne tego typu problemy. O tym właśnie napisał Luke Hohmann całkiem zgrabnie na około 300 stronach. Kłopotliwa instalacja oraz dziwaczny interfejs użytkownika potrafią zniszczyć nawet największe osiągnięcia w dziedzinie inżynierii oprogramowania :) to problemy znane od wielu lat, tymczasem dopiero dziś standardem powoli stają się specjaliści UI/UX zatrudnieni przy projektach.

Bardzo polecam tę pozycję szczególnie liderom technicznym, dzięki niej naprawdę łatwiej zaplanować wszystkie etapy życia produktu jakim jest software i nie przegapić niczego ważnego, chociaż z pozoru mało istotnego. 

4. "DDD dla architektów oprogramowania" V. Vernon

Trudno - moim zdaniem - o lepszego - niż Vaughn Vernon - przewodnika po koncepcji Domain Driven Design. I trudno - znowu, moim zdaniem - o lepszy przewodnik niż ta konkretna książka. To kilkaset stron wiedzy, opowieści, przykładów, porad i wzorców. Czytając je dowiesz się, że popularny wzorzec DTO (ang. Data Transfer Object) często stosowany w korpoprojektach jest w zupełnie niewłaściwy sposób. Dowiesz się także, dlaczego nie da się stworzyć dobrego rozwiązania bez zaangażowania “ekspertów dziedziny”. Jedna z moich ulubionych książek. I chyba nawet lepiej napisana i bardziej przystępnie objaśniająca koncepcję DDD. Na jednej z kolejnych pozycji proponuję Ci książkę Erica Riesa, w której także (chociaż nie tak nazwani) pojawiają się “eksperci dziedzinowi”, ale Eric wcale tak ich nie nazywa. Połączona siłą wiedzy z obu książek daje ogromną moc tworzenie wspaniałych produktów w uporządkowany sposób. Sprawdź to czytają obie książki blisko siebie.

5. "Piękny kod" A. Oram, G. Wilson

To jedna z moich ulubionych książek branżowych (ściśle rzecz ujmując - książek dla programistów). Zawiera - podobnie jak kolejna pozycja - zbiór artykułów dotyczących różnych aspektów programowania związanych z kodowanie, takich jak abstrakcje, programowanie równoległe, transakcje etc.. A. Oram i G. Wilson namówili do współpracy całkiem sporo wspaniałych “koderów” i w ten sposób powstał ten wspaniały i inspirujący zbiór. Zostawiłem tę książkę dla dość doświadczonych programistów nie bez powodu. Myślę, że potrzeba już jakieś poziomu obycia z kodem i zrozumienia tego co się dzieje “pod maską” żeby docenić jej merytoryczną zawartość. Ważne także jest to, że jest to dość szeroki przegląd języków programowania, przykłady pięknego kodu są zarówno w C, C#, C++, Scheme czy Javie ale także w Haskellu oraz kilku innych. Początkujący programista może mieć najzwyczajniej w świecie problem z odnalezieniem się w tym gąszczu. 

Podobnie jak pozostałe pozycje dzisiejszego zestawienia tak i ta ma pomóc czytelnikowi odnaleźć odpowiedni dystans i pomóc odnaleźć dumę z pracy, którą wykonuje (zakładając, że robi to z zaangażowaniem i dbając o wysoką jakość implementowanych algorytmów).

Kolejność czytania artykułów jest w zasadzie dowolna i dla lepszego “wejścia” w tekst można zacząć od tych z nich, które będzie łatwiej zrozumieć ze względu na język programowania.

6. “Podstawy oprogramowania. Zbiór artykułów Davida L. Parnasa“ praca zbiorowa

Na samą myśl o opisaniu tej pozycji aż drżę. Serio... Jest to tak ważne dzieło z dziedziny inżynierii programowania, a jednocześnie tak mocno zapomniane (a może przemilczane)... Obawiam się, że nie znajdę słów wystarczająco inspirujących i nie złożę z nich zdań oddających powagę tego punktu, by zachęcić Cię, drogi Czytelniku, do odszukania jej i przeczytania (przynajmniej raz). Spróbuję jednak :) 

Książka jest zestawieniem 33 artykułów Davida Parnasa. Nie są to zwykłe artykuły, jakich setki zalewają codziennie nasze twittery/facebooki/itd., pisane przez osoby takie jak np. ja. To są prawdziwe naukowe prace dotyczące dziedziny, która wciąż wydaje się dość młoda, a która wciąż raczkowała, gdy Parnas pierwszy raz postanowił się jej przyjrzeć. To kilkaset stron wspaniałych spostrzeżeń, śmiałych tez, których właściwie nie sposób podważyć. 

Obserwacje autora dotyczą właściwie każdego aspektu inżynierii oprogramowania (specyfikowanie, projektowanie, starzenie się oprogramowania, etos pracy inżyniera). Wszystkie artykuły podzielone są na części zgodnie z ich ogólną tematyką. Każdy z nich (z wyjątkiem jednego) został opatrzony wprowadzeniem pióra późniejszych autorów.

Połowa lat 80. - David Parnas pisze, że przed nami konieczne będzie podjęcie ważnej decyzji - “czy to bezpieczne dopuścić, aby samochodami osobowymi ciężarówkami sterowały komputery”. Blisko 40 lat temu!

Podsumowując - jeśli swoją pracę traktujesz poważnie i czujesz, że “senior developer” w stopce Twojego maila znaczy coś więcej niż “pan programista”, koniecznie sięgnij po te artykuły. Jeśli w wyniku aukcji przyjdzie zapłacić Ci 200, czy nawet 300 złotych, nie wahaj się. Każda strona warta jest tych pieniędzy. A jest ich blisko 700 (w polskiej wersji), więc na pewno nie przepłacisz.

7. "Ciągłe dostarczanie oprogramowania" J. Humble, D. Farley

Dziś procesy CI/CD są już dość powszechnie znane, jednak niekoniecznie stosowane. Wiele firm ma po prostu taki galimatias w swoim oprogramowaniu, że wydaje się to niemożliwe. Tym, jak ten bałagan uporządkować, zajmują się inni autorzy w innych książkach :) (np. w “Refaktoryzacji” i “Refaktoryzacji do wzorców projektowych” z tego artykułu). Tutaj znajdziemy raczej informacje nie tylko o tym, jak zaplanować “potok wdrożenia”, lecz mnóstwo świetnych porad i wzorców dotyczących całego procesu wytwarzania oprogramowania.

Kluczem do sukcesu jest oczywiście automatyzacja oraz doskonałe testy. Autorzy (uznani światowi eksperci w tym obszarze) opisują każdy możliwy aspekt procesu, zwracając uwagę na każde miejsce, w którym możemy (i zwykle to robimy) popełnić błąd. Moim zdaniem to książka, którą czyta się raz dość szybko, żeby zbudować sobie “mapę problemów, które opisuje”. Następnie sięgamy po nią, by czytać bardziej uważnie i świadomie. Kolejne czytania to raczej sięgnięcia ‘ad hoc’ w miarę potrzeby, lub by po prostu nieco dokładniej przyjrzeć się wybranym częściom.

Zdarza mi się mówić o testach, ich kolejnych fazach i znaczeniu w procesie każdego typu testu (od jednostkowego po akceptacyjne i wydajnościowe). Zawsze, gdy mam przed sobą “opornego rozmówcę”, sięgam po argumenty dostarczone przez Humble’a i Farley’a. Potem oczywiście odsyłam do źródła. 

Podsumowując, jeśli już pracujesz wystarczająco długo i Twoja rola w zespole stała się rolą seniorską, to koniecznie sięgnij po tę pozycję.

8. “Release It!” M. Nygard

To drugie wydanie książki pojawiło się kilka lat temu (2018), pierwsze miało swoją premierę w połowie pierwszego dziesięciolecia XXI wieku, kiedy biznes internetowy nabierał wiatru w żagle po swoim pierwszym spektakularnym upadku kilka lat wcześniej. Pierwsze wydanie jest w sumie wciąż dość aktualne treścią (chociaż software, który pojawia się na stronach, zniknął lub się zestarzał).

Drugie wydanie nieco inaczej podchodzi do tematu (autor nie brał udziału w powstawaniu wydania pierwszego). Mniej jest opisu procesów, więcej idei. Jest w pewnym sensie wersją kolejnej mojej propozycji, podaną programistom. Raczej lektura na wieczór, może dwa. Zachęcam, gdyż daje ona sporo dobrych rad, dzięki którym łatwiej odnaleźć się w organizacji, która dopiero wytwarza swoją kulturę. Koniecznie przeczytaj ją przed sięgnięciem po kolejną pozycję.

9. “Metoda Lean Startup” E. Ries

Jest to książka o biznesie, nie o programowaniu. Ale o specyficznym rodzaju biznesu - o startupach, o metodzie ich rozwijania. Naprawdę świetna pozycja na piątkowy wieczór.

Dlaczego ją tutaj zamieściłem? No cóż, mam za sobą pewne startupowe doświadczenia. To zupełnie inna przygoda niż praca dla stabilnej korporacji. Praca dla startupu (czy we własnym startupie) jest trochę jak wyprawa małą żaglówką przez Atlantyk w najbardziej sztormowym okresie, do tego z niewielkimi zapasami jedzenia. Programista-senior w takiej organizacji to bardzo ważna osoba. To ktoś, kto rozumie, czym jest dług technologiczny, kiedy warto go zaciągnąć, a kiedy nie oraz kiedy warto coś zrobić “na scotch i ślinę”.

Często my inżynierowie, my programiści, na problemy spoglądamy tylko z punktu widzenia “prawidłowości” rozwiązania, jej zgodności z rozwiązaniami wzorcowymi, najnowszymi technologiami, dla samych technologii. To błąd. Najnowsze technologie mają nam służyć. Jeśli tego nie robią, są nieprzydatne. Jeśli pracę nad prototypem najszybciej skończymy używając PHP czy Lispu, to wybieramy PHP lub Lisp. Nasza praca to służba. I o tym jest ta książka. Lektura naprawdę obowiązkowa.

10. "Pragmatic Thinking and Learning" D. Hunt

Piękna i chyba nieco zapomniana książka jednego z autorów “Pragmatycznego programisty”. Na przykładach, z mnóstwem cytatów, wyróżnień i opowieści. Jest to praca wspaniałego inżyniera, który dzieli się z czytelnikami swoim spostrzeżeniami na temat nauki, rozwoju i dochodzenia do mistrzostwa. Nie ma dróg na skróty. Nie za pierwszym razem. Trzeba wykonać mnóstwo pracy, przyswoić ogrom wiedzy, popełnić błędy, ponieść porażki, wyciągnąć wnioski - dopiero wtedy stajemy się ekspertami. Na ten temat zresztą niebawem napiszę oddzielny tekst, do którego zainspirowała mnie wspaniała i długa rozmowa z Bartkiem, którego serdecznie pozdrawiam.

Wracając do książki, być może ona powinna znaleźć się, w którymś z wcześniejszych zestawień, ale myślę, że świetnie wpasowuje się także w tym. Lektura obowiązkowa. Polecam.

<p>Loading...</p>