#ЛОНГРИД #ПРОГРАММИРОВАНИЕ #ИИ
Про выбор языка программирования
Особенно для разработчиков на Java
Как всегда, это история о политике, крови, грызне, и скудоумных менеджерах
Мне всегда казалось, что C# сильно лучше нашей Java (только LINQ expressions чего стоит - именно expressions а не применения типа LINQ-to-objects). А в F# (тоже работает на .NET) есть нормальные провайдеры типов и другая функциональщина. И всё это работает чудесно, а не как Haskell который несколько лет подряд сегфолтился на Windows, и никто это не чинил.
Но всё портит маниакальная борьба Microsoft с конкурентами и из-за этого отсутствие экосистемы вне продуктов Microsoft. Это отсутствие конкуренции и деградация. Какой дурак захочет связываться с технологией, из-за которой тебя может назавтра трахнуть создатель этой технологии.
На всякий случай, "Embrace, Extend, Extinguish" (EEE, "обнять, расширить, уничтожить") - это не забавная фраза и не инструкция к анальному плагу, а реальная антимонопольная стратегия Microsoft по захвату открытых стандартов. Она описана в судебном деле правительства США против Microsoft, 1998–2001.
С Oracle в общем-то так же. Пример: фреймворк изначально назывался Javaslang, но влетел на разбиратльство с Oracle из-за использования слова "Java" в своем названии. Из-за чего авторы визуально перевернули название кверх ногами и получился VAVR. И даже красивый слоган придумали: "vavr - turns java™ upside down". Что не отменяет, что Oracle - контора пидорасов.
Но есть нюанс - был один раз в истории особый исторический момент, когда сам Oracle выебали несколько компаний во главе с IBM, и значительный кусок власти у них забрали. И только благодаря этому ивенту Java всё ещё живая и интересная.
История там довольно простая и поучительная.
Наверное, сейчас уже мало кто помнит, но Java сделала контора Sun Microsystems. И дела у нее шли не очень. Чтобы как-то починить эти проблемы они пытались максимально контролировать свою власть над Java. А какому же программисту понравится, что его любимую игрушку контролируют? Это не понравилось целой индустрии.
Так была создана особая свободная и открытая реализация Java под названием Harmony. Не та которая сейчас у Huawei, HarmonyOS, а другая :) Официально всё это проходило под эгидой Apache Foundation, но бэкалось силами разработки лидеров - например, IBM.
Важная подробность. Sun придумали хитрую систему, как нагнуть сообщество юридическим образом. Они взяли свою тестовую сюиту TCK (Technology Compatibility Kit) -очень крутую, очень нужную, очень важную технически - на самом деле. Взяли и превратили в оружие. Та штука, которая не проходит тесты из неё - не может называться словом Java. Нельзя написать какую-то опенсорсную реализацию Java, и не пройти половину тестов - к тебе сразу же придут юристы.
И всё бы хорошо, ну сделай всё по красоте, пройди тесты. Да вот только, TCK - это закрытый коммерческий продукт, который Oracle раздает только тем, кому посчитает нужным.
Когда Oracle купили Sun, практику терроризировать всех через TCK они не оставили, а даже расширили и углубили.
Возвращаемся к нашим баранам - Harmony как попытку переизобрести Java. Конечно же, Oracle отказалась предоставить Apache Foundation тестовый комплект TCK , что делало Harmony "не джавой" и приводило к куче юридических последствий.
Тем не менее, двигать вперед Harmony было вполние можно, хоть и сложно. Это вызвало конфликт: основная опенсорсная организация в мире, Apache, вышла из оракловского JCP (Java Community Process), а компании вроде IBM, Red Hat и других поддержали бойкот Oracle, требуя открытости Java.
К счастью, еще до покупки Oracle, Sun уже провела некоторую работу по превращению Java в опенсорсный проект. В результате, появился проект OpenJDK - это то, что люди сейчас подразумевают, когда говорят слово "Java". Он был уже более открытый и с более нормальными лицензиями (внутри GPL, с нюансами).
Когда Oracle пошло на попятную и дало зеленый свет тотальному опенсорсингу OpenJDK, IBM присоединилась к OpenJDK, а Harmony закрыли.
OpenJDK стал эдаким псевдостандартом: его код стал стандартной (и единственной реально работающей после смерти Excelsior Jet) реализацией Java-как-рантайма, а его опенсорсные процессы стали рельсами для дальнейшей разработки Java-как-проекта.
Немного технических подробностей. Eclipse OpenJ9, Azul Zing/Zulu, Amazon Corretto - всё это живые реализации, но это всё упражнения над форком кода OpenJDK со своими фишками. И все эти организации бегают на очень коротком поводке, любая попытка в индивидуальные супер инновации - нарушение стандарта Java - добро пожаловать к юристам.
Замечаение для джавистов: после почившего Excelsior, из всех них самая свободная трактовка идеи - это OpenJ9. Это отдельная реализация JVM, исторически происходящая из IBM J9, компактного рантайма, специально созданного для максимально эффектвного исполнения на девайсах пониженной мощности. А самая раузмная для повседневного применения, особенно вместе со Spring - это Liberica JDK. Про Либерику - это уже некое мое личное мнение, я не стану спорить, если вы найдете преимущества у кого-то еще.
В свете общего охлаждения индустрии к Java как технологии, этого вполне хватило. Почему охлаждение? Ну там как бы другие разрабочики технологий на месте не сидели и породили множество других рантаймов. Возможно, не настолько крутых, эффективных, и удобных - но там можно было не иметь дела с Oracle, и в наше безумное время это уже само по себе фича!
Процесс опенсорсинга был не простым и не приятным. Основной когда-то фреймворк, Java Enterprise Edition, Oracle зажали на 10 лет. TCK для JavaEE отправился в опенсорс в 2017. И по моим ощущениям, это был какой-то поворотный момент, когда Oracle просто перестали считать Java серьезным бизнесом и спустили всё на тормозах. Настолько вот антиобщественные у них настроения: или это бизнес, или это сообщество, третьего не дано.
Тем не менее, Oracle кошмарить разработчиков не бросила, просто по-другому. Иск между Google и Oracle по поводу использования Java API в Android длился около 11 лет и закончился победой Google.
Вообще всё существование языка Go - это просто работа над ошибками Google про то, как не иметь дело с Oracle. Изначальный Go это по сути Java без дженериков версии 1.4 (весна 2003 года) с нормальным компиятором в нативный код (в Java появился в 2018 в составе GraalVM, но по сравнению с Go он пока почти всем проигрывает). Как язык программирования Go, все еще хуже Java, хотя они пытаются пройти по ее пути - например, добавили дженерики и улучшили сборщик мусора. Тем не менее, вообще никакого Go могло бы и не быть, если бы Oracle зачем-то не начало это безумное судебное разбирательство на 10 лет длиной.
Да, кто-то может сказать, что на самом деле Go - это боль от компиляции C и сложность управления зависимостями в больших кодовых базах, а совсем не Oracle. Я не буду спорить про то, что Go появился бы и без проблем с Java. Я поспорю только с тем, что Go в нашей ветке мультивселенной, и Go в той ветке где Java не было - один и тот же язык.
Казалось бы, добро победило? Не совсем. Упаси тебя бог где-то использовать слово Java без согласования. Половина Oracle - это не программисты, а юристы, и ты, вот лично ты - не Google. Ты не сможешь с ними судиться 10 лет.
Я очень сильно люблю Java и значительная часть моей жизни была с ней связана. И вся эта грязь очень сильно портит желание людей иметь с этим дело. Есть какой-то момент, когда крови и грызни собирается настолько много, что отмыться от нее очень сложно.
Тем не менее, сейчас Java занимаются крутые, адекватные люди. И наверное, она придет к успеху. Будем надеяться.
А вот с Microsoft этого так никогда и не произошло. Нет никакого общественного объединения или коммерческого фронта Войск Света и Добра, которое бы умудрилось взгреть все их тёмные практики. Впрочем, и C# не то чтобы какая-то жизненно важная штука, чтобы всем этим заниматься. Когда Java только появлялась, она была единственной и поэтому жизненно важной, а C# уже нет.
А приводит это к тому, что экосистема C# - с гулькин хуй. У тебя есть несколько крутых фреймворков имени Microsoft, несколько известных опенсорсных проектов... и всё. Нет такого, что как в Java или JS/Node ты сидишь и час выбираешь, какую бы библиотеку из сотен использовать, чтобы сложить два числа.
Rust тоже зашкварился о похожие проблемы. В 2023 году черновик их политики вызвал огромное бурление говн. Например, они запрещали использовать слово "Rust" в названиях crates, библиотек, репозиториев, инструментов для Rust, доменов/поддоменов и софта на Rust без лицензии. Бурление говн было настолько сильным, что заставило Rust Foundation отменить это решение.
Но самое главное, что мы из этой истории узнали: в Rust сидят примерно такие же по майндсету чуваки, как в Oracle. Да, они уже научены горьким опытом Oracle и быстрее реагируют на мнение сообщества. Но в голове-то то же самое. Кто знает, что они придумают в следующий раз?
Для меня пока что островком свободы кажутся ECMA Script, also known as JavaScript (слово "JavaScript" принадлежит Oracle, там же слово "Java"!!!!!, поэтому джаваскрипт джаваскриптом называть нельзя. Я уже говорил, что Oracle - контора пидорасов?).
Несмотря на доминирование Google/V8 и Apple/JavaScriptCore в деле высокопроизводительного JS, вся остальная экосистема - это огромная Вавилонская Башня из проектов настолько разных и никак между собой не связанных, что ты как будто бы глядишь на мир из глаз Доктора Стренджа. И тем не мнее, всё это работает, причем - работает вместе! Внутри одного веб-интерфейса, или внутри одного бэкенда! На все это действительно сложно как-то повлиять корпорациям и внедрить туда свой тоталитарный контроль.
Второй островок свободы - это C . Тут есть два нюанса.
Первый: C разрабатывается большими плохими зубастыми компаниями. Но их МНОГО. И они разрабатывают всё это огромным комитетом, куда входят все. Если одна компания из многих начнет выпендриваться, то ее тут же сгрызут. Это чудесно, рынок в действии.
Второй: сама природа современного C эклектична. По сути, почти каждый участник сообщества может делать всё что угодно, хоть в лес, хоть по дрова. И ему ничего за это не будет ни от каких юристов. Это супер важно: чтобы разработать фичу нужно быть гениальным инженером - и это возможно. Бороться с Oracle и Microsoft в суде - невозможно. Это огромная разница.
А еще, нет какого-то человека, который бы знал "весь C " и мог придумать идеально совместимую фичу. После чего объявить себя диктатором, который Знает Как Правильно Нужно. Это задает здоровый тон анархизма.
Для меня это самое главное. Не знаю как вам, а для меня наличие диктатуры, какого-то единого Великого Верховного Магистра, который Знает Как Надо - это настолько ужасно и чудовищно, что перекрывает примерно любые другие плюсы. Подчиняться диктатуре можно только если альтернатива - прозябание или смерть. Диктатура противна всему человеческому, а диктаторов совершенно естественно ненавидят.
И всем был бы хорош C : и крутых фичей у него намного больше, чем в любом из популярных языков (включая C#). И разработка его ведятся круто и демократично. И работает он быстро. НО СИНТАКСИС - ПОЛНОЕ ГОВНО. До изобретения Perplexity мы даже не могли нормально загуглить программу на C - гугл воспринимал это как мешанину из спецсимволов.
И вот какую мысль хочется вкинуть под конец. Мы вступаем в эпоху, в которой люди перестают писать код на Языках Высокого Уровня. Теперь всё за нас пишут роботы.
Роботу, в целом, всё равно, на чём писать. Языки типа Java и C#, основная фича которых была в том, что писать на них было комфортно и удобно - должны потерять приоритет и уйти в тень, в тот очень небольшой загончик софта, который все еще будут писать люди. Банки, медицина, космонавтика - всё это будет на Java. Везде, где торгуют не столько софтом, сколько рисками и страхом. И там людям придется продолжать мириться с загонами Oracle.
А вот все остальные в скором времени будут писать программы на обычном английском языке. А потом будет Нейролинк и языки станут не нужны.
В какой из "языков высокого уровня" превратит нейрость вашу спецификацию зависит уже не от удобства этого ЯВУ для использования, а от конкретных технических характеристик: насколько качественный код генерит нейросеть, как рантайм языка управляет ресурсами, насколько быстра компиляция, насколько быстрые итерации разработки в целом.
И может оказаться, что языки будущего - это не Go и не Java, а всеми забытые C /C. Может быть даже, ассемблер. Может быть даже, перфокарты - не обычные, а квантовые. Хорошая новость: никакой из этих языков вам не нужно будет знать сильнее, чем вы сейчас знаете ассемблер и Си. Разработчикам каких-то очень конкретных специальностей, типа "перформанс-инженер", наверное, нужно будет очень изредка забежать и поправить какой-то сложный случайный баг. Но для всех остальных всё напишет нейросеть, и это чудесна.
Для соблюдения формальной корректности, нужно явно сказать, что по состоянию на начало 2026 года, утверждение "роботу всё равно, на чём писать" - спорное и скорее неверное. Качество генерации кода сильно зависит от языка (объём тренировочных данных, типизация как костыли для LLM, тулинг для верификации). Например, при написании кода на C у робота точно те же проблемы, что и у человека - он не может уследить за потоком памяти, отчего пишет совершенно неработающую ерунду. Даже Claude Code, даже GrokSuper Heavy.
Все это заслуживает отдельного разговора, но размывает скоуп статьи. Напишу отдельно.
И самое главное: написание кода через AI на разговорном языке — это настоящая свобода. Разговорный язык не принадлежит какой-то коммерческой компании, которая заставила бы вас говорить только то, что ей нужно. Сделать хорошее техническое решение — сложно, но не продолбать свою свободу может оказаться еще сложнее.
Итого: учитесь писать на английском/русском/китайском и внятно излагать свои мысли. Имейте свои мысли, чтобы было чего излагать. В самое ближайшее время это понадобится.