Java: мифы, реалии и перспективы для разработки приложений

Java: Myths, Realities and Prospects

По версии TIOBE, Java стала языком программирования 2015 года, обойдя в гонке С, С++ и ещё 17 языков-номинантов, и по сей день не теряет позицию. Этот факт весьма занятен и интересен, учитывая 20-летний возраст языка и устоявшиеся стереотипы про него. О том, что такое Java, чем язык хорош, о мифах и реальности я пообщался с Александром Михальченко, Java-программистом в Anadea.

Привет, Саша!
Здравствуй.

По версии TIOBE индекса, Java получила звание "Языка Программирования 2015 года". Вот собственно, хотелось бы узнать, что это за зверь такой, Java?
Java - это больше платформа, нежели язык. В последнее время появляются языки, работающие в JVM, но по синтаксису отличающиеся от Java. Основное применение - это серверная часть приложений, веб- и не очень веб-приложений, всякие корпоративные системы - что-то крупное, тяжеловесное.

То есть, все банковские системы мира сидят на Java?
Не все, но многие. Если нужно разработать что-то большое, то выбирают Java, потому что во-первых, она быстрая (вопреки мифам, которые до сих пор ходят среди незнающих людей), сравнимая по производительности с С++, но при этом, стоимость разработки значительно меньше - это во-вторых. Java заточена под всякие энтерпрайзные штуки, и компания Sun, а позже и Oracle делали на это ставку, на серверные технологии и всё такое. В этом направлении они сделали очень многое, поэтому когда речь идёт о крупных системах вроде банковских, выбор падает на Java.

А может быть так, что Java выбирают ещё и потому, что она безопаснее чем, скажем, Ruby?
Не буду говорить про Ruby, но что касается Java, то безопасность данных - это один из ключевых её аспектов. Там хватает настроек, позволяющих ограничить выполнение определённого кода. Когда выходит очередная версия Java, то половина последующих патчей - это security-patch'и. Если какая-то компания предпочитает старую версию (например, седьмую) платформы новой (восьмой), а та уже ушла из поддержки, всегда есть возможность заказать платную поддержку у Oracle, и тогда они сделают вышедшие на 8-ю версию security-patch'и для 7-ой.

Что насчёт небольших проектов? Подойдёт ли им Java?
Это напрямую зависит от сложности бизнес-логики этих проектов. К примеру, это может быть трехстраничный сайтик, но этими тремя страницами могут быть какие-то архисложные отчёты, которые задействуют кучу данных. А если мы говорим о сайтах-визитках, то здесь использовать Java, конечно же, не имеет смысла. Стоимость серверов Java выше, чем PHP, поскольку Java требовательна к ресурсам. Она не медленная, но прожорливая - сколько памяти ей дашь, столько она и "скушает".

Сколько Java не корми, всё равно в RAM смотрит?
Именно! (смеётся)

Я читал, что к плюсам Java относится мультиплатформенность?
Да. Изначально задумывалась эдакая ультимативная кроссплатформенность. То есть написанный раз код можно было бы, по первоначальной задумке, запустить где угодно - на телефоне, десктопе, тостере… но в итоге так красиво не получилось из-за производителей виртуальных машин. Код-то мультиплатформенный, переносится, но вот некий производитель смартфонов взял и не включил какую-то фичу (я говорю не о современных устройствах, а про образцы 2005 года, а-ля телефоны на Symbian, Motorola со своей операционной системой, которые поддерживали Java). Поэтому люди, тогда писавшие игрушки и приложения, очень мучились с портированием даже в пределах мобильной платформы: запустить игру на Motorola и на Nokia - две разные задачи.

Что касается современных мобильных приложений - все Android-приложения, это дети Java?
Не все, но большинство. Конечно, есть возможность разработки нативных приложений на С++, но опять же - на Java получится дешевле. Ну и поддержки куда больше - как от самого Google, производителя операционной системы, так и от community Java. Кое-что проще разрабатывать. Игры со сложной 3D-графикой пишутся всё-таки на С++, т.к. Java не даст такой же производительности в этих вещах.

