Ryan, автор и создатель Node.js, работал в команде Google Brain и в данный момент развивает проект deno.land - защищенный JavaScript/Typescript runtime построенный на V8, Rust, и Tokio. Удалось пообщаться с Райаном в рамках конференции JSFest 2019 (spring) и вот что удалось выяснить. Приятного прочтения

«Зачем жить, если не делать что-то интересное»

Почему ты выбрал программирование?
Программирование - это инструмент достижения цели. Программное обеспечение настолько податливо, и вы можете сделать так много, и это очень эффективно. Вы можете сделать такие большие изменения, и не имеет значения, работаете ли вы в вебе, мобайле или просто с языками типа R. Я всегда был компьютерным парнем (computer-guy).

Программирование делает многое реальным. Если вы используете этот инструмент эффективно, вы можете делать действительно классные вещи. Я имею в виду то, что зачем жить, если не делать что-то интересное. Также считаю, что программирование - это эффективный способ изменить мир. Очевидно, что интернет изменил мир, и программирование в том виде в котором оно тогда существовало сыграло ключевую роль в этом. Вот почему я нашел программирование таким интересным.

«Мне кажется сделать «красивое» архитектурное решение, не менее сложно, чем нарисовать картину, если не сложнее, ведь мы сталкиваемся с ограничениями реального мира»

Как ты подходишь к решению сложных задач? С чего началась разработка Node JS?
Node был для меня искусством. Я думаю каждый разработчик в начале проекта пытается сделать его произведением искусства, полезным произведением искусства. Мне кажется сделать «красивое» архитектурное решение, не менее сложно, чем нарисовать картину, если не сложнее, ведь мы сталкиваемся с ограничениями реального мира. Думаю инженерный подход похож на искусство и является одним самых качественных способов решить сложную проблему. Сначала ты пытаешься в полной мере осознать, что хочешь сделать, и лишь потом берешься за инструменты. Так было и с Node.

В одном из интервью ты упомянул, что был настолько увлечен идеей Node js, что работали три года к ряду над одним проектом. Как выглядел твой распорядок дня в то время?
Обычно Я начинаю день с кофе. Большую часть времени работаю один, по большей части в кофейнях. Беру ноутбук и ищу хороший кофе. После кофе пишу код 3-4 часа, ланч, зал, и еще немного работы. Вцелом я бы сказал, что я работаю 4 часа в день.

Как удается работать 4 часа в день, если мы живем в 40-часовой рабочей неделе, сколько из этих часов «эффективных»?
Если говорить про кодинг, то это как правило 2-3 часа. Разумеется сильно зависит от сложности задачи, но в среднем так. Остальное время заполняется встречами, код ревью, пул-реквестами и прочими более простыми задачами.

«Уже тогда команде было понятно, что Node - это новый Python»

Расскажи историю как ты ушел с Node js?
Это сложная история, в некоторых аспектах личная, так что давай обрисую в общих чертах. В 2012 по уровню внедрения в сообщество, стало понятно, что Node будет чем-то мейнстримовым. С самого начала у нас не было этой цели, мы делали Node потому что это было весело и просто хотелось сделать это работающим. Думаю в целом сообщество приняло Node к году 2015, но уже тогда команде было понятно, что Node - это новый Python. И в то время для меня было удивлением, когда я осознал, что проект работает без меня. То есть я могу ничего не делать, а прогресс все равно есть. Обычно когда ты сам работаешь над проектом, то когда ты перестаешь, проект просто замирает, а в случае Node было по-другому. Я попробовал отстраниться на месяц-другой и Node все еще продолжал развиваться. Таким образом я понял что могу двигаться дальше к чему-то новому.

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

«Думаю ИИ - это про статистику, работу с данными и не более»

Ты около года работал в команде Google Brain, поговорим про ИИ?
Мне не сильно нравится термин «искусственный интеллект», последнее время слишком много маркетинга вокруг этого понятия. Я думаю ИИ - это про статистику, работу с данными и не более.
Я работал над трансформацией изображений. Изначально идея была в том чтобы разукрасить черно-белые фото. Когда мы говорим про черно-белые фотографии, нужно понимать что очень много информации утеряно, в особенности цвета. Мы нашли применения нейронным сетям в этой задаче. Обученная нейронка делает предположения по цветам, что позволяет придать цвета черно-белому изображению. К примеру, листья на деревьях зеленые, так что ты можешь предположить, если на фотографии дерево, то нужно добавить зеленый. Также учитывается множество других факторов таких как освещение, пора года, тени и так далее. С дата-сетами проблем не было, у нас миллиарды фотографий, так что обучаешь сеть на цветных фотографиях инвертированных в черно-белый и потом делаешь предположения на реальных черно-белых фото, это было интересно. Следующая проблема с которой мы работали была: улучшение качества. Представим, что есть маленькое изображение, типа 64х64px, и нужно увеличить его до 128х128. Это невероятно маленькие цифры, но это то где были технологии еще пару лет тому. Очевидно, что в маленьких изображениях потеряно много информации за счет разрешения, но если на изображении лицо, а твоя нейронная сеть видела миллионы лиц, то можно предположить и построить текстуру лица в изображении большего размера. Так что ИИ - это про исследования и дата-сеты. Разумеется не все проблемы можно решить таким подходом, но мы начали с решаемых проблем.

«Чтобы получить билет на этот «поезд» нужно иметь проект на котором можно технологию внедрить»

Машинное обучение - это хайптрейн, где взять билет на этот поезд?
Хех, в принципе, как и изучение любой технологии. Всегда сложно начать что-то принципиально новое. Я стараюсь придумывать проект для технологии. Задавая вопрос: «окей, что я могу сделать с помощью этой технологии?». К примеру я услышал про рекуррентные нейронные сети и подумал, если эта технология умеет делать предположения, возможно это сумеет угадывать цвета и делать черно-белые изображения цветными, и получилось. Так что, чтобы получить билет на этот «поезд» нужно иметь проект на котором можно технологию внедрить. Не стоит сразу решать задачу мирового уровня, вряд-ли получится. Лучше искать проект в котором понятны первые пару шагов, а дальше задавать вопросы и исследовать насколько глубока кротовья нора.

«Новые технологии делают возможными новые проекты. Задача в том, чтобы найти применение технологии»

Как оставаться в тренде?
Сложный вопрос, я в основном читаю HackerNoon. Вцелом всегда сложно поддерживать актуальными свои умения, когда ежедневно работаешь над одним и тем же проектом, а технологии развиваются невероятно быстро. Я стараюсь обращать внимания на что-то о чем вижу несколько упоминаний. Новые технологии делают возможными новые проекты. Задача состоит в том, чтобы найти применение технологии. Например у меня это сработало с нейронными сетями и некоторыми другими технологиями.

«Принимая архитектурные решения для проекта стоит задавать себе вопрос: а чего я лишаюсь выбирая тот или иной вариант»

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

Интервью взято в рамках конференции JSFest 2019(spring). Совсем скоро, 8-9 ноября 2019, будет следующая JSFest и это отличный способ оставаться в тренде. Для читателей этого интервью есть промокод от организаторов - D-SPEAKERS-10. Успехов!