Nie minął jeszcze rok od premiery PHP 5, a na polski rynek już trafiła spora liczba książek traktujących o nowej edycji tego języka. Z jednej strony powinno to nas cieszyć, a z drugiej potencjalny czytelnik może zgubić się wśród możliwych wyborów. W tej oto recenzji chciałbym przyjrzeć się pozycji "PHP i MySQL - aplikacje bazodanowe" autorstwa Hugha E. Willimsa oraz Davida Lane'a, wydanej w naszym kraju przez wydawnictwo Helion pod koniec 2004 roku.
Oprawa książki nie wyróżnia się niczym szczególnym. Ot, mamy przyzwoitej jakości papier z przyzwoitej jakości drukiem oprawiony w przyzwoitej jakości okładkę. Tu muszę przyznać, że na początku trochę dziwiło mnie, że pod tytułem znalazło się zdjęcie... dziobaka, ale sprawa szybko wyjaśniła się. Autorzy są po prostu australijczykami. Miły gest, choć w moim odczuciu dosyć hmmm... oryginalny.
W kwestii doboru materiałów zostałem naprawdę pozytywnie zaskoczony. Już sam rzut oka na spis treści wystarczy, by zobaczyć, że autorzy potraktowali poważnie czytelnika. Znajdziemy tutaj zarówno rozdziały dotyczące podstaw programowania w PHP i języka SQL, opisy programowania obiektowego, jak i poradniki praktyczne doradzające nam w kwestiach budowania poszczególnych komponentów aplikacji WWW. Poznamy kilka składników pakietu PEAR (system szablonów, warstwa bazy danych), a także nauczymy się przeprowadzać kontrolę danych wejściowych, autoryzację użytkowników, a nawet generowanie raportów w formacie PDF! Ciekawie wygląda również sekcja dotycząca MySQL'a. Została ona podzielona na dwie części. Zadaniem pierwszej jest wprowadzenie nas w świat baz danych oraz języka SQL. W drugiej natomiast uczymy się wykorzystywać zaawansowane możliwości tego języka. Całość zamyka studium przypadku - budowa serwisu WWW fikcyjnej sieciowej winiarni "Hugh & Dave". Autorzy pokazali tu, jak w praktyce wykorzystać zdobytą wcześniej wiedzę, aby uzyskać żądany efekt. Do książki dołączona jest pokaźna porcja dodatków. Kilka z nich to będące standardem opisy instalacji PHP i MySQL na różnych systemach operacyjnych, ale reszta zainteresować powinna dosłownie każdego. Znajdziemy tu opis protokołów sieciowych, praktycznie zrealizowane wprowadzenie do modelowania baz danych (dotyczy ono wspomnianego wcześniej studium przypadku) oraz dwa "bonusowe" rozdziały: tworzenie systemu sesji opartego o bazy danych i opis nowej w PHP 5 biblioteki komunikacji z MySQL'em: MySQLi.
Muszę przyznać, że taki rozrzut materiału naprawdę mnie zadziwił. Niech świadczy o tym to, że parę rozdziałów (m.in. ten o generowaniu raportów) dosłownie spadło mi z nieba, gdyż tak się składa, że właśnie dostałem projekt wymagający napisania czegoś takiego. Zdumiały mnie jedynie dwie rzeczy. Nie wiem, dlaczego autorzy opisują powolną i przestarzałą bibliotekę wyrażeń regularnych POSIX (ereg), gdy obecnie dosłownie WSZYSCY korzystają z wydajnej biblioteki Perla (preg). Kolejna obiekcja dotyczy instalacji Apache'a, PHP i MySQL na systemie Windows. Opisany sposób dotyczy bowiem jedynie gotowego kombajnu EasyPHP. A gdzie ręczna instalacja każdego składnika? Czyżby autorzy zupełnie zapomnieli, że coś takiego istnieje? Zapewne tak, bowiem nie wspomnieli o tym nawet na liście możliwości :).
Otwórzmy teraz treść właściwą i przyjrzyjmy się opisowi rozdziałów. Opisy i wyjaśnienia napisane są przyzwoicie i każda myśląca istota nie powinna mieć problemów z ich zrozumieniem. W każdym kodzie źródłowym (a tych jest sporo) znajdziemy komentarze. Jakby tego było mało, pod listingami znajduje się dodatkowe wyjaśnienie, jak działa opisany fragment i dlaczego akurat tak. Autorzy w wielu miejscach zwracają nam uwagę na ewentualne pułapki i miejsca, w których należy uważać. Nie stronią też od cennych wskazówek w stylu "kiedy stosować to, a kiedy nie". Przy omawianiu zagadnień nie zapominają o końcowej wydajności. Widać to bardzo wyraźnie, szczególnie w rozdziale o MySQL'u. Łatwo tam trafić na porównania, który element jest szybszy od drugiego (i w jakich sytuacjach), że o sekcji poświęconej optymalizacji baz danych nie wspomnę. Za rekomendację niech posłuży to, że sam, mimo prawie trzyletniego doświadczenia, dowiedziałem się o sporej liczbie niby drobiazgów, będących jednak niezwykle ważnymi. Zatem nawet doświadczonym programistom książka pomaga usystematyzować wiedzę (szczególnie, gdy zdobywali ją w całości metodą prób i błędów tak, jak ja :)). Odnośnie kodów źródłowych mam jedno, jedyne poważne zastrzeżenie. Autorzy używają dużej liczby najczęściej zbędnych zmiennych tymczasowych. Najbardziej denerwowało mnie wprowadzanie wszystkich zapytań SQL do zmiennej, a zaraz potem do odpowiedniej funkcji wykonującej bez żadnej konkretnej przyczyny. Na litość boską, skoro takie podejście odradzają sami twórcy PHP (i słusznie!), czemu wszyscy na złość cioci je stosują? Niechby chociaż jakiś komentarz załączyli, że tu robią tak tylko dlatego, by listingi się ładnie w książce prezentowały!
Choć książka zawiera szereg rozdziałów wprowadzających w świat programowania, mają one postać bardziej teoretyczną. Z tego też powodu polecałbym tę książkę głównie osobom, które o PHP/programowaniu coś już wiedzą. Nie to, żebym miał coś przeciwko jakości opisów. Chodzi o to, że w dalszych rozdziałach poruszane są już naprawdę skomplikowane zagadnienia i nieprzygotowana osoba może się tak zbyt łatwo zniechęcić. Jest przecież wiele innych książek nastawionych wyłącznie na podstawy, które zapewnią odpowiednie przygotowanie do trudniejszych zadań.
Zanim przejdę do dalszej części recenzji, mam jeszcze małą uwagę dotyczącą wersji PHP. Książka powstawała, gdy PHP 5 znajdowało się jeszcze w wersji beta, dlatego też kody źródłowe docelowo pisane są dla wcześniejszego PHP 4. Tam, gdzie jednak było to możliwe, zaznaczono różnice między poszczególnymi edycjami. Jest też osobny rozdział poświęcony w całości PHP 5, a konkretniej wprowadzonemu tam zupełnie nowemu modelowi programowania obiektowego. Podobnie jest z MySQL'em, choć tu już rzecz tyczy się w całości najnowszej gałęzi 4.1.
Wszystko ładnie, wszystko pięknie, jednak nie ma książki bez wpadek. Tak jest i w tym przypadku. Zacznijmy od wpadek samych autorów. Najpoważniejszą z nich jest stwierdzenie, że stary moduł komunikacji z MySQL'em nie działa z najnowszą wersją MySQL 4.1 i trzeba koniecznie korzystać z nowego MySQLi. Owszem, zgodzę się z tym, ale istnieje pewna prosta sztuczka pozwalająca na ominięcie tego (po szczegóły odsyłam do porad na Webcity). O tym jednak autorzy już nie wspomnieli (nie wiedzieli?) i to doprowadziło do kuriozalnej sytuacji. Oto bowiem w rozdziale dot. instalacji oprogramowania na Linuxie zalecają nam... wyłączenie z kompilacji starego modułu! Jest to o tyle głupie, że korzysta z niego 90% skryptów i gdybyśmy postąpili według niego, pozbawilibyśmy się do nich dostępu. A wystarczy wywołać jedno, jedyne polecenie... ponadto nie wspomniano o czynieniu skryptu odpornym na różne ustawienia dyrektyw magic_quotes.
Tłumaczenie książki wykonane jest przyzwoicie i w miarę poprawnie. Terminologia została przełożona tak, jak być powinno. Trochę nie pasowały mi co prawda nazwy elementów szablonów HTML, ale osobiście nie dziwię się temu :). Sam robię systemy odpowiedzialne za ich przetwarzanie od paru lat i zdążyłem już zauważyć, że co parser, to inne nazewnictwo. W niemal wszystkich rozdziałach pojawia się nawiązanie do omawianego w książce studium przypadku - sieciowej winiarni Hugh & Dave. Jak nazwa wskazuje, zajmuje się ona internetowym handlem australijskimi winami. Problem dotyczy nawiązań do tej aplikacji, bowiem w pierwszych rozdziałach tłumacz dał plamę i wszystkie zakłady produkujące wino (czyli winnice) nazwał... winiarniami. Zasugerował się pewnie angielskim słowem "winery", lecz w języku polskim winiarnia to sklep sprzedający wina do degustacji na miejscu. Jeszcze dziwniejsze jest to, że już w samym studium przypadków nazewnictwo jest prawidłowe. Sprawa wyjaśniła się po lekturze, gdy zajrzałem do stopki. Okazało się, że za tłumaczenie odpowiada aż trzech ludzi. Początek książki oraz samo studium tłumaczyły różne osoby i stąd też raz jest błąd, raz go nie ma. Mimo wszystko za całokształt dałbym tłumaczom plusa - za to, że tłumaczenie wygląda tak, jakby robił je jeden człowiek. Różnice między stylami są niezauważalne. Na koniec dodam, iż znalazłem jeden błąd ortograficzny: "rządzić" napisane przez "ż".
Przyszła pora na końcową ocenę. Mimo iż z częścią decyzji autorów nie do końca się zgadzam, a części nie rozumiem, książka ta mimo wszystko sama w sobie stanowi cenny podręcznik pomagający w tworzeniu aplikacji WWW. O ile nie będziemy traktować zawartych tu rzeczy, jak prawdy objawionej, a dodatkowo wesprzemy niektóre zagadnienia wiedzą z innych źródeł, możemy się stąd dowiedzieć wielu ciekawych rzeczy. I dotyczy to nie tylko początkujących programistów PHP, ale i wielu starych wyjadaczy chleba :). Ja w każdym razie nie żałuję wyboru. Niech to posłuży za ostateczną rekomendację. |