Biblioteka

8 książek, które powinien przeczytać programista

@ StockSnap

Każdy programista w trakcie swojej kariery czerpie wiedzę z różnych źródeł. Jednym z nich są książki. Obecnie na rynku można znaleźć wiele książek, a ich ilość stale rośnie. Wśród nich znajdują się lepsze i gorsze pozycje. Jeśli jesteśmy początkującymi zastanawiamy się od czego zacząć edukację. Jeśli mamy już praktykę w naszym zawodzie to chcemy wybrać takie książki, które wpłyną na szybszy rozwój. Aby ułatwić to zadanie przygotowałem listę 8 książek, które powinien przeczytać każdy programista.

Code complete

Code complete - okładka książki

Pierwszą z książek jest “Code complete”, której autorem jest Steve McConnel. W polskiej wersji książka nosi tytuł “Kod doskonały”. Pierwsze wydanie książki miało miejsce w 1993 roku. Obecnie na rynku znajduje się jej drugie wydanie.

Ta książka jest praktycznym przewodnikiem tworzenia dobrego oprogramowania. Jest ona esencją wiedzy, która zawarta jest w wielu książkach. Nie bez powodu znajduje się ona na czele mojej listy. Autor w prosty i dogłębny sposób wyjaśnia wiele tematów. Zwraca uwagę na wiele ważnych czynników, które mają wpływ na jakość budowanych programów.

W książce omawiane są takie tematy jak:

  • architektura,
  • projektowanie,
  • proces kodowania,
  • testy,
  • integracja,
  • zarządzanie,
  • rzemiosło programisty.

Dzięki temu, że tyle tematów znalazło się w jednej książce można znacznie skrócić proces swojej nauki. Mimo, że książka jest dość gruba (ponad 900 stron) naprawdę warto ją przeczytać.

Autor dodatkowo podaje cenną literaturę uzupełniającą, z którą warto się zapoznać.

The Pragmatic Programmer

Pragmatic programmer - okładka książki

Drugą z pozycji na mojej liście jest książka, której autorami są Andrew Hunt i David Thomas. Polski tytuł książki to “Pragmatyczny programista. Od czeladnika do mistrza”. Obaj autorzy są praktykami w naszej branży. Ich książka ma nam pomóc stać się lepszym programistą. W książce poruszają szeroki zakres tematów. Nie dotyczą one tylko pisania kodu.

Książkę czyta się przyjemnie. Jest ona napisana dość prostym językiem. Użyto w niej wielu metafor. Dzięki temu łatwiej jest zrozumieć przekazywane treści. Polecam ją zwłaszcza początkującym. Już w pierwszym rozdziale znajdą oni wiele ważnych rad, które pomogą im przygotować plan własnego rozwoju. Dowiedzą się też jak stworzyć swoje portfolio wiedzy.

Z książki dowiemy się też jak pisać niezawodne programy. Otrzymamy wiele cennych rad wraz z przykładami. Większość z nich to kod w Javie i C++. Oprócz tego w każdym rozdziale jest też zbiór zadań i ćwiczeń. Pozwolą one utrwalić poznaną teorię. Ich rozwiązania można znaleźć na końcu książki.

W książce opisane są też różne narzędzia. Choć część z nich została już wyparta przez nowsze to nadal część z nich jest przydatna.

Autorzy zwracają też uwagę na dobre testy i jasne wymagania. Opisują oni też różne problemy, które można napotkać w projektach. Część z nich jest opisana z pewną dawką humoru.

W dodatku A podane są materiały uzupełniające. Są wśród nich czasopisma, książki, zasoby www itp.

Clean Code

Clean code - okładka książki

Clean code to kolejna lektura obowiązkowa na liście książek dla programistów. Polski tytuł książki to “Czysty kod. Podręcznik dobrego programisty”. Autorem książki jest popularny Robert C. Martin znany również jako Wujek Bob (ang. Uncle Bob). Książka jest pozycją, która opisuje techniki pozwalające tworzyć bardziej czytelny kod. Taki kod jest później łatwiejszy w analizie zarówno dla autora jak i innych programistów. Dalszy rozwój oraz utrzymanie takiego kodu jest znacznie mniej problematyczne.

Książkę szczególnie polecam osobom początkującym w programowaniu. Jeśli jesteś początkujący i znasz już postawy programowania to naprawdę warto się z nią zapoznać. Z pewnością jakość i czytelność Twojego kodu wzrośnie znacząco.

Autor porusza szereg tematów. Najważniejsze z nich dotyczą:

  • tworzenia nazw,
  • funkcji,
  • klas,
  • struktur danych,
  • obsługi błędów,
  • komentarzy i formatowania kodu,
  • wybranych zasad SOLID,
  • testów jednostkowych oraz techniki TDD,
  • współbieżność.

Prawie każde z opisywanych przez autora zagadnień jest poparte przykładem. Dzięki temu, wiem jak zastosować zdobytą wiedzę w praktyce.

