logo
Ещё

JavaScript – лучший и легкий язык программирования для начинающих

Если вы только приступаете к процессу изучения программирования, первый вопрос, который обычно возникает: а какой язык программирования выбрать? Всего языков – тысячи, популярных (и прибыльные в плане работы) – как минимум десятки. В основном новичкам советуют изучить JavaScript или Python, но советчики обычно перечисляют субъективные и непонятные новичку плюсы того или иного языка. Ниже мы в деталях (и человеческим языком) разберем плюсы и минусы JavaScript и покажем, почему его имеет смысл сделать своим первым языком программирования.

Самый легкий язык программирования

Увы, для начала нам придется нагрузить вас теорией по языкам программирования – без базовой теории вы не будете понимать плюсы, минусы и применения JavaScript. 

Низкоуровневые и высокоуровневые языки программирования

Итак, начнем с низкоуровневых и высокоуровневых языков программирования. Язык программирования сам по себе – это прокладка между процессором и программистом, с помощью ЯП программист может сказать процессору, что нужно сделать такие вот математические вычисления. Но говорить нужно на каком-то языке, и чем ближе этот язык к нашему, человеческому языку – тем проще нам давать указания. Самые низкоуровневые языки – это языки ассемблера, они представляют собой набор прямых инструкций процессору: возьми из памяти столько-то байт, переложи их в регистры процессора, дождиcь выполнения сложения, вынь готовый результат из специального регистра процессора, положи его вон в тот участок оперативной памяти. Естественно, это: а) неудобно, поскольку вам нужно оперировать с шестнадцатеричными адресами; б) долго, потому что вам нужно руками прописывать каждую операцию; в) небезопасно, поскольку очень легко ошибиться и все сломать. Но низкоуровневые языки программирования очень и очень нужны, без них работа с процессором невозможна в принципе.

Поскольку работать с ассемблерами неудобно, программисты придумали высокоуровневые языки – языки программирования, синтаксис которых намного больше похож на человеческую речь. Если вы хоть чуть-чуть знаете английский, то строка кода

if (x > 5): print(x);
должна быть вполне понятной. Одним из первых высокоуровневых языков был C (хотя если смотреть правде в глаза, его лучше назвать «среднеуровневым», читабельность у него так себе), после него появились C++, Java, Python, JavaScript, Golang и другие. Единственный минус, который есть у высокоуровневых языков – работают медленнее ассемблеров, потому что код с высокоуровневого языка должен быть переведен компилятором или интерпретатором на машинный язык.

JavaScript – строго высокоуровневый язык программирования.

Компилируемые и интерпретируемые ЯП

Когда вы пишете что-либо, от «Hello world!» в консоль до серверных приложений, вам нужно как-то перевести ваш код на языке высокого уровня в машинные инструкции. Сами вы это, естественно, делать не будете, потому что в том и смысл высокоуровневых ЯП. Следовательно, эту работу нужно отдать сторонней программе – интерпретатору или компилятору.

Сразу отметим, что если вы встретили мнение, что «вот Java/C++/Go – компилируемый, поэтому он быстрее интерпретируемого JavaScript/Python», то можете не учитывать мнение этого человека в дальнейшем. Все языки сейчас пользуются одновременно компилятором и интерпретатором, просто в разных соотношениях. 

Но давайте все же разберемся, что это значит. Интерпретация и компиляция – это два разных подхода к переводу кода высокоуровневого языка на низкоуровневый язык процессора. При интерпретации перевод начинается с того момента, когда запускается программа: интерпретатор запускается сразу же после того, как вы дали инструкцию «Запустить» операционной системе, и строчку за строчкой переводит ваш код, тут же исполняя его.

Компиляция – это когда вы даете операционной системе команду «Запустить», она запускает компилятор, компилятор читает всю вашу программу, переводит ее в машинный код и сохраняет этот код в специальном файле, после чего программа запускается уже из файла.

