Тим Снит: «Flutter для приложений, как Unity для игр»

Интервью с product-менеджером Flutter и Dart (Google)

Мы поговорили с Тимом Снитом, продакт-менеджером Flutter и Dart в Google, о том, как развивались язык и фреймворк за последние два года, как они используются сегодня и на что ориентируются в будущем.

Интервью

Evrone: Ваша должность называется «Продакт-менеджер Flutter и Dart». Что нужно для того, чтобы стать менеджером по продукту не для конечных пользователей, а для чего-то связанного с разработкой, а именно, менеджером фреймворка и языка программирования?

Тим: Я никогда не был менеджером по продуктам для пользователей. Все, кого я знаю — это разработчики! Но в целом, быть менеджером по продукту — значит оперировать бизнес-стратегией, отзывами клиентов, инженерными ресурсами и обладать прогностической интуицией в создании продукта, который, как мы надеемся, будет любим своей целевой аудиторией.

Flutter стал использоваться гораздо чаще за последние пару лет. Я трачу много времени, чтобы найти компромиссы, связанные с этим ростом: сколько наших ресурсов мы тратим на новые функции по сравнению с доведением до совершенства существующих? Как мы разделяем наше внимание между внутренними пользователями, компаниями и стартапами? Как мы поддерживаем новые формы устройств, например, гибкие или складные девайсы, платформы, такие как Windows и macOS? Не слишком ли распыляемся?

 

Evrone: Кажется, мы видим что-то вроде Ренессанса для фреймворков, которые создают UI при помощи кода: Flutter, Swift UI и Jetpack Compose, которые были анонсированы или выпущены за последние пару лет. Быстрая перезагрузка — это то, о чём вы много говорите в связи с Flutter. Какие тенденции вы наблюдаете здесь?

Тим: Я думаю, что производительность разработчиков была предана на алтарь инноваций много лет назад. Я учился в университете, когда вышла Visual Basic 1.0, и во многих отношениях это означало важную веху в упрощении разработки пользовательского интерфейса. Подумайте об этом — до VB создание приложения Windows включало в себя написание сотен строк C, использование редактора DOS и компилятора командной строки, а также кропотливого цикла «редактирование / компиляция / отладка» для его запуска. Visual Basic позволил разработчикам-любителям раскрашивать свой пользовательский интерфейс прямо на экране, вместе с «редактировать и продолжить» — возможностью приостанавливать работу приложения, вносить изменения и затем продолжать без перекомпиляции.

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

Нам предстоит пройти долгий путь, но быстрая перезагрузка с сохранением данных о запросах — это шаг к той легкости разработки пользовательского интерфейса, которую давала в свое время концепция «редактировать и продолжить». Я надеюсь, что мы сможем и дальше снижать когнитивную нагрузку превращения идеи в приложение с помощью Flutter, чтобы разработчики могли больше сосредоточиться на том, что они хотят построить, и меньше на том, как написать код для этого.

 

Evrone: Война между «нативными интерфейсами операционных систем» и «кастомными платформо-независимыми интерфейсами» длится десятилетия, начиная с первых версий Qt. Учитывая ваш опыт работы со многими крупными компаниями, которые создают мобильные приложения, какова текущая ситуация?

Тим: Я думаю, что это ложная дихотомия. Единственное, что имеет значение, это качество: можете ли вы создать прекрасный опыт, достойный проницательного пользователя? Качество не имеет ничего общего с тем, какой двоичный файл отображает определенный пиксель на экране: это сочетание производительности, внимания к деталям и технических возможностей. Некоторые из наиболее выдающихся игр построены на игровом движке Unity, но никого не волнует, использует ли Monument Valley «нативный виджет ОС» или нет.

Мы верим, что Flutter для приложений — это то же самое, что Unity для игр: привносит нативное функционирование и визуальное изящество в приложения, независимо от целевой платформы.

 

Evrone: Как Dart связан с новым проектом Google — "Fuchsia"? Он указан как один из «рекомендуемых» языков, наряду с C ++, Rust и Python.

Тим: Fuchsia — экспериментальная операционная система с открытым исходным кодом, над которой мы работаем некоторое время. На данном этапе, мы мало чем можем поделиться, но исходный код общедоступен. Flutter поддерживает сборку для Fuchsia, поэтому в исходном коде Flutter вы найдете различные ссылки на нее. И, конечно же, Dart — это язык Flutter

 

Evrone: Крупные компании, такие как eBay или BMW, используют Dart + Flutter для своих мобильных проектов. Что сподвигает их к этому?

