Интервью с Tylor Steinberger

Illustration of a relaxed person sitting with hands behind head at a desk with a laptop, coffee cup, phone, and bar graph-style blocks spelling out "Cycles", "Most", and "XStream". Illustration of a relaxed person sitting with hands behind head at a desk with a laptop, coffee cup, phone, and bar graph-style blocks spelling out "Cycles", "Most", and "XStream".

Подготовил интервью, провёл беседу и сделал перевод с английского на русский наш ментор по front-end разработке Иван Клешнин. Оригинал интервью на английском языке опубликован на его персональном сайте.



Сегодня мы берём интервью у Tylor Steinberger: ключевого разработчика CycleJS, MostJS и XStream, автора MotorCycleJS, нескольких CycleJS драйверов, а также многочисленных библиотек, связанных с потоками. Тайлор – неустанный экспериментатор, движущая сила любого сообщества и (попросту говоря), человек, знакомство с которым меняет ваше мировоззрение.




Ты говоришь, что "всё ещё начинающий в программировании". Каким образом ты начал сразу с продвинутых тем потоков и реактивности?

Для меня всё началось с просмотра видео Andre Staltz про пользователя как функцию. Я программировал совсем немного и довольно поверхностно на протяжении 7 или 8 месяцев до этого, преимущественно на Python. После просмотра его видео, я реально захотел опробовать CycleJS. Я провёл некоторое время за изучением JavaScript и присоединился к CycleJS комьюнити чату на Gitter, задавая множество вопросов и изучая всё, что только было возможно.

У тебя есть уникальный опыт участия в разработки двух важных потоковых библиотек: MostJS and XStream. Каковы ключевые отличия между ними? По каким критериям можно отдать предпочтение одной перед другой?

MostJS – замечательная потоковая библиотека, которая поддерживаеся командой сильных специалистов. Мне очень нравится то, что MostJS тщательно продумана. Brian Cavalier, автор MostJS, всегда добивается математически обоснованных решений. Что, с моей точки зрения, является залогом надёжности кода ядра и библиотеки, в целом.

XStream отличается от MostJS. Он был написан очень быстро, с идеей создания небольшой библиотеки, которую было бы легко использовать с приложениями CycleJS. К сожалению, код получился не столь прозрачным и его поддержка не так проста, вследствие этого. Я бы хотел найти способ объединить обе библиотеки в единых проект. Это пошло бы на пользу всем.

Мне кажется, что выбор между двумя, в каждом конкретном случае, будет сложен и субъективен. Я предпочту MostJS для всех приложений, не связанных с CycleJS, т.к. он предоставляет больше операторов, больше гибкости и легче расширяется.

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

MostJS выделяется среди прочих потоковых библиотек тем, что предоставляет функциональный API. Что ты думаешь насчёт функциональных и каррированных API в приложения? Считаете ли ты, что у них есть шанс, принимая во внимание текущее доминирование ООП парадигмы?

Мне очень нравятся функциональные и каррированные API в JavaScript. Они требуют небольшого времени на привыкание. Мы используем Ramda на работе и она существенно улучшила читабельность нашего кода.

Я определённо вижу всё больше людей, изучающих и использующих Ramda в сообществах, в которых я состою. Считаю, что каррированные API набирают популярность среди разработчиков и положительное отношение к ним внутри JavaScript сообщества увеличивается. Они требуют незначительных временных инвестиций и, но выходная читабельность кода, определённо, стоит затрат.

MostJS 1.0 был недавно опубликован. Каковы дальнейшие цели проекта? Каких изменений следует ожидать в будущем?

Мы планируем сделать множество задач, не касающихся пользователя напрямую. Например, адаптацию ES2015 синтаксиса и улучшение модульности. Однако мы также планируем оптимизацию некоторых публичных API и их каррирование! Я думаю, мы увидим резкий рост связанных проектов, т.к. мы только что создали MostJS организацию на GitHub и делаем всё возможное, чтобы получить дополнительную помощь от сообщества.

Узнать подробности Автор статьи может научить тебя
всему, о чём здесь говорится

Ты используешь TypeScript во множестве проектов. Столкнулся ли с какими-то ограничениями языка, на практике?

