Сегодня мы с вами обсуждаем традиционную тему — сравнение попарно двух языков программирования. В этот раз у нас достаточно хайповая парочка: Java и JavaScript. Здесь должно быть 100500 шуток и по поводу того, как новички путают эти языки, и по поводу, как рекрутеры пытаются нанять Java разработчиков на JavaScript вакансию и наоборот. Но мы все же их пропустим и перейдем сразу к делу.
О схожести названий
Для любого человека, который впервые попадает в ИТ-отрасль, название Java и JavaScript звучат похоже. Более того, возникает ощущение, что они точно как-то связаны. И тут есть проблема — они связаны, но совсем не так, как думают многие. Между собой они не имеют практически ничего общего, за исключением более-менее похожего синтаксиса. У них разная область применения, они построены на совершенно разных принципах и так далее. А связаны эти языки маркетингово.
В 1995 компания Sun, ныне купленная Ораклом, вывела на рынок язык Java. Он изначально использовался для написания аплетов. Кто-то из старичков-программистов может еще помнит, что это такое. В то время на веб страничке зачем-то загружалось приложение и там что-то делалось. Я видел всего один-два раза, когда апплеты действительно имели какой-то бизнес смысл, но в большинстве случаев они были какой-то ересью. Но в них вкладывалось очень много труда, денег и рекламных бюджетов. В результате слово Java было безумно популярно в середине 90-х годов, и все кто мог, пытались получить выгоду с такого хайпа.
Компания Netscape, которая выпускала одноименный браузер, изобрела скриптовый язык для того, чтобы работать в коде HTML браузера. Они тоже не упустили возможность породниться с Джавой. Логика была такой — все привыкли, что для работы с браузером нужна Java, а у нас скриптовый язык, значит его можно назвать JavaScript. Эта “гениальная” идея привела к тому, что Netscape пришлось разбираться с Sun из-за названия, а сейчас приводит к большой путанице. Вот такой маркетинговый курьез.
С тех пор Java ушла в бэкенд и фактически исключительно там используется, а JavaScript остался там же где и был — преимущественно языком фронтенда.
Области применения языков
JavaScript — это язык фронтенда, но не только. Подавляющее большинство JS разработчиков — фронтендеры, т.е. люди, которые пишут красивенькие приложения, которые работают в браузере пользователя. Если вы когда-нибудь пользовались, например, Gmail или каким-то веб-приложением (рассчитывали бухгалтерию, через Вчасно оформляли документы и пр.) — все это single page application. Т.е. вы никуда со страницы не переходите, а делаете все что нужно в дополнительных окошках — все это написано на JavaScript с прмощью каких-то фреймворков. Например, Gmail написан на Angular, разработаным Google, Facebook разработан на React и т.д.
На бэкенде JavaScript есть на стороне сервера. Там он используется в виде node.js. Node.js — это вырванный из браузера движок V8 (на котором, собственно, и работает JavaScript) и положенный на сервер. Таким образом он выполняет все команды JS, причем выполняет довольно быстро и достаточно качественно работает.
Java на сегодняшний момент фактически полностью ушла в крупную разработку на беке. Точнее сказать в Enterprise разработку — в автоматизацию крупных предприятий. Многие говорят, что Джава — это исключительно про бэкенд, но это не совсем правильно. Обычно бэкенд и фронтент — это сопоставимые по размеру сущности. Если же мы говорим про Java, то бэкенд во много-много раз больше части фронтенда, поэтому фронтенд обычно даже не принимают во внимание. Но он есть. Да, у обычного приложения, написанного на Джаве, есть веб-интерфейс. Если вы представитель крупной компании и у вас работает 10-20-30 тысяч сотрудников, очень дорого устанавливать на компьютер каждого из них какой-то особенный софт. За ним нужно следить, обновлять и пр. Гораздо проще сделать у этого софта web-интерфейс, то есть пользоваться им через браузер, потому что браузер есть на любом компьютере по умолчанию.
На Java пишутся огромные приложения, фактически, самые большие в нашей отрасли. Практически все банки, все телеком-компании, все финтех компании, все платежные системы и прочее — все это написано на Java. Исключение составляют новомодные стартапы, которые часто пишут на Node.js. У всех крупнейших компний под копотом именно Джава: Shell, Oracle, Wall Street Journal. Почему? Потому что основы должны быть стабильными и гарантированно работать. Java подходит для этого как нельзя лучше.
Зарплаты разработчиков Java и JS
Тут все довольно своеобразно. Если брать сухие цифры, то зарплата программистов одного уровня на разных языках будет +/- одной и той же. Различия будут только в софт скиллах — у кого они лучше, у того зарплата будет больше. Но при этом джавовские разработчики работают на крупных проектах, которые тянутся десятилетиями, у них достаточно стабильная и ненапряжная с точки зрения Work Life Balance работа. С другой стороны очень много работы с Legacy кодом, намного сложнее разобраться в предметной области и понять, что, собственно говоря, хочет заказчик. В крупной корпорации настолько сложная предметная область, что она часто на голову не налезает. Однако проекты обычно медленные и вы потихонечку там копаетесь и разбираетесь. В энтерпрайзе чудовищного размера бюджеты — минимальный бюджеты маленьких проектов на Джаве начинается где-то с полумиллиона долларов.
Работая с JavaScript все очень сильно зависит от того, где вы разрабатываете. Например, можно быть фронтенд-разработчиками на JS в том же самом Enterprise и иметь все теже преимущества и недостатки, что и Java-разработчик. А можно быть node.js-разработчиком. Это достаточно новая и модная технология, и ее очень любят разные стартапы. А стартапы, как вы понимаете, штука не надежная — с одной стороны можно быстренько ухватить большое количество денег, а можно ухватить отсутствие Work Life Balance, чудовищное количество переработок и выгорание. Все очень сильно зависит от того, где, как и с кем вы будете работать. Крупные корпорации с node.js работают не часто. Поскольку это более молодая технология, там все быстро меняется, поэтому может быть интересно, если вы такое любите.
Подытоживая сказанное. Java — это больше про стабильность и самые высокие на рынке зарплаты. Node.js — это про изменения, про новые технологии, тут очень высокие зарплаты на пике, но при этом не очень стабильно в целом.
Синтаксис Java и JavaScript
Оба языка Си-подобные. Это значит что программист на Java спокойно читает код на JavaScript. Если этот код, конечно, нормально написан. Дело в том, что JavaScript — это очень свободный язык, тогда как Java, наоборот, очень жесткий. Java требует, чтобы все было сделано ровно так, как должно быть. Файл должен называться также, как класс, причем должен быть использован тот же самый регистр букв. Класс должен лежать там, где должен — в том самом каталоге. Каталог должен называться так как нужно. Если он находится где-то немножко не там, если вы перепутали большую с маленькой буквы, сделали еще какие-то неточности — ничего не скомпилируется. Джава очень жестко к этому относится. И именно поэтому на ней пишут огромные системы, потому что каждый маленький кусочек просто не скомпилируется если его написать хоть чуть-чуть неправильно. Любой код, даже написанный 20 лет назад, легко поддерживается сейчас.
JavaScript — полная противоположность. На нем фактически можно писать вообще как угодно. Он динамичный, вы можете по очереди запихивать в одну и ту же переменную дату, цифру, слова, картинку, потом обратно дату и все это вперемешку. Плюс JS — еще и мультипарадигменный язык, что позволяет писать на нем практически как угодно. В результате, если вы не очень хорошо разбираетесь в JS, некоторый код понять вообще невозможно. Вам придется погружаться в другую парадигму и разбираться в ней. Более того, язык настолько свободный, что позволяет сам себя переписывать. И в результате, когда вы пишете JavaScript на некоторых фреймворках, например на jQuery, то этот код вообще не похож на JavaScript. Поэтому JS позволяет программисту творить что угодно. Это универсальный язык, очень легкий в изменениях, свободный, позволяющий очень быстро разрабатывать. С другой же стороны — язык не позволяет разрабатывать очень большие системы. Потому что если каждый программист будет писать в своем стиле, потом в этом всем будет сложно разобраться. Тогда как в Java все строго, все по правилам, шаг в сторону — расстрел.
Кроме всего прочего в Java есть встроенная поддержка безопасности, в результате чего этот язык безумно любят все финтех компаний, поскольку там безопасность особенно важна. У JavaScript к безопасности есть некоторые вопросы. Зато можно разрабатывать очень быстро.
Вакансии
Вакансий достаточно и на Java, и на JavaScript. Оба этих языка входят в топ 3-5 самых популярных языков в Мире, и Украина не исключение. Может быть есть какие-то локальные ситуации, когда какой-то язык становится более или менее популярный. Но в любом случае у вас будет более чем достаточно вакансий на обоих языках.
JavaScript, как я уже говорил, предлагает разные профессии. Это либо фронтендер со знанием соответствующего фреймворка, либо бэкендер со знанием node.js. Это две разных профессии и их надо различать. Да, бывают еще фулстек разработчики, для JS — это довольно распространенная история. Обычно это означает, что разработчик знает одно чуть получше, другое чуть похуже. В принципе с фронтенда гораздо проще переучиваться на бэкенд на node.js, потому что это тот же язык программирования. Большинство фронтендоров считает знание бэкенда огромным преимуществом.
Фреймворки
Для обоих языков создано бесконечное количество фреймворков и библиотек. Но тут есть противоположность. Java — язык основополагающий, серьезный, с обратной совместимостью. Фактически все, что разработано на Джаве, продолжает жить десятилетиями.
На Java разрабатывается, как я говорил выше, автоматизация огромных предприятий, поэтом перед языком стоят очень серьезные задачи. В результате Java — это единственный язык в мире, у которого есть целые стеки фреймворков, когда фреймворк надевается на другой фреймворк, потому еще на один и еще на один. Есть даже фреймворк, который заставляет все эти фреймворки вместе работать.
Для Java есть огромное количество глубоко проработанных серьёзных решений просто на любую задачу. Они предназначены, чтобы решать действительно сложные задачи, поэтому даже в готовых решениях нужно очень долго разбираться. Но они могут всё. Более того, почти на каждую задачу есть не одно такое серьезное решение, а несколько альтернатив. И желательно, чтобы вы знали, какая из альтернатив подходит лучше. Java необозрима как космос просто потому, что под неё уже всё давно написано. И вам нужно знать, как со всем этим работать.
JavaScript также необозрима как космос, потому что тут на каждую задачу написаны десятки, а то и сотни библиотек. В них тоже нужно разбираться. Для JS фреймворки делятся на фронтендовые: Angular, React и Vue и бекондовые: node.js.
Перспективы развития
Оба языка ближайшие 30 лет никуда не денутся. На обоих написано безумное количество кода, у обоих есть огромные армии поклонников. JavaScript ушел в опенсорс и там полностью поддерживается.
В JavaScript же постоянно какие-то новшества, все изменяется, выходят новые обновления. В общем, движуха.
Java поддерживается Ораклом, который тоже частично отдал язык в опенсорс и есть опенсорсовая версия Java. Развитие Java происходит с помощью специального комитета, куда вы как Java-разработчик тоже можете вступить и голосовать за изменение языка. Все голоса собираются, очень серьезно изучаются и так далее. Тут надо отдать должное этому комьюнити — каждая следующая версия ничего не ломает из того, что было до этого. Это очень круто. Но самых изменений очень мало.
Если вам такое нравится, то вы точно не заскучаете. Если хотите больше спокойствия — то тогда Java. Да, там много нужно выучить, но все что вы выучите останется с вами навсегда.
Какой язык выбрать
Попробуйте и то и другое. Как по мне, эти языки находится прямо на противоположных точках спектра. Java очень стабильный язык, очень много написано, очень спокойная работа, огромное количество работы со старым кодом, вы пишите код для автоматизации крупных компаний. JavaScript дает вам полный полет фантазии, вы — вольный ветер, можете писать на фронте, может писать на бэке, можете писать какие-то странные штуки, можете найти какую-то библиотеку, о который никто не знает, но которая вдруг окажется прекрасной. В общем, в этом языке движуха и весело.
Если вы новичок и сейчас мучаетесь выбором между Java и JavaScript — попробуйте поучить оба языка. Серьезно. Никто за вас не выберет, какой из них вам подойдет лучше.
Всегда ваш Сергей Немчинский