Почему Java живее всех живых

Нередко можно встретить заявления, что «Java умирает», и всем современным людям надо поскорее переходить на современные языки вроде Go. Мол, с ними будет хорошо, а со старьём, от которого все вот-вот откажутся — плохо. Но так ли это?

Мы в JUG.ru Group проводим конференции для разработчиков, в том числе по Java. Это не значит, что автоматически считаем этот язык лучшим в мире (мы и .NET охотно освещаем, при всём их соперничестве). Но это значит, что мы следим за происходящим вокруг Java и видим, в чём стереотипы ошибочны.

В «похоронных» заявлениях можно увидеть два разных варианта. Одни люди говорят «Java умирает» вполне буквально: время популярности языка прошло, он уже мало кому нужен, да и эти оставшиеся вот-вот его забросят. Другие считают, что с точки зрения популярности у Java может быть всё хорошо, но технологически она застряла в прошлом веке, поэтому писать на ней сейчас — себя не уважать. Рассмотрим оба этих тезиса поочерёдно.

«Java никому не нужна»

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

Самый известный такой «хит-парад» — TIOBE Index. Да, к его методологии и результатам есть громадные вопросы, слепо верить ему нельзя, но и полностью игнорировать его тоже невозможно. Открываем самые актуальные данные, за март 2019-го: Java находится на первом месте. Согласно TIOBE, это не просто не «умирающий язык», а самый популярный язык в мире.

Другой известный источник — ежегодный опрос разработчиков от Stack Overflow. Тут с методологией всё понятнее, выборка в 100 000+ респондентов — это очень хорошо, а популярность сайта среди самых разных разработчиков позволяет надеяться, что в этой выборке нет какого-то принципиального статистического перекоса.

Откроем результаты этого опроса за 2018-й. С первого взгляда позиции Java гораздо слабее, взято только пятое место. Но впечатление меняется, если посмотреть внимательнее на «опередивших»: это JavaScript, HTML, CSS и SQL. Во-первых, здесь в опросе фигурировали не только языки программирования, но и языки разметки, что меняет дело. А во-вторых, все опередившие варианты объединяет то, что зачастую разработчики пользуются ими в дополнение к основному языку. Если и дотнетчик, и джавист немного используют SQL, так что в опросе оба упомянули его, делает ли это SQL важнее C # и Java?

И здесь интересно посмотреть на третий источник, опрос от JetBrains. В этом случае вывод оказался таким: самый используемый язык в целом — JavaScript, но вот самый популярный конкретно в качестве основного — Java.

Нам как организаторам конференций заметна другая метрика: количество зрителей на российских мероприятиях, посвящённых разным языкам. И здесь Java тоже оказывается в числе явных лидеров, обходя более модные языки. Общий вывод получается таким: насчёт «самого популярного» языка можно спорить, но «один из самых популярных» — безусловно.

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

Почему вообще популярность языка имеет большое значение? Почему надо «писать на том же, на чём другие»? Конечно, строгого требования нет, кто-то пишет на Haskell и счастлив. Но есть несколько значимых факторов.

Например, размер рынка труда. Если в вашей компании решит уволиться ключевой разработчик, написавший проект на чём-то редко используемом, насколько легко будет найти ему замену? И обратная проблема: если вы и есть тот самый уволившийся разработчик, легко ли вам будет найти хорошую работу по вашему профилю? У Java рынок труда один из самых больших — куда больше, чем у того же Go.

Кроме того, высокая популярность языка означает, что в интернете по нему будет прорва информации (блог-постов, докладов, ответов на Stack Overflow), а вот при использовании экзотики можно столкнуться с дефицитом информации. Конечно, есть своя романтика в том, чтобы быть первопроходцем, но для оперативного решения задач это не самая выигрышная стратегия.

При выборе языка подобные вопросы не менее важны, чем «есть ли в нём pattern matching», и у Java остаётся громадное преимущество попросту благодаря размеру экосистемы. Из-за того, как много людей её используют, она оказывается хорошим выбором при создании новых проектов, а это, в свою очередь, способствует притоку людей. И если этот самоподдерживающийся процесс когда-либо сойдёт на нет, то явно не в ближайшие годы.

