Долго не мог начать это эссе, т.к. сразу несколько вариантов начала, но все они не являются точными. Попробую очень субъективно и мыслью по дереву рассказать о том, почему считаю Java тупиковым путём развития для программиста после определённой планки.

Мнение сформировал после 11+ лет Java, 10+ проектов на ней, OCA и OCP (эта фраза ровно для того, чтобы не задалбывали адепты первого года своей первой работы после школы с мудрым «да ты просто не пробовал! вот поработай на Java, сразу всё поймёшь» – дорогие, я всё понял). И по сию пору не уверен в нём, скорее, «так вижу».


Начну с хорошего. Даже трёх хороших.

Во-первых, если вы джавист, вы при деньгах вне зависимости от того, какого объёма ICQ внутри черепа. Знаю удивительно бездарных разработчиков, ощутимо зарабатывающих даже по московским меркам. Если бы можно было, распечатал бы их код на плакаты и в школах на информатике детей пугал – не будете учиться, станете такими же. А ничего, прокатывает.

Во-вторых, de facto это язык энтерпрайзных финансов, финансы вечны, язык финансов вечен (COBOL тому примером). Если вам сейчас 20 лет и вы войдёте в какой-нибудь КхмБанк джуниором на Java, в 65 лет уйдёте на пенсию из этого же банка с какой-нибудь почётной Java-позиции, вам до 90 лет будут звонить с вопросами «а чаво транзакция не прошла в модуле My Cool Transaction Module Injected Template 2019 New Folder?» – хлеб с икрой и маслом икорным до гроба.

В-третьих, мир Java на фоне других миров достаточно стабилен. Знания устаревают не моментально, софт в банках меняется консервативно (10-летней давности Java 6 в проде – да запросто), даже если вы сейчас прекратите учиться, не утонете ещё долго.

Пожалуй, всё.


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

Дальше список не по приоритету, но как в голову пришло.

Во-первых, Java-style ООП. Все эти развесистые иерархии интерфейсов, абстрактных классов и классов, пробрасывающие управление на десятки хопов от точки вызова (видели стектрейс на три экрана? незабываемое зрелище). После двух недель проектирования этого дерева заход на денёк в Python считал выходным. И да, знание других языков здорово мешает толерантно относиться к такому ООП.

Во-вторых, застой. Общее место, но язык крайне медленно развивается. Безусловно, новая версия на фоне предыдущей версии что-то новое приносит, только вот в других языках это «новое» давно уже «старое», взять те же лямбды примером. А если посмотреть на конкурентов (пусть и в другой категории)… скажем, C#, так и вообще обидно становится.

В-третьих, ресурсы. Да-да, уже плешь проели фанатики «время программиста дороже» и «серверов докинем», считаю, это разработчики, а не программисты. Программист (в данном случае человек, получающий удовольствие от технически красивых решений) же должен утирать маленькую слезинку, видя, как продуктовый эквивалент кушает памяти в 30 (да, не ошибка) раз меньше и работает в 2..3 раза быстрее.

В-четвёртых, область задач. Умиляют чуваки, вопрошающие «да что же ТАКОГО нельзя написать на Java?!» – да всё можно. Почти. Другое дело, как оно будет работать в сравнении с тем, что написано на более подходящих инструментах, ну да кого это волнует. А так-то рыночек всё ставит на свои места. Открываем вакансии и для Java developer видим массовое: биллинги, энтерпрайз, банки, страхование, CRUD-бекенды, финансы, контакт-центр, бухгалтерия, склад, интеграция с процессингом и платежами. Бывает и другое (скажем, озадачила вакансия «Разработка модулей для работы с промышленными протоколами, OPC – клиенты, драйверы для интеграции с оборудованием, работающим по закрытым протоколам»), но ландшафт нарисован вон теми красками, что списком чуть выше.

В-пятых, шаблоны (которые design pattern‘ы). Честно говоря, просто надоело. Примелькалось, приелось, заунылило. Куда ни ткнись, наследие банды четырёх. Да, блин, оно везде, но мир Java как-то ну очень уж овершаблонизирован. Было время, ты аще совсем не джавист, если на собеседовании десять шаблонов не расскажешь.

В-шестых, далеко от железа. Совсем субъективное, конечно, но с этими интерпретируемыми и байткод-языками постоянно деградируешь в пользователя железки, а не в её программиста. Это скучно. Железо – большой и прикольный мир, вовлечение в который расширяет как профессиональный кругозор, так и спектр решаемых (или потенциально предлагаемых) задач. Совсем уж точно не хочется превратиться в 40+летнего дядьку из банка, сидящего в давно продавленном этой же жопой кресле и «я же джавист, не знаю такого… не, у нас этого нет, это же Java… не, Java такое не умеет… а зачем мне? я же джавист» – фу-фу-фу.

В-седьмых, GUI. Возможно, мне кажется. Может быть, я ошибаюсь. Но сделал как-то попытку отойти в сторону от типичных задач и написать небольшой десктоп в 2019 году. Обнаружил следующее: Swing давно заморожен, SWT как был исчадием Eclipse, так и остался, а ситуацию с JavaFX (точнее, будущее этой шняги) как не понимал, так и не понимаю. А и всё. И это за 20+ лет эволюции. Подспудно кажется, что никому это не надо, точнее, нет понимания, куда планомерно развивать Java, вкладывая ресурсы. В нативном мире хотя бы Qt есть.


И вот как-то… смотришь на всё это… ну фиг знает. Повторю, есть интересные задачи, есть интересные команды. Опять же, снова повторю: писать на Java крепкие бекенды / микросервисы вполне комфортно. Я бы сказал, что в Java комфортно и достаточно просто быть профессионалом. Но чёт тоскливенько. Есть на краях эмоций ощущение офисного клерка без живости мысли. Недаром на JVM породили Clojure, Kotlin, Scala – гораздо более интересные и бодрые для головы языки.

Но люди разные, конечно. Кого-то и Java искрящимся творчеством заряжает. Живьём, правда, давно таких не видел. Вот уходящих от Java в мир творчества уже насмотрелся. В том числе и в зеркале.