МАТЕРИАЛ ПОДГОТОВЛЕН В ПАРТНЕРСТВЕ С DEVOXX UKRAINE
ЧТО ЭТО ЗНАЧИТ?
JAVA-РАЗРАБОТЧИКИ
О ПРОФЕССИИ И ПЕРСПЕКТИВАХ ЯЗЫКА
На просторах интернета можно встретить два мнения: Java стареет, и чтобы «войти в IT» и остаться там надолго ценным и грести деньги лопатой, нужно выбрать язык посовременнее. И второе – что Java еще нас всех переживет, а все прочее – хайп.
AIN.UA выяснил у Java-разработчиков и евангелистов этого языка, откуда ноги растут у обеих точек зрения.
МАТЕРИАЛ ПОДГОТОВЛЕН В ПАРТНЕРСТВЕ С DEVOXX UKRAINE
ЧТО ЭТО ЗНАЧИТ?
JAVA-РАЗРАБОТЧИКИ
О ПРОФЕССИИ
И ПЕРСПЕКТИВАХ ЯЗЫКА
На просторах интернета можно встретить два мнения: Java стареет, и чтобы «войти в IT» и остаться там надолго ценным и грести деньги лопатой, нужно выбрать язык посовременнее. И второе – что Java еще нас всех переживет, а все прочее – хайп.
AIN.UA выяснил у Java-разработчиков и евангелистов этого языка, откуда ноги растут у обеих точек зрения.
Этот материал подготовлен журналистами AIN.UA по редакционным стандартам и опубликован при поддержке рекламодателя
Конференция Devoxx Ukraine пройдет в Киеве 23-24 октября. Перед аудиторией в более чем 1000 человек выступит 50 докладчиков со всего мира, темы их лекций коснутся 10 различных направлений. Это одна из лучших тематических конференций о Java в Украине, которая состоится уже 8-й раз подряд.
Как бы Java
не старалась...
Java – это сообщество, зрелый, но все еще растущий язык, огромное количество систем, на нем написанных, вакансии и возможности. Для непродуктовых компаний Java – это выбор №1.
Java как язык не является незаменимым. Другое дело JVM как платформа действительно доминирует.
И это выбор №1 для backend и server-side разработки в силу своей зрелости, переносимости, нереального количества оптимизаций, сделанных за годы, и огромного количества JVM-языков: Java, Groovy, Scala, Kotlin, JRuby, Jython, Closure и других.

Как бы Java не старалась развиваться и улучшаться, более молодые новые языки либо более удобные в использовании, либо привносят новые фичи, которых нет в Java. Так Groovy – динамически типизированный язык, который не ограничен системой типов, как Java, у Scala более мощная система типов, чем у Java, а Closure полностью функциональный язык.

Но то, что Java не в тренде – это неправда. Надо изучать другие языки программирования, это 100%. Это увеличивает компетенцию и сферу применения, расширяет кругозор и понимание концепций языков программирования и, наконец, это просто fun. Я, например, кроме Java в определенной степени знаю Groovy, Scala и Go.
Почему Java
легко учить
За годы существования Java «обросла» классными инструментами для решения почти любых конкретных задач.
Столкнулись с проблемой как программист? Скорее всего, кто-то другой уже решил ее и создал для этого фреймворк или библиотеку.
Ни один другой язык не может похвастать таким широким охватом задач, которые можно решить быстро.
Java есть везде. На этом языке написано огромное количество серверных приложений корпоративного уровня. «Под капотом» у очень многих компаний, больших и средних, всех банков и финансовых учреждений вы найдете Java. И кто-то должен все это поддерживать и писать новые модули.

Java легко учить. Да, есть языки, на которых написать программку, выводящую «Hello world» будет немного проще (точнее, чуть менее многословно), но это — мнимая простота.
Прост тот язык, который позволяет быстро и качественно решить большинство задач, Java — из таких.
JavaRush существует уже 6 лет, и за это время очень многие выпускники уже работают Java-программистами и QA (пишут тесты на Java). Одни нашли работу быстро, еще в процессе учебы, другим пришлось пробивать стены — устраиваться на стажировки, работать почти бесплатно, рассылать резюме в сотни компаний прежде, чем их заметили. Тут играет много факторов, помимо, собственно, знания Java и сопутствующих технологий — возраст, упорство, умение себя правильно подать.

На курсы приходит очень разный контингент. В основном – взрослые люди в возрасте от 25 до 34 лет. Они уже работают, но не слишком довольны нынешним положением дел. Скажем, быстро уперлись в карьерный потолок. Или зарабатывают несоразмерно усилиям, а профессия не предполагает кардинального изменения финансового положения. В какой-то момент человеку это надоедает, и он решается ее — профессию — сменить.