Daniel Stori

«Java застряла в прошлом веке»

Теперь перейдём ко второму тезису: пока локомотив технологий несётся вперёд, тут язык из 90-х, зачем пользоваться им при наличии более современных?

Вообще говоря, для многих важнее не язык сам по себе, а его платформа и «всё, что вокруг»: решения от крупных вендоров и опенсорсные библиотеки от энтузиастов, поддержка в IDE и альтернативные JVM-языки. И если рассматривать всё это в целом, то развитие происходит активное: то в новой версии фреймворка JUnit всё переделывают, то Red Hat затевают новый сборщик мусора, то IntelliJ IDEA очередными нововведениями облегчает жизнь разработчика.

Но можно даже не рассматривать сторонние проекты, а посмотреть, что происходило непосредственно с Java в последнее десятилетие.

В 2011-м компания Oracle приобрела Sun Microsystems, заполучив таким образом Java, и в тот момент перспективы выглядели непонятно. У других продуктов, попавших тогда в Oracle (OpenOffice, Solaris, Hudson), в дальнейшем всё складывалось сложно.

Но с Java получилось иначе: тут в Oracle не забросили покупку на полку, а вложили ресурсы в развитие. И вышедшая в 2014-м версия Java 8 стала масштабным событием, благодаря лямбда-выражениям и другим нововведениям язык ощутимо менялся и модернизировался. Индустрия охотно приняла эту версию, и тем, кому до сих пор приходится поддерживать проекты на более старых, обычно сочувствуют.

В 2017-м с появлением Java 9 добрался до релиза многолетний проект по модуляризации JDK. На Java-разработчиках это не сказалось так ощутимо, как лямбда-выражения, но это показательно в другом отношении. Как и в любом другом крупном проекте, существующем десятилетиями, внутренние зависимости в JDK со временем стали напоминать спагетти. И ради его «распиливания» эти зависимости пришлось распутывать в стройную систему — то есть, по сути, был проделан гигантский рефакторинг. С проектами, которые по-настоящему «увязли в прошлом», такого не происходит.

А с 2018-го действует новый релизный цикл: вместо того, чтобы несколько лет готовить большую версию Java, стали каждые полгода выпускать по менее масштабной. Это было сделано как раз ради соответствия темпам индустрии, чтобы быстрее выпускать фичи (если какая-то уже готова, не приходится мариновать её годами до выхода следующей версии). И пошёл регулярный поток релизов, которые не переворачивают всё с ног на голову, но при этом добавляют что-то заметное. Например, год назад добавили ключевое слово var: разработчики ругают Java за излишнюю «церемониальность», так давайте упростим им жизнь в случаях, где компилятор может сам вывести тип.

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

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

Не существует какой-то одной правильной скорости, с которой технологиям следует развиваться: что хорошо для стартапа, то плохо для гигантского банка. И консервативность Java сама по себе не плюс и не минус: она хорошо подходит одним и плохо другим.

Так что мы не хотим сказать, что Java — лучший язык в мире для всех без исключения, и вам необходимо использовать именно его. Но при выборе языка стоит смотреть на то, что требуется в конкретном случае, а не полагаться на крики в интернете «переходите с X на Y, иначе вы отстали от жизни». И если подходить таким образом, то Java по-прежнему окажется удачным выбором в большой части случаев.

Если вы Java-разработчик, то вы и сами всё это знаете. Поэтому для вас мы закончим текст другим: 5-6 апреля в Москве мы проводим JPoint, и для вас там может быть много интересного.

0
75 комментариев
Написать комментарий...
Sam Beckett

Лямбды в 2014, автовыведение типа только в прошлом году. Это все что нужно знать о Java в 2019 году.

Ответить
Развернуть ветку
new_comment

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

Ответить
Развернуть ветку
29 комментариев
Максим Тихоненков

90% времени уходит на понимание продукта. А непосредственно кодинг сейчас с помощью ide может почти любой миддл склепать. Если он туда еще какие нибудь сонары прикрутит и прочие анализаторы, то код очень даже ничего будет.

Ответить
Развернуть ветку
2 комментария
Mr. Burns

Вы что хотите чтобы как во фронтенде?

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
JUG Ru Group
Автор