В чем разница? Компилятор тратит больше времени на запуск программы (при любом изменении нужна перекомпиляция), но тратит меньше ресурсов системы во время выполнения программы; интерпретатор запускается мгновенно, но тратит больше ресурсов на исполнение. Как мы уже отмечали выше, сейчас различия существенно сгладились, потому что компиляторы научились кэшировать, а интерпретаторы научились прекомпилировать.

JavaScript – интерпретируемый язык.

Строгая и динамическая типизация

Тут все очень просто. В языках программирования есть переменные – условные контейнеры, в которых можно хранить то или иное значение. Так вот, если в контейнер можно положить любое значение (число, строку, объект или еще что-нибудь) – значит, у языка нет строгой типизации (= есть динамическая). Если вам для создания переменной нужно сказать, что «в переменной x можно хранить только строки», и после этого вы в x можете класть только строку – значит, язык имеет строгую типизацию.

JavaScript – язык с динамической типизацией.

Объектно-ориентированные и процедурные ЯП

Лет 50 назад существовали только процедурные языки – это когда вы описываете четкий набор действий, некоторые из них выносите в процедуры (чтобы использовать несколько раз), и компьютер все это последовательно выполняет. Потом появилась идея объектно-ориентированного языка – суть здесь в том, что мы вводим понятие объекта и класса: описываем сущности классами, создаем экземпляры объектов, даем им поведение, реализовываем инкапсуляцию/наследование/полиморфизм (если вы только начинаете учиться – не вдумывайтесь, это сложно и вам это пока не нужно). Так вот, парадигма ООП стала крайне популярной, и множество языков либо уже стартовали со встроенным ООП (Java), либо постепенно приобретали ООП в процессе своего развития. JavaScript – как раз из последних, к нему ООП прикручивали постепенно. При этом нужно заметить, что ООП в JavaScript применять не обязательно, даже для сложного сценария JavaScript можно пользоваться исключительно «процедурной» частью языка.

JavaScript – и объектно-ориентированный, и процедурный язык программирования.

Какой язык можно считать легким?

Теперь, по этим 4 основным критериям, мы можем объяснить вам, какой язык считать легким. Легкий ЯП должен быть:

  • Языком высокого уровня. Ни в коем случае не начинайте с С или ассемблеров – пропадет все желание учить. Высокоуровневые языки – легкие и понятные.
  • Интерпретируемым языком. Плюс интерпретируемого языка в том, что вы без лишних телодвижений (= компиляции) можете увидеть результат своего труда.
  • Языком с динамической типизацией. Сразу отметим, что языки с динамической типизацией учить сложнее, чем языки со строгой типизацией. Но когда вы в своей карьере дойдете до серьезного изучения ООП, вы с удивлением обнаружите, что динамическая типизация делает самую сложную концепцию ООП, полиморфизм, куда более простой для реализации (сейчас можете об этом не думать). Поэтому лучше сразу привыкать к языку с динамической типизацией, пусть и учиться будет сложнее за счет часто возникающей путаницы с типами, хранящимися в переменных.
  • Языком с поддержкой как ООП, так и процедурного программирования. Вы начнете с процедурного программирования, но со временем дорастете до ООП – значит, язык должен поддерживать и то, и то.

Почему JS

Потому что JS подходит по всем параметрам: это интерпретируемый язык высокого уровня с динамической типизацией и поддержкой ООП. За такой набор параметров приходится платить свою цену, но об этом – ниже.

Какие еще есть варианты

Вообще, в текущих реалиях у вас есть 2 альтернативных варианта: Python и C#.

JavaScript

Python

C#

Насколько сложно выучить

Относительно просто. Единственный момент – у JS есть некоторые странности поведения, доставшиеся ей в наследство со старых времен

Легко, если вы учите Python 3. Артефактов древности нет, единственная проблема – привыкнуть к отступам

Средняя сложность. Язык требует компиляции, имеет строгую типизацию и не самый дружелюбный синтаксис. Но на C# написано много серьезных приложений, и его все еще легче выучить, чем Java или C++

Насколько сложно настроить среду разработки

