Це завжди цікаво попарно порівнювати дві мови програмування. На цей раз у нас досить хайпова парочка: 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 – спробуйте повчити обидві мови. Серйозно. Ніхто за вас не вибере, яка із них вам підійде краще.
Завжди ваш Сергій Немчинський