Jakiś czas temu skusiłem się na zakup książki „Algorytmy: Ilustrowany przewodnik”, która od lat znajduje się na liście bestsellerów jednej z dużych księgarni informatycznych. Byłem ciekaw, czy programista mający już pewien bagaż doświadczeń znajdzie w niej coś dla siebie. W tym artykule odpowiem na pytanie, dla kogo jest ta książka i czy jej popularność jest zasłużona.
Książkę zakupiłem za własne pieniądze i nie jest jej reklamą ani współpracą. Powstał wyłącznie z mojej własnej inicjatywy.
Zawartość książki
Omawiana książka to nieco ponad 200 stron, z czego część stanowią ilustracje i grafiki pomocnicze. Można spokojnie zbinge’ować ją w jeden, maksymalnie dwa wieczory, jednak nie polecam takiego podejścia. Pracując z książką, przerabiałem jeden rozdział dziennie i u mnie to podejście się sprawdziło.
Zestawiając ją z np. Wprowadzeniem do algorytmów Thomasa H. Cormena, której to objętość przekracza 1200 stron, omawiana pozycja wypada blado. Jednak mimo niewielkiej objętości wyjaśnia wiele zagadnień w sposób, który dla większości czytelników będzie wystarczający. Na książkę składa się 11 rozdziałów:
- wprowadzenie do algorytmów — złożoność obliczeniowa algorytmów i wyszukiwanie binarne;
- sortowanie przez wybieranie;
- rekurencja
- szybkie sortowanie;
- tablice skrótów;
- przeszukiwanie wszerz;
- algorytm Dijkstry;
- algorytmy zachłanne;
- programowanie dynamiczne;
- K najbliższych sąsiadów;
- Rozdział „co dalej?” — zajawia kilka zagadnień wartych poznania na własną rękę po lekturze książki.
Forma książki
Książka stawia na prostotę. Nie znajdziesz tu skomplikowanych wzorów i symboli. Zamiast tego autor postawił na ilustracje. Sporo z nich moim zdaniem jest zbędna i nic nie wnosi do treści książki. Myślę jednak, że można to wybaczyć, biorąc pod uwagę, że jest to „ilustrowany przewodnik” zwłaszcza że jest też sporo ilustracji, które dobrze uzupełniają omawiane zagadnienia.
Sam styl prowadzenia narracji książki jest dość luźny i przypomina warsztaty lub kursy online. Moim zdaniem grupą docelową jest jednak młodszy czytelnik. Kogoś oczekującego naukowej rozprawy o algorytmice lub formalnego stylu wypowiedzi taki styl rozczaruje.
Ponieważ autor postawił na prostotę, zagadnienia przedstawione w książce są w sposób prosty i tu również ci, którzy oczekują precyzyjnych objaśnień i definicji, mogą poczuć niedosyt. Weźmy przykład definicji algorytmu z książki:
Algorytm to zestaw instrukcji opisujących, jak wykonać pewne zadanie.
Definicja ta jest jak najbardziej poprawna. Jednak jest ona znacznie uproszczona np. względem definicji, którą poznałem na studiach. Jej uproszczoną wersję zamieściłem w artykule o złożoności obliczeniowej algorytmów:
Algorytm to zestaw instrukcji, który dla zbioru danych x, należących do dopuszczalnego zbioru danych wejściowych, generuje rezultat y, należący do zbioru dopuszczalnych wyników, oraz spełnia następujące założenia:
- Ma skończoną liczbę kroków. Niedopuszczalne jest stworzenie algorytmu nieskończonego.
- Każdy krok algorytmu musi być obliczalny/wykonywalny.
- Każdy krok algorytmu musi być zdefiniowany jednoznacznie. Przykładowo, niedopuszczalne jest zdefiniowanie kroku „wsyp cukier” – brakuje informacji: „gdzie?”, „ile?”.
Jednak dla większości czytelników, szczególnie tych, którzy dopiero stawiają pierwsze kroki w programowaniu, poziom wyczerpania zagadnień w książce będzie moim zdaniem wystarczający.
Coś, co uważam, że mogło być lepiej zrealizowane to niektóre praktyczne przykłady wykorzystania algorytmów. Nie mogło zabraknąć takiego klasyka jak książka telefoniczna przy temacie wyszukiwania czy silni przy omawianiu rekurencji. Pytanie jednak jak często przyszły programista będzie implementował książkę telefoniczną czy silnię w kodzie. Wystarczyłoby zamienić przykład z książką na listę produktów w sklepie internetowym i już byłby bardziej „życiowy”. Totalnie ignoruję tutaj fakt, że w realnej aplikacji takie problemy byłyby rozwiązane przez odpowiednio zbudowane zapytanie do bazy danych lub wbudowane w język programowania funkcje. Chodzi mi o częstość napotykania danego problemu w codziennej pracy. Lepiej, by początkujący programista kojarzył dany algorytm z przypadkiem, który może spotkać w swojej pierwszej pracy niż z książką telefoniczną, nawet jeśli ostatecznie oba przypadki sprowadzają się do przeszukania listy.
Nieodłączną częścią książki są fragmenty kodu. Mimo że zostały napisane w leciwym już Pythonie 2.7, to moim zdaniem nie jest to duża wada. Sam Python jest na tyle prostym językiem, że ewentualne odtworzenie fragmentów kodu w Pythonie 3 lub innym dowolnym języku programowania nie powinno stanowić problemu. Szczególnie,że kod stanowi małą część treści książki.
W książce znajdują się również ćwiczenia, które mają na celu sprawdzenie wiedzy po przeczytaniu fragmentu książki. Ćwiczenia są proste i nie wymagają dużo wysiłku. Na duży plus jest to, że odpowiedzi do ćwiczeń zostały dodane na końcu książki.
Polskie tłumaczenie książki daje radę. Nie ma tu na szczęście potworków, które napotykałem w innych przetłumaczonych pozycjach takie jak „żądanie ściągnięcia” (pull request) czy „serwer zaplecza” (backend).
Dla kogo jest ta książka?
Sam autor określił grupę docelową jako:
- programiści amatorzy;
- studenci biorący udział w warsztatach programistycznych;
- absolwenci informatyki, którzy potrzebują odświeżenia wiadomości;
- fizycy, matematycy i absolwenci innych kierunków interesujący się programowaniem.
Cieszy mnie, że autor nie silił się na przedstawienie książki jako lektury dla każdego.
Mam jednak wątpliwości, czy studenci są adekwatną grupą docelową. Na etapie szkoły średniej wiedza zawarta w tej książce jest aż nadto wystarczająca. Jednak na studiach, gdybym do zaliczenia przedmiotu związanego z algorytmami i strukturami danych polegał jedynie na tej książce, to uważam, że uzyskanie zaliczenia mogłoby być trudne. Studentom rekomendowałbym jednak nieco bardziej obszerne pozycje, a najlepiej te wskazane przez wykładowców. Podobnie sytuacja ma się z fizykami i matematykami. Tu również postawiłbym na bardziej formalne i obszerne publikacje.
Książka dobrze się sprawdzi w przypadku osób, które znają absolutne podstawy programowania i chcą poznać podstawowe algorytmy. Szczególnie rekomendowałbym tę książkę czytelnikom dopiero rozpoczynającym przygodę z informatyką i wchodzącym do świata IT.
Książka też może się sprawdzić dla programistów zmieniających pracę potrzebujących przypomnieć sobie na rozmowę rekrutacyjną np. jak działa quicksort 😂
Podsumowanie
Zdecydowanie rozumiem, dlaczego ta pozycja przez tak długi czas utrzymuje się na liście bestsellerów. Jeśli stawiasz pierwsze kroki w branży IT lub programowanie nie jest twoim głównym zajęciem, a chcesz poznać podstawowe algorytmy, to z czystym sumieniem polecam tę pozycję. Zawodowi programiści i programistki prawdopodobnie zbyt wiele nowego się z niej nie dowiedzą.
Książkę możesz kupić klikając w TEN link. Kupując z tego linku, wspierasz rozwój bloga.
Zapisz się na mailing i odbierz e-booka
Odbierz darmowy egzemplarz e-booka 106 Pytań Rekrutacyjnych Junior JavaScript Developer i realnie zwiększ swoje szanse na rozmowie rekrutacyjnej! Będziesz też otrzymywać wartościowe treści i powiadomienia o nowych wpisach na skrzynkę e-mail.