Можно писать код прямо в браузере

Придется немного повозиться с установкой интерпретатора, но все можно сделать по гайдам за 20 минут

Лучше сразу качать Visual Studio и попутно в ней разбираться

Строгая типизация?

Нет

Нет

Да

Где применяется

В основном – браузеры и серверы (Node.js)

Практически везде – есть библиотеки под любые задачи

Сложные серверные приложения, десктопные и мобильные программы, игровой движок Unity

Но есть хорошая новость: если вы знаете один высокоуровневый язык программирования, то вы знаете все высокоуровневые языки. Они слабо отличаются по синтаксису, к другой типизации можно быстро привыкнуть. Единственное серьезное отличие – набор библиотек/фреймворков у каждого языка свой, но если вы выучите ядро JavaScript, на освоение ядра Python у вас уйдет не больше месяца.

Популярные языки программирования

Согласно индексу TIOBE, популярные языки на июль 2022 года:

 

Язык

Легко выучить?

1

Python

Да

2

C

Нет, очень трудный язык (хотя платят за его знание очень хорошо)

3

Java

Не особо, Java сильно завязан на ООП и фреймворки

4

C++

Нет, он немного легче, чем С, но все еще очень трудный

5

C#

Средняя сложность, но может подойти целеустремленному новичку с большим объемом свободного времени

6

Visual Basic

Удивительно, что он до сих пор существует. Даже не думайте его учить

7

JavaScript

Да

8

Ассемблеры

Даже не пытайтесь

9

SQL

Не совсем язык программирования, но вам придется его выучить – SQL нужен, чтобы работать с базами данных, а БД есть везде

10

Swift

Примерно такой же сложный, как C#, но с ограниченной зоной применения

Преимущества JavaScript

Можно писать код из браузера

В общем-то, одно из главных преимуществ для новичков. Вы можете на лету протестировать любую инструкцию.

Большая экосистема

Хоть для изучения JavaScript и не нужны сторонние библиотеки, когда вы до них дорастете – вас приятно удивит разнообразие уже готовых библиотек и фреймворков.

Массово используется в разработке сайтов

Если у вас есть навыки – остаться без работы будет очень сложно, потому что HTML страницы есть везде, следовательно JS-разработчики тоже нужны везде.

Всесторонняя поддержка

Практически все инструменты разработчика для написания кода поддерживают JS – рекомендуем ставить Visual Studio, когда начнете заниматься более-менее крупными проектами.

Легко выучить

Основы JS можно выучить за 2-3 недели, даже если у вас нет опыта программирования.

Недостатки

Основные недостатки:

  • Не самое логичное поведение в некоторых местах. Поскольку JS изначально разрабатывался для того, чтобы динамически менять страницы сайтов (и в целом создавать сайты), о некоторых вещах проектировщики не задумывались. И когда появились новые запросы (создавать приложения, использовать сервера, а не компьютеры пользователей), проектировщикам приходилось спешно прикручивать новые функции, и не все шло гладко. Поэтому когда дело касается, например, изменения разметки HTML, то у JS нет проблем, а вот для написания кода на серверах нужно будет учитывать некоторые особенности.

  • Язык сильно завязан на сторонних библиотеках. У других ЯП прямо в ядро встроено множество полезных функций. JS этим обделен – даже простое приложение иногда приходится «пилить» с помощью дополнительных библиотек, которые еще нужно найти.
  • Снисходительное отношение других программистов. Релизы новой ECMAScript (ядро JS) не особо афишируются, поэтому для многих программистов JS так и остался языком для создания сайтов на современных браузерах; о том, что на нем можно создавать серверные приложения или что он используется в мобильный приложениях, почти никто не слышал. Поэтому вам понадобится внутренняя уверенность в себе, когда будете обсуждать JS c другими программистами.

Разбор языка JS на конкретных примерах

Любые курсы по языку программирования JavaScript справятся с описанием языка лучше нас, поэтому мы дадим один простой, но рабочий пример – чтобы вы увидели, как все это работает. Код:

