Привет, Хабр! Мы на курсах веб-разработки в Практикуме учим студентов писать код на HTML, CSS и JavaScript. С помощью этих языков можно делать практически всё: HTML отвечает за структуру, CSS — за внешний вид, а JavaScript — за функциональность сайта или приложения. Но подходит ли JavaScript в качестве первого языка программирования? Мы решили разобрать этот вопрос по косточкам вместе с экспертами курса, и вот что у нас получилось.
За что любят JavaScript
JavaScript — самый популярный язык программирования в мире, если судить по опросам разработчиков. Ведь только его можно использовать в браузере. Есть ещё альтернатива — WebAssembly (или Wasm), но его нельзя считать полноценной заменой.
JavaScript широко применяется в веб-разработке для создания браузерных приложений, на нём можно писать полезные инструменты, консольные приложения и даже компиляторы, хоть это и не популярно. А ещё его можно запускать на сервере с помощью Node.js. Поэтому JavaScript применяют и в серверной разработке — и для полноценных, и для так называемых промежуточных серверов. Вторые общаются с реальным бэкендом, написанным на Java, Kotlin или другом языке, и агрегируют данные в правильной форме, чтобы отправить их на фронтенд.
Преимущества JavaScript для новичков
Выбор первого языка зависит от бэкграунда новичка и опыта, который он хочет получить. Но у этого языка есть особенности, которые облегчают его изучение:
Популярность. Благодаря популярности у языка огромное комьюнити. Если новичку нужна помощь, ему не составит труда её найти. Это могут быть каналы в Telegram и Discord, форумы, Stack Overflow, где разобрано бесчисленное множество вопросов разного уровня сложности по JavaScript. Решение большинства проблем новичков можно найти именно там.
Количество инструментов и библиотек. Это означает, что решение проблемы вы, скорее всего, найдёте в виде библиотеки — готового кода, который можно скачать и использовать в проекте. Но иногда это может и навредить, потому что качество кода в этих библиотеках бывает сомнительным. С опытом вы научитесь определять качество кода «на глаз» и понимать, какое решение можно задействовать, а что лучше написать самому. Готовые библиотеки помогают быстрее выполнять практические задачи — главное, использовать их с умом и не создавать дыры в безопасности.
Удалённость от железа. Чем больше необходимо знать и понимать с самого начала, тем сложнее эффективно работать с языком. Например, в C, C++, Go, Rust нужно предварительно изучить слишком много сложных концепций. А ещё благодаря близости к железу неумелым кодом проще что-то поломать.
В JavaScript нет управления памятью. Не нужно вручную определять память для наших данных, всё это автоматизировано. В самом языке нет статической типизации. На продвинутом уровне статическая типизация пригодится, но для этого существует надстройка в виде Typescript. Новички могут сосредоточиться на самом программировании, где типы не так важны.
Используется в единой веб-экосистеме. А значит, код на этом языке можно запускать везде. По сути, это единственный язык, который работает в браузерах. Благодаря Node.js его можно запускать на сервере и писать на нём полноценные серверные приложения. Если сильно упростить, можно сказать, что серверные приложения, написанные на Node.js, ничем не уступают остальным — написанным на Python, Ruby или других популярных языках.
Моментальное исполнение. Из-за того, что код можно запускать прямо в браузере, у JavaScript нет стадии компиляции. А значит, то, что вы написали в консоли браузера, сразу же исполнится. Вы сразу видите результат, впрочем, как и допущенные ошибки.
Такая наглядность — особенность фронтенда в целом. JavaScript стал помощником для разработчиков, которые лучше воспринимают информацию визуально. А ещё это хороший способ обучения для новичков, особенно тех, кто приходит в программирование без опыта.
Достаточно браузера. В Unix-системах по умолчанию встроены Python или Ruby. Однако, чтобы начать программировать на большинстве других языков — C, Go, Rust и так далее, — нужно установить их исходники себе на компьютер. Только так вы сможете использовать команды для сборки и запуска своего проекта. Для JavaScript этого не требуется. Если вы не собираетесь создавать серверные приложения, всё можно делать прямо в браузере. Для этого существует много сайтов, где можно писать полноценные приложения, не устанавливая себе редакторов кода.
Количество фреймворков. Концептуально все фреймворки решают одну задачу: создавать веб-приложения в браузере, — но подходят к решению по-разному. Поэтому разработчик может найти удобный и комфортный способ — в стиле React, Vue, Angular или чего-то ещё. Все эти фреймворки отлично подходят для написания приложений и постоянно развиваются.
Три самых популярных фреймворка — Angular, React и Vue. Чуть реже упоминаются Svelte, Preact.
Angular изначально предлагает больше средств для написания приложений. В нём есть не только возможность писать компоненты и отрисовывать их в браузере, но и встроенные инструменты для работы с сетью, для получения данных, управления состоянием. Этот фреймворк подходит тем, кто хочет взять готовое решение и не думать об установке дополнительных компонентов.
React — самое популярное решение для написания приложений. Он не содержит готовых инструментов для работы с сетью, с управлением глобальным состоянием или чем-то ещё. Но из-за популярности фреймворка на нём решено много проблем, и на его основе создано несколько других фреймворков, уже содержащих эти инструменты.
Например, Next.js даёт возможность сразу же писать код с рендерингом приложения на сервере. Большинство продуктов Яндекса сделано на базе React — Яндекс Недвижимость, Яндекс Маркет и другие. Визуально это не определить, потому что по готовому приложению не понять, на чём оно было написано. Весь смысл фреймворков в том, чтобы выбирать удобные инструменты в процессе разработки — исходя из того, какие проблемы понадобится решать.
Vue популярен в PHP-сообществе. У одного из самых распространённых PHP-фреймворков Laravel удобная c ним интеграция. Также его любят Python-разработчики. Django и Flask — популярные фреймворки для написания веб-приложений на Python, и они часто идут в паре с Vue.
Много вакансий. Популярность языка приводит к постоянному появлению большого числа вакансий на рынке — да, конкуренция высокая, но работы и правда много. Вакансии разнообразны, на любой вкус — есть предложения и от стартапов, и от цифровых гигантов, и от аутсорсинговых компаний с постоянной сменой бизнес-проектов.
Специфика JavaScript
JavaScript — язык, на котором легко начать программировать, но добиться настоящего мастерства сложнее. Чем дальше вы углубляетесь в продвинутые концепции, тем больше трудностей встречаете на пути.
Погружение в асинхронное программирование. Оно широко применяется в JavaScript, поэтому разработчику необходимо разобраться, как это работает. Есть много разных способов асинхронной работы: Callbacks, Promises и Async/Await. С другой стороны, асинхронность — продвинутый уровень работы в большинстве языков. Когда вы сможете усвоить этот концепт, на каком именно языке вы это сделаете, будет уже не так важно.
Сложнее писать в ООП. В отличие от языков с полноценным ООП, например Java или C++, в JavaScript ООП отличается от классического понимания. Там нет статических типов, всё построено через прототипы. Для разработчиков, которые переходят в JavaScript из языков с сильной ООП-базой, в JavaScript сложнее писать в ООП-стиле.
Кроссбраузерная совместимость как камень преткновения — ещё одна самобытная особенность языка. Несмотря на то что JavaScript доминирует в вебе, у каждого браузера свой движок, и не все фичи языка доступны в браузере сразу же после появления. Обычно нововведение можно использовать в одном-двух браузерах, а потом спецификацию постепенно добавляют в остальные. Опытным разработчикам, создающим более сложные приложения, кроссбраузерная совместимость порой вставляет палки в колёса, так как не во всех браузерах код может работать одинаково.
Замыкание и использование ключевого слова this — самые сложные концепции для новичков. Замыкание обычно сложно понять тем, кто только пришёл в программирование: почему одна переменная видна в одном месте и не видна в другом? Чтобы вникнуть в особенности применения this, нужно время.
Что происходит на рынке и сложности поиска работы
Конкуренция для джунов в любой сфере примерно одинакова. Чтобы точно найти работу, помимо полученных во время обучения знаний нужно выделиться на фоне остальных. На рынке JavaScript-разработки нет чрезмерной конкуренции между кандидатами. Кандидатов много, но и вакансий примерно столько же.
Есть мнение, что для повышения шансов на трудоустройство нужно знать больше фреймворков. Но на наш взгляд, их количество не слишком повлияет, если только в описании вакансии не указано именно это требование.
Преимущества новичку даёт написание пет-проектов или вклад в разработки формата open source. Но если вы в самом начале пути, это может быть сложно:
1. Нужно найти популярные репозитории на GitHub.
2. В зависимости от инструментов, которые хорошо умеете использовать, выбрать Issues, которые вам под силу решить. Хорошие мейнтейнеры библиотек думают о новичках и даже помечают Issues, подходящие для первых шагов.
Ежегодно проводится Hacktoberfest — месяц, во время которого разыгрываются призы от GitHub за участие в open source проектах. Это делается в первую очередь для того, чтобы стимулировать сообщество и привлечь помощь в те разработки, где она особенно нужна. В этот период на сайте и в соцсетях публикуют подборки Issues для новичков, распределённые по языкам и фреймворкам. Начинающие разработчики могут найти что-то по душе и предоставить свою помощь. То, что написано для open source проекта, остаётся в нём навсегда, поэтому эти достижения удобно показывать на интервью.
Пет-проекты пишут для себя, чтобы потренироваться в применении технологии, пробовать новые подходы. Даже самый простой сайт-визитка или блог поможет на собеседовании. Особенно если разработчик выкладывает код в открытый доступ, чтобы показать его будущим коллегам. Иногда этим даже можно заменить тестовое задание.
Выводы
JavaScript — отличный язык для старта в программировании, даже с нуля. С него легко начать, для этого нужен только браузер.
Разработчик получает визуальный фидбек того, что он делает, если программирует фронтенд. При этом можно переключиться и на серверную разработку, для этого не нужно переходить на другой язык.
Благодаря популярности языка вы всегда сможете получить помощь от сообщества. Ответы практически на любые вопросы уже можно найти в Cети с помощью соответствующих запросов.
А ещё у языка несколько популярных фреймворков с большим комьюнити и множество доступных инструментов и библиотек.
Работы много, но и конкуренция тоже есть. Чтобы стать привлекательнее для работодателей, стоит прокачивать пет-проекты и участвовать в open source разработке.
Комментарии (13)
vilgeforce
16.05.2023 09:50+3Вместо тысячи слов
Lazytech
16.05.2023 09:50+1Туда же: Что за черт, Javascript / Хабр
Дисклеймер: ничего не имею против JavaScript, стараюсь не наступать на грабли (на практике с ними практически не сталкиваюсь).Lazytech
16.05.2023 09:50+1Пожалуй, на практике мне чаще приходится не столько избегать граблей в собственно JavaScript, сколько помнить, к примеру, о разнице между статическим псевдомассивом NodeList, возвращаемом методом document.querySelectorAll, и настоящим массивом Array, поскольку в NodeList отсутствуют методы, присущие массиву Array.
IvanSTV
16.05.2023 09:50+1тут занялся потихонечку писать макросы для импортозамещающего офиса Р7 на JS.
Короче, единственное, что нельзя сделать при этом - это описать процесс цензурно.
Во-первых, объектная база Р7 убогая-убогая. Для того, чтобы банально посчитать количество строчек в диапазоне, например, надо весь диапазон обойти специальной функцией. Чтобы обратиться к диапазону по индексу строк\колонок, надо получать адреса конечных ячеек диапазона, сводить в текстовую строчку и передавать в таком виде. И много иных приколов, от отсутствия прерывания для макросов вплоть до того, что программно сортировка не работает, хоть самому ее пиши, а техподдержка большинство задаваемых мной вопросов вообще не понимает.
Но во-вторых - в качестве языка макросов используется JS. Ну, и хитровывернутость JS наложилась на убогий интерфейс и кривую объектную базу Р7 - начались со сложением текста с номером, так как там текст бывает похож на номер, то что-то он складывал как число, а к чему-то добавлял постфикс, причем на одной итерации это арифметическое сложение, а на другой вдруг появляется постфикс :) Потом оказалось, что и классы, и объекты поддерживаются в JS странным способом, и совсем не просто получить наличие свойства элемента в коллекции - надо перекидывать в массив. Потом еще с переменными начинается кавардак - одно неверное движение, и переменная становится массивом. И количество таких приколов по мере написания каждый день растет.
То, что на VBA я написал за пару дней, растянулось на неделю, и это не конец.Одним словом, изучайте JS. Захер-Мазох одобряет эту статью. А маркиз де Сад уже лайкнул.
Lazytech
16.05.2023 09:50+2То, что на VBA я написал за пару дней, растянулось на неделю, и это не конец.
Когда-то немного программировал на VBA для Excel, а в последнее время пишу код в основном на JavaScript. Возможно, я чего-то недопонимаю, но по моему опыту современный JavaScript (ES 2015+) очень и очень крут. Что касается VBA, я давно не имел с ним дела, но он вроде застыл в развитии еще в конце прошлого века...
Если не затруднит, приведите примеры кода, демонстрирующие "хитровыверность" JS. Возможно, вы просто не умеете готовить кошек? :)
Lazytech
16.05.2023 09:50Образцы кода в этой статье на оф. сайте "Р7-ОФИС" отформатированы крайне неудачно.
(function() { for (let run = 1; run <= 3; run++) { var result = «»; switch (run) { case 1: result = «=SUM(A5:A105)»; break; case 2: result = «=SUM(A5:A305)»; break; case 3: result = «=SUM(A5:A30)»; break; default: break; } Api.GetActiveSheet().GetRange(«B» + run).Value = result; } })();
Если там вся документация такая, то увы... Так было бы лучше:
(function() { for (let run = 1; run <= 3; run++) { var result = ""; switch (run) { case 1: result = "=SUM(A5:A105)"; break; case 2: result = "=SUM(A5:A305)"; break; case 3: result = "=SUM(A5:A30)"; break; default: break; } Api.GetActiveSheet().GetRange("B" + run).Value = result; } })();
Для сравнения можете взглянуть на репозиторий бесплатной библиотеки protobi/js-xlsx (форк более известной библиотеки SheetJS/sheetjs). Как полагается, все образцы кода в файле README.md аккуратно отформатированы.
dopusteam
16.05.2023 09:50Три самых популярных фреймворка — Angular, React и Vue
React - не фреймворк
Lazytech
16.05.2023 09:50+2Библиотека, фреймворк - как будто это принципиально, когда все и так понимают, о чем речь.
dopusteam
16.05.2023 09:50Не все это понимают.
И это не повод писать неправильно.
Lazytech
16.05.2023 09:50+1Тем не менее, во многих приличных статьях про JavaScript-фреймворки/библиотеки авторы не заморачиваются и (условно) относят React к фреймворкам. Возможно, потому, что иначе в тексте местами получаются нагромождения слов.
К примеру, я попробовал внести (ненужные, на мой взгляд) уточнения в следующий фрагмент обсуждаемой статьи.
Количество фреймворков. Концептуально все фреймворки решают одну задачу: создавать веб-приложения в браузере, — но подходят к решению по-разному. Поэтому разработчик может найти удобный и комфортный способ — в стиле React, Vue, Angular или чего-то ещё. Все эти фреймворки отлично подходят для написания приложений и постоянно развиваются.
Три самых популярных фреймворка — Angular, React и Vue. Чуть реже упоминаются Svelte, Preact.
Вот что у меня получилось:
Количество фреймворков/библиотек. Концептуально все фреймворки/библиотеки решают одну задачу: создавать веб-приложения в браузере, — но подходят к решению по-разному. Поэтому разработчик может найти удобный и комфортный способ — в стиле React, Vue, Angular или чего-то ещё. Все эти фреймворки/библиотеки отлично подходят для написания приложений и постоянно развиваются.
Три самых популярных фреймворка/библиотеки — Angular, React и Vue. Чуть реже упоминаются Svelte, Preact.
Хотя, возможно, вы предложите что-нибудь получше.
siandreev
View это новый фреймворк на скрипте Java?
ira-k Автор
*ушли думать над своим поведением*