Skip to content

Instantly share code, notes, and snippets.

@spadarjauhien
Created July 2, 2018 16:10
Show Gist options
  • Save spadarjauhien/25d02552c3847edabf2d820e9e4ad5cd to your computer and use it in GitHub Desktop.
Save spadarjauhien/25d02552c3847edabf2d820e9e4ad5cd to your computer and use it in GitHub Desktop.

JS: путь от ненависти к принятию

В этой заметке я хотел бы поделиться содержанием доклада, который я делал на конференции BeerJS Summit, прошедшей 30 июня в Минске.


Примерно в ноябре 2017 года я делал доклад на тему функциональных возможностей языка Ruby в компании iTechArt, где я тогда работал. И в ходе последующего обсуждения с коллегами других языков программирования я назвал JavaScript, цитирую, “недоязыком”. На тот момент работа с JS вызывала у меня вот такую эмоцию - 🤬. Ненависть - этим словом я бы описал свое отношение к JS на тот момент.

И ведь, если подумать, причин для отношения к JS как к “недоязыку” можно найти немало. Например, вот так логично устроена работа с датами в JavaScript:

https://gist.github.com/e9366b6ab64667c2c5a11dbd8033dbf9

Л - логика… И примеров такого неожиданного поведения можно найти довольно много…

Однако почему такое поведение вызывает у меня эту реакцию? Почему меня это напрягает? В чем причина? А причина довольна проста: я ожидал, что JS будет вести себя как язык, к которому я привык больше. В моем случае это Ruby. Я ожидал, что функции для работы с датами в нем будут работать так, как они работают в Ruby. Что this в JS будет вести себя так, как ведет себя self в Ruby. И этот список можно продолжать очень долго…

Альберту Эйнштейну приписывают следующую фразу:

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

И в моем случае этот принцип сработал с JavaScript: когда я ожидал от JS такого поведения, какое я вижу в других более известных и привычных для меня языках программирования, я считал его "недоязыком".

Итак, причина ненависти ясна: неправильные ожидания. А почему же у меня были неправильные ожидания от JS? Кратко сформулированное объяснение этого я нашел в предисловии к книге "You Don't Know JS: Types & Grammar”, которое написал David Walsh, Senior Web Developer в Mozilla:

It was once said, "JavaScript is the only language developers don't learn to use before using it."

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

Довольно неприятно после почти 6 лет работы с JS было признать, что язык я не знаю. Но что поделаешь?.. Нужно было начинать учить его с самых азов. Я нашел мега-популярный курс по JS на Udemy и прошел его. Порой казалось, что я могу научить некоторым вещам своего "учителя”… Но реальность такова: это я плачу ему деньги, чтобы он меня чему-то научил, а не наоборот 😊 Параллельно я взялся штудировать серию книг “You Don’t Know JS”. Благодаря ей я понял, как работает this, prototype и прочие интересные концепции JS. Ну, и естественно, на этом пути мне помогали мои коллеги, которым я очень благодарен за ответы на большое количество моих вопросов.

И таким образом мое отношение к JS трансформировалось от 🤬 к 😄. Начав понимать JS и приняв его таким, каким он есть, я начал получать удовольствие от работы с ним.

И в конце этой заметки я хотел бы привести отрывок из рекламы, которую много показывали по телевизору, когда я был ребенком:

<iframe src="//coub.com/embed/xcild?muted=false&autostart=false&originalSize=false&startWithHD=false" allowfullscreen frameborder="0" width="442" height="334" allow="autoplay"></iframe>

Если и у вас есть негативное отношение к какому-нибудь инструменту, с которым вам приходится работать, быть может, вы просто не умеете его готовить? 😉


Подписывайтесь на мой канал в Telegram, посвященный разработке. Ему еще меньше недели (на момент написания заметки), но я твердо намерен его развивать и постить туда всякие интересности 😊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment