пятница, 26 сентября 2008 г.

книга "My Job Went to India: 52 Ways to Save Your Job"


Cейчас я читаю замечательную книгу, и чем дальше, тем веселее. На обложке изображен программист c обьявлением "Кодирую за еду" в руках :) Цитирую текст который меня повеселил:

How would you write a program, in pure Java, that would make the Java Virtual
Machine crash? Dead silence. Hello?
I’m sorry. I’m not getting you. Could you repeat the question, please? The voice
sounded desperate. I knew from experience that repeating the question
wasn’t going to help. So, I repeated the question, slowly and more loudly.
How would you write a program, in pure Java, that would cause the Java Virtual
Machine to crash?
Uh...I’m sorry. I’ve never done this before.
I’m sure you haven’t. How about this question: how would you write a program
that would NOT cause the JVM to crash? I was looking for really good Java
programmers. To start the interview, I asked this person (and all the others
I had interviewed that week) to rate himself on a scale of one to ten. He
said nine. I’m expecting a star here. If this guy rates himself so high, why can’t
he think of a single abusive programming trick that would cause a JVM to crash?

И таких ярких моментов в книге много :)

Книга о том, как выжить программистам в США в условиях когда все больше заказов уходит на аутсорсинг и количество рабочих мест сокращается. Лучшая из книг прочитанных мной в этом году. Автор анализирует сильные и слабые стороны американских программистов и их конкурентов в Индии и дает советы как правильно построить карьеру. Во многом его мысли совпадают с моими, например, он рекомендует изучать несколько языков программирования чтобы стать универсальным специалистом способным принимать архитектурные решения. Рекомендую почитать. Книга написана живым языком , автор обладает отличным чувством юмора, в то же время пишет о серьезных вещах. Читается легко.

вторник, 16 сентября 2008 г.

Почему я не люблю JSTL

Вступление

В далекое время в далекой Галактике мы занимались разработкой веб приложения на java, другими словами добавляли новую функциональность и рефакторили код. Когда продукт поступил на аутсорсинг в Украину, он состоял из сотен JSP, в которых HTML был смешан с логикой в виде скриплетов. Иногда встречались JSP размером в тысячи строк. Постепенно мы переводили это безобразие на Spring MVC . Мы выделяли логику из скриплетов в контроллеры. Также было принято решение отказаться от скриплетов и перейти на чистый JSTL.

Недостатки JSTL
  • Плохая читабельность
И вот в один прекрасный день я открываю страницу которая была отрефакторена со скриплетов на JSTL, и вдруг понимаю что ничего не понимаю. JSTL оказался абсолютно не читабельным. На странице были вложенные ветвления и и объявления переменных . Несмотря на то, что уровень вложенности конструкций ветвления был не больше двух, когда я смотрел на страницу то не мог понять как она работает.
Это случилось потому что теги XML не могут сравниться в наглядности с языком программирования для описания алгоритма. XML создан для автоматического обмена данными между компьютерными системами, а не для чтения людьми. Конечно, для кода на любом языке можно построить эквивалентное описание в XML. Создатели JSTL создали XML теги для операторов ветвления для объявления переменных, но при этом читабельность кода стала хуже.
  • Слабая типизация
После замены скриплетов на JSTL появились баги вызванные ошибками в EL выражениях JSP страниц. При написании этой статьи я использовал NetBeans. Оказалось что даже когда опция"Test compile JSP page during builds" включена, то все равно не отлавливаются обращения к несуществующим property бинов в EL выражениях.
Отказавшись от скриплетов на java с их строгой типизацией в пользу cвязки EL+JSTL мы утратили проверку типов на этапе компиляции на на уровне view.

Пример

Рассмотрим страницу которая отображает информацию о пользователе и его правах доступа. Данные о пользователе инкапсулирует класс web.User. Страница отображает имя пользователя и список его прав. Права доступа разделяются запятой.





Вот как это реализуется на скриплетах:


А это то же самое на JSTL:


У меня на написание варианта со скриплетами ушло 10 минут, на JSTL я потратил в два раза больше. Я считаю что код на JSTL выглядит как будто оригинальный пример на скриплетах прогнали через обфускатор. Делает то же самое, но менее читабельный.

Поэтому я считаю что если мы используем JSP, то вместо тегов JSTL и EL лучше использовать скриплеты. Код будет более читабельным и больше ошибок выявим на этапе компиляции при условии что мы не злоупотребляем наворачиванием логики в скриплетах. Если сильно не нравятся скриплеты, то вместо JSTL лучше использовать Velocity или FreeMarker.