Не то, чтобы я реально столкнулся с каким-то конкретным ограничением, но я, определённо, вижу сложности в его использовании в библиотечном коде. В случае полиморфных функции (таких как combine в MostJS), прохождение статической типизации требует написания большого количества кода. При этом, не все случаи покрываются идеально. Каррирование также затруднено в текущем TypeScript и требует слишком много кода или на уровне библиотеки или на уровне приложения.

Пригоден ли TypeScript для использования в JS приложениях, в данный момент?

Думаю, TypeScript достаточно зрелый проект. Но, лично я, буду ждать версии 2.1, перед тем как рекомендовать его в качестве альтернативы. 2.0 обещает добавить поддержку строгой проверки на null, планируется значительный прогресс в авто-определении типов. К версии 2.1, эти и другие новые фичи будут проверены и "отполированы". Вот тогда я и начну продвигать идею перехода на TypeScript на работе.

Что насчёт CycleJS? Продолжает ли он свой экспоненциальный рост? Что вы планирует делать после Cycle Diversity?

Я думаю, что популярность CycleJS продолжает расти. Я начинаю видеть новых людей в Gitter чате каждый день. Они постоянно отвечают на вопросы друг-друга, даже самые сложные вопросы. Думаю, что популярность проекта будет расти ещё долгое время. Cycle Diversity был крупным релизом, который занял множество месяцев разработки.

Мы обсуждали множество вещей с Andre, которые хотелось бы сделать после релиза. Я думаю, нашим основным фокусом будет developer experience, касательно дебага и библиотеки, которые предоставляют востребованный функционал, типа коллекций. Так что, определённо, оставайтесь на связи для будущих анонсов.

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

Да, я думаю они привлекают всё больше людей. React, постепенно, популяризировал идеи функционального программирования и паттернов в JS сообществе. Однако, с моей точки зрения, идеи реактивности продвигаются значительно медленнее. Angular 2 использует RxJS во внутреннем коде, так что будет интересно посмотреть как много людей начнут использовать последний в результате и захотят изучать реактивность.

Ты экспериментировал с PureScript недавно. Твоё впечатление? Есть ли шанс для чистого функционального языка войти в мейнстрим в обозримом будущем?

Я провёл около двух дней экспериментируя с PureScript. Я нашёл язык очень интересным и не хочу даже начинать расхваливать их сообщество :) Они действительно крайне доброжелательны и готовы помочь. Если вы планируете изучать PureScript, я определённо рекомендовал бы как можно больше контактов с сообществом.

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

Лучшее и худшее в JS экосистеме и сообществе, с твоей точки зрения? Что бы ты хотел сохранить, а что – изменить?

Это очень сложный вопрос для меня, учитывая, что я пока не был сильно вовлечён в другие сообщества, помимо CycleJS и MostJS. Из доступного мне опыта, могу сказать, что мне нравиться, что JS сообщество так велико. Место находится для всех: от начинающих до "ветеранов" программирования.

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

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

Какими техническими направлениями интересуешься, помимо реактивности и функционального программирования?

Меня всегда интересовали компиляторы / интерпретаторы и языки, в целом. Я не чувствую, что достаточно квалифицирован в программировании, чтобы взяться за столь крупный проект, как разработка ЯП, но определённо допускаю возможность такой попытки в будущем. Кроме компиляторов, последнее время меня всё больше интересуют дебаггеры и прочий инструментарий разработчика. Я определённо хочу поработать в области developer experience в ближайшее время.

Твой совет для начинающих?

Лучший совет, который я могу дать начинающему разработчику – найти сообщество, которое тебя интересует и вовлечься в него. Задавай побольше умных вопросов и ты получишь много умных ответов. Это лучший способ учиться, с моей точки зрения.

Andre Staltz и Frederik Krautwald были очень активны в CycleJS сообществе, когда я только присоединился к нему. Они всегда отвечали на вопросы и почти всему, что я тогда знал о программировании, я научился у них.

Я также хотел бы упомянуть Brian Cavalier, как очень активного участника MostJS сообщества, который даёт отличные, исчерпывающие ответы на любые ваши вопросы. И я постоянно нахожу в его ответах пищу для размышлений.

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


Спасибо, Тайлор! Пример твоего прогресса, как инженера-самоучки, является отличным источником вдохновнения. Мы надеемся увидеть больше твоих проектов в будущем, и ещё больше внимания сообщества к ним!