У меня появился пет-проект, и самое главное — он не на Кложе, а на Джаве. Пишу уже две недели, и вот какие ощущения.

Современная Джава неожиданно хороша. Если взять последнюю версию 21, не цепляясь на бородатое легаси, то писать на ней довольно приятно. Скажем, везде вместо классов использовать рекорды — это неизменяемые классы, которые экономят код и несут клевые вещи из коробки.

Или использовать паттерн-матчинг по классам, например:

switch (msg) {
    case BindComplete ignored:
        break;
    case AuthenticationOk ignored:
        break;
    case AuthenticationCleartextPassword ignored:
        handleAuthenticationCleartextPassword();
        break;
    case ParameterStatus x:
        handleParameterStatus(x);
        break;
    default:
        throw new SomeException("no branch");

Когда-то давно это делалось паттерном Visitor (Посетитель). От одного упоминания на зубах скрипит песок. А теперь это несколько строчек. Современной Джаве нужно все меньше паттернов, потому что они нативо поддерживаются языком. Это происходит медленно, в год по чайной ложке, но в данном случае медлительность значит неотвратимость.

В 21 Джаве завезли виртуальные треды. С ними можно писать блокирующий код, а JDK сама определит, когда тред можно остановить и возобновить. Конечно, нужно знать детали процесса. Недавно я погонял виртуальные треды из Кложи, и прям очень приятно.

Хочется отметить Джавный тулинг. Идея Community Edition очень хороша. Все подхватывает, безошибочно подсказывает варианты в выпадашках. В Кложе такого нет и никогда не будет.

Да, в Джаве нет репла, но вот смотрите: я написал класс Main с запускалкой кода. Жму зеленую стрелку — все выполнилось. Если что-то упало, я ставлю дебаг на строку и жму кнопку с жуком. Исполнение прерывается на отметке, вижу локальное состояние, правлю код, запускаю. Прекрасно.

В Кложе, наоборот, нет встроенного отладчика вообще. Есть отладчик в emacs-cider, но он странный и работает через раз. Для себя я написал отладчик bogus, и он спасал меня раз двести, не меньше. Но моя поделка ничего не решает — ей пользуются три анонимуса, а остальные дебажат принтами или через tap.

Конечно, начинать проект на Джаве 21 — это утопия. Куда бы вы не пошли, вас будет ждать легаси, которому, дай бог, обновиться бы до Джавы 17. Там будут паттерны, частично инициированные POJO и прочие прелести. Но хобби на свежей Джаве — почему нет?

Джава развивается так быстро, что не успеваешь следить. В нее вливают горы денег, а работают над ней одни из умнейших людей мира. Это чувствуется. Например, в случае с виртуальными тредами пришлось пройти по всей SDK и поправить все блокирующие вызовы. Колоссальная работа! Все, чтобы программист поменял FixedPoolExecutor на VirtualThreadExecutor, и вжух — полетело.

Не все принимают эту данность. Я знаю человека, который уверен, что Джава — это собственность Оракла (хорошо хоть не Sun), за нее нужно платить, она тормозная и ест много памяти. При этом на Джаве он писал 15 лет назад. Уютный мирок заблуждений приятней, чем реальность.

Сказанное не значит, что я записался в джависты. Просто у Джавы можно многому поучиться в плане развития. Взять на заметку.