Тим: Для многих это просто возможность объединить разработку своих приложений с помощью единого высококачественного решения. Если задуматься, большинство приложений, ориентированных на потребителя, имеют несколько команд, работающих над одной и той же бизнес-задачей, с одинаковыми конечными результатами и сроками. И все они выполняют одну и ту же работу, просто с разными языками и инструментами для iOS, Android и Web. Это просто безумие. Сегодня практически нет других аналогов в разработке программного обеспечения: компании не особо хотят добровольно внедрять три рабочие команды и платить им зарплаты. Когда команды обнаруживают, что они могут не только создать высококачественный нативный интерфейс для нескольких платформ сразу, но и быть производительнее по сравнению с работой над отдельными платформами благодаря таким функциям, как быстрая перезагрузка с сохранением данных, это легко продать!

Самые большие проблемы не технические: у многих компаний уже есть сложившаяся организационная система в отношении своей целевой платформы. Поэтому, иногда, команды изначально не хотят переходить в формат работы, где их усилия объединяются. Конечно, мы всё еще молодая платформа, поэтому более консервативные компании испытывают врождённый скептицизм в отношении пути, который еще не проторен. Но время решит эту проблему: наша экосистема пакетов и плагинов выросла в 5 раз за последний год, и в магазине есть десятки тысяч приложений, демонстрирующих, что Flutter способен обеспечивать качество в больших масштабах.

 

Evrone: По вашему мнению, что лучше — чтобы разработчики создавали отдельные макеты для планшетов и мобильных телефонов, или современные технологии уже достаточно мощны, чтобы создавать «адаптивные» пользовательские интерфейсы, которые идеально подходят для экрана разных размеров?

Тим: В течение многих лет у web была поддержка Media Queries, но всё ещё сложно построить работу так, что интерфейс будет адаптироваться под любые форматы устройств. Flutter делает это возможным, и Матиас Дуарте недавно продемонстрировал один прототип инструмента, с которым мы экспериментируем для Flutter.

 

Evrone: Какую среду разработки вы предпочитаете сейчас? Android Studio, продукты JetBrains, VSCode или что-то ещё?

Тим: Лично я привык к VSCode, потому что пришел в Google из команды Visual Studio, а это набор продуктов, c которыми я проработал на протяжении многих лет. Мне очень понравилась работа, которую проделал Дэнни Таппени над созданием расширений для Flutter и Dart; было здорово видеть, что Flutter стал цельным опытом в VSCode. Как команду, нас, конечно, не волнует, какие инструменты программирования вы используете, будь то Android Studio, IntelliJ, VSCode, Vim или Emacs!

Один из интересных для меня проектов — работа над Language Server Protocol, который пытается сократить разрыв между редакторами и языками с помощью общего протокола. В то же время ведётся работа над аналогичным проектом для адаптера отладки. Мы надеемся, что он постепенно позволит разработчикам выбирать инструменты, которые соответствуют их потребностям, и авторам языков не придется дублировать свою работу с каждым из этих инструментов.

 

Evrone: Ходят слухи, что Dart предназначался для замены JavaScript в web-браузерах, но теперь разворачивается для поддержки Flutter. Это правда? И что такое использование Dart вне разработки мобильных приложений?

Тим: Это правда, история происхождения Dart началась как следствие работы команды V8, которая создавала новые подходы к разработке приложений. Но тот Dart мало похож на текущий, который несколько лет назад переродился в язык, оптимизированный для клиентской части. Это произошло с запуском Dart 2.0. Сегодняшний Dart ориентирован на конкретную область применения: кросс-платформенность в web, мобильной и desktop версиях системы; быстрое создание объектов и сборка мусора; инъекции кода VM при разработке с нативной компиляцией в рантайме. Это делает его особенно подходящим для клиентских сценариев, будь то Flutter, CLI или бизнес-логика.

 

Evrone: Что вы думаете об идее Full-Stack? С такими языками, как Dart, которые могут хорошо работать как на бэкенде, так и на фронтенде, могут ли современные разработчики создавать все части приложения?

Тим: Я не знаю о других, но мне было бы трудно справляться имея в арсенале только фронтенд! Приятно иметь язык настолько гибкий, что его можно использовать для работы с мобильными устройствами, web, сервером и облаком, и мы видим, что разные люди используют Dart для работы с сервером, часто для обмена существующей бизнес-логикой, которую они уже написали для клиента. Я полагаю, что разработчики действительно могут быть Full-Stack: так как есть много людей, которые так и делают. Но специализация становится всё более необходимой, поскольку приложения растут в масштабе.

Честно говоря, я не думаю, что вы найдете много настоящих разработчиков Full-Stack в Google за пределами стартап-инкубаторов.

 

Evrone: Flutter для web теперь в бета-версии, а Flutter для desktop — ранняя альфа. Какое будущее вы представляете для них?