Таких около 60%. Из них примерно 70% так или иначе связаны с технологиями (системные администраторы, инженеры), но встречаются и чистые гуманитарии (журналисты, учителя). Или вовсе люди экзотических профессий. Был у нас, например, интересный студент — промышленный альпинист из Одессы. Изучать Java начал довольно поздно, кажется, в 36 лет. Сейчас — успешно работает, сменил уже два офиса с повышением оклада и должности.

Также в последнее время появилось много «свитчеров» старше 35 лет. Чаще всего это люди, которые закончили технический вуз, но их унесло в другую стезю. Им более других мешает страх (боятся, что уже ничего не получится) и ответственность (чаще всего, у них на попечении — семьи, и они не уверены, что имеют право рисковать). Но мы стараемся этот страх развеивать – на JavaRush хватает мотивационных материалов и позитивных примеров для таких людей.

Приходят и совсем молодые — студенты (16-24 года), которые сообразили, что в вузе – даже профильном! – они в основном теряют время. Этим ребятам немного легче, чем другим, так как их, будем говорить честно, охотнее берут на работу.
Java – это швейцарский нож
Когда у тебя в руках молоток, все проблемы выглядят как гвозди. Java – это швейцарский нож: простой в освоении, полезный практически в любой ситуации в умелых руках. А главное – он создает интерес для оттачивания своего мастерства.
Как правило, адепты Java в качестве приманки называют низкий порог вхождения, кроссплатформенность, относительное быстродействие, мощный кор-функционал и обилие библиотек. И это правда. Мало какой язык может похвастаться таким балансом скорости, гибкости и богатства имеющегося кода на просторах интернета.

Для меня Java – это в первую очередь философия. Строгое следование принципам ООП (объектно-ориентированное программирование) ничего лишнего.

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

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

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

Главное – бежать на работу с горящими глазами и наслаждаться процессом. Ведь это всегда окупается.
Технология – это всего лишь инструмент для достижения целей
Давным-давно, очень давно, зародилась идея объектно-ориентированного программирования (ООП). Идея стала очень популярной и в существующие языки быстро добавили возможность следовать новой парадигме.

В то же время, параллельно, с нуля, создавались языки программирования, которые брали ООП за основу дизайна. Java была именно таким языком, который основан на принципах ООП.
Точнее говоря, Java не только позволяет разрабатывать программы используя принципы ООП, но и сам язык Java устроен таким образом, что разработка ведется в объектно-ориентированном стиле.
Однако, Java – это не только язык программирования. Это экосистема.
За последние годы Java стремительно начала развиваться, учитывая современные тренды. А именно то, что язык, который изначально был рассчитан на ООП, начинает вбирать в себя новые качества, которые открывают двери в сторону функциональной, реактивной и других парадигм программирования.

При этом Java все еще поддерживает принцип обратной совместимости, интегрируя нововведения в очень элегантной, и я бы сказал «нативной» манере. Относительно недавно даже поменяли схему нумерации версий Java, что позволило выносить последние обновления на публику чаще и быстрее. Таким образом, появились официальные промежуточные версии, что позволило ускорить изучение и тестирование новых возможностей.
Что же касается самого языка Java, мое мнение более философское. Все началось с Java и Java все еще есть (при обилии и наличии других языков).
Что бы не придумывали в других языках, Java по чуть-чуть это вбирает в себя, в своей манере, иногда медленно, но стабильно. Java все еще развивается, поэтому он все еще на рынке и вероятно еще долго будет на рынке.

Технология – это всего лишь инструмент для достижения целей. Какой-то один инструмент всегда подходить больше для решения определенной задачи чем другие аналоги.

Java – это язык общего назначения. То есть на нем можно писать практически любые алгоритмы. Сферы, в которых можно применять Java-программы, ограничивается только системами, в которых можно запускать JVM. Java работает на разных устройствах, начиная от мелких гаджетов и заканчивая спутниками в космосе. Ее можно применять везде, разве что нужно учесть определенные нюансы и применять целенаправленно. Не хотелось бы кувалдой забивать маленькие гвоздики.
Java – не вечная
Для тех, кто только хочет войти в IT, вопрос выбора языка программирования действительно не прост. 10 лет назад никто им особо не задавался, ибо перед теми, кто только начинал програмировать, не было четкого понимания особенностей бизнес задач. Теперь индустрия стала более четкой, есть много специфических доменов: data science, machine learning, frontend, backend и т.д.. И backend бывает разный. Одно дело backend, который обрабатывает http-запросы и обслуживает доменные ресурсы, другое – enterprise, где на бекенде делается огромное количество работы и обрабатываются терабайты данных.
Соответственно, сейчас, чтобы войти в отрасль, стоит для начала разобраться в том, какие существуют IT-индустрии и какие из них будут действительно интересны для изучения и решения проблем путем программирования.

