Js И Его Запретные Секреты

Так получилось, что наша компания искала разработчиков.

В своей работе мы используем стандартный набор веб-технологий: HTML, CSS, Javascript, PHP, SQL. Во время интервью я был не столько расстроен, сколько обескуражен.

Вопросы, на которые не смогли ответить кандидаты, а именно разработчики с опытом работы от трёх и более лет, были тривиальными.

Они практически не затрагивали специфику фреймворков или сложных алгоритмов; это были просто проверочные вопросы на знание языка и программирования в целом.

Не задачи, подчеркну, а просто вопросы.

Никто не требовал от претендентов написать на доске программу для разбора обратной польской записи.

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

Меня особенно впечатлили навыки работы с JS, и я хотел бы предоставить вам список проблем, которые вызывают трудности у опытных разработчиков.



Вопросы



Ключевые слова объявления переменных (var, let, const)

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

Люди действительно не понимают, зачем вообще нужны все эти тонкости.

Для многих людей let и var эквивалентны, просто var устарела.

Большинство кандидатов совершенно смутил вопрос «со звездочкой», почему в «константном» массиве можно менять значения элементов, а в «константной» строке нельзя изменить текст.

Поведение различных типов данных при передаче в качестве аргументов функции

Различные вариации на тему того, как выполнение функции повлияет на переданные в нее аргументы разных типов.

Достаточно понять разницу передачи по ссылке и по значению.

Легко запомнить, что массивы и объекты передаются по ссылке.

Как правило, незнание этой особенности не создает проблем; это просто приводит к написанию неэффективного кода.

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



Преобразование и сравнение различных типов данных

Известная особенность языка, например:
  
  
   

(0 == "0") == (0 == "") ("123" == " 123 ") != (123 == " 123 ")

С одной стороны, это порождает массу способов выстрелить себе и невинным коллегам в ногу, с другой – позволяет писать лаконичный код. Следует отметить, что === устраняет большую часть этих проблем, но в некоторых ситуациях сильно усложняет код. Учитывая, что JS по-прежнему является языком интерфейсной логики, пытаться писать на нем сложные вычисления по меньшей мере странно.

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

Отдельно хотелось бы уточнить, что вопросы были не надуманными головоломками, а вполне рабочими ситуациями типа 'Abc' > 'abc' или 0,1+0,2==0,3.

Замыкания и это

Большинство разработчиков в целом понимают эту концепцию, но не все.

Обычно проблемы возникают во вложенных функциях.



function a(){ this.counter = 1; function b(){ this.counter = 2; } b(); console.log(this.counter); } a();

Что будет выведено на консоль? И если так?

const b = {a: a}; b.a();



для(.

,.

,.

), для (…в.

), для (…из.

)

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

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

Не представляю, как можно не знать азов, но наткнулся на такой самородок.

Как правило, for (.

in .

), for (.

of .

) требуются для записи обходов сложных структур и сборки данных из нескольких разных типов источников.



Обработка исключений (попробовать, поймать, наконец, выбросить)

Это тоже очень странный случай.

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

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



Методы работы с массивами — Map, Reduc, forEach, Filter, Every, Some, indexOf, include, splice.

Базовый функционал, на котором основано большинство стандартных операций с массивами.

Сохранение копии исходных данных, сортировка таблицы, фильтрация результата, поиск по пунктам меню, форматирование.

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

Я думаю, это нормально – запомнить подпись первых трёх из них и знать, что гуглить, чтобы найти остальные.



Асинхронное/синхронное выполнение кода

К сожалению, сейчас это жизненно важные знания.

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

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

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

Заключение

Это были вопросы с собеседования для посредника с зарплатой около 2 тысяч долларов на человека.

Кандидаты с многолетним опытом не смогли на них ответить.

Что пошло не так?.

Не хотелось бы показаться излишне высокомерным или высокомерным.

Я не придумывал абстрактных задач со смешными требованиями, я брал только практические вещи, с которыми сталкиваешься постоянно.

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

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

Однако незнание основного синтаксиса языка никак не объяснимо.

Совсем.

Ну просто невозможно быть разработчиком, не зная языка.

Реально используемых ключевых слов в JS около 20 (экзотику типа void или with мало кто использует в реальных задачах).

Это для вечернего обучения.

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

Будьте старшим разработчиком React или коллегой-евангелистом Angular, но, пожалуйста, не заявляйте, что знаете Javascript. Теги: #JavaScript #никто не читает теги #пятница

Вместе с данным постом часто просматривают: