Java as the language of Web: evolution or rebranding

Коллеги, меня зовут Анатолий Филин, я представляю и руковожу компанией «Грамант», которая занимается разработкой серверных приложений. И, следуя совету предыдущего докладчика, мы стараемся делать это, так чтобы было удобно клиентам, используя разнообразные технологии. Но тем не менее, команда растет из языка Java, хотя команда развивается, и в последнее время мы используем и другие технологии.

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

Java_2

Первоначально я планировал осветить три тенденции:

1. Новые языки на базе JVM

2. Java как язык облачных вычислений

3. Java как мобильная платформа.

 

Но оказалось в результате, что это довольно много, и тогда пришлось бы делать не 20-минутный, а часовой доклад, и я оставил, на мой взгляд, самое интересное, а именно – расскажу немного про языки на базе виртуальной машины Java (JVM), потому что это самый существенный тренд в развитии языка, как выясняется. Мы поговорим об эволюции веба в сторону усложнения, об упрощении Java как языка, и о том – как эти две тенденции вдыхают новую жизнь в язык Java.

Собственно, приведу несколько исторических фактов. Первая версия Java была выпущена в 1995 году. То есть, примерно пятнадцать лет назад. Важное событие – 1998 год – это когда Java разделилась на несколько редакций. Редакция серверная (enterprise edition), редакция стандартная, редакция мобильная. На самом деле – есть еще несколько редакций языка Java. В 1998 году был внедрен так называемый Java Community Process. Изначально Java выросла в недрах компании Sun – это тоже важно, она была проприетарным языком. Но Sun отдал Java сообществу разработчиков. С тех пор он развивается и поддерживается совместно компанией Sun и разработчиками по всему миру.

Java_3

Важное событие произошло в 2007 году – была произведена смена лицензии. И Java влилась уже формально в созвездие языков, которые поддерживаются по лицензии GPL, или по похожим opensource лицензиям. Cмысл этой лицензии состоит в том, что большая часть исходников находится в открытом доступе, и менять можно все, что угодно; но все изменения опять же должны быть выданы в открытый доступ, и это стало очень важно для развития языка. Текущая версия языка уже 6-я. И еще одно важное событие – компания Sun была поглощен компанией Oracle.

Теперь, поскольку речь пойдет о языках на базе виртуальной машины, приведу одну geek-овская диаграмму. Я прошу прощения, может быть, это – немного не совсем просто, но – чуть более сложно о сложном. Что происходит на диаграмме? То, что в квадрате – это собственно виртуальная машина Java. Слева – это код на некоем языке высокого уровня, и это изначально был только код на языке Java. Этот код компилируется в байт-коды, это все платформо-независимая часть. И соответственно, речь пойдет о том, что в большом количестве появляются компиляторы в байт-коды для других языков. Это очень важно. И дальше байт-код попадает на платформу, он может компилироваться в native-код, оптимизироваться, происходит Just-in-time optimization , и так далее.

Java_4

 

Теперь поговорим о некоторых стереотипах. Я все пытаюсь рассматривать в контексте разработки для веба, потому что собственно это то, чем мы занимаемся. И действительно иногда нам задают вопрос – почему вы пишете и делаете веб-приложения на Java? Недоумение это вызывает потому что Java – это язык enterprise, то есть, язык корпоративный: писать на нем достаточно сложно, нужно хорошее и серьезное фундаментальное образование. Все это правда. На самом деле, да, это академический язык, например, в большей части технических факультетов США студенты учатся программировать на примере Java.

Java_5

Что тоже важно для разработки веб-приложений – веб приложение должно быть быстро сделано, нужно идти за рынком, нет времени на сложные настройки, конфигурации. Когда начинаешь программировать на Java, нужно только несколько дней сервера настраивать, среду разработки и так далее, есть такой стереотип. Ну и, язык Java, в общем-то, находится в какой нише? В нише корпоративных приложений. Он соревнуется с .NET технологиями, микрософтовскими, в нише корпоративных приложений. На самом деле, они соревнуются c переменным успехом для Java, иногда успешно, иногда не очень. И в связи с этим, действительно наблюдается снижение интереса к языку Java как к языку для разработки веб-приложений.

Java_6

На самом деле мне на качественном уровне хотелось понять, какие фреймворки популярны, а какие – нет. Для этого я посмотрел на разные источники, опросил своих друзей, поскольку долго жил за границей, там по всему миру – кто что думает про Java из разработчиков, попросил их сравнения с другими языками программирования, и так далее. И использовал тоже Google Trends, хотя не очень надежный источник информации, информацию том, какие программисты востребованы. Собственно в Штатах картинка будет примерно такая. Более-менее сбалансированная. Сейчас очень популярен «Ruby on Rails», всегда будет востребован С++, Java и РНР и так далее, они более-менее на равных, хотя, конечно, мода приходит и уходит.

Что происходит у нас? И это на самом деле, в частности, выясняется на различных конференциях. В частности на конференции по высоконагруженной Веб-разработке, я вел какую-то секцию, и спросил людей – кто программирует на каких языках? Поднимите руки. Кто программирует на Java? Я ожидал, что пол-зала руки поднимет – все-таки серверное программирование, высокие нагрузки, а там – 2-3 робкие руки. Еще какие-то руки на С++. А потом я спросил – а кто программирует на PHP? Оказалось, что – практически все (в зале смех).

Java_7

И, собственно, почему такая разная картина у нас и в Штатах – это чисто гипотеза, можно со мной спорить, но взрывообразный рост интернета породил совершенно какую-то невероятную потребность в подготовленных кадрах. У нас еще людей в университетах учат программировать на С++, на Fortrane, я думаю, еще учат, и на Cobolе еще учат. А людей, подготовленных на Java – очень немного, и идет конкуренция и так далее. Их очень сложно найти. И порог входа на РНР гораздо ниже – это легче. Сел и начал программировать, через какое-то время вышел на нормальный уровень производительности.