Идти в индустрию только потому, что сейчас это модно или потому, что много платят, я не советую.
Главное – любить свою работу и быть профессионалом в своем деле. Тогда уже можно сфокусироваться на том, какой язык выбрать и какие фреймворки.

Например, нелогично рекомендовать Java тому, кому интересны data science или machine learning. Конечно, Java тоже может решать эти задачи, но она для этого не оптимизирована. Есть такие языки, как Python, R, они более оптимизированы для этого домена.

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

Java - язык, который следует всем канонам ООП-парадигм. Если человек разбирается в этих принципах, то со временем и опытом сможет переключиться на другой ООП-язык без проблем. Будут меняться только подходы к синтаксису и набор фреймворков, ну и домены может тоже будут меняться.

Сейчас я не вижу признаков того, что в тех нишах, где Java освоилась, есть языки, которые могут ее вытеснить. Тем более что Java – практически синоним с Opensource. А это сейчас как никогда модно. Есть множество Opensource-проектов, которые решают множество задач, и людям это нравится. Для многих это способ автоматизировать задачи бесплатно, а те, кто может себе позволить платный софт – платят за поддержку. Opesource еще и отличная почва для роста разного рода сообществ. Также огромным плюсом Java является возможность запускаться независимо от платформы. Все благодаря JVM, и хоть это делает ее медленнее, чем нативные языки но именно эта особенность сыграла ключевую роль на момент создания языка. Да и сейчас это действительно сильный аргумент.

Например, если сравнить Java с ближайшими конкурентами, такими как .Net, то здесь особо и нечего сравнивать. Ведь .Net заточен под стек Microsoft, и этим все сказано. Но в любом случае, нужно помнить, что в реальном мире бизнес и его проблемы должны служить ориентиром в выборе языка и технологий. И тем, кто с корнями погряз в экосистеме Microsoft, Java будет не по душе.

Что касается хайповых языков – это технологии, которые не оправданы временем.
При этом нужно понимать, что Java – не вечная. Через какое-то время может появиться язык, который докажет, что он лучше. Тогда нам придется пере-
квалифицироваться, если мы захотим оставаться востребованными на рынке труда.
Просто выучив Java, выйти на рынок и найти работу нельзя
Мир автоматизированного тестирования глубоко построен на Java. Есть много инструментов DevOps на Java.
Java занимает примерно четверть рынка языков программирования.
Самое смешное при этом, что сейчас трудно встретить проекты на чистой Java.
Есть ряд платформ, написанных на этом языке. Под капотом-то Java, и вроде пишешь на Java, но на самом деле собираешь свою бизнес-логику из элементов платформы. Одними из таких платформ являются Adobe Cq или Hybris. Это большие Java-платформы, на которых есть свои правила игры. Если нужно писать бизнес-логику, нужно их изучить. Пишешь вроде как на Java, но играешь по правилам CQ.

В Big Data такая же история. Когда направление набирало популярность, решения были основаны на Java и затем обрастали domain specific language (DSL), где разработчик начал оперировать макрокомандами, то есть опять случилось вытеснение чистой Java.

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

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

Поэтому такие языки, как Go, Python, C либо начинают возрождать свою популярность, либо ее набирать. JavaScript в том числе тоже мигрирует с фронтенда на сервер. у JavaScript на фронтенде практически монополия. Но в последнее время появляются серверные решения на JavaScript, вытесняя с Java из ее изначальной ниши.

Если доля рынка serverless будет продолжать расти (а предпосылок обратному пока нет), то скорее всего Java или .NET смогут с трудом там конкурировать с другими языками.

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

Сейчас Java занимает около 25% рынка, наибольшую часть которого покрывают энтерпрайз-системы. Если нужно написать какую-то сложную систему на много лет вперед, то выбирать, например, JavaScript с определенными фреймворками будет рискованно. Язык развивается очень динамично, старые версии фреймворков и библиотек перестают поддерживаться. Соответственно, есть риск, что решения перестанут поддерживаться.

С точки зрения Java проблема нивелируется тем, что за спиной у нее стоит Oracle и активно инвестирует. Никаких проблем не возникало.

Кстати, Oracle предлагает новую модель поддержки для Java. И пока непонятно, это недостаток или достоинство, но теперь не будет такой долгой поддержки версий, как раньше, по 3-5 лет. По последним данным поддержка станет платной, это может обернуться сложностями для Java.

