Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Nicolò Ribaudo — один из ключевых разработчиков Babel, приглашённый эксперт TC39 и при этом ещё и студент-математик.
Nicolò выступит завтра на HolyJS 2019 Moscow. И в преддверии этого участники программного комитета HolyJS Евгений Кот (bunopus) и Дмитрий Махнёв (DmitryMakhnev) поговорили с ним о разработке Babel, задачах приглашённого эксперта, учёбе, предстоящем докладе на HolyJS… и о том, как при всём при этом можно умудряться высыпаться.
Евгений: Давай начнём с простого вопроса. Можешь рассказать немного о себе, чем занимаешься?
Nicolò: Я работаю над Babel уже два года. Изучаю математику, сейчас на втором курсе университета. Программирование и обучение отнимают основную часть моего времени; я уже десять лет как программирую, и JavaScript — любимый язык. Думаю, что начал контрибьютить в open source именно из-за JavaScript, это произошло несколько лет назад.
Евгений: Сейчас ты работаешь в Babel core team, и это впечатляет: ведь большинство продуктов, написанных на JavaScript, использует Babel каждый день. Как получилось, что ты попал в команду?
Nicolò: Я начал контрибьютить в него, потому что пользовался им сам и хотел сделать что-то для сообщества. Когда я впервые оказался в open source-сообществе, вначале контрибьютил в другие проекты, а затем узнал о Babel, и он меня заинтересовал. Вообще-то была и другая причина, несколько эгоистичная: я хотел прославиться! Хотел работать над чем-то, что знают много людей. Но потом я осознал настоящую причину, по которой люди работают над open source, и просто продолжил работать, потому что мне это понравилось.
Евгений: Но почему именно Babel? В мире много всевозможных open source-проектов.
Nicolò: До Babel я контрибьютил в JSHint, он мне тоже нравится. Там я узнал многое о парсерах. Именно поэтому я познакомился с Babel. Вначале я контрибьютил не в трансформатор, а именно в парсер. Тем более что я уже был знаком с этим проектом и успел попробовать его в своих личных проектах, и поэтому разобраться с Babel показалось хорошей идеей.
Евгений: Сейчас ты изучаешь математику, а это довольно сложная штука. Open source писать тоже непросто. Как ты умудряешься сочетать все эти вещи одновременно? У тебя 30 часов в сутках?
Nicolò: В прошлом году было на так уж и тяжело, я учился 20 часов в неделю, и была куча свободного времени. Теперь тяжелее, потому что учиться надо уже 30 часов. А я хочу как минимум 20 часов в неделю работать над open source-проектами. Требуется делать это вечерами и ночами, или на выходных.
Евгений: Ты вообще спишь?
Nicolò: После обеда я работаю может быть три или четыре часа. Я стараюсь не перерабатывать. Но иногда это сложно: когда решаешь сложную задачу и увлечён процессом, приходится заставлять себя остановиться и пойти спать, чтобы на следующий день не засыпать.
Евгений: Это как-то регулируется со стороны Babel? В смысле, есть какой-нибудь бэклог или можно делать всё, что придет в голову? Как это работает?
Nicolò: У нас нет строгой организации процесса. Мы, конечно, рисуем роадмапы, но в основном сами решаем, чем надо заниматься. Например, мы выбираем задачи на следующий релиз, и дальше каждый может работать над любыми из них.
Евгений: Всегда есть и какие-то крутые задачи, и что-то нудное, что никто не хочет делать. Как это сочетать? Есть ли у вас какой-нибудь, не знаю, продукт-менеджер, который скажет, что делать на следующую неделю или месяц?
Nicolò: Раз в две недели у нас проходят митинги, и по ходу этих митингов, если есть какие-то неинтересные задачи, мы обычно вместе решаем, что с ними делать. Например, одна из самых скучных задач — триажить баги: у нас около 700 открытых тикетов, и многие из них уже неактуальны. Может, их уже починили в другом месте, или проблема там была в конфигурации конкретного пользователя. Мы стараемся всё равно триажить их раз в месяц или раз в две недели. Но никто не говорит другим, что им нужно делать: мы сами за это берёмся.
Дмитрий: Будешь ли ты работать над Babel на полную ставку после завершения учебы?
Nicolò: Мы сейчас пытаемся понять, достаточно ли денег приносит нам Open Collective, чтобы уже в этом году кто-то из команды мог начать работать над Babel неполный день за оплату. Поскольку мы посвящаем проекту много времени, было бы здорово рассмотреть его в качестве «настоящей» работы. Но даже если не получится превратить Babel в такую работу, после университета я всё равно хотел бы работать над open source-проектами.
Евгений: Я не знаком с этой схемой, с Open Collective… У вас копятся какие-то пожертвования и деньги, и как потом команда решает, кто будет работать на фуллтайм?
Nicolò: Это сложная тема, и мы обычно обсуждаем это часами, порой безрезультатно. Прямо сейчас Henry — единственный человек, который работает на полную ставку. Потому что у него первого возникла такая возможность и потому что он был мейнтейнером дольше всех. Но сейчас мы пытаемся понять, есть ли ещё люди в команде, которые хотят и могут работать над Babel.
Попытка превратить в работу такой проект, финансируемый сообществом, чревата сложностями. Если ты работаешь в обычной компании, у тебя всегда одна и та же зарплата, и ты гарантированно получаешь её. Но мы-то зависим от пожертвований, и получается, что сложно принимать важные жизненные решения, когда всегда есть риск. Поэтому довольно сложно найти людей, которые захотят работать над этим на фуллтайм или даже на полставки, и которым мы доверяем. Так что внутри команды нет какой-то конкуренции в связи с этим. Основная проблема — это поиск денег для тех, кто всё-таки захочет заняться такой работой.
Евгений: Хорошо, вы насобирали денег в Open Collective, вы поняли, кто будет работать на фуллтайм, но какова будет зарплата? Кто это решает?
Nicolò: Пока что мы не знаем. Это сложно определить, потому что мы должны понять, сколько должны платить нам вместе. А ещё не хочет заниматься учётом времени, поэтому почасовая ставка не подходит. Можно, конечно, платить за результат, но что тогда делать с долгоиграющими или какими-то нудными задачами, которые не дают мгновенного хорошо видимого результата? Например, триаж багов или помощь людям в Slack. Так что мы хотели бы как-то определить размер месячной зарплаты, но очень сложно определить, сколько он должен составлять. Кроме того, поскольку мы находимся в разных частях мира, то, что для меня может показаться богатством, для кого-то окажется очень небольшими деньгами. Так что всё сложно.
Евгений: Всё так! Вот ты сказал, что после университета собираешься работать над open source, а между тем — все эти финансовые проблемы… С другой стороны, есть множество крупных коммерческих компаний, вроде Google и Apple, и они неплохо платят. Что ты про них думаешь? Работа в такой супер-интернациональной компании может иметь свои плюсы (и минусы).
Nicolò: Это не взаимоисключающие вещи, потому что есть множество компаний с большими open source-проектами. Можно работать в большой компании и при этом работать над open source. Не знаю, буду ли я работать в такой. Пока что мне много денег не требуется, но после университета надо будет найти работу.
Дмитрий: Насколько знаю, ты — приглашённый эксперт в TC39. Я был впечатлён, когда Сергей Рубанов сказал, что таких людей всего 20. Можешь рассказать, как ты попал в эту группу?
Nicolò: Роль приглашённого эксперта — для людей, которые либо много знают в конкретной области, либо помогают со многими пропозалами, либо помогают TC39 со стороны сообщества. Я стал приглашённым экспертом благодаря своей деятельности в Babel. На работал над всеми пропозалами, связанными с классами (вроде декораторов или полей классов). Мне также анализировать много других пропозалов для их реализации в Babel и для того, чтобы помогать внешним контрибьюторам реализовывать их.
Я пока участвовал в митинге TC39 только один раз, но в будущем был бы рад помогать TC39 всем, чем смогу.
Дмитрий: Не хочешь в будущем стать делегатом TC39?
Nicolò: Может быть. TC39 в целом не для людей-одиночек: обычно нужно работать в компании, которая присоединится к TC39. Но если я буду работать в такой компании, то я бы с радостью помог и стал делегатом.
Евгений: Почему ты считаешь, что TC39 настолько важна? Почему ты хочешь работать с ними?
Nicolò: Потому что я люблю JavaScript и мне очень нравится помогать развитию языка. Работа с TC39 — это ещё один способ помочь в развитии JavaScript. Мы должны заниматься этим ради сообщества и слушать людей, чтобы делать JavaScript ещё лучше для всех.
Дмитрий: Как думаешь, является ли учёба в университете жёстким требованием для того, чтобы стать успешным разработчиком?
Nicolò: Не думаю. Я учусь не на computer science, и вряд ли займусь этим. Я программировал задолго до того, как поступил в университет. Я присоединился к разработчикам Babel, ещё когда был старшеклассником. Я знаю многих других молодых людей, у которых тоже нет высшего образования в области computer science, но они уже стали отличными разработчиками и могут получить хорошую работу.
Евгений: Тем не менее, обучение в ВУЗе может дать какие-то дополнительные преимущества на работе, правда? В карьерном плане или что-то вроде того. Кстати, почему ты поступил именно на математику?
Nicolò: Я согласен, что университет может дать что-то ещё, но уверен, что можно быть успешным разработчиком и без этого. Я решил изучать математику, потому что она мне нравится. Это мой любимый предмет лет с десяти. Я выбрал этот факультет не потому что он мне нужен для работы, а потому что он мне нравится.
Если бы я выбирал университет исключительно по тому, что мне нужно, вероятно, предпочёл бы computer science. Но при этом, если нравится учиться, университет — один из лучших способов.
Дмитрий: Если тебе нравится математика настолько, что ты пошел в университет ради неё, то зачем выбирать именно JavaScript в качестве основного языка, в который ты вкладываешься и который хочешь улучшить? Почему бы не взять Haskell или какие-нибудь языки для машинного обучения и data science?
Евгений: Математику обычно связывают с машинным обучением и другими сложными штуками. А большинство людей в моем окружении, считают JavaScript чем-то целиком про фронтенд, кнопочки, дивы, и что всё это совершенно не годится для учёных и математиков.
Nicolò: Я начал программировать на JavaScript, потому что у меня есть тётя, которая занимается обучением веб-разработке. Когда я захотел разобраться в компьютерах, я обратился к ней, и JS был одним из языков, которые она предложила. Первая моя программа была расширением для браузера, читом для онлайн-игры, в которую я в то время играл. А JavaScript был единственным языком, позволявшим мне сделать такое.
Позже я пробовал Haskell, и он мне понравился. Мне нравится, что он близок математике. Но я так никогда и не выучил его в достаточной степени, чтобы писать на нём большие приложения. Так что, по сути, мне нравится JavaScript просто потому, что я начал учить его раньше всего и поэтому знаю лучше всего.
Дмитрий: Что ты думаешь о том, чтобы решать повседневные задачи на каком-нибудь языке программирования самостоятельно? Может ли это считаться хорошим способом обучения программированию?
Nicolò: Я не очень разбираюсь в обучении программированию. Студенты обычно думают о том, как бы что-то изучить, и надеются, что учителя смогут их научить :) Думаю, мы в Babel находимся в удобном положении, чтобы сделать обучение JavaScript более простым для новичков. Например, когда-то мы обсуждали возможность перевода JavaScript на другие человеческие языки — так что, например, если вы русский, то могли бы вместо «if» писать «если». Мы так это и не сделали, и я не знаю, сделаем ли в будущем. Но это хороший пример того, как можно понизить планку входа.
Дмитрий: Нужна ли вообще математика современному JavaScript-разработчику?
Nicolò: Сильно зависит от того, что вы собираетесь делать. Большинство приложений на JavaScript ни в какой математике не нуждаются, ну или там нужен самый минимум. Если вы занимаетесь веб-дизайном, вам может пригодиться понимание синусов и косинусов, ну и всё. Думаю, есть много других языков, где математика пригодится куда больше: например, в машинном обучении или data science, где JavaScript почти не используется, о математике нужно знать больше. Но если вы просто пишете сервера на Node.js или клиентские приложения, вам это вряд ли понадобится.
Евгений: С помощью чего ты учишься? Ну, мы уже знаем про университет, но может, есть что-то ещё. Какие-нибудь подкасты, видео, митапы, статьи в интернете…
Nicolò: В основном читаю блоги или просто документацию по библиотеками или языкам. Я никогда по-настоящему не пользовался видео или подкастами, потому что мне сложно слушать их дольше часа. Как уже рассказывал, в детстве у меня была тетя, которая научила меня основам программирования. А дальше я стал учиться сам. Раньше у меня на смартфоне были установлены приложения блог-сервисов вроде Medium, но потом я удалил их, потому что слишком много времени читал туториалы и объяснения новых фишек, вместо того, чтобы концентрироваться на своих задачах.
Евгений: Что насчёт офлайн-источников вроде митапов и конференций? Ты в них участвуешь?
Nicolò: Я не очень хорошо знаком с сообществом в своем городе. Бывал на митапе раз или два. На своей первой конференции побывал всего несколько месяцев назад. Мне бы хотелось взаимодействовать с локальным сообществом, но когда я попытался в прошлый раз, оказалось, что я там единственный, кому меньше 20 лет. Я чувствовал себя не в своём месте. Но попробую позже ещё раз и посмотрю, что произойдёт.
Евгений: Думаешь, в сообществе есть эйджизм? В смысле, на всех, кому меньше 20, смотрят как на джуниоров?
Nicolò: Если все люди, которых видишь вокруг, на десять лет старше, от этого становится неуютно. Обычно молодые люди не тусуются с намного более старшим поколением. Думаю, с течением времени это поменяется, общаться будет проще. Пока я всегда был рядом с людьми своего возраста, так что обстановка на митапах была совершенно другой. Но при этом мне никогда не запрещали участвовать и не говорили, что я слишком молод. Никто не ставил под сомнение мои способности по возрастному признаку.
Евгений: Множество таких офлайн-мероприятий — митапы, конференции, воркшопы — это не только о приобретении новых знаний, но и о нетворкинге. Что ты думаешь о нетворкинге вообще? В смысле, встречаться с людьми, строить связи, изучать местное сообщество…
Nicolò: Думаю, нетворкинг — это важно. Особенно, потому, что это позволяет найти работу или людей схожих интересов. Но прямо сейчас я не то чтобы чувствую острую необходимость искать людей в офлайне в своем городе, потому что уже занят учебой и работой над Babel, и на общение с новыми людьми просто нет времени. А ещё хотелось бы найти новых контрибьюторов в Babel, показать людям, что хотя это и популярный проект, контрибьютить туда может каждый.
Евгений: Ты бывал на какой-нибудь встрече команды Babel вживую?
Nicolò: Да, встретил часть команды на JSConf в Берлине. Это была не вся команда, но значительная часть активных контрибьюторов. Это был прекрасный опыт, потому что раньше я общался с этими людьми только в онлайне. Хотя мы и делаем иногда видеозвонки, но встретить их вживую было очень приятно.
Дмитрий: Ты в первый раз в России. Что-нибудь ожидаешь от поездки?
Nicolò: Ну, когда я путешествую, то стараюсь не делать никаких предположений и ожиданий. Думаю, что если ничего не буду ждать заранее, то тогда и сюрприз получится куда лучше! А еще, про Москву я знаю всего одну вещь — бар, который мой друг советовал посетить. Впрочем, он уже не живёт в Москве, переехал в Италию год назад или около того. Может быть, этот бар просто находится рядом с его бывшим домом. В общем, никаких ожиданий нет, я хочу посмотреть на всё свежим взглядом.
Дмитрий: Надеюсь, мы вместе посетим тот бар. Кстати, ну а на HolyJS-то есть какие-то планы?
Nicolò: Рассчитываю получить кучу удовольствия от встреч с людьми. Знакомиться с людьми, обсуждать с ними Babel, попробовать заинтересовать им людей — это самая приятная часть. Думаю, что любая конференция должна помогать людям объединяться. А с точки зрения не участника, а спикера, — ну, я просто надеюсь, что всё пройдёт хорошо.
Дмитрий: Конечно пройдёт, мы над этим работаем.
Nicolò выступит с докладом «@babel/how-to» на HolyJS 2019 Moscow 8 ноября.