Однако, что происходит сейчас? Основная идея моего доклада как раз в том, что ситуация меняется. Важно заметить и осознать то, что, оказывается, Java и веб начинают дружить гораздо больше. Это – тенденция буквально одного-двух-трех лет, и связано это, на мой взгляд, с двумя факторами, хотя на самом деле, может быть, и с большим числом факторов. Менее существенный фактор состоит в том, что Google включается в Java-процесс, и начинает поддерживать Java на разных уровнях. И второе, что гораздо более важно – это реализация многочисленных языков и фреймворков на базе виртуальной машины; и этот тренд оказался совершенно существенным. Я слышал выступление Сергея Рыжикова на прошлогодней конференции, и он выдвинул тот тезис, что все идет от разработчиков. Если среда и языки удобны для разработчиков, то туда все подтянется, и они, собственно, станут популярными.

Java_8

Что происходит между Google и Java? Не так много, но кое-что происходит. Из недр Google вышел совершенно замечательный JWT, Google Web Toolkit, который позволяет очень быстро и удобно писать и разрабатывать веб приложения, т.е. просто пишешь на Java, Java компилируется в Ajax, получил фронт-энд приложение. Очень удобно, используются средства визуальной разработки. Ну и, собственно, облачный хостинг Google – Google App Engine. Сначала он запустил поддержку Python, а потом поддержку Java. Там довольно большое число приложений, и это какой-то энтузиазм в ряды разработчиков тоже внесло. На самом деле все это важно, это очень позитивная тенденция, поскольку с Google ассоциируется очень много позитивного в вебе; и то, что он начал поддерживать Java – это важно. А на экране – еще не выпущенный в жизнь продукт Google Wave, который сделан на JWT.

Java_9

А что же происходит между Веб и Java? Смотрим на экран.

Java_10

Слева – это что происходит с Веб, справа – что происходит с Java. Веб усложняется, об этом уже говорили неоднократно, и не только на этой конференции. Сначала в 1990-х годах были статические домашние страницы, потом какая-то динамика пошла, форумы, потом системы стали усложняться, аукционы, порталы, сейчас – социальные сети. Кроме того на все это неотвратимо накладывается необходимость очень сложной разнообразной интеграции. То есть, Веб-приложения дают возможность платить сейчас прямо через интернет, интегрироваться с разными социальными сетями, интегрироваться с корпоративными системами, и так далее. То есть, в web-системах есть достаточно простая часть, а есть, уже небольшая, но сложная часть.

Вместе с тем, Java развивалась параллельно с Вебом в своем ритме. В частности, хотелось бы сказать два слова про мобильные приложения. Если посмотреть на мобильные телефоны, где-то там 30-40% – это Nokia, плюс еще несколько вендоров, 85% из которых примерно, поддерживают Java. Несмотря на iPhone и на всю ту волну, что идет от Apple Store и так далее – на самом деле распространение iOS на мобильных телефонах, насколько я понимаю по последним цифрам, это около 5% по всему миру. У большинства людей в кармане до сих пор лежат телефоны, которые поддерживают Java, и Java их удовлетворяет. Другое дело, что совсем немного людей используют Java-приложения на мобильниках – в этом проблема.

Так вот последнее, web-фреймворки на слайде – это фреймворки на базе JVM. Этот последний фактор является ключевым.

Java_11

Что мы хотим от языка программирования для Веба?

Java_12

Вообще, типичное веб-приложение достаточно простое. Есть база данных, есть фронт-энд, и действительно сейчас довольно много логики перемещается на фронт-энд. Оно работает в браузере, это веб-приложение. И задача серверного программиста собственно – правильно организовать взаимодействие между фронт-эндом и базой данных. Простые языки для этого подходят совершенно идеально. Есть маленькая и очень сложная, как правило, часть, связанная с интеграцией, с финансами, с оплатой, с real-time, то есть, – если подключены какие-либо внешние устройства.

Идеал – это когда «простые вещи» реализуются на «простом» языке. Если привести аналогию из мира фотографии, то для семейных повседневных фотографий лучше использовать «мыльницу», а не профессиональную камеру с длинным объективом.

Для сложных вещей, когда простого языка недостаточно – имеет смысл выбрать мощный, универсальный и гибкий язык. И, соответственно, это и происходит, такая возможность наконец появилась.

На самом деле – таких новых языков довольно много. Но я проиллюстрирую эту историю на примере достаточно популярных языков, которые мы довольно активно используем – Groovy и фреймворка Grails. Как это происходит? Grails – очень простой и удобный язык, он вырос из Ruby-on-Rails, из Smalltalk, из Objective C. Этот язык использует подходы вышеупомянутых фреймворков: очень легкая настройка, низкий порог входа. То есть, на нем не сложнее научиться программировать, чем на РНР.

Но посмотрим на чем он базируется? Стоит он на достаточно мощном фундаменте, всех тех наработок, которые созданы за долгие годы развития языка Java. И, соответственно, в основе всего лежит JVM. Такой язык не один, как это ни удивительно, почти все языки Веба сейчас имеют компиляторы в виртуальную машину, которые переводят программы этих языков в JVM, в байт-коды; в том числе – язык РНР. Это не означает, что РНР-шные программисты ринулись заниматься этим, но на самом деле такая возможность существует; и это очень удобно.

Java_13

Соответственно – один простой и короткий вывод и главная тенденция двух-трех последних лет: Java и web сближаются. Новый имидж языка Java состоит в том, что Java предоставляет возможность простой разработки на мощной платформе.

Java_14

Спасибо большое за внимание!