W książce znajdziemy obszerne przykłady pokazujące oczyszczanie kodu. W przykładach tych autor pokazuje kolejne kroki jakie należy wykonać aby kod stał się “czysty”. Każdą z wprowadzonych zmian autor szczegółowo uzasadnia.

Autor podając przykłady używa języka Java. Ze względu na prostą składnię tego języka przykłady te powinny być także zrozumiałe dla programistów innych języków.

Na pewno nie będziemy w stanie zapamiętać od razu wszystkich reguł zawartych w książce. Dlatego warto wracać do lektury tej książki wielokrotnie. W ten sposób lepiej utrwalimy przeczytane treści, a nasz kod stanie się bardzie czytelny.

Design Patterns

Design patterns - okładka książki

Czwarta z książek opisuje wzorce projektowe. Polski tytuł książki to “Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku”. Autorami tej książki są: Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides. Tych czterech panów określa się mianem “bandy czworga” (ang. Gang of Four lub w skrócie GoF). Pozycja ta jest uznawana za klasyk w dziedzinie oprogramowania.

Książka tę można śmiało nazwać encyklopedią wzorców projektowych. Wszystkie inne książki które powstały później bazują na informacjach z tej książki.

Książka zawiera bardzo szczegółowe omówienie wzorców w podziale na trzy grupy:

  • wzorce konstrukcyjne,
  • wzorce strukturalne,
  • wzorce operacyjne.

Opis każdego wzorca zawiera powody powstania, przykładową implementację oraz diagram. Dodatkowo w opisie znajdziemy warunki użycia i konsekwencje zastosowania. Wymienia się także popularne zastosowania opisywanego wzorca oraz wzorce z nim powiązane.

Muszę przyznać, że pozycja nie jest łatwa w odbiorze. Ma na to wpływ dość techniczny język oraz przykłady. Są one głównie w językach C++ oraz Smalltalk, które były bardziej popularne kiedy książka powstawała.

Jeśli ta książka mogłaby być zbyt trudna dla Ciebie to polecam książkę “Head First Design Patterns” wydawnictwa O’Reilly. Mimo, że ta książka nie opisuje wszystkich wzorców, to zawiera te najważniejsze. Opis wzorców jest podany w bardzo przystępnej formie. Natomiast przykłady w niej zawarte napisane są w języku Java, który ma znacznie prostszą składnie.

Z pewnością książka ta jest godna polecenia. Warto znać wzorce projektowe. Używane odpowiednio z pewnością poprawią jakość naszego kodu. Dodatkowo warto znać wzorce, gdyż bardzo często są tematem pytań na rozmowach kwalifikacyjnych.

Refactoring: Improving the Design of Existing Code

Refactoring exisiting code - okładka książki

Kolejna, piąta już książka jest pracą zbiorową. Polski tytuł książki to “Refaktoryzacja: ulepszanie struktury istniejącego kodu”. Wśród autorów znajdziemy tak znane osoby jak Martin Fowler czy Kent Beck. Książka poświęcona jest refaktoryzacji. Refaktoryzacja ma bardzo duże znaczenie podczas codziennej pracy programisty. Dzięki regularnej przeprowadzanej refaktoryzacji unikamy tworzenia kodu “spaghetti”. Czyli kodu skomplikowanego i trudnego w zrozumieniu. Tak zaniedbany kod po jakimś czasie staje się coraz trudniejszy w utrzymaniu. Również dalsza jego rozbudowa jest nie lada wyzwaniem. Stosując refaktoryzację unikamy lub przynajmniej zmniejszamy zagrożenie pracy z takim kodem.

W początkowych rozdziałach autorzy objaśniają czym jest refaktoryzacja. Przedstawiają też argumenty uzasadniające stosowanie refaktoryzacji. Dodatkowo dowiemy się kiedy refaktoryzację należy przeprowadzić. A także z jakimi problemami możemy się spotkać kiedy chcemy ją zrealizować. Autorzy zwracają też uwagę na duże znaczenie testów. Testy warunkują poprawne przeprowadzenie refaktoryzacji.

W książce znajdziemy też opis najbardziej popularnych “zapaszków” (ang. smells) w kodzie. Tak autorzy określają kod, który wymaga refaktoryzacji. Wśród nich najpopularniejszymi są:

  • duża klasa,
  • duża metoda,
  • długa lista parametrów,
  • duplikacja kodu,
  • niewłaściwe komentarze.

Najważniejsza część książki to rozdziały składające się na katalog przekształceń refaktoryzacyjnych. Każdy z opisywanych przypadków posiada swoją nazwę oraz zawiera wyczerpujący opis. W opisie znajdziemy informacje takie jak:

  • zastosowanie,
  • potencjalne korzyści,
  • kolejne kroki przekształcenia,
  • przykład w języku Java.

Niektóre bardziej złożone przypadki uzupełnione są diagramami w języku UML.

Test Driven Development: By Example

TDD by example - okładka książki

