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

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

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

В «похоронных» заявлениях можно увидеть два разных варианта. Одни люди говорят «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
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, и для вас там может быть много интересного.

2929
75 комментариев

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

6
Ответить

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

31
Ответить

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

1
Ответить

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

8
Ответить
Комментарий удалён модератором

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

4
Ответить

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

4
Ответить