Почему 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 комментариев
Написать комментарий...
PV

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

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

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

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

Именно вытесняется?

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

Именно. Новые проекты начинаются чаще на этих языках

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

Такое периодически бывает, но не всегда заканчивается с минусом для джава. Посмотреть например как одно время многие переходили на скалу, но сейчас скорее возвращаются назад. Так же и с руби. Его пытались применять везде, но сейчас скорее обратная тенденция.

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

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

Отдельно Oracle подлил масла в огонь со своей новой политикой выпуска бесплатной джавы.

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

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

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

Вы точно правильно понимаете смысл работы с контейнерами?

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

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

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

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

P.S. Про faas особенно посмешило

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

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

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

плохо получается

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

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

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