Тим: Они оба находятся в стадии разработки, но мы всё ближе, и скоро сделаем несколько объявлений о том прогрессе, которого достигли на обоих фронтах. Мы никогда не разрабатывали Flutter только для мобильных устройств; он всегда разрабатывался как кросс-платформенный UI-фреймворк, а iOS и Android просто оказались первыми двумя целями. Для приложений desktop-класса возникают новые вызовы: формат устройств и методы ввода различны, они часто используют разные UI-метафоры и должны иметь возможность изменять размеры и обрабатывать несколько окон. Вдобавок к этому, web быстро меняется, в отличие от desktop или мобильных приложений.

Как web, так и desktop по-разному привлекают внимание к Flutter. Web более технически сложен, особенно если вы хотите избежать эффекта «зловещей долины» старых проектов, таких как Flash и Silverlight. Мы хотим, чтобы web-интерфейс был настолько отточен, чтобы вам приходилось заглянуть в исходный код, чтобы убедиться, использует ли страница Flutter или нет. Мы также добились хорошего прогресса в производительности: совсем недавно мы завершили создание бэкэнда CanvasKit для web, который предлагает огромные преимущества.

Desktop предлагает интригующий набор вариантов использования: от предоставления разработчикам простого пути к более чем миллиарду компьютеров под управлением Windows, macOS и Linux, до значительного уменьшения сопротивления для начинающих пользователей при работе с Flutter. Я всё чаще использую desktop в качестве своей первой площадки при работе с приложением Flutter, поскольку вам не нужен эмулятор или подключенное устройство, чтобы увидеть результаты.

Ещё более интригующим является тот факт, что выбор web или desktop тесно связан с Flutter. У нас есть несколько проектов внутри компании, где они находятся в середине разработки, но до сих пор непонятно, планируют ли они поставлять их как нативно скомпилированные desktop-приложения или как PWA (прогрессивное web-приложение). Здорово иметь возможность предлагать такой уровень гибкости.

 

Evrone: Можете ли вы сравнить Flutter с React Native? Каковы преимущества для среднестатистического разработчика, чтобы выучить новый язык программирования и отказаться от привычного JavaScript?

Тим: Стиль программирования React вдохновлял Flutter в первые дни. Это серьезный сдвиг по сравнению с передачей сообщений и сохранением стилей моделей, которые были распространены в течение длительного времени. Трудно ответить на этот вопрос, не унизив другой фреймворк в этом сравнении, что не является моей целью. У каждого из них есть свои сильные и слабые стороны, и существует множество мнений, и без моего!

 

Evrone: Если бы вы могли путешествовать во времени и изменить какую-либо функцию языка Dart, какой бы она была?

Тим: Ха! Без сомнения, функция, на которую мы потратили больше всего времени в последние несколько лет, это strong mode: привнесение в язык статической, качественной системы типов. Первоначальная концепция Dart представляла собой язык с необязательной типизацией с возможностью выражать типы посредством аннотаций для целей разработки, но без семантического эффекта во время выполнения. В Dart 1.x это был основной принцип языка, но со временем ограничения этого подхода стали очевидными, поскольку даже web-мир перешел к проверке типов с помощью TypeScript.

Изменение такой величины в живом языке программирования было немалым подвигом, но команда инженеров завершила эту работу с помощью Dart 2.0, перенеся миллионы строк кода Dart внутри моно репозитория Google в новый общий фронтенд компилятор. Теперь мы опираемся на эту работу, чтобы добавить качественную null-безопасность, предоставляя проверяемые non-nullable типы во всём фреймворке.

Количество времени, которое мы потратили на разработку этих двух дизайнерских решений, примерно равно 50 годам работы одного инженера, но конечный результат — это качественный, null-безопасный язык с проверенными в бою компиляторами для машинного кода JavaScript, Intel и ARM из одного и того же исходного кода. Я думаю, это уникально.

 

Мы в Evrone действительно воодушевлены продолжающейся эволюцией Dart и Flutter: чем мощнее они становятся, тем лучше решения для мобильных приложений, которые мы можем разработать для наших клиентов и партнеров, многие из которых уже не понаслышке узнали преимущества, которые экосистема Dart привносит в супер-заряженную разработку!

Мне нравится видеть новые плагины, такие как Flutter Audio от Evrone: они сосредоточены на том, чтобы делать одно дело очень хорошо. Существует множество интересных способов использовать это для мобильных приложений. Спасибо Evrone за то, что сделали Flutter лучше!
Тим Снит
Product-менеджер Flutter и Dart, Google
Связаться с нами
Нужна команда?
Давайте обсудим ваш проект
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.