Autorem szóstej z omawianych książek jest Kent Beck, który jest twórcą programowania ekstremalnego. W polskiej wersji językowej książka została zatytułowana: “TDD. Sztuka tworzenia dobrego kodu”. Książka opisuje tworzenie oprogramowania z użyciem techniki TDD (ang. Test Driven Development). Używając jej najpierw piszemy test, który sprawdza dodawaną funkcjonalność. Następnie tworzymy kod, który implementuje tę funkcjonalność. Na końcu dokonujemy odpowiedniej refaktoryzacji aby kod spełniał określone standardy. Mimo, że technika ta może wydawać się dziwna i zajmująca więcej czasu to na dłuższą metę przynosi korzyści. Nie dość, że nasz kod jest bardziej czytelny to w całości pokryty jest testami. Także wprowadzanie zmian w bardziej złożonym projekcie jest znacznie łatwiejsze.

Książka napisana jest w bardzo przystępnej formie i szybko się ją czyta. Książka została podzielona na trzy części.

Pierwsza z nich stopniowo wprowadza nas w tajniki TDD. W tym celu omawiane są przykłady dotyczące obliczeń finansowych. Autor bardzo czytelnie tłumaczy kolejne kroki tworzenia kodu z użyciem tej techniki. Przykłady zaimplementowane są w języku Java, a użytym frameworkiem jest JUnit.

Druga część dotyczy tematyki związanej z tworzenie własnego środowiska testowego. Ujęto w niej architekturę xUnit. Przykłady w tej części zaprezentowane są w języku Python.

Ostatnia bardzo ciekawa część poświęcona jest wzorcom, które mogą być stosowane podczas tworzenia kodu z użyciem TDD. Znajdziemy tu m.in. informacje dotyczące niektórych klasycznych wzorców oraz refaktoryzacji. Autor opisuje też techniki typowo związanych z testami.

Working Effectively with Legacy Code

Working Effectively with Legacy Code - okładka książki

Siódma z książek, której autorem jest Michael Feathers poświęcona jest pracy z zastanym kodem (ang. legacy code). Jej polski tytuł to “Praca z zastanym kodem. Najlepsze techniki”.

Codzienna praca programisty to nie tylko tworzenie nowego kodu. Bardzo często to praca z kodem, który został napisany przez kogoś innego lub pochodzi ze starszej wersji obecnego systemu. Taki kod jest bardzo często zawiły na skutek zmiennych wymagań i nie ma testów. Zmiana takiego kodu może u nas budzić strach. Często jedna zmiana w takim kodzie może powodować błędy w innych różnych obszarach systemu. Książka Feathersa jest bardzo pomocna w takich sytuacjach.

Książka została podzielona na trzy części obejmujące 25 rozdziałów. Autor prezentuje różne narzędzia i techniki ułatwiające pracę z zastanym kodem. Każda z techniki jest szczegółowo wyjaśniona. Feathers przedstawia kontekst w jakim dana technika ma zastosowanie oraz opisuje jej wady i zalety. Dla każdej z nich podaje konkretne przykłady. Są one głównie w języku Java i C#, ale zdarzają się również przykłady w C++.

Po zapoznaniu się z technikami zawartymi w książce znacznie łatwiej będzie nam wprowadzać zmiany do kodu, który uległ degradacji.

The Mythical Man-Month

The Mythical Man-Month - okładka książki

Ostatnią z polecanych lektur jest książka autorstwa Fredericka Brooksa. W polskiej wersji zatytułowana jest “Mityczny osobomiesiąc”. Głównym tematem tej książki jest zarządzanie procesem tworzenia oprogramowania.

Od wydania pierwszej wersji tej książki minęło już kilka dekad. Mimo to dużo zagadnień opisanych w książce jest wciąż aktualna. Główna idea zawarta w książce to wynik doświadczeń autora podczas pracy w firmie IBM nad systemem OS/360. Rozwój tego systemu był opóźniony, więc Brooks postanowił powiększyć zespół programistów. Mimo, że ta decyzja mogła wydawać się właściwa spowodowała ona jeszcze większe opóźnienie projektu. Brook stwierdził wówczas, że osoby zarządzające często popełniają ten sam błąd. Opisanie tego zachowania w książce spowodowało, że zaczęto je nazywać prawem Brooka (ang. Brooks’s law).

Zachęcam do zapoznania się z treścią tej ponadczasowej książki. Dostarczy Ci ona wielu cennych informacji, niezależnie czy jesteś programistą czy kierownikiem.

Podsumowanie

Niewątpliwie książki warto czytać by poszerzyć swoją wiedzę. Książki dla programistów, które wybrałem to niewątpliwie pozycje godne polecenia. Starałem się wybrać takie, które będą miały największy wpływ na rozwój Twojej kariery.

Niejedna z tych książek może być dobrym prezentem dla programisty. Więc jeśli nie wiesz co kupić znajomemu programiście możesz rozważyć zakup jednej z powyższych książek.

Zachęcam do ich przeczytania jeśli jeszcze nie miałeś okazji się z nimi zapoznać. Być może uważasz, że istnieją inne książki, które warto polecić. Jeśli tak zostaw komentarz.