В четвъртък попаднах на интересна online книжарница. В нея доставката е безплатна, а има и доста добри отстъпки от цените на книгите. Лъчо се противопостави на правилото, гласящо : “Една жена е готова да купи нещо за 2 лева ако струва 4 лв. дори и да не и трябва - защото е с намаление. А един мъж е готов да даде и 20 лв. за нещо, което струва 2 лв. защото му трябва на секундата.” Той си хареса книгата “Java за мрежови приложения / Професионално” на Дик Стефлик и Прашант Сридхаран, ИнфоДАР, 2001 г. (ISBN 954-761-018-X, ISBN на английското издание 0-13-084466-7). Книгата има корична цена (с включено СД) 19 лв., а в тази книжарница беше на промоция - 4.94 лв.! И така в петък книгата пристигна - масивно томче, разглеждащо JDBC, RMI, IDL, Java Beans, Jini, JMX/JMAP, JNDI и др. Вечерта се излегнах и реших да попрочета някоя и друга страница преди заспиване (и без това бях в Пловдив, където компютър нямам).
Книгата започваше доста обещаващо - първата глава носи името “Java за напреднали”. На читателите е обяснено, че ако не познават Java то е добре да вземат някоя по-подходяща за тях книга. На лицето ми изгря краткотрайна усмивка. Казвам краткотрайна, понеже като започна главата, първото четиво за “напреднали” беше какво е това клас и какви членове може да има той - променливи, методи, що е то конструктор. Казах си : “Ако това е advanced Java, то не искам да знам какво е basic Java според критериите на този преподавател!”. Естествено не минава и без отричане на C++ - нямало нужда от толкова дебъгване както в C++. Щом казват… I/O-то на Java-та просто блика от суперлативи. И все пак това не го разбрах :
“Ако внесете вашите C++ I/O процедури в Java ще загубите толкова функционалност, колкото ако пренесете обектно-ориентираните техники за проектиране в Java от C++.”
Тук си припомних, че Дик Стефлик (преподаващ вече 25 години в Университета Бингамтън - Държавния университет на Ню Йорк) е написал второто издание на тази книга след като се обадил да пита в издателството кога ще излиза и те му обяснили - авторът на първото издание вече не работел в Sun, а в Microsoft, и нямало да пише повече по тази тема. Та се чудя от него ли са тези красоти, от първото издание ли, или от превода? Със сигурност от превода обаче идва израз като :
“Създаването на нови обекти става чрез използването на новата операция.”
Явно някой така е разбрал що е то “the new operator”.
Между другото навсякъде е преведено по този начин!
В един момент започна да ми се набива на очи и смесването на термините клас и обект като например тук:
“Базовият клас е особен тип обект, който формира основата на други класове.”
По-нататък авторите ни убеждават, че AWT е възникнала понеже Netscape не били съгласни с различния “вид и усещане” на графичните компоненти - а това единствено предлагала съществуващата до момента библиотека Swing. До колкото знам Swing е по-новата библиотека, така че няма ка да е причина за възникването на AWT!
Стигнах и до нишките. Въвеждат се двата начина за създаване на нишки - чрез наследяване на Thread; чрез имплементиране на интерфейса Runnable и използване на конструктора Thread(Runnable). Според автора наследяването на Thread е метод, който ни
“връща обратно в дните на структурното програмиране”
- е това искам да ми го обясни по-подробно! Да каже подобно нещо точно за един от трите пилона, на който се гради идеята на обектно-ориентираното програмиране!
Освен това установих, че грешките в кода се увеличават с броя на страниците и след проверка на коментарите за книгата в Amazon установих, че и в английското издание си присъстват - кодът е ужасно грозно табулиран (трудно четим), с “;” след дефиницията на класа както и след дефиницията на последния метод в класа (?!).
Не мога да не цитирам обяснението за това що е интерпретация на кода :
“Спомнете си, че Java е интерпретиран език. Това означава, че кодът, който разработвате, се компилира в байтов код само наполовина. Байтовият код се транслира след това от локалната виртуална машина в местен код. Накрая, този местен код се стартира на вашата машина.”
Реших все пак да погледна и нататък - от любопитство. Така или иначе бях минала вече в състоянието “Откриване на бисери”
Та отгърнах глава трета, озаглавена “Java сокети и URL” - и бисерите наистина не секнаха
Цитирам :
“В сърцевината на всички TCP и UDP комуникации е виртуалното устройство, наречено сокет или порт…. в TCP/IP определени сокети са посветени на специфичните договорени услуги. Ако трябва да погледнем на пакетно ниво, ще видим, че сокетът се идентифицира от 16-битово число, от където излиза, че разполагаме с около 65,000 възможни сокета. Първите 1024 сокета са посветени на специфични договорени услуги и се наричат добре познати портове.”
Е, явно за авторите няма разлика между сокет и порт. Пък и защо да си усложняваме живота и да включваме и IP адреса в сокета, като порта е достатъчен?
Коя ли е тая машина, на която на един порт се вързват едновременно няколко различни отдалечени машини, че да ни трябва и IP-то да разграничим сокетите един от друг?
Честно казано не смятам да хабя повече време да разглеждам тази книга и съветвам и вас дори и за тези пари да не си я купувате! Освен ако не искате да се сдобиете с колекция бисери разбира се - за това е много подходяща. Аз лично обаче не смятам (въпреки, че сред идните теми има интересни такива) да рискувам да бъда излъгана за елементарни неща - което забелязвам е практика в първите глави. Сега се сетих и за нещо друго : авторът (явно преподавателят) обяснява, че DNS е един от термините, който всеки чува още при първата си “среща” с Интернет. Но е също така един от термините, който разбира доста късно. Самият той признава, че си е поставил за цел да разбере какво е DNS когато започнал да води лекции за Мрежово програмиране и един студент го питал как се прави връзката между “десетичната версия с точки” с “IP думата с точки” … Може би това обяснява много неща!