«Rust не боится быть несовершенным, если он полезен»
Стив Клабник — один из разработчиков Rust, активный участник open-source сообщества, а также автор книг «Язык программирования Rust», «Rails 4 в действии» и «Проектирование API-гипермедиа». В 2012 и 2016 годах мы приглашали Стива выступить на конференции RubyRussia (которая тогда называлась RailsClub). С тех пор он много работал над Rust, сделал много интересного, и мы поняли, что обязательно должны взять у него интервью еще раз!
Мы пообщались со Стивом, чтобы услышать из первых уст, чем он сейчас занимается, узнать об успешных решениях в дизайне Rust, а также немного о шумихе вокруг full-stack разработки и о преодолении выгорания.
Интервью
Evrone: Чем ты сейчас профессионально занимаешься, кроме вклада в Open Source?
Стив: Я работаю в Oxide Computer Company, пишу кучу кода на Rust!
Evrone: Какие еще технологии, кроме Ruby и Rust, тебе интересны?
Стив: На данный момент я сосредоточен на Rust, но меня очень интересует развитие «headless CMS» и JAMStack.
Evrone: Ты потратил много времени на изучение теории языков программирования, чтобы создать первоклассную документацию для разработчиков на Rust. Если посмотреть на эволюцию Rust: что, по-твоему, было наибольшим успехом в дизайне языка, что сделало его таким популярным?
Стив: Наибольшее влияние оказало само желание быть полезным. Мы старались создать максимально привычный для разработчиков язык, чтобы те несколько новых штук, которые мы добавили, сразу бросались в глаза. Rust не боится быть несовершенным, если он полезен.
Evrone: Какой набор инструментов ты используешь в ежедневной работе?
Стив: Я использую Visual Studio Code с плагином vim.
Evrone: Каким ты видишь хорошее образование для разработчика? Нужно ли изучать computer science, чтобы стать программистом, или необходимо научиться быть «писателем программного обеспечения», как это называет DHH (Дэвид Хайнемейер Ханссон, автор Ruby on Rails)?
Стив: У меня есть диплом о высшем образовании, но я узнал гораздо больше за пределами университета. Для меня академическое образование оказалось полезным, но я знаком с отличными программистами, не прошедшими через формальное обучение.
Evrone: Юкихиро Мацумото заметил, что «выбирая язык, разработчик также выбирает проекты, которые будет выполнять в повседневной работе, и то, как он будет над ними работать». Какие проекты и какую культуры работы в основном ожидают разработчики на Rust?
Стив: Многие задачи Rust связаны с инфраструктурой, то есть такими вещами, как операционные системы, веб-серверы, инструменты DevOps, базы данных, встроенные устройства. Есть также некоторые веб-приложения, и в последнее время их количество стремительно растёт.
Evrone: В Rust и других языках недавно были представлены новый синтаксис и концепции «async / await» . Как человек, который пишет документацию для языков программирования и, фактически, учит людей использовать их, что ты можешь рассказать нам о кривой обучения и отзывах разработчиков об этих фичах?
Стив: У Rust репутация сложного в освоении языка, отчасти потому, что он черпает вдохновение из множества других языков. Так что, если вы не пробовали язык, из которого была позаимствована какая-то идея, вам может быть трудно. И наоборот, вам может быть просто работать с фичами, которые похожи на то, что вы видели в других языках. Это означает, что сложность и легкость индивидуальны для каждого человека! Программист на JavaScript может сказать: «О, async / await, ничего особенного, всё норм». А программист на C может спросить: «А что это такое?» Но когда дело доходит до указателей, программист на C скажет: «Всё понятно!» — в то время как программисту на JavaScript будет намного труднее.
Evrone: Считаешь ли ты, что существует «природная склонность» к программированию, как, например, склонность к музыке или рисованию?
Стив: Может быть. Даже если есть, я не думаю, что это обязательное условие для того, чтобы хорошо программировать. Склонности могут облегчить задачу, но необходимости в этом нет.
Evrone: Какую конкуренцию ты сейчас видишь для Rust и в какой области?
Стив: Главный вызов сейчас — это вакансии. Проектов с Rust больше, чем можно было ожидать, но всё же получить работу не так уж легко — её по-прежнему не очень много. Ситуация меняется, но мы только движемся в нужном направлении.
Evrone: Диапазон систем типов для современных языков сегодня простирается от динамической типизации до статической типизации, со множеством разновидностей, например «gradual typing». Как ты думаешь, в чём заключается основная сложность работы с типами, почему у нас нет одной оптимальной стратегии, которая могла бы использоваться в большинстве языков программирования?
Стив: Не все системы типов одинаковы. Их множество, и некоторые из них лучше подходят для одних вещей, чем другие. А ещё есть личные предпочтения. Я знаю людей, которые никогда бы не использовали язык с динамической типизацией. И хотя я сам предпочитаю языки со статической типизацией, я выбрал бы язык с динамической типизацией, а не язык с более слабой системой статических типов.
Evrone: Разработчики открытого ПО часто «выгорают», что приводит к печальным ситуациям вроде той, что произошла с actix-web. Что помогает тебе поддерживать баланс между работой и личной жизнью и не «выгорать»?
Стив: Не думаю, что умею хорошо сохранять баланс, это нелегко. У меня бывают периоды, когда я делаю очень много, а затем случаются периоды бездействия.
Evrone: Ажиотаж вокруг full-stack подхода требует от разработчиков изучения сразу нескольких языков и стеков технологий (привет, webpack). Учитывая твоё свободное владение такими разными экосистемами, как Ruby и Rust, считаешь ли ты, что для большинства программистов резонно включать столько разных вещей в свою повседневную работу?
Стив: На мой взгляд, изучать новые технологии — это всегда здорово, и если у вас есть время и возможность узнать о них больше, вы всегда должны этим шансом пользоваться.
Evrone: Можем ли мы разумно оценить опыт разработчиков, исходя из того, сколько лет они программируют?
Стив: Не думаю. Порою опыт полезен, но также легко застрять в старых подходах.
Evrone: Как ты думаешь, WebAssembly сможет заменить JavaScript в качестве предпочитаемой frontend-платформы в будущем, или sandbox-архитектура навсегда ограничит её нишей высокопроизводительных вычислений?
Стив: Я не думаю, что он действительно пытается заменить JavaScript, а скорее его дополняет. Я думаю, станет намного больше wasm, но JS никуда не денется.
Evrone: В Интернете полыхают споры вокруг монолитной и микросервисной архитектур. При этом некоторые крупные компании разбивают свои монолиты на микросервисы, а другие склеивают микросервисы обратно в «glorious» монолиты. Сейчас ситуация ещё больше усложнилась, поскольку Function-as-a-Service теперь доступна на всех основных «облачных» платформах. Не мог бы ты посоветовать разработчикам, как сделать разумный выбор для своих проектов?
Стив: Думаю, это зависит от навыков членов команды. Некоторые команды предпочитают одну большую кодовую базу, а другие — много маленьких проектов. Оба этих подхода могут как хорошо себя показать, так и привести к неудаче: всё зависит от мастерства разработчиков.
Evrone: Как среднестатистическому разработчику выбрать между «SemVer» и «CalVer»?
Стив: Лично я предпочитаю SemVer, но я довольно пристрастен. =)
Evrone: Хорошо ли для open-source, когда компании нанимают авторов на полный рабочий день? Или лучше выбирать спонсорство GitHub, Patreon и подобные им сервисы для финансовой поддержки разработчиков?
Стив: Я считаю, что это здорово, когда компании нанимают авторов. Им ведь нужно платить за квартиру и еду. Если эти деньги поступают от коммерческих организаций, которые зарабатывают деньги, это часто намного лучше, чем получать донаты от других разработчиков.
Посмотрите выступление Стива Клабника «Exploring Ruby through Rust» на нашей конференции RubyRussia (ex-RailsClub) в 2016-ом:
Мы рады знакомству со Стивом, он вдохновляет нас использовать Ruby и Rust в широком спектре проектов. Обращайтесь к нам, если вам нужна помощь в разработке крутого решения, и мы сможем помочь!