В 2019 году Java 8 уже не будет поддерживаться. Пока трудно предугадать, как это скажется на всех библиотеках. Например, я в своей работе использую библиотеку, которая работает только на Java 8. Поэтому есть опции: либо искать альтернативу, либо поддерживать самостоятельно, либо писать что-то свое. И тут возникнет несколько интересных вопросов.

Хотя мир энтерпрайза основан на Java, одних знаний языка, чтобы найти работу. недостаточно. Нужно учить еще какие-то фреймворки, библиотеки, тогда ты становишься Senior Java Developer. Хотя, по сути, сейчас Go и частично Scala – единственные языки, для которых pure programming до сих пор присутствует.
Скорее всего Java сохранит позиции в ближайшие 10-15 лет, потому что то количества кода, которое написано на ней, никуда не денется, и будут люди, которые будут его поддерживать.
Java – один из самых популярных языков в банковской сфере
Благодаря универсальности языка Java по-прежнему очень обширна – от встраиваемых систем до кластеров обработки данных.
Java является одним из наиболее часто используемых языков программирования в банковской сфере.
Множество внутрибанковских программных комплексов разработано именно с его помощью. Мощь и гибкость Java позволяет не только поддерживать, но и развивать банковские проекты на протяжении многих лет.

Основное целевое назначение Java в банковских проектах – это backend-разработка и разработка приложений под Android. Кроме того, в банковской сфере активно используются OpenSource-проекты, разработанные на Java: Hadoop, Kafka, Cassandra etc.

У Java очень мощные стандартные библиотеки. Поэтому он, в частности, идеально подходит для проектов, в которых используется шифрование. За счет JCE и сторонних библиотек любая криптографическая задача может быть решена в короткие сроки.

Если говорить о недостатках, то это медленная компиляция, dependency hell в больших проектах, бойлерплейт (проблему решает библиотека Lombok).
Java можно простить и избыточность кода, и отставание от моды
Java – надежный и проверенный временем инструмент, быстрый и простой в освоении.

Ввиду простоты синтаксиса языка и большого количества литературы легко выработать единый стиль, поэтому отлично подходит для работы в команде. Длительное время данный язык был основным для Android чем, собственно, все сказано: «нативный Android – Java».
Преимущества Java для разработчика – это в первую очередь простота, которая выражается в отсутствии избыточной вариативности. К примеру, мы не можем перегружать операторы. Несмотря на то, что это делает синтаксис языка беднее и код зачастую более избыточный, он остается очевидным и однозначным в куда большей степени чем, к примеру, код на Scala.

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

На Java можно писать низкоуровневые вещи. Конечно, это не C++ по возможностям и производительности, но при этом это можно делать достаточно быстро и пользуясь возможностями JVM, в том числе сборки мусора.

Ну и нельзя не упомянуть огромное количество материалов и комьюнити языка.

Если проект направлен на работу с облачными решениями, такими как GCP, Amazon и т.д., то Java – оптимальный выбор, потому что все облачные решения имеют SDK и хорошо задокументировали работу со своими сервисами при использовании Java. Но это скорее следствие роста направления как такового, да и конкурентов тут много.

Если в небольших проектах есть конкуренция с Node.Js, то для крупных проектов Java становится еще более привлекательна за счет необходимости работы и анализа Big Data и удобной низкоуровневой (TCP/UDP) интеграции с IoT.

В разработке под Android конкуренцию Java стали составлять кроссплатформенные решения (React Native, к примеру). На мой взгляд, тенденция будет усиливаться. Несмотря на то, что для разработки подобных решений также нужен нативный Java-код, его доля будет падать.

Отдельно стоит отметить появление конкурентов Java в виде новых и не очень JVM-языков.
Scala или Сlojure вряд ли смогут значительно повлиять на положении вещей.
А вот Kotlin может с одной стороны стать конкурентом с другой хорошим дополнением в арсенале Java-разработчика.

Из не JVM-языков можно отметить Go, область применения которого скорее пресекается с Java в точке высоконагруженных/низкоуровневых сервисов с простой бизнес логикой. Это решение также можно рассматривать не как полноценного конкурента, а как хороший инструмент в запасе Java-разработчика.

Однако я сомневаюсь, что в обозримом будущем есть причины беспокоиться для Java-разработчиков.
В первую очередь надо понимать, что потребность на тех или иных разработчиков устанавливается бизнесом, а не модой.
Большое количество разработчиков с огромным опытом на рынке, наряду с устоявшимся стандартами и наработками, а также идеологией языка, которая обеспечивает простое масштабирование как команды, так и проекта, делает Java очень выгодной платформой для крупного бизнеса. За что можно простить и избыточность кода, и отставание от веяний моды.
© 1999—2018 AIN.UA
[email protected]
Made on
Tilda