11.17.07
Indoktrynacja
(Wpis przeniesiony z Jabby, napisany dnia: 2006-05-17 15:37:42) Pożyczyłem ostatnio książkę o Javie z zamiarem bliższego przyjrzenia się temu językowi, bo, bądź co bądź, umiejętności programowania w nim wymaga duża część rynku (w tym pewna miła firma z Łodzi), a zawsze uważałem książki za dobry sposób wystartowania z nauką jakiejś technologii – dobry o tyle, że zazwyczaj prezentują one informacje w sposób skondensowany i powiązany logicznie, czego często nie dają internetowe samouczki czy dokumentacja.
Mam co prawda pewną awersję do tego języka, którą pewnie spowodowało zetknięcie z javowym maniakiem twierdzącym, że nic innego do programowania się nie nadaje, ale do przeglądania książki zabrałem się ochoczo. Jakież było moje zdziwienie, gdy w pierwszym rozdziale pt. “Wprowadzenie do Javy”, w którym autorzy próbują rozwiać pewne mity dotyczące tego języka, natknąłem się na taki oto paragraf:
“Powinieneś używać Javy zamiast skryptów Perl i CGI
W połowie jest to prawda. Nie tylko nie powinieneś w ogóle używać języka Perl, ale nie powinieneś również używać skryptów CGI w programach działających po stronie serwera. Serwlety Javy są lepszym rozwiązaniem. Serwlety wykonują się w sposób znacznie bardziej efektywny niż skrypty CGI i, co więcej, możesz używać Javy – prawdziwego języka programowania – do ich implementacji”
Zdębiałem. Muszę przyznać, że nie tego spodziewałem się po książce sprawiającej wrażenie publikacji technicznej z logiem Sun Microsystems na okładce. Zamiast zaprezentować faktyczne zalety języka, które przemawiałyby za użyciem go zamiast innych narzędzi, będący autorami książki panowie Cay. S. Horstmann i Gary Cornell posunęli się do starego jak świat chwytu polegającego na próbie zmieszania konkurencji/alternatywy z błotem, próbie o tyle podłej, że pozbawionej podstaw i nakierowanej bezpośrednio na powiększenie ego czytelnika – przyszłego programisty Javy. Oczywiście można mieć pewne wątpliwości co do użyteczności Perla w tworzeniu dużych aplikacji, które muszą być potem otrzymywane przez innych ludzi, oraz techniki CGI jako metody udostępniania aplikacji webowych, ale napisanie, że nie nadają się one do niczego jest jawną bzdurą, podobnie jak ma się sprawa z sugestią (poniekąd zabawną), że jedynym prawdziwym językiem programowania jest Java.
Nie chcąc zniżać się do poziomu szanownych autorów wyjaśnię na czym bazuje moja krytyka. Po pierwsze Perl: z całą swoją zamgatwaną składnią umożliwiającą pisanie kodu przebijającego nawet potworki z IOCCC, umożliwia on szybkie rozwiązywanie problemów programistycznych oraz bardzo dobrze nadaje się do przetwarzania danych tekstowych, a tego właśnie czasem nam potrzeba. Nikt nie wmówi mi, że prosta aplikacja generująca np. statystyki na podstawie logów czy informacji systemowych nie może powstać bez klas, dziedziczenia, interfejsów i maszyn wirtualnych. Podobnie ma się sprawa z CGI: jest to interfejs prosty w konfiguracji i utrzymaniu, pozwala także na wykorzystanie programu napisanego w niemalże dowolnym języku programowania, a udostępnianie na serwerze skryptów CGI wiąże się zazwyczaj z prostym kopiowaniem plików. Tymczasem, aby udostępnić aplikację webową napisaną w Javie przy pomocy Tomcata trzeba przejść przez nietrywialną konfigurację serwera (w tym tworzenie użytkowników), pisanie plików XMLowych opisujących aplikację i ostatecznie deployment. Jakież to proste.
Książka (”Core. Java 2. Podstawy”, Helion, 2003) nagle znacznie straciła w moich oczach i nie będę już chyba w stanie uznać jej autorów za autorytety w dziedzinie programowania. Szkoda, bo miałem nadzieję na niezły podręcznik, a nadziałem się na zakamuflowany materiał reklamowy w stylu FUD. Nie zamierzam od razu się jej pozbyć, ale prezentowane w niej informacje będę na pewno przyjmował z większą rezerwą. Naprawdę szkoda. Tymczasem Bjarne Stroustrup swoją książkę p.t. “Język C++” zaczyna następującymi słowami:
“Używanie C++ sprawia mi coraz więcej radości. Język ten znacznie lepiej wspiera teraz projektowanie i programowanie, a nowe techniki ułatwiają stosowanie go.”.
Kontrast jest uderzający.