KSIĄŻKI Algorytmy w C++
AUTOR Marcin 'mCrvn' Karwiński
Lubicie książki ze wspaniale ukrytą, wręcz niestniejącą fabułą? Książki, w których bohaterowie są wręcz niewidoczni? Mam dla was wspaniała nowinę! Oto trafił w me ręce tytuł zgoła inny od większości w tym numerze omawianych. Dlaczego? Bo jest to książka informatyczna. Zatem dla informatyków. Ale i nie do końca. Zainteresowani? To dobrze...

Lać, czy nie lać wody - oto jest pytanie. Z jednej strony o książce nie mam dużo do powiedzenia - ot kolejna cegła, z jakiej korzystałem w trakcie nauki języka. Z drugiej, jest to jedna z najlepszych pozycji traktująca o, bodajże, najważniejszym elemencie programów - o algorytmach. Lecz czymże jest tytułowy algorytm?

Definicja:
Algorytm w matematyce oraz informatyce to skończony, uporządkowany zbiór jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania, w ograniczonej liczbie kroków.
*

Przekładając to na język łopatologiczny, algorytm to przepis wskazujący co i jak wrzucić do garnka, jak to gotować, kiedy i jak mieszać itp. by w efekcie końcowym uzyskać żądane danie. Algorytmy mają jednak, w przeciwieństwie do przepisów kuchennych, to do siebie, że są zazwyczaj formułowane dość ściśle i abstrakcyjnie.

Wróćmy jednak do samej publikacji. Na przestrzeni blisko 1100 stron (650 stron pierwszego tomu i 450 drugiego) z lekkiego acz dobrego papieru można wyczytać wiele ciekawych informacji. Począwszy od wszechobecnego "wstępniaka", przez proste struktury danych (elementarne i abstrakcyjne), po co ciekawsze metody rozwiązania problemów wyszukiwania czy sortowania. Tom drugi przybliża z kolei teorię i implementacje grafów wraz z co niektórymi działaniami na nich (jak nieśmiertelne tworzenie minimalnych drzew rozpinających, wyznaczanie ścieżek i wykorzystywanie grafów skierowanych). Ogólnie można powiedzieć, że pierwsze 2 tomy tej, zakładanej na 3 tomową, "historii" dobrze o trylogii mówią.
W zasadzie wszelkie meandry implementacji i sposobów działania algorytmów są w książce podane, jednak dla wielu są one niewidoczne. Dlaczegóż? Książka ta zakłada, że czytelnik "nie spocznie na laurach", rozsiadając się wygodnie w kanapie i przewracając co chwila stronice... Nie, książka ta jest utrzymana w bardzo dobrym do samodzielnej nauki stylu. Pojawiające się tu i ówdzie zadania (blisko 1000 przypada na pierwszy tom, w drugim wydaje się być nieco mniej) pozwalają sprawdzić w praniu, ile z przeczytanego tekstu do nas dotarło. Według mnie jest to idealny pomysł. Nie dość, że pozwala to na intensywną powtórkę materiału, to jeszcze ułatwia późniejsze praktyczne wykorzystanie pozyskanej wiedzy.


Istotną cechą książki jest język przekazu. Choć wydaje się on być trudny i bardzo techniczny, to w rzeczywistości jest bardzo łatwy i wolny od niepotrzebnego "szumu". Wszystko to sprawia, że kolejne rozdziały są bardzo czytelne. O ile oczywiście ma się jakieś względne podstawy matematyczno-programistyczne, albo dysponuje się "tym czymś" zwanym częściej "szarą masą". Dla niektórych wysoce zrażającym może być fakt, iż dominuje w tej publikacji podejście teoretyczne. Nie jest to minus, gdyż książka uczy czytelnika "myśleć algorytmicznie" a nie tylko podaje "gotowy kod". Słowem - jeśli szukacie trasy na skróty, nie tędy droga. Bez odpowiedniego zrozumienia "klocków algorytmicznych" nie da się przecież zbudować dobrej aplikacji. Wadą przyjętego zapisu jest, przy słabej pamięci, cofanie czytelnika do już omówionych rozdziałów. Zdarza się to, dość często, dokładnie w momencie rozwiązania "akcji", tj. zazwyczaj w momencie próby optymalizacji implementacji algorytmu. Może to powodować pewien chaos i jednocześnie utrudniać przekaz. Może, ale nie musi!

Zainteresować może fakt, iż książka nie ogranicza się do jednej techniki implementacyjnej dla poszczególnych struktur czy samych tytułowych "przepisów". Już od pierwszych stron autor prowadzi czytelnika za rączkę od najbardziej topornych i zarazem najprostszych "cegiełek", po te ociekające nutą dekadenckiego wyrafinowania. Takie stopniowe wprowadzanie w arkana trudnej sztuki optymalnego i dobrego programowania pozwalają docenić ogrom wiedzy, jaki posiadają C++ "nejtiw spikerzy". Powolne przyswajanie i reorganizacja pomysłów uczy czytelnika odpowiedniej drogi myślenia, tak przydatnej przy późniejszym samodzielnym podchodzeniu do napotkanych problemów. Według mnie jest to zdolność nieodzowna dla dobrego programisty, a nie tylko "klepacza kodu".

Teoria podana w obu tomach występuje w bardzo przystępnej i prostej do zrozumienia formie. Już początkujący programista spokojnie sobie radzi z podążaniem za myślami autora. Jako podręcznik, książka doskonale wpisuje się w formę "skryptu" z wykładami pryncypiów rządzących opracowywaniem sprawnych i skutecznych algorytmów. Zamieszczone zadania, z kolei, w prosty, acz łopatologiczny, sposób pozwalają poznać praktyczne przykłady ich wykorzystania, co tym samym uczy zasad leżących u podstaw dobrego programowania nie tylko w języku C++. Coś jeszcze może przemawiać za zakupem? Ładnie się prezentuje, może służyć za podpórkę, idealnie wypełnia luki w biblioteczce i... wprost doskonale nadaje się do celów obronno-zaczepnych ;-).

Autor: Sedgewick Robert
Wydawnictwo: RM
Rodzaj oprawy: Twarda


*Na podstawie artykułu z Wikipedii