Привет, Хабр! Мы на курсах веб-разработки в Практикуме учим студентов писать код на 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)


  1. siandreev
    16.05.2023 09:50
    +3

    в стиле React, View, Angular

    View это новый фреймворк на скрипте Java?


    1. ira-k Автор
      16.05.2023 09:50

      *ушли думать над своим поведением*


  1. vilgeforce
    16.05.2023 09:50
    +3

    Вместо тысячи слов


    1. npupoga
      16.05.2023 09:50

      plushev & python


    1. Lazytech
      16.05.2023 09:50
      +1

      Туда же: Что за черт, Javascript / Хабр
      Дисклеймер: ничего не имею против JavaScript, стараюсь не наступать на грабли (на практике с ними практически не сталкиваюсь).


      1. Lazytech
        16.05.2023 09:50
        +1

        Пожалуй, на практике мне чаще приходится не столько избегать граблей в собственно JavaScript, сколько помнить, к примеру, о разнице между статическим псевдомассивом NodeList, возвращаемом методом document.querySelectorAll, и настоящим массивом Array, поскольку в NodeList отсутствуют методы, присущие массиву Array.


  1. IvanSTV
    16.05.2023 09:50
    +1

    тут занялся потихонечку писать макросы для импортозамещающего офиса Р7 на JS.

    Короче, единственное, что нельзя сделать при этом - это описать процесс цензурно.

    Во-первых, объектная база Р7 убогая-убогая. Для того, чтобы банально посчитать количество строчек в диапазоне, например, надо весь диапазон обойти специальной функцией. Чтобы обратиться к диапазону по индексу строк\колонок, надо получать адреса конечных ячеек диапазона, сводить в текстовую строчку и передавать в таком виде. И много иных приколов, от отсутствия прерывания для макросов вплоть до того, что программно сортировка не работает, хоть самому ее пиши, а техподдержка большинство задаваемых мной вопросов вообще не понимает.

    Но во-вторых - в качестве языка макросов используется JS. Ну, и хитровывернутость JS наложилась на убогий интерфейс и кривую объектную базу Р7 - начались со сложением текста с номером, так как там текст бывает похож на номер, то что-то он складывал как число, а к чему-то добавлял постфикс, причем на одной итерации это арифметическое сложение, а на другой вдруг появляется постфикс :) Потом оказалось, что и классы, и объекты поддерживаются в JS странным способом, и совсем не просто получить наличие свойства элемента в коллекции - надо перекидывать в массив. Потом еще с переменными начинается кавардак - одно неверное движение, и переменная становится массивом. И количество таких приколов по мере написания каждый день растет.
    То, что на VBA я написал за пару дней, растянулось на неделю, и это не конец.

    Одним словом, изучайте JS. Захер-Мазох одобряет эту статью. А маркиз де Сад уже лайкнул.


    1. Lazytech
      16.05.2023 09:50
      +2

      То, что на VBA я написал за пару дней, растянулось на неделю, и это не конец.

      Когда-то немного программировал на VBA для Excel, а в последнее время пишу код в основном на JavaScript. Возможно, я чего-то недопонимаю, но по моему опыту современный JavaScript (ES 2015+) очень и очень крут. Что касается VBA, я давно не имел с ним дела, но он вроде застыл в развитии еще в конце прошлого века...

      Если не затруднит, приведите примеры кода, демонстрирующие "хитровыверность" JS. Возможно, вы просто не умеете готовить кошек? :)


    1. 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 аккуратно отформатированы.


  1. dopusteam
    16.05.2023 09:50

    Три самых популярных фреймворка —  Angular, React и Vue

    React - не фреймворк


    1. Lazytech
      16.05.2023 09:50
      +2

      Библиотека, фреймворк - как будто это принципиально, когда все и так понимают, о чем речь.


      1. dopusteam
        16.05.2023 09:50

        Не все это понимают.

        И это не повод писать неправильно.


        1. 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.

          Хотя, возможно, вы предложите что-нибудь получше.