var myImage = document.querySelector('img');

myImage.onclick = function() {

var mySrc = myImage.getAttribute('src');

if(mySrc === 'images/ firefox-icon.png') {

myImage.setAttribute ('src','images/firefox2.png');

} else {

myImage.setAttribute ('src','images/firefox-icon.png');

}

}

Этот простой скрипт позволяет переключить изображение на странице на другое, когда на него нажали левой кнопкой мыши. Начинается все с получения ссылки на изображение – все ссылки на объекты страницы можно получить через глобальный объект с названием «document». Мы сохраняем ссылку (или указатель, если вам так более удобно) в переменную myImage. Далее мы вешаем действие на триггер .onclick – то есть наш код произойдет, когда на объект кликнут (в JS многое завязано на триггерах). Мы берем атрибут src (адрес картинки), сохраняем его в переменную для удобства, после чего проверяем: если название картинки – firefox-icon.png, то мы меняем его на firefox2.png, в противном случае меняем firefox2.png на firefox-icon.png. Все, готово.

Сферы применения JavaScript

Технически JS можно использовать для чего угодно – хоть для создания приложений на компьютер. Но исторически сложилось так, что JS используется для того, чтобы: создавать сложные скрипты на страницах (фронтэнд); писать скрипты на стороне сервера с помощью фреймворка Node.js (бэкэнд). Во фронтэнде JS используется везде и всегда, в бэкэнде JS используется намного более редко – его «пододвигают», Python, PHP и C#.

Что почитать по теме

FAQ

В чем разница между Java и JavaScript?

Это – абсолютно разные языки, никак друг с другом не связанные. Изначально появился язык Java, и он быстро стал очень популярным, поэтому разработчики JavaScript решили запрыгнуть на хайп-трэйн и создать у программистов ложную ассоциацию о том, что JavaScript имеет отношение к Java. Ассоциация возникла, и теперь разработчики JS пытаются всячески от нее избавиться (как говорится, бойтесь своих желаний).

Как объяснить поведение переменных на картинке выше?

На самом деле все довольно просто. Краткое замечание по типам данных: “2” – это строка, в которой хранится цифра 2, просто 2 – это число. Так вот, число 2 + число 2 = число 4, тут вопросов нет. Строка “2” + строка “2” = строка “22”, две строки объединяются, если между ними поставить +. Число 2 + число 2 – число 2 = 2, все по математике. Перед объяснением последнего результата нам нужно рассказать про приведения типов. Когда JS получает задание сложить строку и число, язык переводит число в строку, после чего складывает две строки. Операции выполняются слева направо, то есть сначала JS видит (строка “2” + строка “2”) и складывает 2 строки – в результате получается “22”. После этого JS пытается выполнить (строка “22” – строка “2”), но нет никакого порядка вычитания одной строки из другой, поэтому JS решает: «окей, я попытаюсь перевести обе строки в числа, если получится – отниму, если не получится и в одной из строк есть не-цифры – выдам ошибку». Перевести строки в числа получается, и JS радостно выдает решение 22 – 2 = 20.

Как писать код в браузере?

Нажмите F12, в открывшемся меню найдите вкладку «Консоль» сверху, перейдите на вкладку. Все, можете писать код. Учтите, он нигде не сохраняется – ваш скрипт исчезнет после того, как вы закроете вкладку.


Подведем итоги

Тезисно:

  • Лучший язык программирования – это интерпретируемый язык высокого уровня с динамической типизацией и поддержкой ООП.
  • Под описание выше подходят JavaScript и Python, обычно с одного из них новички и начинают.
  • JS в основном используется в браузерах, иногда – на стороне сервера.
  • У языка есть и свои минусы: он не всегда ведет себя явным образом и сильно завязан на сторонних библиотеках.
  • Если вы только начинаете свой путь в программировании – начните его с курса по фронтэнду от Firefox (ссылка есть выше), в нем все рассказано простым языком и с живыми примерами.
Часто ищут