Как часто вы задаете себе вопрос при программировании: «Что за волшебство здесь происходит?»

Никакой магии, это просто JavaScript, которого мы не знаем.

Введение

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

О викторинах

Прежде всего, мы должны сказать, что это за викторины.

Тесты, которые мы публикуем, охватывают основы JS, но не простым способом. Чтобы ответить правильно, респондент должен иметь глубокие знания JS и понимать, как движок интерпретирует инструкции.

Например, каждый разработчик знает, как объявить переменную в JS. Необходимо использовать одно из специальных слов: var, let или const.

Многие разработчики знают, как эта инструкция будет обрабатываться движком. Он делит эту инструкцию на две:

Объявление переменной (первая строка) перемещается движком поверх своей области перед запуском скрипта. И инициализация переменных (вторая строка) обрабатывается как раз в тот момент, когда движок находится в этой строке кода.

Но сколько разработчиков знают, как движок интерпретирует следующий фрагмент кода?

Чтобы ответить правильно, разработчик должен знать, как движок обрабатывает множественные объявления одного и того же имени переменной и что имеет больший приоритет: объявление переменной или объявление функции?

Этот вопрос также касается объявления переменных, но выглядит не так просто.

Вы знаете результат? Попробуй себя. (Пожалуйста, пусть вас не смущает русский язык в вопросе — вам нужно только выбрать правильный ответ)

Когда мы объяснили, как именно обрабатывается этот фрагмент кода, 94% респондентов признались, что не знали, что он работает таким образом (ах, цифры — упрямая штука!)

О расчетах

Принцип расчета прост — мы разделили все тесты по темам (всего 15 тем) и посчитали средний процент в каждой теме.

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

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

Теперь, когда вы знаете, на каких тестах основана наша статистика и как мы ее рассчитываем, давайте посмотрим ТОП-5 наиболее неудачных тем JavaScript.

ТОП-5: переменная область видимости. 46 % правильных ответов.

Для нас это была самая плодотворная тема, по которой мы легко придумывали различные задачи. Честно говоря, мы не ожидали, что прицел займет только пятое место, так как он нам кажется более сложным. Но статистика знает лучше.

Пример викторины по объему:

Попробуй себя.

ТОП-4: Обещания. 43 % правильных ответов.

Промисы — довольно простой инструмент для использования. Однако когда программисту нужно знать, как он работает «изнутри», чтобы ответить на викторину, не многие из них знают ответ.

Например, чтобы ответить на следующий тест, вам нужно знать алгоритм изменения состояния промиса:

Попробуй себя.

Если вы хотите глубже погрузиться в то, как работают Promises под капотом, прочитайте эту статью:



ТОП-3: Подъем. 34 % правильных ответов.

Мы считаем, что подъем — одна из самых интересных тем в JavaScript, потому что она заставляет задуматься о том, как работает JavaScript. Это дает вам понять, что движок обрабатывает JS-программу в два этапа. Что, в свою очередь, может привести к тому, что вы зададитесь вопросом, является ли это интерпретируемым языком или нет.

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

Один из многих примеров подъема:

Попробуй себя.

ТОП-2: модули ES6. 32 % правильных ответов.

Можем ли мы изменить импортированную переменную, чтобы изменение применялось в исходном модуле? Изменится ли импортированная переменная, если она будет изменена асинхронно после экспорта? Наша статистика показывает, что в среднем только 32% разработчиков знают ответы на эти и другие вопросы о модулях.

Попробуй себя.

Эта статья поможет вам разобраться во всех нюансах модулей ES6 (вы не представляете, сколько их) и стать профи в этой сложной теме:



ТОП-1: переменная «эта». Контекст выполнения. 30 % правильных ответов.

У нас есть победитель! Вы удивлены? Мы не! Наш 12-летний опыт интервьюирования инженеров JS говорит нам о том же. Понимание «этого» всегда было самой сложной задачей для разработчиков. И это одна из причин, по которой React.js мигрировал из ООП в функциональное программирование.

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

Попробуй себя.

В заключение

Прискорбно слышать, что многие разработчики не считают необходимым изучать JavaScript целиком, со всеми его особенностями и краеугольными случаями. Зачем знать, что выведет код, если можно запустить и проверить. К сожалению, так думает большинство разработчиков. Новички вообще часто почти не тратят время на сам JS и сразу переходят к изучению фреймворков. В Intspirit мы считаем, что в языке нет ничего неважного и не заслуживающего изучения. Javascript — сложный язык со множеством подводных камней, и выучить его от начала до конца очень сложно, если вообще возможно. Но это не значит, что мы не должны пытаться.

В этот ТОП провалов входят только темы, которые можно классифицировать. Помимо них мы публикуем викторины, охватывающие более специфические возможности JS. В следующий раз мы поделимся ТОПом самых неудачных викторин среди всех тем, подпишитесь, чтобы не пропустить.

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

Что для вас самое сложное в JS? Поделитесь в комментариях.