Есть ряд платформ, написанных на этом языке. Под капотом-то 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 до сих пор присутствует.