Сегодняшняя Java — это лингва франка в области программирования: как язык она проще для изучения, чем C/C++, читается более привычно, чем Perl/Lisp, и профессиональнее в использовании, чем VB/PHP. Почти не найдётся человека, который не понимает Java, поэтому при объяснении концепции запись её на Java делает её понятной всем.
А как платформа Java имеет всеобъемлющую библиотеку классов, чрезвычайно оптимизированную виртуальную машину и глубоко укоренившиеся проекты с открытым исходным кодом. В результате, что бы вы ни захотели сделать, теоретически — и даже в 99 % случаев практически — это можно реализовать на Java.
В тот момент, когда я пишу эти слова, в мире рождаются десятки тысяч строк Java-кода. Так что если «им больше никто не пользуется» — это черта смерти для технологии, то Java явно жива и чувствует себя весьма неплохо; если «можно найти работу» — это черта смерти, то Java тем более полна жизни. Я не знаю, как обстоят дела внутри страны, но на любом сайте по поиску работы в Европе или Америке поиск вакансий по ключевому слову Java легко покажет её доминирующее положение: она бьёт C++ и пинает PHP.
Никто не задаётся вопросом, почему она жива; мы считаем само собой разумеющимся, что она жива, — так же как я никогда не задаюсь вопросом, будет ли ещё работа, когда я завтра пойду на работу, — разумеется.
Но в таком случае можно с тем же успехом сказать, что Java достигла бессмертия. Ведь если просмотреть TIOBE в соответствии с двумя приведёнными выше определениями, вы обнаружите, что ни один сколько-нибудь известный язык программирования (и стоящая за ним технология) по-настоящему не умер. Visual Basic всё ещё жив, Delphi всё ещё жив, COBOL жив, Fortran жив и даже FoxPro жив.
Что касается ещё более нишевых примеров — вы слышали о системе IBM AS/400? Мой последний работодатель всё ещё использует её. Программисты, которые её поддерживают, получают смехотворно высокие стартовые зарплаты, потому что двадцатилетняя основная бизнес-логика компании целиком находится в ней — если она откажет, всё откажет. AS/400 тоже жива.
Так что когда я говорю «Java, иди умри / мертва», что означает «мертва»? Очень просто: её больше никто не любит.
Ответ в этом же разделе, который переписывает стихотворение Нимёллера, — идеальное эхо слов Пола Грэма: «из всех великих программистов, каких я могу вспомнить, я знаю только одного, кто стал бы добровольно программировать на Java»: девять из десяти людей, пишущих на Java, делают это «потому что так требует работа» — оставшийся один — потому что не знает ничего другого. Среди всех мотивов писать программы, какие я могу вообразить, «потому что так требует работа» — самый обескураживающий.
Жертвуя здоровьем простаты и позвоночника, просиживая долгие часы перед экраном, терпя написание программ на Java только ради того, чтобы заработать на жизнь, — по-моему, это в любом случае скучно. Если ты всё ещё можешь смеяться, молодец.
И если вы только что не переместились во времени из 1995 года, вы должны видеть, что сегодняшняя Java и вправду не так уж и привлекательна.
Что касается языковых возможностей, то вместо того, чтобы говорить, что у неё нет никаких серьёзных проблем, точнее сказать, что у её проблем уже есть множество зрелых обходных путей, таких как статические методы, которые нельзя переопределить, избыточные проверяемые исключения и недоделанные обобщения. Что действительно неудобно — это отсутствующие возможности: я могу сказать, что структуры, делегаты, async/await, обработчики событий, аксессоры, поддержка перегрузки операторов (ну, это не обязательно хорошо) и даже вывод типов в C# — всего этого нет в Java (или это можно реализовать только через сторонние библиотеки, которые лишь скребут по поверхности), не говоря уже о настоящих обобщениях времени выполнения. По отдельности кажется, что каждый пункт ничего не значит, но когда все они накапливаются, C# становится гораздо привлекательнее Java.
Эти возможности, возможно, когда-нибудь появятся в Java, как Java 7 наконец получила switch по строкам и try-with-resources, а Java 8 наконец получила лямбды. Но пока они не появятся, вам придётся терпеть вместе с раздутым, сложным и запутанным техническим лабиринтом Java EE. И благодаря Oracle вы не знаете, сколько ещё придётся терпеть — для справки: Java 8 примерно соответствует .NET Framework 3.0, а .NET Framework 3.0 был выпущен в 2006 году, когда крупнейшим игроком на рынке мобильных телефонов была Nokia.
По любым меркам, Oracle — не та компания, которая улучшает инструменты с мыслью о разработчиках. Разработчики ненавидят её сильнее, чем Microsoft, у которой по крайней мере есть хорошо организованная и подробная библиотека документации MSDN, посредственная, но постоянно улучшающаяся открытая платформа CodePlex и лысый толстяк, обливающийся потом в рубашке на сцене и выкрикивающий "developers developers developers".
А что сделала Oracle? Бросила MySQL на обочине на съедение собакам. Выгнала сообщество разработчиков OpenOffice из дома. Абсурдно подала в суд на Android.
То, что Джеймс Гослинг ушёл в отставку одновременно с приобретением Sun компанией Oracle, называют дальновидностью.
Неудивительно, что все соревнуются в изобретении новых языков на JVM и переносе других языков на JVM. Просто эти попытки слишком разрозненны, и ни одна не смогла занять доминирующее положение и дать сообществу Java надежду.
Наше текущее положение таково: с 2007 года никто не писал на Java ME; помимо нескольких проектов IDE, самой известной программой в Java SE остаётся лишь Minecraft; Java EE и Android — единственные две части Java, которые всё ещё живы и активны. Dalvik — отдельная фракция, так что тут и говорить нечего. JVM на *nix на самом деле — единственный оставшийся краеугольный камень Java как платформы. Раньше у неё никогда не было достойного конкурента — либо слишком незрелого, либо слишком незначительного — и такое положение сохранялось до 12 ноября 2014 года.
И вот ответ на ваш вопрос: Microsoft, чей генеральный директор более десяти лет назад сказал, что "Linux — это рак", теперь официально поддерживает свою основную платформу-продукт, работающую на Linux, и она с открытым исходным кодом и бесплатна.
Все поставщики услуг по всему миру, которые могут продать вам виртуальный хостинг под Linux, внезапно за одну ночь стали .NET хостинг-провайдерами. У людей, которые не любят Java, внезапно появился новый выбор: исчерпывающая документация, хорошая поддержка, понятный план развития, сильное сообщество, удобные инструменты, надёжность корпоративного уровня, а самое лучшее — 90% прежнего опыта работы с Java можно без проблем перенести.
Я никогда не говорил, что результаты этого будут немедленными. Но когда думаешь о том, что Java когда-то была настолько вездесущей — она даже сегодня работает внутри вашей SIM-карты — и всё же может ещё при моей жизни стать COBOL 1973 года, начинаешь чувствовать, насколько всё недолговечно. Я считаю, что существующие Java-системы постепенно станут legacy-кодом, и люди будут продолжать их поддерживать только потому, что их нужно поддерживать.
Новые трудности всё равно возникнут. В конце концов, тощий верблюд всё же больше лошади, а стая крыс может довольно долго глодать верблюжью тушу — чтобы облегчить боль, которую ваша нежная душа могла бы испытать от чтения этого предложения, признаюсь, что я всего лишь блоха на одной из крыс, грызущих Java (хм? Вообще-то вам совсем не больно? Видите, даже вы не любите Java) — несомненно, это будет долгий процесс. Так что если вы новый Java-программист, вам не нужно беспокоиться о развитии своей карьеры. Если только человечество не изобретёт технологию бессмертия, вы не доживёте до дня, когда не сможете найти работу из-за того, что знаете только Java.
Даже в худшем случае, если вы действительно сможете загнать себя в такой тупик, вам, возможно, стоит пораньше уйти в менеджмент.
И наконец, я не «кричал», чтобы Java сдохла, потому что это не заявление и не проклятие, а всего лишь вывод, сделанный после наблюдения за текущей ситуацией. Конечно, «сдохла» трудно интерпретировать без эмоциональной окраски, так же как когда я печатаю kill -9, трудно не заставить людей подумать, что я ненавижу этот процесс. Хотя на самом деле я его вовсе не ненавижу. Если и ненавижу, то только на мгновение.
Кроме того, риторика в духе «великие программисты выбирают только инструмент, наиболее подходящий для решения задачи, и не спорят о том, кто хорош, а кто плох»: первая половина верна, вторая — полностью миф. Не все прагматики. Есть множество великих программистов, которые спорят о том, какие инструменты хороши, а какие плохи. Тем, кто это говорит, нужно больше читать.
Заявление о заинтересованности и отказ от ответственности:
Сейчас я Java-программист. Если быть точным, когда я пишу код на основной работе, 60% этого кода — Java, включая EJB, JPA, JSF, Swing и даже GWT. Последний раз я всерьёз написал больше десяти строк на C# восемь лет назад. Я начал писать этот ответ, потому что мне было скучно ждать самолёт. Я не ожидал, что напишу так много. Я никого не пытаюсь убедить, так что если вы не согласны — ваше дело.
Источник: Zhihu