Чем живет сегодня язык программирования Java и какие тренды определяют путь в профессии для украинского Java-разработчика? Как влиться в сообщество программистов и стать полноценным участником профессиональной тусовки? Об этом рассказывает Андрей Родионов, ведущий специалист по Java и лидер Java User Group UA.
Андрей, как случилось, что связали себя именно с Java?
Все началось во времена студенчества, в Физико-техническом институте НТУУ «КПИ» (ФТИ). Тогда я еще программировал на языке C# под платформу .NET. Первое знакомство с Java произошло, когда одногруппник пригласил меня на профильную конференцию в рамках Sun Tech Days от Sun Microsystems, и я пошел просто за компанию. Тогда же заочно познакомился с Simon Ritter, которого через несколько лет уже пригласил в качестве спикера на JavaDay Kyiv.
Через некоторое время компания Sun начала открывать позиции Sun Campus Ambassador при университетах для популяризации своих продуктов в студенческом сообществе. Мне предложили попробовать себя в роли такого представителя. Основными среди продвигаемых разработок были ОС OpenSolaris и язык Java. Поскольку основная активность по Java в Украине на тот момент была сосредоточена вокруг комьюнити JUG UA, сразу я не углублялся в эту технологию.
После покупки Sun Microsystems компанией Oracle и ее решений, система OpenSolaris постепенно отошла на второй план. Киевское сообщество Java на тот момент существенно утратило в активности, и мне предложили, благодаря опыту, полученному в Sun Microsystems, его возглавить. Так в 2010-м году я присоединился к нашему Java-комьюнити и с тех пор организовываю его деятельность, параллельно являясь сотрудником ФТИ (доцент кафедры информационной безопасности) и инструктором EPAM Systems.
Каковы основные цели и задачи сообщества Java User Group UA? Какие можно отметить достижения?
Комьюнити JUG UA начало свою деятельность в 2004 году как сообщество Java-разработчиков КПИ. Наша базовая активность – периодические встречи, посвященные вопросам освоения новых инструментов и технологий. Проводить презентации на встречах могут как сами участники сообщества, так и приглашенные спикеры. Также мы практикуем встречи небольшими группами в 10-15 человек для практического освоения технологий (к примеру, Java 8 Stream API), сбора фидбеков или совместного решения программистских задачек.
В 2015-м году мы присоединились к глобальной программе Adopt-a-JSR. Новые версии Java EE-спецификации включают предложения, которые могут выдвигать как специалисты Oracle, ведущие разработку языка, так и сообщества программистов по всему миру. В прошлом году участники нашего комьюнити включились в эту деятельность, и результаты их работы должны появиться либо в Java версии 9, либо в Java Enterprise Edition (Java EE) версии 8, которые выйдут через год-полтора. В спецификации, которая есть в открытом доступе и уже является стандартом, указана благодарность Елене Сироте и Олегу Цаль-Цалько, которые непосредственно вели разработку, а также сообществу JUG UA, которое было активно вовлечено в процесс. Кроме того Олег и Лена были номинированы в прошлом году на премию JCP Annual Awards на крупнейшей конференции JavaOne в США.
Еще одно направление деятельности JUG UA, которое находится в моем ведении – это серия конференций JavaDay.
К JavaDay мы еще вернемся. И все-таки, JUG UA – это киевское или общеукраинское комьюнити?
Так исторически сложилось, что JUG – это локальные группы, организуемые энтузиастами. Деятельность нашей группы и все встречи сосредоточены в Киеве – так удобнее для всех участников. Помимо Киева в Украине существует активное и давнее комьюнити во Львове, есть JUG и в Одессе. Мы между собой коммуницируем, делимся предложениями, идеями, спикерами. Очень хочется, чтобы и в других наших городах возникали подобные сообщества.
Насколько востребован язык Java в мире? Какие индустрии его используют, какие известные продукты на нем написаны?
Основные сферы использования – это банковские системы и электронная коммерция. На Java, как правило, пишется их серверная часть, бэк-энд. Системы, созданные с помощью Java, используются в NASDAQ, Нью-Йоркской фондовой бирже, в недрах компании Google. Из известных продуктов «на слуху» можно отметить Hadoop для работы с Big Data.
Одно из главных преимуществ Java – это JVM-платформа. Java компилируется в унифицированый и переносимый байт-код. При запуске приложения байт-код интерпретируется виртуальной Java-машиной (JVM), работающей на конкретной платформе (Windows-десктоп, Linux-сервер, мобильное устройство и т. п.). Такая архитектура позволяет выдумывать какие угодно языки: если они могут компилироваться в такой же байт-код, виртуальная машина его выполнит. Ей, по большому счету, все равно, на чем первоначально было написано приложение. Таким образом, можно программировать и на Scala, Groovy, Clojure – языках, которые работают поверх JVM и имеют ряд преимуществ, в том числе в удобстве написания, по сравнению с самим языком Java. Из наиболее ярких примеров такого симбиоза – Twitter, который написан на Scala и использует для запуска ту же виртуальную Java-машину.
Вместе с тем Java – это технология не для быстрого запуска стартапов или создания прототипов. Этот язык раскрывается полностью, когда есть четкое понимание того, что мы хотим разрабатывать, и время на реализацию этой задачи. Там, где нужен очень быстрый результат с минимальными усилиями, удобство и скорость написания на Java отстают от того же Python, даже частично от C# .NET. Почему так происходит? Основной мотив, который был заложен в язык при создании и которого стараются придерживаться специалисты, развивающие технологию сегодня – обеспечить невысокий порог вхождения по сравнению с С/С++. Код на Java может выглядеть несколько избыточным, но при этом остается поддерживаемым и понятным следующим поколениям разработчиков.
Для непосвященных, джавист – это своего рода элитный персонаж в среде разработчиков?
Местами и такое встречается 🙂 На Java можно писать довольно большой спектр приложений, включая низкоуровневые фреймворки. Можно оптимизировать приложения так, чтобы они выжимали из сервера максимум. Если специализируешься на вопросах производительности, приходится опускаться чуть ли не до архитектуры процессора. В этом случае часто требуется и знание языка С, поскольку сам Java (а точнее JVM) написан на С/C++. Основная же масса специалистов по Java занимается enterprise-разработкой с использованием фреймворков Spring, Hibernate и в меньшей степени Java EE. Для эффективной работы требуется знание большого количества библиотек и фреймворков. Современные тенденции требуют от джависта понимания разных языков програмирования и многих смежных технологий.
Кто такой украинский Java-разработчик и чем он отличается от западного?
Поговаривают, что на Западе не очень много людей хотят идти в Java-разработку, и главная причина — «Java is not sexy». Зарплаты у разработчиков там не столь разнятся в зависимости от языка, поэтому гораздо привлекательнее писать на модных Python, Go, том же JavaScript, чем немного в старомодном стиле программировать на Java. У нас в Украине такой проблемы не наблюдается, в сообществе много как молодежи, так и опытных senior-программистов. Рынок испытывает массовую потребность в Java-разработчиках, сейчас они находятся в топе по зарплатам.
Как можно попасть в Java-разработку?
Стоит начать с самостоятельного изучения книг, прохождения курсов, либо внутренних тренинг-программ различных компаний, которые предлагают стажировку. Дальнейший путь – позиция стажера и продвижение вверх по карьерной лестнице. Основная масса начинающих джавистов – студенты программистских либо технических специальностей, хорошо знакомые с основами программирования. Дело в том, что Java – это классический пример объектно-ориентированного языка программирования (ООП) с давней историей, его часто приводят в примерах по ООП, шаблонам проектирования. Поэтому совсем без опыта программирования его освоить будет очень непросто.
Отличная тактика для начинающего – пройти путь, начиная с Java Core (синтаксис языка, стнадартные структуры данных и особенности поведения программы), далее разобраться в структуре виртуальной Java-машины, чтобы получить понимание происходящего, и лишь затем изучать соответствующие фреймворки. К сожалению, многие стараются сразу освоить модный фреймворк и что-то на нем писать. По опыту, даже если удается создать приложение (в том числе и для веб), в какой-то момент можно столкнуться с тем, что оно работает недостаточно производительно, потому что были использованы не те структуры данных, не продуманы моменты, связанные с многопоточностью или многопользовательская модель. Чтобы исправить эти недочеты, все равно приходится возвращаться к Java Core и его таки изучать.
С чего начинает Java-разработчик и куда он может расти?
В Java всегда есть куда стремиться. В идеале программист начинает с изучения базового синтаксиса языка и прочтения 2-3 классических книг наподобие «Философия Java» Брюса Эккеля, «Core Java» Хорстманна, «Effective Java» Джошуа Блоха, изучения паттернов и шаблонов проектирования. С этим бекграундом можно остаться в Java Core и дальше, к примеру, развиваться в направлении performance ENGINEer, становясь специалистом по оптимизации приложений. Либо развиваться дальше в сторону enterprise-разработчика, в основном ориентируясь на бэк-энд разработку. Также сейчас популярно направление построения распределенных систем (distributed systems) – в качестве примеров можно привести БД Cassandra, IMDG-систему (In-Memory Data Grid) Hazelcast, которые написаны на Java и поддерживают распределенное управление и хранение данных.
Направление Big Data сегодня также можно рассматривать как перспективное для роста Java-разработчика. И, наконец, верхняя ступень – Solution Architect, специалист, который знает, как и какие технологии между собой соединить для эффективного решения поставленных задач. Тут стоит заметить, что Solution Architect может вырасти из Java Developer, но Solution Architect не должен быть ограничен Java языком, платформой или Java технологиями
Существует ли потолок в развитии Java-разработчика? Когда становится скучно?
В любом языке всегда можно найти чем себя занять. Одна из реальных историй – Java-разработчики из банковской среды. Выполняя рутинные операции, они пошли по пути их автоматизации и в результате создали фреймворки и платформы, которые стали их собственными успешными продуктами. Вывод – если вам становится скучно, вы делаете одну и ту же работу, подумайте — если она настолько однообразна, нельзя ли поручить ее компьютеру? Главное – всегда смотреть по сторонам и понимать, куда можно свои навыки применить.
Насколько Java подходит для смены специализации, если уже работаешь в IT-индустрии?
Когда я «перепрыгивал» с C# на Java, это было сделать довольно легко, так как языки на тот момент были достаточно близки. Мне кажется, на Java нетрудно перейти с любого языка, имея опыт в качестве разработчика. Не-программисту из индустрии, например QA, войти в Java-разработку будет гораздо сложнее. Это потребует знаний и понимания алгоритмов и структур данных (это общий фундамент для всех языков и технологий), знания БД, особенностей работы протокола HTTP, работы распределенных систем и т. п. В целом синтаксис у Java достаточно простой. После его освоения следует изучение особенностей платформы и ряда фреймворков.
Не случится ли так, что в Java программиста заинтересует только высокая зарплата?
В первую очередь Java – это интересные задачи. Почему стартап лучше начинать на Python, а в случае успешного развития переписывать его на Java? Другой язык и виртуальная машина не способны достичь той производительности, которую дает JVM. Но чтобы полностью задействовать ее потенциал, необходимо углубляться в технические моменты и решать инженерные задачи.
Безусловно, на рынке есть и масса тривиальных проектов, но когда речь заходит о Big Data, системах для high-frequency trading, задачи возникают весьма интересные и нестандартные. Java однозначно выигрывает там, где важна производительность в случае одновременного доступа большого количества пользователей, как в случае Сyber Monday (онлайн Black Friday). В отдельных случаях Java-решения вполне могут соперничать с нативными приложениями, написанными на С, требуя гораздо меньшего времени для разработки.
Тем не менее, продукты на базе Java часто упрекают в невысокой производительности.
Ничего не поделаешь, как я уже говорил, Java – это интерпретируемый язык с байт-кодом. Поэтому всегда существует прослойка в виде JVM, которая берет байт-код и генерирует из него машинный код. В случае приложения, написанного на С, это сразу готовый машинный код. Что может этому противопоставить Java? Если команда выполняется множество раз, виртуальная Java-машина будет стараться ее оптимизировать, сохраняя вычисленное значение для повторного использования. JVM собирает развернутую статистику о выполняемом на ней приложении и благодаря ей производит динамическую оптимизацию машинного кода, который отправляется непосредственно на процессор.
Вернемся к JavaDay. Каковы особенности этого мероприятия и как оно эволюционировало за время проведения?
Конференция JavaDay уже шестой год подряд собирает профессиональную аудиторию уровня middle, senior, архитекторов. Мероприятие не рассчитано на тех, кто только начал изучать язык программирования, докладов начального уровня у нас не очень много. Первый JavaDay собрал около 120 участников, проводился в один поток. А вот юбилейная, 5-я по счету конференция в 2015 году собрала уже около 800 специалистов, программа была на 5 потоков, а само мероприятие длилось два дня.
Топ-спикеры конференции – специалисты, широко известные в мире Java-разработки, авторы фреймворков, оригинальных решений, со значительным опытом в использовании определенной технологии. Основная мотивация докладов – передача практического опыта, информации о новинках, а также новых идей разработчикам. Помимо докладов в рамках конференции проводятся мастер-классы для аудитории меньшего формата. Используем и формат дискуссионной панели, на которой специалисты по определенной технологии или фреймворку проводят живое общение с залом, отвечают на вопросы. Также до или после JavaDay мы проводим отдельный от конференции тренинг по определенной технологии для ограниченной аудитории длительностью 1-2 дня с участием приезжего спикера.
JavaDay привлекает, в первую очередь, именами и презентациями?
Основная и самая полезная активность для всех участников конференции JavaDay – не пассивное прослушивание докладов, которые через некоторое время появятся в свободном доступе, а общение с гуру индустрии, коллегами, представителями рынка, потенциальными работодателями. На сегодня это одно из крупнейших профильный мероприятий в Украине, где собирается профессиональная тусовка для общения, поиска новых контактов и идей, обмена опытом и решениями.
Организация JavaDay производится только силами JUG UA?
Сегодня обязанности организаторов JavaDay распределены следующим образом – я занимаюсь программой конференции, а компании-партнеры обеспечивают спонсорскую поддержку и организационную составляющую через event-агентство. Раньше мы справлялись вдвоем с коллегой (Еленой Сиротой), но постоянный рост интереса к мероприятию и увеличение количества участников усложнили эту задачу в разы.
Почему в JavaDay не участвует Oracle?
Компания значительно сократила свое присутствие на европейских мероприятиях и поддерживает только крупные глобальные конференции наподобие европейских Devoxx и своих JavaOne. Частично это можно объяснить тем, что, в отличие от СУБД, язык Java не приносит компании прямых доходов. Поэтому локальные мероприятия сегодня проводятся силами сообществ программистов и заинтересованных спонсоров, участников местного рынка разработки ПО.
Не отразится ли такое отношение компании-владельца на будущем Java?
У Java SE достаточно радужные перспективы. В следующем году появится Java 9, также имеются спецификации и планы на Java 10. Что касается Enterprise Edition, то здесь не все так однозначно. В конце прошлого года Oracle полностью свернула разработку Java EE, собираясь реализовать ее в закрытом виде на внутренней платформе Oracle Cloud, чтобы обеспечить возможность монетизации системы. Но согласно последней информации, сейчас ситуация изменилась, Oracle отказалась от этой идеи и собирается вернуть всех инженеров и продолжить разработку Java EE. Скорее всего, возникли риски, что мало кто будет пользоваться внутренней платформой, и этот ход нанесет урон как репутации Oracle, так и Java в целом. В любом случае, наиболее достоверную информацию по данной ситуации все участники глобального Java-комьюнити ожидают услышать от представителей Oracle на конференции JavaOne в конце сентября.
У нас же на конференции в Киеве будет Реза Рахман (бывший сотрудник Oracle и евангелист Java EE), который возглавил так называемую группу Java EE Guardians, призванную защитить от сворачивания разработку Java EE. Думаю от него можно будет получить наиболее актуальную информацию касательно планов Oracle по данной платформе.
Что хочется пожелать всем будущим и настоящим джавистам?
Будущим – читайте книжки по Java. Основная проблема, которую я встречаю, работая с молодежью – не читают книг. Читайте классические книги и внимательно вникайте в то, что вы читаете. Базовых знаний алгоритмов и структур данных никто не отменял, рано или поздно они пригодятся. А всем состоявшимся разработчикам – до встречи на JavaDay 2016 в Харькове и Киеве уже совсем скоро!