Кайл Симпсон: в JavaScript я забыл больше, чем большинство людей вообще знали

0
788
views

Сокращенный перевод статьи «Kyle Simpson: I’ve Forgotten More JavaScript Than Most People Ever Learn».

Кайл Симпсон

Кайл Симпсон, пожалуй, самый ожидаемый спикер JSNation Conference 2019. Кайл это живая легенда JavaScript, настоящее воплощение духа open source. В беседе с JSNation он поделился кое-чем из того, что знает о JavaScript, а также рассказал о том, как зародилась его любовь к этому языку.

Здравствуйте, Кайл! Добро пожаловать на интервью с JS Nation. Итак, с учетом всех написанных вами книг «You Don’t Know JS», вы сами уверены, что знаете JavaScript?

Я не думаю, что кто-либо в мире может утверждать, что знает JS, по крайней мере, полностью. Я вот честно говорю (и не для того, чтобы похвастаться), что я уже забыл больше вещей в JS, чем большинство людей знало.

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

Что, по вашему мнению, является самым парадоксальным или спорным в JavaScript?

Я думаю, самое большое непонимание (и, как следствие, споры) возникает по поводу того, как JS обрабатывает типы. Хотя его «классовая» система занимает в этом плане почетное второе место. Я вижу, что многие люди воспринимают «типы» в рамках статической типизации, к которой они привыкли, работая с другими языками, такими как C++ или Java. И поскольку у нас в JS нет такой очевидной системы типов, проявляющейся в синтаксисе, возникают идеи, что система типов JS или простецкая (в лучшем случае), или вообще не существует (в худшем). Я считаю, что система типов в JS на самом деле потрясающе мощная и, собственно, хорошо спроектированная. Не совершенная, конечно, но совершенно зря недооцененная и мало используемая.

Я не думаю, что нам нужно «исправлять» типы в JS (по примеру TypeScript или Flow). Я считаю, что нам просто нужно получше в них разобраться и более четко их выражать. Например, вопреки распространенному мнению, оператор == на самом деле более мощный и полезный в наших программах, чем ===. Фактически, он должен быть первым вариантом для выбора, а === должен применяться в крайнем случае. Но чтобы понять, почему я так считаю, вам нужно изучить типы и способ их конвертации: coercion. Я бы очень хотел, чтобы разработчики перестали просто повторять, как попугаи, что «JS-типы это зло» – я это годами слышу. Типы в JS прекрасны, и если вы не изучаете и не применяете их в полном объеме, ваши программы от этого страдают.

Что вас больше всего восхищает в JavaScript?

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

Это просто поразительно, как экспериментальный язык, созданный за 10 дней, вырос в самый широко используемый язык в мире, хотя большая часть его ядра осталась неизменной с тех самых 10 дней. Я не могу придумать, что могло привести к такому удивительному и непревзойденному успеху, кроме гения Брендана Эйха. Вокруг немало ненавистников JS, и большинство из них сетуют на него из желания, чтобы какой-то другой, «лучший» язык занял его место.

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

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

Я убежден, что никакой другой язык не был (и никогда не будет!) столь же универсальным, как JS. Он стал своеобразным «lingua franca», и причина этого в том, что он достаточно гибок, чтобы служить общим языком, своеобразным мостом в практически любых комбинациях языков программирования. Вот это меня действительно завораживает.

«You don’t know JS» это Библия наших дней для JavaScript-разработчиков. Каково это – быть живым классиком?

Прежде всего, я не эксперт по JavaScript и я определенно не считаю, что меня можно назвать «классиком». Я ужасно благодарен за то, что мне удалось оказать такое большое (совершенно неожиданно!) влияние на JS-сообщество. Когда я начал писать «YDKJS», я говорил своему издателю, что если мне удастся продать 2500 экземпляров этой книги, я буду считать, что это успех. Сегодня уже продано свыше 100 тысяч экземпляров. Я никогда и представить себе такого не мог.

Это все еще сложно осознать. Я думаю, большинство людей «зацепило» то, что я отношусь с доверием и уважением к читателям и, конечно, к своим коллегам по программистскому сообществу. И это доверие достаточное, чтобы быть уверенным: они заслуживают знать, как и почему что-то работает, а не просто слепо следовать моим инструкциям, потому что только я разбираюсь в том, о чем говорю. Я всегда стараюсь говорить и писать так, будто сижу рядом со своим слушателем (читателем) и просто разговариваю с ним, делясь тем, что я знаю и чем увлекаюсь. Я думаю, именно в этом кроется успех «YDKJS»: люди получают ощущение, что они небезразличны автору и он хочет, чтобы они узнали JS немного лучше.