Кстати про игры - я слышал, нашумевший в своё время Minecraft полностью написан на Java?
Отчасти. Графика, которая там отрисовывается - это заслуга OpenGL. А это - нативный код. У Java есть возможность взять любое нативное приложение, написанное, к примеру, на С++, и вызвать из него определённые функции. Через мостик, соединяющий Java с нативными приложениями, и делается обращение к графической подсистеме. Т.е. все данные про мир игры и игровая механика написаны на Java, но графические вычисления отправляются в OpenGL.

Приятным моментом является то, что проекты вроде Minecraft способствуют популярности платформы, потому что молодёжь пробует создавать свои модификации к игре, пишутся которые на Java.

Java существует уже 21 год. Она не растеряла своей актуальности?
Взрослая платформа - это только плюс, потому что за это время сформировалась огромная инфраструктура и коммьюнити. Есть библиотеки и стандартные решения практически на всё. То есть, программисту остаётся только связать все решения воедино, сделав из этого приложение. Все библиотеки можно самому совершенствовать, если необходимо, а также использовать в коммерческих целях абсолютно бесплатно. Так что нет, актуальности не растеряла.

Есть мнение, что приложения, написанные на Java, не отличаются красивым дизайном. Правда или миф?
Это не касается веб-приложений, потому как такое приложение можно завернуть в какую угодно обёртку. Если мы говорим о нативных приложениях, то да, с этим у Java не очень сложилось. С этим связана одна история. На дебютной демонстрации Java - напоминаю, на дворе был 95 год - в браузере на веб-страничке крутился глобус. Тогда эти красивости не были тепло приняты из-за слишком медленного интернета. Посмотрев на это, люди сказали, мол, зачем нам этот крутящийся глобус, если и так нужно качать виртуальную машину весом в 100 мб, да ещё и сам апплет отдельно скачивать…

Апплеты на десктопах так и не прижились - они попали не в свою эпоху. В те времена компьютеры были недостаточно быстрыми, чтобы работать с таким Java-приложением, поэтому все красивости урезали и Sun решили сделать упор на серверной технологии и функциональности.

Ну и упрощённый дизайн конечно же связан с кроссплатформенностью, потому как сложно сделать так, чтобы под каждую платформу приложение выглядело как родное. Если задаться целью, то можно кастомизировать компоненты так, чтобы приложение имело нативный вид.

Есть такая вещь, как Look and Feel - у платформы, на которой работает VM, можно запросить набор стилей и компонентов, как они должны выглядеть на конкретной операционной системе. Всё снова зависит от производителей виртуальных машин, плюс нужно учитывать стремительное развитие дизайна операционных систем. Взять ту же Windows - между "семёркой" и "восьмёркой" ведь просто пропасть! За всеми дизайнерскими новшествами конечно же не поспеешь, но системный Look and Feel делает всё более-менее похожим.

В последнее время я наблюдаю за JavaFX. Когда-то эту технологию забросили за ненадобностью, но недавно за неё снова взялись и теперь активно возрождают. JavaFX позволяет писать десктопное приложение, но стилизовать его под веб-приложение. Точно также в игру вступает CSS, где можно указать, какого цвета будет такая-то кнопочка, с такими-то краями, задать расположение и так далее. С этой технологией можно делать приложения, которые будут выглядеть более нативно. Производительность устройств это уже позволяет - современные смартфоны давно обогнали в мощности компьютеры 1995 года.

На этом мои вопросы заканчиваются. Благодарю за интервью!
Обращайся.

Что ж, неудивительно, что Java победила в гонке с 19-ю другими языками. Взрослая платформа, для которой уже найдены практически все стандартные решения, с огромным сообществом, заточенная под серверные технологии, крупные проекты и мультиплатформенность, совместимая с нативными приложениями - разве это не заманчиво? Добавляет привлекательности и всё растущая популярность платформы благодаря Android-приложениям и проектам вроде Minecraft - глядя на такие результаты, можно с уверенностью говорить, что у Java есть все шансы ещё много лет оставаться языком программирования года.

Связаться