Почему 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, чтобы не остаться со своими лямбдами в суверенном рунете.

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

Ну с вашим подходом можно и на 1с программировать, там тоже бывают хорошие зп и вакансии всегда есть ) а по факту c# тот же уже давно перегнал Java практически во всем.

Ответить
Развернуть ветку
Сергей Токарев

// в любой стране мира и в самых разных сферах
прокол по логике. Оппонент достаточно четко описал область применения, чтобы вычеркнуть 1C из списка сравнений

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

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

Ответить
Развернуть ветку
Сергей Токарев

я говорю о том, что у вашего оппонента в тексте были даны четкие условия - "вакансий в любой стране мира и в самых разных сферах"

что полностью делает ваш пример с 1C несостоятельным

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

А то, что вы говорите, в целом хорошо, а в конкретном примере с 1C - плохо. Мне это напомнило рассказ об одном джуне
- Хз, непонятный какой-то. На собеседовании по теории все отлично, а в коде на Гитхабе полное говно.

Шутка. Этим джуном много лет назад был я.

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

Посмотрите мой первый коммент - я обсуждал технические детали языков, а товарищ зачем-то туда примешал второстепенные факторы вроде "работы в другой стране". Я вообще не вижу смысла обсуждать это в разрезе технической составляющей языков программирования. Это примерно как говорить, что Delphi лучше C++, потому что у Delphi в IDE красивее кнопочки.

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

Я считаю, что наличие вакансий - это как раз первостепенный фактор.
Популярный вопрос у школьников, студентов и людей, которые хотят сменить род деятельности на IT: какой язык программирования учить?
Похожий вопрос: какой иностранный язык учить? Однозначно английский. И без разницы, нравится вам его грамматика и лексика или нет. Главное, что английский понимают в любой стране мира. Так же и с Java. Нравится она вам или нет, но она везде. Джависты везде нужны. С Джавой не пропадёшь. Вот это нужно в первую очередь знать о Java, а не о наличии в ней каких-то крутых фишек.

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

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

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

Я как человек, склонный к критическому мышлению, попрошу вас привести статистику, для обоснования вашего заявления.

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

Я как человек, не склонный заниматься мозгодрючерством, не вел статистику, но как человек, который регулярно просматривает вакансии по Java, C# и некоторым другим языкам, могу делать выводы на основании того, что вижу. А вижу, что Java - это только легаси, а вот по C# и особенно Go - треть вакансий (если не больше) новые проекты.

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

Прочитайте хотя бы книгу Канемана "Думай медленно... Решай быстро" чтобы понимать, что делать выводы на основе того, что вижу - это плохой метод оценки статистики.
Я джавист, и мне попадалось много вакансий, где требовалось переписать что-то на Java с другого языка. Например, с Руби, потому что Руби, оказывается тормозит, или с С#, потому что требуется бигдата, а инфраструктура и инструменты для бигдаты в Джаве несравнимо лучше. (Контраргументы тут можете не приводить. Это не мои решения.)
Кроме того, к Java нужно относить и набирающие популярность Kotlin и Clojure, а также Scala и Groovy. Это языки из экосистемы Java и для их применения нужно знать Джаву.
Вспомним также самую популярную в мире ОС - Android. Основными языками разработки которой являются Kotlin и Java.
Так что ваше предположение об использовании Java в новых проектах, скоре всего не соответсвует действительности.
А вот ИМХО, С# - это как раз язык, не оправдавший надежд. А я ведь тоже когда-то топил за него против Java. Но C# не смог. С десктопа так и не вытеснил C++, в вебе должной популярности не получил, на ОС отличных от Windows так и остался в стадии экспериментов, мобильный рынок проиграл вместе с Windows Mobile.

Ответить
Развернуть ветку
Sam Beckett
С десктопа так и не вытеснил C++, в вебе должной популярности не получил, на ОС отличных от Windows так и остался в стадии экспериментов

Ох, опять эти "выводы на основе того, что вижу". Прям вот по каждому пункту мимо. Ты или не в теме того, что сейчас происходит в C# либо.. Впрочем, другой причины тут быть не может.

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

Это не выводы на основе того, что вижу. Это моё мнение. За темой давно не слежу. Для интереса загуглил, какое нынче API у Windows...  Всё ещё C++ https://developer.microsoft.com/ru-ru/windows/downloads/windows-10-sdk
Кстати, C++ тут где-то в соседней теме тоже хоронят.

Ответить
Развернуть ветку
Sam Beckett
За темой давно не слежу

Вот с этого надо было начинать. Алсо, я очень хочу посмотреть на безумцев, которые в 2019 году разрабатывают десктоп на C++. Нет, правда! Посмотреть и спросить у них что с ними не так.

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