Я взял интервью у Эвана Ю, создателя vuejs.org – популярного прогрессивного JavaScript фреймворка. Эван трудится над Vue полный рабочий день, получая финансирование из кампании в Patreon.
Расскажи нам, пожалуйста, немного о своем детстве, о том, где ты вырос
Я родился в Китае, мой родной город носит название Уси. Это город средних размеров, он находится рядом с Шанхаем. Я три года ездил в Шанхай в среднюю школу, приходилось совершать долгий путь туда и обратно. После окончания средней школы я поехал обучаться в США в колледж. Возможно, я слишком рано познакомился с компьютерами, но я не очень много программировал. Меня больше интересовали игры, и я активно работал с Flash, когда учился в средней школе. Мне нравилось создавать увлекательные интерактивные истории.
Каким был твой первый опыт программирования?
Когда я поступил в колледж в США, то, честно сказать, я не знал, чем я хочу заниматься, и я выбрал направления живописи и истории искусства. К окончанию колледжа я понял, что довольно сложно найти работу, занимаясь живописью и историей искусства.
Я подумал, что, возможно, мне стоит пойти в магистратуру, которая будет лучше отвечать моим интересам и поможет мне развить больше навыков. Я поехал в Парсонс и обучился на магистра изобразительных искусств в области дизайна и технологий. Это была действительно крутая программа, потому что все были наполовину дизайнерами и наполовину разработчиками. Нас научили таким вещам, как openFrameworks, обработка, алгоритмическая анимация, нам пришлось разрабатывать приложения и интерфейсы.
В Парсонсе особо не останавливались на преподавании JavaScript, однако меня привлекал JavaScript, поскольку он позволял легко создать что-либо и мгновенно поделиться этим с миром. Вы публикуете что-либо в сети, и вы получаете URL-адрес, который вы можете отправить кому-либо, имеющему браузер. Именно этот аспект и привлек меня в web-технологиях и в JavaScript.
В то время эксперименты Chrome только начинались, и меня это поразило. Я тут же переключился на JavaScript и начал изучать его самостоятельно, создавая вещи, напоминающие эксперименты Chrome. Я добавил эти вещи в свое портфолио, и затем они каким-то образом привлекли рекрутера из Google Creative Lab. Я присоединился к программе Five. Каждый год Creative Lab набирает пять новых выпускников. Это небольшая команда с копирайтером, креативным технологом, графическим дизайнером, стратегом и остальными людьми.
Хорошо, когда и как ты столкнулся с проблемой, которую попытался решить с помощью фреймворка Vue.js?
Моя работа в Google была связана с активным созданием прототипов в браузере. У нас появлялась идея, и мы хотели как можно быстрее получить что-то ощутимое. В то время некоторые проекты использовали Angular. Мне Angular понравился наличием таких крутых вещей, как привязка данных и управление данных через DOM, поэтому вам не нужно работать напрямую с DOM. Это также привело к появлению всех этих дополнительных концепций, которые позволяли вам структурировать код так, как вам хотелось. Но это было слишком сложно для тех сценариев использования, с которыми я столкнулся в то время.
Я подумал о том, почему бы мне просто не взять ту часть, которая мне понравилась в Angular, и создать на ее основе что-то действительно легкое без всех этих избыточных концепций. Также мне было любопытно посмотреть на то, как он устроен изнутри. Я начал этот эксперимент с того, что попытался воспроизвести минимальный набор функций, как, к примеру, декларативная привязка данных. С этого и начался фреймворк Vue.
Я работал над ним и чувствовал, что у него есть потенциал, поскольку мне самому нравилось использовать его. Я потратил какое-то время и аккуратно собрал его, назвав Vue.js. Это было в 2013 году. Позже я подумал: «Эй, ты потратил столько времени на него. Может, ты должен поделиться им с другими, чтобы они могли извлечь для себя выгоду из него; может, он им хотя бы покажется интересным».
В феврале 2014 я решил впервые опубликовать актуальный проект. Я поместил его на Github и отправил ссылку на Hacker News, и за него проголосовали, в результате чего он появился на главной странице. Он провисел там несколько часов. Позже я написал статью, чтобы поделиться данными о первой неделе использования фреймворка, а также привел в ней свои мысли и наблюдения.
Это был мой первый опыт, когда пользователи приходили в Github и оценивали проект. Я думаю, что за первую неделю я получил несколько сотен звезд. Тогда меня это сильно вдохновило.
Если бы тебе нужно было перечислить несколько базовых вещей, которые выделяют Vue по сравнению с другими фреймворками, что бы ты привел?
Я думаю, что с точки зрения фреймворков, Vue, скорее всего, наиболее похож на React, но в более широком смысле я склонен называть Vue прогрессивным фреймворком. Идея состоит в том, что Vue основан на ядре, включающем в себя привязки данных и компоненты, как и в случае с React. Он решает очень узкий, ограниченный набор проблем. По сравнению с React, Vue намного больше ориентирован на доступность. Люди, знающие HTML, JavaScript и CSS, могут легко начать работать с ним.
Мы старались сделать ядро Vue максимально базовым, минималистичным, однако по мере создания более сложных приложений вам, естественно, придется решать дополнительные проблемы. К примеру, роутинг, обработка взаимодействия между компонентами, разделение состояний в крупных приложениях, разбиение на модули кодовую базу. Как вы структурируете стили или разные ресурсы вашего приложения? Многие более массивные фреймворки, такие как Ember или Angular, вмещают в себя много всего, а потому вы даже не задумываетесь о каких-либо проблемах.
Это в некотором роде компромисс. Чем больше предположений вы делаете о пользовательских сценариях использования, тем меньше гибкость, которую в конечном счете может предоставить фреймворк. Либо все будет взвалено на экосистему, как в случае с React – экосистема React очень, очень динамичная. Она аккумулирует массу прекрасных идей, но при этом есть и много «белого шума». Vue занимает среднюю позицию: ядро включает в себя минимальный набор возможностей, однако при этом предложены постоянно расширяемые компоненты, такие как роутинг, управление состояниями, инструментарий разработки, а также CLI. Все они официально поддерживаются, хорошо документированы, работают друг с другом, однако вы не обязаны их все использовать. Я думаю, что это – самое яркое отличие Vue от других фреймворков.
Как тебе удалось привлечь финансовые инвестиции к Vue.js?
Я создаю ценность для тех людей, поэтому, теоретически, если я могу как-либо выразить эту ценность в финансовой форме, то я могу и поддерживать свое существование. Это осложняется тем, что JavaScript фреймворк достаточно сложен для того, чтобы платить авансом, учитывая, как работает JavaScript экосистема.
Vue имеет очень динамичную базу пользователей. Многие из пользователей Vue принадлежат к сообществу Laravel и являются энтузиастами, да и вообще они прекрасные люди. Я задумался: будет ли работать краудфандинг? Я решил попробовать эту идею на сайте Patreon. Дэн Абрамов, создатель React-Hot-Loader и Redux, также ранее запускал небольшую кампанию на Patreon. Это меня заинтересовало. У меня было общее предположение о том, сколько людей используют Vue. Допустим, 10,000 пользователей. Если даже 1% из них будет готов платить мне 10 баксов в месяц, это уже будет неплохо.
В феврале я запустил кампанию на Patreon, и она состояла из двух частей. Первая часть предназначена для людей, которые используют Vue. Обычно они просто готовы потратить небольшую сумму, чтобы купить мне, скажем, кофе. Есть и другой лагерь с реальными бизнес-объектами, как стартапы или консалтинговые магазины, которые создают свои вещи на базе Vue. Для них важно видеть, что Vue будет поддерживаться в долгосрочной перспективе. Это дает им спокойствие, поскольку они знают, что их финансовая поддержка сделает Vue более устойчивым, и они могут чувствовать себя в безопасности, работая с фреймворком.
Еще одним аспектом являлось вознаграждение Patreon. Если компании готовы спонсировать нас, то в таком случае я могу разместить их логотип на спонсорской странице vuejs.org. Это повышает осведомленность со стороны сообщества. Половина инвестиций Patreon шла от частных лиц, и один из них выделял $2000 в месяц. Я понятия не имел, сработает ли это, но, как показала практика, все работает хорошо. Я подумал, что пора переходить на полный рабочий день, когда я стал получать $4000 в месяц на Patreon, но сейчас сумма выросла уже до $9800 в месяц.
Много ли времени прошло с того момента, как ты убедил их спонсировать тебя? Были ли они скептически настроены по отношению к твоему новому фреймворку?
Когда я начал кампанию на Patreon, Vue уже демонстрировал достаточно сильный рост. В начале 2015 года Vue в целом оставался случайным проектом с открытым кодом, однако Laravel сообщество начало переходить к Vue. Я чувствовал, что если я не смогу заработать на этом, то все это окажется бесполезным трудом.
Я должен выразить особую благодарность Strikingly, стартапу, базирующемуся в Шанхае. Ребята активно вовлечены в сообщества JavaScript и Ruby в Китае. Они не так активно используют Vue, но они у них имеется ежемесячный фонд, который идет на спонсирование проектов с открытым кодом. Они стали моим первым спонсором, переводившим мне $2000 в течение шести месяцев.
Это значительно помогло мне на ранней стадии. Кроме того, Тейлор Отуэлл, создатель Laravel, также спонсирует Vue. Он начал с 100, после чего повысил до 200 и, наконец, до 500 со временем.
Ты упомянул, что тебе удалось получить спонсорскую поддержку, поскольку проект рос очень быстро. Проводил ли ты какие-либо маркетинговые акции? Или все развивалось гармонично?
Я бы сказал, что никаких реальных денег в маркетинг я не инвестировал. Я не покупал рекламу или что-то еще. В основном я просто пишу посты в блог. Публикую в Twitter. Иногда пишу посты в Medium.
Ты получил признание на международных рынках, что, вероятно, достаточно уникальный случай. Нам бы хотелось услышать, как это произошло. Поделись с нами, пожалуйста, некоторыми проблемами и лучшими практиками для привлечения разработчиков за пределами США.
Китайский рынок уникален. Я китаец, и я довольно активно участвую в китайском JS-сообществе. Многие люди знают Vue, потому что они знают меня. Мы сделали полный перевод документации Vue на китайский язык, что помогло распространить Vue в Китае. Многие люди также знают о том, что автор библиотеки – китаец. Я думаю, что это помогло на ранних этапах. Vue начали использовать крупные китайские компании, включая Alibaba, Tencent, Baidu. Все это компании стоимостью в миллиард долларов. Однако про React в Китае тоже прекрасно знают.
В Китае есть клон Quora под названием Zhihu, люди задают всевозможные случайные вопросы, и я отвечаю на многие вопросы, посвященные JavaScript и Vue.js.
Можешь ли ты что-то посоветовать компаниям, стартапам, проектам с открытым кодом, которым не так просто выйти на международные рынки?
Я думаю, что языковый барьер – самая сложная преграда. Если вы не приложите особых усилий, чтобы продвинуть что-либо в Китае, то никто не заметит ваш продукт. Разве что вы не настолько массивны, как React. Вам нужен будет кто-то, кто говорит по-китайски, причем этот язык должен быть для него родным.
Еще одна интересная вещь состоит в том, что наши пользователи имеются и в таких странах, как Италия, Испания, Португалия или Япония. К примеру, несколько самых активных участников живут в Японии. Они очень щепетильно подходят к переводу документации.
Допускал ли ты какие-нибудь серьезные ошибки при создании Vue?
Хм, я знаю, что их, наверно, немало. На сегодняшний день Vue был дважды переписан с нуля. Очевидно, я переписал его по той причине, что его первоначальная реализация имела проблемы, которые не могли быть решены путем постепенного улучшения. Выглядит так, будто я каждые шесть месяцев смотрю на прошлую кодовую базу и задаюсь вопросом: как же она вообще работала?!
Мне пришлось полностью переосмыслить проблему, но я думаю, что именно так и происходит разработка ПО, поскольку вы никогда не получите ничего верного с первой попытки.
Погружение в разработку Vue также стало способом становления и развития меня как разработчика, поскольку со временем мне пришлось добавлять новые функции, поддерживать его, исправлять баги, обеспечивать правильную работу всей экосистемы. Это сталкивает тебя лицом к лицу с проблемами, которые ты должен решать как разработчик программ. Это всего лишь процесс обучения.
Были ли эмоциональные или иные нетехнические сложности, с которыми ты столкнулся при разработке Vue?
Да, они были. Имеется огромное давление в плане конкуренции. Когда Vue еще был относительно неизвестен, такого давления не существовало, и любое упоминание являлось полезным. Люди не подгоняли нас под какой-то стандарт. Но по мере того, как Vue рос и расширялся, люди начали сравнивать фреймворк с такими вещами, как Angular, React, и они указывали нам: «эй, React делает это лучше. Angular делает это лучше».
Это оказывало на нас сильное давление. Конкуренция со всеми крупными фреймворками может стать достаточно напряженным заданием. Особенно сейчас, когда я перешел на полный рабочий день. Жизнеспособность Vue в экосистеме напрямую связана с тем, насколько хорошо я все делаю.
Однако недавно я наблюдал за выступлением Эвана Чаплицки, автора Elm, в котором тот рассказывал про аналогичное давление, ощущаемое им при работе над Elm. Был Om, ClojureScript интерфейс на базе React. Был PureScript, были и другие функциональные компиляторы для JavaScript, и Эван беспокоился о том, что ему придется как-то конкурировать с этими библиотеками.
Позже он поговорил с Гвидо, автором Python, и Гвидо дал ему совет: «просто делай свою работу хорошо». Идея заключается в том, что Python тоже сталкивался с подобной проблемой. Он конкурировал с массой динамических языков, таких как Ruby, JavaScript, Perl. Все эти языки сами по себе успешны, у них есть свое сообщества, использующие их.
Люди предпочитают разные языки по тем или иным причинам. Подобно языкам, люди предпочитают разные фреймворки по тем или иным причинам. Не существует такого единственно правильного фреймворка, который удовлетворил бы всех. Что еще важнее: улучшайте фреймворк для тех людей, которым он нравится. Сосредоточьтесь на том, что, по вашему мнению, является самым ценным в вашем проекте, и просто работайте над этим, а не сравнивайте себя с другими.
Что ты считаешь положительным результатом для Vue.js?
Это сложный вопрос, поскольку размеры Vue.js заметно увеличились со временем. Сегодня у нас есть целая экосистема, и мы продолжаем расширяться, изучая такие вещи, как Weex, позволяющие обрабатывать Vue компоненты в родном интерфейсе.
Я также забочусь о доступности Vue. Я отталкиваюсь от убеждений, что технологии должны позволять большему количеству людей создавать свои проекты.
Несколько следующих вопросов выходят за рамки программирования. Каковы твои увлечения, интересы, лежащие вне области программирования?
Аниме, я читаю много манги. Если вы не заметили, релизы Vue называются в честь аниме. Начиная с .09, каждый крупный релиз дополняется буквой. В версии 2.0 добавлена буква G, что является отсылкой к Ghost in the Shell. Буква F зарезервирована для 1.1. Релиз 1.0 был посвящен Evangelion.
А еще я люблю караоке.
Какие новые технологии или тренды тебя больше всего поражают/волнуют?
Технологии в целом. Странно, но меня не волнуют всякие там виртуальные или дополненные реальности. Я действительно хочу поговорить о чем-то, что ближе к разработчикам. Что-то вроде того, что делает Гильермо (Guillermo Rauch). Разработчики создают инструменты для разработчиков, проектируют для них пользовательский интерфейс.
Кого ты можешь отнести к своим кумирам в области программирования? Если такие есть у тебя.
Очевидно, TJ Holowaychuck и Guillermo Rauch. Я не специалист по компьютерным технологиям. В основном я изучал программирование с помощью случайных ресурсов и книг, однако важным способом обучения также было и чтение кода других людей. Когда я читаю код TJ, мне кажется, что он очень элегантный. Это слово, которое приходит мне на ум, и это сильно повлияло на меня. TJ определенно кумир для меня.
Источник: https://medium.freecodecamp.com
Очень классное интервью! Спасибо!
Удивительная история! человек, который изначально пошел учиться на архитектора вырос в классного разработчика. Очень люблю читать про людей увлеченных свеой работой на 200%. Вдохновляет.