Książki dla programistów Java
60% programistów czyta książki przynajmniej raz w tygodniu. Tylko 4% nie robi tego w ogóle. Według raportu z badania branży IT Bulldogjob 2019, książki nie tracą na sławie i zainteresowaniu deweloperów, dlatego też dość popularne ostatnio zestawienia typu "5/10/15 najlepszych książek dla programistów x/y/z", uzupełnię moimi typami. To pierwszy z kilku tekstów prezentujących wybrane przeze mnie książki.
Na początek skupmy się na książkach dla programujących w jednym z najpopularniejszych dziś języków, czyli w Javie. Książki pojawiają się w sugerowanej kolejności czytania - od juniora do seniora. Oczywiście pominąłem takie oczywistości jak "Thinking in Java" B. Eckela. Mimo że ostatnie wydanie książki ma już ponad 10 lat, to i tak sporo wiedzy o samym języku pozostało aktualne na tyle, że zdecydowanie warto po nią sięgnąć.
Effective Java - J. Bloch
Najlepsze praktyki programowania w Javie, okiem jednego z weteranów branży i języka. Kim jest J. Bloch? Tego zapewne nie muszę opisywać. W swojej książce (w ubiegłym roku pojawiło się trzecie już wydanie) zebrał porady na tematy tak różne, jak:
- wykorzystanie enumów (także w roli stuprocentowych singletonów)
- przedkładanie try-with-resources nad try-finally
- prawidłowe nadpisywanie metody klasy Object (#equals, #hashCode, #toString)
- korzystanie ze strumieni i wyrażeń lambda (od Javy 8)
- zarządzanie nazwami w programach
- prawidłowe projektowanie (jego zdaniem) i obsługa wyjątków
oraz wiele innych. Książka zdecydowanie do przeczytania. Oczywiście nie wszystko, co jest tam napisane, należy potraktować jako dogmat, ale jednak warto nabrać odrobinę doświadczenia, zanim podejmiemy w swoim projekcie dyskusję z jej treścią. Zdecydowanie trzeba przeczytać. Im wcześniej, tym lepiej :)
TDD. Sztuka tworzenia dobrego kodu - K. Beck
Ta książka jest tak oczywista, że właściwie mogłaby obyć się bez mojego komentarza. Jednak pokuszę się. Używam TDD niemalże od początku swojej kariery (dzięki świetnej kadrze na uczelni, na której studiowałem). Oczywiście nie należy traktować tego, jak pewnika, bo są sytuacje, w których pisanie jakichkolwiek testów mija się z celem. Sytuacje raczej rzadkie, ale potrzeba pewnego doświadczenia, aby je rozpoznać. Dopóki nie mamy pewności, czy to jest właśnie taki przypadek, TDD jest niemalże koniecznością. K. Beck opisuje, jak to robić, aby się nie zniechęcić i aby robić to dobrze. Aby miało to sens i odniosło zamierzony skutek. Niewielka książka (około dwustu stron), ale mająca moc zmieniania przeciętnych koderów w świetnych programistów.
Java Testing with Spock - K. Kapelonis
Kończy się powoli drugie dziesięciolecie XXI wieku. JUnit to standard korporacyjny, ale mamy nowsze narzędzia i jednym z nich jest framework Spock, który - moim zdaniem - zdecydowanie podnosi wygodę pisania testów na wyższy poziom w stosunku do JUnit. Spock to po prostu doskonale przemyślana i świetnie napisana biblioteka do testowania. Książka Kapelonisa została wydana ponad dwa lata temu i siłą rzeczy opisuje nieco starszą wersję (1.0), niż aktualna (1.3), ale daje dobry obraz tego, jak testować Spockiem. Mnóstwo przykładów, jasne wyjaśnienia - to wszystko sprawia, że jest to obowiązkowy podręcznik javowego juniora. Oczywiście z książki skorzystają też programiści Javy (i szerzej, bo można testować oczywiście kod napisany w Scali, Groovy czy Kotlinie) na każdym poziomie.
Algorytmy - R. Sedgewick
Ponad 20 lat temu ukazała się świetna książka R. Sedgewicka Algorytmy w C++ (w Polsce wydana w dwóch tomach, przez nieistniejące już wydawnictwo ReadMe), tymczasem całkiem niedawno pojawiła się zaktualizowana wersja. Tym razem przykłady zostały zaimplementowane w Javie. Jest to, moim zdaniem, obowiązkowa pozycja dla programistów pracujących z Javą. Nie jestem pewien, czy idealna dla początkujących. Być może nie jest to pierwsza książka do przeczytania, ale zdecydowanie należy ją poznać po - powiedzmy - pierwszym roku zawodowej pracy. Bardzo dokładny opis wielu podstawowych algorytmów, wraz z analizą ich wydajności, wzniesie każdego programistę na kolejny poziom wtajemniczenia.
Functional Programming in Java - V. Subramanian
Świetna książka napisana przez znanego z konferencji oraz książek specjalistę. W niewielkiej objętości (poniżej 200 stron) udało się zmieścić kilka podstawowych koncepcji, które zostały wprowadzone w Javie 8 (czyli już parę lat temu) i dziś już nie sposób pracować bez ich znajomości. Książka jest świetnym uzupełnieniem ostatniego wydania książki J. Blocha, o której wspomniałem nieco wcześniej.
Modern Java in Action - R. G. Urma, M. Fusco, A. Mycroft
To nowe wydanie książki Java 8 in Action sprzed paru lat. Obejmuje nieco większy zakres niż poprzedniczka, stąd też pewnie zmieniony tytuł. Tym razem autorzy zdecydowali się spojrzeć okiem praktyków na nowości, które pojawiają się w Javie od wersji ósmej. Mamy zatem dość dokładny przegląd takich rzeczy jak:
- wyrażenia lambda
- biblioteka streamów, o której pisze już Bloch i Subramanian, ale tutaj nieco szerzej potraktowana
- nowe API do obsługi czasu i dat (dziś już nie należy używać klasy java.util.Date, serio...)
- zmiany, które pojawiły się w obsłudze współbieżności
- reaktywne API, które pojawiło się w Javie 9
oraz mnóstwo innego dobra :) Chcesz wiedzieć, czy potrzebujesz Scali, a może nowa Java w zupełności wystarczy? Sprawdź koniecznie, sięgając po tę książkę.
The Java Module System - N. Parlog
To nietypowa książka w tym zestawieniu, a jej nietypowość objawia się tym, że jeszcze nie została wydana. Dzięki temu ten tekst będzie aktualny jeszcze za kilka miesięcy (wydanie książki planowane jest na kwiecień 2019, czyli za kilka tygodni). To bardzo ważna pozycja dlatego, że opisuje zmiany, które pojawiły się w Javie 9 w związku z jej "umodułowieniem". Autor opisuje wszystkie tego konsekwencje, a także problemy i wyzwania, które za tym idą.
Jako rodzynek opisany jest proces budowania małych runtime'ów, dzięki którym także Java trafiła do kategorii cloud native ready. Nie jest to książka dla juniora, ale programista z kilkuletnim doświadczeniem sporo się z tej pozycji nauczy i chętniej dokona migracji do Javy 9 (i nowszych), bo "przyszłość chyba przeniosła się w chmury".
DDD dla architektów oprogramowania - V. Vernon
Trudno mi argumentować konieczność zapoznania się z pozycją Vernona, bo tak bardzo jest to dla mnie oczywiste. Złożone systemy pracujące w dużych organizacjach zwykle mają bardzo długi okres życia. Przez cały ten czas są rozwijane i utrzymywane. W zespołach, które się tym zajmują, pojawiają się coraz to nowi programiści, którzy te systemy muszą zrozumieć. Co gorsza (a jakże!), pojawiają się także nowi użytkownicy. DDD jest czymś w rodzaju eleganckiego i skutecznego pomostu pomiędzy inżynierami i specjalistami używającymi systemów. Na poziomie seniorskim to jest pozycja absolutnie obowiązkowa (celowo pomijam książkę Domain Driven Design Erica Evansa, ponieważ książka Vernona wydaje się napisana nieco bardziej spójnie), na poziomie mid/regular bardzo zalecana.
Programowanie funkcyjne w języku Java - P. Y. Saumont
Niemalże na koniec zostawiam świetną książkę, opisującą funkcyjną naturę nowej Javy oraz jej braki. "Funkcyjność" opisana jest z całkowicie innej perspektywy niż u Blocha czy Subramaniana, a nawet w Modern Java. Tutaj autor przegląda fundamenty paradygmatu i mierzy się z nimi za pomocą Javy. W efekcie otrzymujemy bardzo zaawansowaną treść, całe mnóstwo inspiracji oraz świetny materiał do przemyślenia i przećwiczenia. Po lekturze tej pozycji łatwiej będzie zrozumieć programiście związanemu przede wszystkim z Javą fenomen Haskella, OCamla czy Scali.
To jedna z moich ulubionych książek o Javie. Dlaczego? Ponieważ pokazuje zupełnie inne jej oblicze i nowe możliwości, a także zmusza do przemyśleń.
Całe mnóstwo książek o wzorcach
Tutaj nie pojawi się pojedynczy tytuł, ale kilka. Zwykle rozmawiając z programistami (podczas konferencyjnych pogaduszek czy też podczas rozmów weryfikacyjnych/kwalifikacyjnych), pytam ich o ulubione katalogi wzorców projektowych. Niemalże każdy wymienia Wzorce projektowe Bandy Czworga. I niemalże dla wszystkich na tym się znajomość katalogów kończy. Tymczasem te klasyczne wzorce w różnych kontekstach przybierają nieco inne postaci. Pojawiają się także kompletnie nowe konteksty, wymagające zupełnie innych rozwiązań, co spowodowało skatalogowanie zupełnie nowych wzorców.
Polecam więc sięgnięcie po nie i przyjrzenie się ulubionemu builderowi z nieco innej perspektywy, dowiedzenie się, że singleton to nie zawsze zło, a wręcz bywa jedynym rozsądnym rozwiązaniem. Przykłady mogę mnożyć bez końca, ale po co, skoro lepiej oddać głos gigantom, na ramionach których każdego dnia stajemy, by sięgać chmur.
- Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku -E. Gamma, R. Helm, R. Johnson, J. Vlissides
- Patterns of Enterprise Application Architecture -M. Fowler
- Pattern-Oriented Software Architecture, Patterns for Resource Management -M. Kircher, P. Jain
- Enterprise Integration Patterns -G. Hohpe
- J2EE Patterns
- Microservices Patterns: With Examples in Java -C. Richardson
To niewielki wybór na dziś, ale bądźcie czujni. Każdego dnia tysiące inżynierów na całym świecie w jakiś sposób przyczynia się do powstania nowego katalogu. Także Wy :)
Podsumowanie
Przedstawiona lista oczywiście nie wyczerpuje zestawu lektur obowiązkowych. Należy ją potraktować raczej jako szczególną listę dla pracujących z Javą. Książki bardziej ogólne zasługują na oddzielne potraktowanie, co obiecuję w najbliższym czasie, także na łamach Bulldogjob. Miłej lektury!