Я всегда говорю людям, что единственная разница между нам в том, что я задавал больше вопросов и не успокаивался, пока не находил ответы. А потом я решил изложить эти вопросы и ответы в виде книги, чтобы облегчить другим этот путь. Я даже не могу выразить словами (а это кое-что значит, ведь я же писатель!), как я рад, что эта книга достигла цели и помогла многим людям.

Как вы «влюбились» в JS? У вас был какой-то учитель или наставник, который помог вам начать? Или вы были самоучкой?

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

Поначалу JS мне не нравился, но я его полюбил, когда начал лучше его понимать. Это определенно не была любовь с первого взгляда! Мне кажется, сильнее всего на меня в этом плане повлиял тот факт, что какую бы сложную проблему ты не пытался решить, кажется, что ты в любом случае сможешь это сделать с помощью JS.

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

Я могу написать приложение для своего телефона, для холодильника, для телевизора и даже для контроля над освещением в моем доме! Это же сбывшаяся мечта детства: иметь возможность сделать все, что угодно! Да кому ж такое не понравится?!

Вы говорите о себе как о евангелисте открытого интернета, богослове JavaScript, «open-first»-разработчике, соматеисте*. Но кто вы на самом деле по вашему мнению?

*В статье употребляется неологизм «Symmathecist». Оно образовано от греческого mathe – «изучать, познавать». Тот же корень имеет, к примеру, слово «математика». Приставка sym- на русский переводится как «со-»: совладелец, сокурсник и т. д. Автор неологизма, Джессика Керр, считает разработку процессом совместного познания. «This is a symmathesy. “Sym” = together, “mathesy” = learning». Участники этого процесса – symmathecist-ы.

Я думаю, что «open-first»-разработчик и «соматеист», вместе взятые, полностью описывают мою сущность в нашем сообществе. Я говорю «open-first», потому что я искренне считаю, что лучшие программы – те, которые мы создаем совместными усилиями, а не для того чтобы произвести впечатление на окружающих. Я всегда начинаю с предположения, что каждая написанная мной строчка это наихудшая версия этого кода, и единственный мой шанс это исправить – как можно быстрее выложить куда-нибудь этот код, чтобы другие люди помогли мне его улучшить. Я считаю такой подход самой сутью движения «open source», стараюсь придерживаться его сам и советую другим.

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

Мой ник «getify» был придуман много лет назад для описания меня как человека, «идущего и создающего что-то (идеи, сервисы и т. д.), а затем делающего это доступным для людей». В то время я даже не подозревал, что это будет связано с обучением других.

Но для меня обучение и учеба это две стороны одних и тех же усилий. Так что, когда я кого-то учу, я определенно «учусь вместе» с ними, и я надеюсь помочь другим людям начать поступать так же. В общем, «open-first symmathesy» это идея того, что все мы станем лучше и научимся большему, если будем делать это вместе, а не по отдельности.

Работаете ли вы еще над какими-то книгами по JavaScript?

Моя следующая книга будет о том, как сделать код более читаемым. Эта тема последние несколько лет подспудно присутствовала во всем, что я писал, кодил и чему учил. Так что все это можно считать исследованиями и подготовительной работой для написания этой книги. Но прежде чем приступить к ней, мне нужно заняться вторым изданием «YDKJS» и моей последней книги «Functional-Light JavaScript». О, а еще к последней я хочу написать сиквел с моими последними наблюдениями по теме функционального программирования, включая более эффективное использование JS-типов, использование хуков в стиле React в FP-шаблонах и т. д. В общем, тем много, а времени мало!

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

Ха! Ну, возможно и знак! Кто-то несколько лет назад наградил меня этим «титулом» за все мои публичные рассуждения и прогнозы относительно JS. Я думаю, что он очень хорошо мне подходит. Если JavaScript (и читабельность кода) является «религией», то я определенно посвятил свою жизнь систематическому размышлению и рассуждениям о том, как применять эту «религию» в своей жизни и как нести это «слово» людям!

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here