Тут мы не вполне корректно сформулировали (имелись в виду заявления вроде "With every new version of the standard it gets more unwieldy, more difficult to use correctly"). Убрали совсем эту фразу, спасибо за замечание.

Ответить
Развернуть ветку
Злой Полушубок

Ждем статью про Delphi.

Ответить
Развернуть ветку
Make Luv

После выхода неткора джава только для легаси и годится.

Ответить
Развернуть ветку
Mike Stolnikov

Microsoft - красавчики. Пересел с Symfony на Net Core для собственных проектов, очень доволен.

Но кроме Java подсрачник еще получили и впредь будут получать гоферы:
https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/go-csharpcore.html

Ответить
Развернуть ветку
Джек Воробей

"Нередко можно встретить заявления, что «Java умирает», "
после первой же строчки можно смело переименовать статью "откуда столько идиотов и доколе они будут такими", - а уже потом объяснять, почему java будет жить еще дохрелион лет.

"Если вы Java-разработчик, то вы и сами всё это знаете".
а вот это должно быть второй строчкой

"Поэтому для вас мы закончим текст другим: 5-6 апреля в Москве мы проводим JPoint, и для вас там может быть много интересного."
no

Ответить
Развернуть ветку
Sam Beckett

Java конечно не умрет, ведь на ней понаписали огромное количество монструозного легаси с историей 15+ лет, кто-то должен ведь будет это все поддерживать и разгребать.

Ответить
Развернуть ветку
Maxim Walter

Очередное самоутешение ) Не осуждаю

Ответить
Развернуть ветку
Lenar Baltachtan

И где срач? Ни слова про С#

Ответить
Развернуть ветку
PV

Единственный минус - необоснованно огромные цены на конференции от которых не так много пользы в техническом плане. (Не только эта, а вообще)

Ответить
Развернуть ветку
Джек Воробей

это минус джавы?
сдались тебе эти конференции в принципе. конференции это, в основном, рекламная движуха, а не полезная. к тому же еще и дорогая... т.е. это бизнес евент-манагеров.

Ответить
Развернуть ветку
1 комментарий
Денис Кулагин

Java прекрасна. Такой комбинации быстродействия, развитой экосистемы и удобного инструментария пока не видел ни у одного из более модных языков. Хотя некоторого удобного питонячего и джаваскриптячего сахара бывает не достаёт.

Ответить
Развернуть ветку
Make Luv

Это ты Шарп ещё не видел.

Ответить
Развернуть ветку
Ildar Karimov

Котлин в помощь!

Ответить
Развернуть ветку
Mike Glukhov

Swift + Ruby + JS

Ответить
Развернуть ветку
Sam Beckett

Ruby? Вы из 2009 года пишете?

Ответить
Развернуть ветку
Make Luv

Ещё кофескрипт вспомни

Ответить
Развернуть ветку
Коля Павельев

Не кодил, но осуждаю

Ответить
Развернуть ветку
Alexey Zinoviev

Ну хорошо, Олег. Но интересно будет ли с него хоть один проданный билет?

Ответить
Развернуть ветку
Vladimir Smirnov

Вот уж сколько лет джава умирает и сколько лет её вытесняют различные шарпы, питоны, ноды, го и иже с ними, да что все как то не умрет, и не вытеснят.

У всего есть своя ниша, эти все разговоры только ради холивар развести

Ответить
Развернуть ветку
Mr. Burns

На силиконе все пишется ради холивара, срача и пиара. Кроме новостей.

Ответить
Развернуть ветку
PV

Яву могут вытеснить только новые ниши на рынке

Ответить
Развернуть ветку
Mikhail

Java за пределами энтерпрайзов успешно вытесняется с помощью go, python и JS - в зависимости от типа задачи

Ответить
Развернуть ветку
14 комментариев
Shadlance Darking

Просто жив.

Ответить
Развернуть ветку
Oxana Markova

Увы, часто без джавы в энтерпрайзе делать нечего почти. Хорошо это или плохо - другой вопрос

Ответить
Развернуть ветку
Evgeni Nabokov

Интересно узнать доли языков для новых проектов.

Ответить
Развернуть ветку
72 комментария
Раскрывать всегда