Мифы о Java
Читаю статью «Top Reasons Why People Think Java Un-Cool — Debunked» (eng) — «Наиболее популярные причины, по которым люди думают, что Java — фигня. Разоблачение». Совсем кратко, списком, переведу:
- Java содержит значительно меньше неожиданностей. Тут нечем удивить.
- Язык Java неоправданно приобрёл славу медленного языка.
- Библиотека Swing умножила дурную славу Java. Она слишком сложна для изучения.
- Java строго типизирован. Компилятор чересчур назойлив в своём стремлении строго следовать типам.
- Для Java не существует хорошего IDE, сравнимого с MS Visual Studio.
- Java — популярный язык. Его широкое использование лишает его элитарности.
- На Java вы не сможете написать драйвер устройства или игру вроде Doom III.
Смысл статьи — рассматриваемые недостатки, либо устарели, либо не являются недостатками — поскольку сложность изучения или отсутствие неожиданностей проблемой не является. Оставлю в стороне всё сказанное в статье. Мне интересно почему не рассматривается проблема с переносимостью. Конечно, Java задуман как переносимый язык. Это (вкупе с декларируемой безопасностью) считается одним из гланых достоинств Java.
Как это всегда бывает — стандарт Java, как идеальный газ — существует только в умах его создаетелей. Мне сейчас ближе всего J2ME — Java для мобильных устройств. Теперь, подержав в руках Siemens S55 и Nokia 6230 я знаю, что мидлеты (программы на J2ME) бывают не переносимыми не только в переделах разных платформ (Siemens и Nokia), но и в пределах разных моделей. Кажется, в Siemens особой проблемы с этим нет, но в Nokia я сплошь и рядом сталкиваюсь с тем, что мидлет работает только на определённой модели.
Правда заключается в том, что на Java можно писать переносимые приложения. Но это не значит, что нужное вам приложение можно написать переносимым. Простой пример — Microreader (мидлет для чтения книг). Прекрасно идёт на моём Siemens S55, поскольку у Siemens есть собственное API для чтения файлов из файловой системы, но не пойдём на моей Nokia 6230, поскольку там нет не только Siemens File API, но и недавно принятого стандарта J2ME File Connect.
В итоге, есть переносимые мидлеты для чтения книг. Книгу приходится упаковывать внутрь — единственный универсальный путь, но это очень неудобно. Для Siemens же существует более удобный, но непереносимый мидлет позволяющий хранить книги отдельно от мидлета.
Другой пример — разрешение экрана в разных моделях разное. Разработчики редко заморачиваются с масштабированием. Не думаю, что в J2ME есть какое-то автомасштабирование для растра под размер экрана, иначе мне не приходилось бы постоянно сталкиваться с тем, что изображение не помещается на экране или, напротив, занимает лишь небольшую часть экрана. Я не считаю, что переносимое приложение может не поместиться на экране — иначе оно теряет часть своего функционала. Иногда — весьма ощутимую, существенную часть.