Хабрахабр

«Я просто энтузиаст проекта и пользователь языка Dart» — интервью с Ari Lerner, автором знаменитой ng-book

Что самое важное в обучении, что такое «hallway chat» и вообще, при чём тут Dart и Flutter? Как написать девять книг по совершенно разным технологиям, включая Angular, Vue, React, React Native и другим?

Какой будет дальнейшая книга, что автор думает о таком… противоречивом языке, как Dart, и почему на конференциях так важно общаться, спрашивают ребята из программного комитета конференции HolyJS (Дмитрий DmitryMakhnev Махнёв и Евгений bunopus Кот).
— Здравствуйте. Сегодня у нас в гостях автор множества книг и статей по программированию, включая ng-book — Ari Lerner. Давайте для начала вы расскажете немного о себе? В нашем интервью будет три раздела, в первом мы поговорим о вас, во втором о Flutter, и третий будет заключительный.

Что касается меня, я живу в Бруклине в Нью-Йорке и программирую столько, сколько себя помню — моим первым языком был ассемблер в начале 1990-х. — Для начала я хотел бы поблагодарить вас за приглашение — я очень рад возможности выступить на HolyJS. По большей части я работаю с клиентами, помогаю им выходить на ICO (Initial Coin Offerings), помогаю им работать с «token economics». В данный момент я занимаюсь блокчейнами и глубоким обучением, пока что по отдельности. А ещё со мной живет восхитительная собачка Джинджер, помесь чихуахуа и корги — о ней я могу говорить бесконечно.

Размером с чихуахуа, но лохматая, как корги? — А как она выглядит?

Очень милая.
— Да, это уменьшенная корги с мордочкой чихуахуа.

— Чем вы зарабатываете сейчас? Пишете книги, или работаете в компании?

Я пишу книгу, но это уже не занимает всё моё время. — И то, и другое. Пока я не решил, что делать дальше, работаю на себя.

— Насколько я понимаю, 5 или 6 лет назад вы основали Fullstack.io?

— Да, это было в 2012 году.

— Расскажите о нём.

Что касается издания учебников, наша основная аудитория — профессиональные разработчики, но мы также предоставляем учебники университетам, школам и программам повышения квалификации. — Fullstack состоит из двух частей, это издательство учебников по программированию, а также образовательная платформа. Мы работаем с компаниями вроде General Electric, Walmart, с вооружёнными силами и так далее. Помимо этого, мы проводим тренинги в онлайне и вживую, как правило в рамках повышения квалификации.

Конкурируете ли вы с O’Reilly, или у вас совсем другая область? — Здорово.

Кроме того, у нас немного другой подход. — Мы занимаемся вещами, во многом похожими на то, что делает O’Reilly, но напрямую мы с ними не соперничаем, потому что у нас совсем другой масштаб — мы не представляем угрозы мировому господству O’Reilly над книгами по программированию. Если же вы покупаете книгу у нас, мы предоставляем вместе с ней постоянные обновления. Обычно книги после издания не обновляются, так что как только вы её прочитали, она уже устарела.

— Издаёте ли вы бумажные книги, или только электронные?

Мы продаём бумажные книги через Amazon, но их обновить невозможно. — И те, и другие. Через Amazon обновлять нельзя — у них слишком жёсткий контроль. Электронные же книги, купленные на Fullstack, обновляются автоматически.

Чтобы написать книгу, нужно быть очень хорошо знакомым с предметной областью, о которой вы пишете — будь то Angular, React, Vue или что-либо иное. — Насколько я понимаю, вы являетесь соавтором множества книг на Fullstack.io — Fullstack React, Fullstack React Native и, конечно же, знаменитая ng-book. Как выглядит ваша подготовка к написанию книги?

Давайте я вначале расскажу вам, как я вообще начал писать книги, и почему мне нравится это занятие? — Хороший вопрос. А потом перейдём к тому, как идёт работа над каждой отдельной книгой.

— Да, конечно.

Я создал свой стартап — хотите верьте, хотите нет, но это была компания, занимающаяся планированием (scheduling company). — В 2012 году я достиг потолка в той компании, где я работал, и решил, что настало время уходить. Но хорошего фронтенда не было, поэтому я начал исследовать различные фреймворки и наткнулся на Angular. Для неё я написал элегантнейший бэкенд на Erlang и Python, кажется, с примесью Ruby. 0. Это было очень давно, до версии 1. Чтобы разобраться в том, как работает этот фреймворк, я начал читать исходники и разбираться в том, как он устроен — так произошло моё близкое знакомство с Angular. Я начал писать фронтенд для своего стартапа, и Angular мне очень понравился, но документация к нему была просто ужасная.

Поэтому я решил объединить эти два интереса и стал писать мини-руководство по Angular для начинающих. Примерно тогда же меня попросили выступить с докладом про JavaScript в учебном лагере для разработчиков в Сан-Франциско, и тогда я понял, что мне очень нравится преподавать. В конечном итоге я стал автором или соавтором девяти книг. Поначалу я думал, что это будет две или три страницы текста, но в итоге вышло 650 страниц, которые я с годами продолжал обновлять. Я также участвую на добровольческих началах в организациях вроде Women Who Code и проектах Bridge Foundry, и преподаю ElixirBridge. Я преподавал в качестве добровольца на каждом крупном учебном лагере для разработчиков в Сан-Франциско. Я даже давал занятия в тюрьме общего режима в области залива Сан-Франциско, и по-прежнему преподаю здесь, в Нью-Йорке.

Преподавая, я не только помогаю другим, я заставляю себя подниматься на новый уровень, чтобы уметь объяснить, как работает та или иная технология. Преподавание для меня очень важно, оно мотивирует меня больше учиться самому. Год или полтора тому назад мы познакомились с Vue, и просто начали изучать исходники, наша работа с Vue принесла нам большое удовольствие. Обычно я готовлюсь, читая исходники, особенно это касается JavaScript. В результате мы компилируем огромное и очень подробное оглавление, которое затем при любых изменениях мы обновляем вместе со всей книгой. По мере работы я записываю все проблемы, с которыми встречаюсь, все поисковые запросы в Google, все вопросы по документации.

— Это происходит автоматически, при помощи обработчиков, которые следят за всей этой информацией в документации?

У нас есть хуки на Реакт, и у нас выполняются автоматические обновления кода, но содержание приходится обновлять вручную. — У нас есть обработчики, которые отслеживают циклы релиза, но, к сожалению, почти всё остальное — редактирование содержания и изображений — выполняется вручную.

Насколько мне известно, вы являетесь соавтором множества книг. — Понятно. Как вы организуете свою работу, как синхронизируете главы? Сложнее ли писать книгу одному или вместе с кем-то?

Написать книгу в соавторстве может быть тяжело, хотя, я думаю, несколько проще в случае с книгами по техническим специальностям, чем по нетехническим. — Так же, как при совместной разработке приложения, мы используем Git для унификации содержания, так что у нас есть версии и ветки. Но, в целом, это не слишком трудная задача. Думаю, сложнее всего обеспечить единый тон для всех разделов, и определить, какие использовать демки. С годами мы наработали шаблоны письма, которые обеспечивают единство стиля всем нашим многочисленным авторам. Всё внимание поглощает написание и редактирование, и мы постоянно находимся на связи друг с другом, что существенно упрощает процесс. Мы позиционируем себя как команду, в которой все работают друг с другом, а не как издательскую компанию, на которую работают авторы. И мы всячески стараемся, чтобы наши соавторы писали с нами, а не для нас. Наличие редактора или редакторов помогает обеспечить однородный стиль на протяжении всей книги. Кроме того, мы все являемся соредакторами для тех книг, которые пишем. Каждый автор редактирует раздел, написанный другим автором.

Я обычно работаю в Visual Studio Code или Spacemacs — сочетание Emacs и Vim, очень рекомендую, если вы его ещё не пробовали. Что касается инструментов, то мы пользуемся Git, а также простыми текстовыми редакторами и Markdown. Его мы используем прежде, чем публиковать новый релиз или обновление книги. Кроме того, у нас много собственного софта, который мы написали для компиляции, работы со стилем и предпросмотра книг в реальном времени. Большая часть наших инструментов написана на JavaScript, TypeScript или Python.

— Пользуетесь ли вы гибкими методологиями наподобие Scrum при написании книг?

Мы проводим своего рода модифицированные stand-up-встречи, но не каждый день, а каждую неделю, или через неделю, в зависимости от темпа работы над книгой. — Да, но не слишком активно. Если я работаю один, то весь мой stand-up заключается в том, что я открываю мой текстовый редактор, но если я работаю с кем-то, то мы постоянно на связи друг с другом через Slack и Google Hangouts.

— А сколько времени у вас занимает написание книги?

Скажем, ng-book я написал за четыре месяца, работая по вечерам и по выходным. — Зависит от того, какая это книга, работаю ли я с соавторами, от скорости фреймворка. Обычно на одну книгу уходит от шести до двенадцати месяцев. Но для меня это совершенно невообразимая скорость, я до сих пор не понимаю, как успел так много сделать.

Вы тратите много времени, работаете с интересными инструментами и процессами, возможно, в соавторстве с кем-либо ещё, затем отдаёте книгу в издание. — Интересно. Я спрашиваю, потому что когда я начинал программировать, я не мог читать техническую документацию по-английски, поэтому я читал много книг на русском — например, перевод Good Parts of JavaScript и самых известных книг O’Reilly. Когда плод ваших трудов издатель пытается перевести на другой язык, как вы проверяете качество перевода? Я думаю о том, как к этому должны были отнестись авторы книг, и какой у них мог бы быть способ проверить переводы. Насколько мне известно, эти переводы были ужасными. Какое в целом ваше мнение о переводах?

У нас много ситуаций, когда мы не владеем языком, на который переводится книга — например, большинство наших книг переводится на китайский, а я по-китайски не говорю. — Здесь я могу говорить только о своём личном опыте и о том, как работает Fullstack. Но в случае с китайским лучше всего переводы у нас получались тогда, когда наш переводчик одновременно был программистом. Правда, со временем я научился нескольким словам, у меня для этого специальное приложение, Babbel, при помощи которого я учу иностранные языки. По-русски я, к сожалению, тоже не говорю. Благодаря этому при всяких вопросах переводчику проще было задать вопрос нам на английском, и затем правильно перевести ответ на китайский. Безусловно, тяжело не знать языка, на котором написан софт. Могу сказать «велосипед» — хотя нет, как слышите, даже этого я сказать не могу. Я это особенно хорошо понимаю, когда смотрю документацию опенсорсных китайских проектов — чтобы хоть что-либо понять, мне приходится копаться в исходниках.

Насколько я знаю, у первых его релизов была довольно плохая документация, а многие issues были описаны на китайском. — Похожая ситуация была со Vue. Насколько мне известно, сейчас обязательным требованием является английский язык.

Мне повезло, что английский у меня родной язык. — Да, это так. Я считаю, что переводы очень важны. Хоть я и не безупречно на нём говорю, с документацией у меня проблем не возникает. Тем не менее, я не думаю, что для всех этих проблем есть одна панацея. Кроме того, мы живём в такое время, когда машинный перевод становится всё более качественным, в особенности благодаря глубокому обучению — это одна из причин, по которым я заинтересовался глубоким обучением.

Одна сторона в споре утверждала, что переводы по определению — зло, потому что программисты обязаны знать английский язык, он — международный язык для всех. — Недавно я наткнулся на бурную дискуссию в русскоязычной части Twitter. Есть ли у вас мнение по этому спорному вопросу? Другие говорили, что для джуниоров и тех, кто не очень хорошо говорит по-английски, документацию переводить надо.

То, что я сейчас скажу — это всего лишь моя первоначальная реакция, долго я эту проблему не обдумывал. — Мне близки аргументы обеих сторон. Мне кажется, что сейчас настолько много кода написано на английском, что избавиться от английского языка было бы крайне сложно. Возможно, при личной встрече мы сможем более глубоко обсудить эту тему. Наличие интернационального языка — английского — упрощает нам общение и сотрудничество с разработчиками во всём мире; например, я общался с разработчиками в Индии, Франции, Англии, Китае, Австралии. Существуют интернациональные языки — например, JavaScript является интернациональным языком, если вы говорите на нём, то вы можете общаться с любым человеком в любой точке земного шара. Кроме того, как я уже сказал — это всего лишь мои первичные размышления, долго эту проблему я не обдумывал и, возможно, завтра моё мнение изменится. Конечно, это не вполне справедливо по отношению к людям, которые по-английски не говорят — уверен, если бы я не говорил по-английски, у меня по этому вопросу было бы другое мнение.

Сейчас же давайте поговорим о книгах — они становятся менее популярными, чем раньше, из-за появления таких платформ, как Media, Twitter и так далее. — Да, мы можем обсудить это при личной встрече. Считаете ли вы, что книги исчезают?

Я считаю, что все работают и учатся по-разному. — Я не убеждён, что книги становятся менее популярными. И мне кажется, что онлайн-обучение подходит для разработчиков, которые хотят выучить различные языки и фреймворки по-другому. Онлайн-сервисы по своей функции похожи на занятия в классах. С другой стороны, я преподавал в классах, где всё было ровно наоборот и где ученики просто не могли сесть за книгу, это им ничего не давало. Некоторым проще работать с документацией, другим — с исходниками, некоторые лучше работают в группах, другие — в одиночку, путём проб и ошибок, или читая книги на поездах и самолётах и затем реализуя прочитанное на практике. Думаю, одно из очень важных достижений интернета для программистского сообщества заключается в том, что он сделал обучение более доступным, а успех — более достижимым. Не то, чтобы они вовсе не умели читать, просто они меньше получают от чтения, чем от работы с другими людьми. Я горжусь тем, что могу быть причастным к этой эволюции образования. Сайты и сервисы вроде Medium или Coursera помогают распространению знаний и делают возможными разнообразные способы обучения. Возможно, в будущем наши книги станут интерактивными, и мы сможем объединить их с онлайн курсами.

Сейчас такой формат вышел из моды. — Я помню, что когда-то книги продавали с CD или DVD-диском с примерами.

Один из наиболее полезных разработанных нами инструментов позволяет записать в одном месте весь исходный код, который используется в книге, и затем у нас есть инструменты, которые автоматически обновляют его из оригинальных исходников. — Да, сейчас всё предпочитают отправлять zip-архивами — например, мы объединяем все наши демки в один zip-архив. У нас есть инструменты, благодаря которым можно делать прямые ссылки на исходный код. Предположим, нам необходимо выделить строку, класс, объект или функцию, которую мы обсуждаем в книге. Так что мы записываем исходники не прямо в текст, а в отдельный файл. Это полезно в том числе и потому, что каждый раз, когда вы скачиваете книгу, происходит обновление исходников.

Вы сказали, что все учатся по-разному и я, как разработчик, могу для обучения читать книги, смотреть видео на YouTube, читать статьи на какой-нибудь платформе. — Мой следующий вопрос будет связан с предыдущим. А вот зачем мне посещать конференции?

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

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

Может, немного спойлеров? — Вы уже написали много книг — скажите, над чем вы работаете сейчас?

Если говорить о блокчейнах, дополненной реальности, глубоком обучении, то в этих областях здорово то, что они сейчас очень популярны, так что практически на каждой конференции, которую я посещал за последние несколько лет, я вступал в очень оживлённые дискуссии с людьми, заинтересованными этими предметами. — Сейчас я в основном занимаюсь блокчейнами. Причём зачастую это мог быть разработчик фронтенда в Google, который в своё свободное время занимается другими темами.

Кроме того, я сейчас работаю над книгой под названием «C++ for JavaScript developers», пока что она находится на ранней стадии написания. Что касается меня лично, то проекты, которыми я занимаюсь, в основном связаны с экономикой — и самое удивительное, что это весьма занимательный предмет. Я очень рад буду обсудить эту тему, если встречу на конференции по JavaScript кого-либо, кто работал с С++.

Сами понимаете, С++ и JavaScript… — Эта книга будет как-то связана с WebAssembly?

Он похож на Etherium, но создан при помощи LLVM, а это позволяет писать контракт на чём угодно, что компилируется в LLVM, в том числе на С++. — Книга в основном посвящена EOS — это довольно новый блокчейн.

Давайте перейдём к следующему разделу, он будет более тесно связан с вашим докладом на HolyJS. — Здорово. Что вас подтолкнуло к этому? Вы раньше работали с Angular, Vue, React, JavaScript — а сейчас делаете доклад о Flutter, мобильной платформе от Google, написанной на Dart.

Здесь похожая история на то, как я пришёл к Angular, о чём я уже говорил выше. — В такой формулировке это действительно звучит забавно. Мы уже издавали книгу про ReactNative, и у меня был опыт с этой платформой, но хотелось попробовать чего-то другого. Я хотел написать несколько приложений для себя и своих друзей, которые пользуются кто Android, кто iPhone. Насколько мне известно, сейчас делаются попытки приспособить Swift для Android, но те, с которыми я знаком, находятся ещё на очень ранних стадиях, рассчитывать на них нельзя. Я умею писать на Java, Kotlin и Swift, поэтому я начал писать приложение на Swift. То есть разработчик привык к iOS и пытается просто перенести свой опыт на Java, или, наоборот, очень хорошо знаком с Java и лезет с ней в iOS. Кроме того, мне кажется, что многие из них — хаки. В результате я решил поискать другой кросс-компилируемый фреймворк и нашёл Flutter. Кроме того, я не хотел расставаться с сообществом JavaScript — у меня с ним наладились очень тесные связи, я мог пользоваться замечательными инструментами вроде Redux, было множество библиотек, при отсутствии которых пришлось бы изобретать велосипед.

Он обеспечивает лёгкую интеграцию с библиотеками JavaScript, так что я мог опираться на свой опыт, скажем, с Redux. Flutter написан на Dart, это компилируемый язык, во многом похожий на TypeScript. А иммутабельность данных делает приложения более безопасными, ошибки обнаруживаются очень быстро. Другое преимущество Flutter в том, что в нём всё является виджетом, благодаря чему процесс написания приложений становится более быстрым и понятным. Благодаря тому, что вам видно, как работают виджеты во Flutter, вы начинаете лучше понимать, как Flutter устроен. Кроме того, во Flutter есть AOT-компиляция и JIT-компиляция, а множество встроенных виджетов позволяют очень легко создать приложение, пользуясь знакомым UI.

Одна из самых крутых особенностей Flutter — это hot reload, к которому мы так привыкли в web. У Flutter много и других сильных сторон — тестирование, управление пакетами, распределение, компилирование. Далее, с Flutter ваш UI всегда будет локализован на том же языке, на каком написана ваша бизнес-логика. Например, когда вы собираете приложение на Swift, вы компилируете, затем запускаете приложение, затем вам, возможно, нужно нажать несколько клавиш, чтобы вернуться к экрану, на котором вы работали, решить возникшие проблемы, после чего весь цикл повторяется. Ещё нужно сказать, что Dart достаточно похож на TypeScript, который, в свою очередь, похож на JavaScript, так что весь мой опыт с JavaScript напрямую пригодился мне в работе с Dart. Что касается моего опыта с Flutter, то я на нём написал несколько приложений, и я просто в восторге от этого процесса.

Что вы думаете о Dart в целом, как о языке? — Но Dart — язык с сильной типизацией, поэтому писать программы на нём так же, как вы пишете на JavaScript, не получится. Какие у него преимущества?

Мне нравятся языки со статической типизацией — хотя я ничего не имею против динамических языков, из них мне больше всего нравится Clojure. — Если быть абсолютно честным, то я считаю, что Dart прекрасен. У Dart также есть нечто подобное, он выполняет вывод типов, так что в нём не строгая типизация. Но у статической типизации много преимуществ, и, мне кажется, из-за них многие разработчики стали переходить с JavaScript на TypeScript — правда, у последнего есть возможность убрать типизацию и позволить компилятору определить типы самостоятельно. Как я уже говорил, это всё есть у TypeScript и Flow. Тем не менее, преимущество языков со статической типизацией, даже с выводом типов, заключается в том, что их очень быстро можно переводить на другие языки, и ошибки можно обнаружить до запуска приложения. Кроме того, как я уже говорил, у Flutter есть JIT-компиляция, что делает цикл разработки значительно более быстрым и простым, и благодаря ней у вас есть очень быстрый перезапуск при разработки приложения на Flutter. Компиляция обеспечивает предсказуемость и скорость, во Flutter она происходит в нативный код.

Классы являются объектами первого порядка, у них эксплицитные интерфейсы, конструкторы именованные — если вы работали на Java, они вам, скорее всего, нравятся. В Dart много других привлекательных вещей — например, область видимости работает значительно проще, чем в JavaScript, вам не нужно “байндить” функции. Кстати, я вроде бы не упоминал, да, Dart компилируется в JS. Мне кажется это супер круто, это позволяет нам проще писать на Dart, и потом компилировать его в JavaScript и потом использовать этот JavaScript. По-моему, Dart существенно облегчает наиболее тяжёлые аспекты разработки. Isolates внутри Dart позволяют использовать Web workers вместе с Dart. Помимо этого, у Dart много прекрасных инструментов, замечательные библиотеки для Flutter, время запуска очень небольшое, поскольку код на Dart компилируется напрямую в нативный код, а не как в React Native, где создаётся дополнительная прослойка из JavaScript.

— Десериализация и тому подобное.

На мой взгляд, сообщество React Native создало много хороших библиотек, но по-прежнему остаётся много трудностей — например, нельзя передавать объекты JavaString, их надо сериализовать в строковые объекты. — Да. Наконец, поскольку Dart похож на Java, C#, ActionScript и JavaScript, обстановка, в которой вы пишете, в общем-то знакомая, и вы можете опереться на весь ваш опыт с этими языками. С Flutter ничем таким заниматься не нужно, потому что компиляция происходит напрямую в нативный код.

А с Dart уютно, как под одеялком. — В то время как Clojure, например — это нечто совершенно иное.

— Да, я писал на Clojure — там всё вверх ногами.

Можно ли написать банковский клиент, финансовое приложение или приложение, требующее многих экранов? — Какие приложения, по-вашему, можно — или нужно — писать на Flutter? Или он годится только для того, чтобы написать на нём «Hello World»?

Если вы выбираете между нативной разработкой или кросс-компилируемым фреймворком наподобие Flutter или React Native, многое зависит от вашей команды. — Пока что меня весьма впечатляет и скорость разработки, и скорость созданных мной на Flutter интерфейсов. Если у вас небольшая команда, и вам нужно довести ваше приложение до как можно большего числа пользователей независимо от платформы, при этом не жертвуя производительностью вашего приложения в рантайме — однозначно используйте Flutter. В правильно спроектированном приложении, я думаю, нет ограничения на количество экранов, которое можно написать — здесь Flutter не уступает другим вариантам. И тут, повторюсь, преимущество Flutter для меня в том, что он позволяет писать на языке, с которым я хорошо знаком. Если же у вас много сотрудников, и есть разработчики с большим опытом написания нативного кода, то скорее встаёт вопрос того, как вы будете набирать вашу команду — будете ли вы набирать людей, прекрасно пишущих именно на Java или на Swift, или людей, которые могут написать код и для фронтенда вашего веб-приложения, и для бэкенда на сервере, и для мобильного приложения.

Иначе обстоит дело, когда вам нужна производительность, которую может дать только нативное приложение, например, в случае с приложениями AR и VR. Если отвечать на ваш вопрос более прямо, Flutter прекрасно подходит для приложений, которые отображают некоторое содержание — например, он подошёл бы для Twitter. Отчасти это потому, что и на iOS, и на Android очень удобные фреймворки для виртуальной реальности и дополненной реальности. Единственное моё AR-приложение написано на Swift, и на Flutter я его пока не перевёл.

Можно ли сравнивать Flutter с приложениями на PWA? — Вы упоминали, что Flutter подошёл бы для написания Twitter — но Twitter сейчас написан на PWA. Они тоже кросс-платформенные, и у них много других сходств.

Но если вы написали бизнес-логику вашего веб-приложения на Dart, то вы вполне можете использовать её в мобильном приложении. — Насколько я знаю, в будущем можно будет компилировать приложения на Flutter в веб-приложения, пока что этого делать нельзя. Зачастую скомпилированный Dart JavaScript-код будет быстрее, чем код, написанный напрямую в JavaScript. И Dart очень быстрый.

— Думаю, это несколько спорное утверждение.

Довольно часто компиляция кода на Flutter происходит быстрее, чем кода, который вы написали бы напрямую в JavaScript. — Хорошо, сформулирую это иначе.

Если мы говорим о языках вообще, то существует множество таких, которые можно компилировать в языки на других платформах. — Понятно. Есть и фреймворки такого рода — для Angular это Ionic, для кроссплатформенной мобильной разработки — Cordova PhoneGap. Одним из них, конечно, является JavaScript — сейчас можно всё что угодно и для любой платформы написать на JavaScript. Возможно, это JavaScript? Существует ли один язык, способный удовлетворить все нужды?

Думаю, дело в том, что JavaScript прост в обучении, поэтому его сообщество быстро растёт, что позволяет генерировать много идей— благодаря этому возникли React Native, Node.js и, отчасти, Dart. — Интересный вопрос. Но лично меня тянет к языкам, созданным на основе определённой идеи — например, мне очень нравятся функциональные языки. Из всех существующих языков JavaScript, по-моему, ближе всего к модели универсального языка для всех платформ. Тем не менее, если вы в 2018 году решили научиться писать на каком-нибудь языке, и не знаете ещё, чем будете заниматься — вебом, мобильными приложениями, бэкендом — то не пожалеете, выбрав JavaScript. Не думаю, что они когда-либо выйдут из употребления.

Зачем нужны другие языки, если есть JavaScript? — Но если JavaScript такой замечательный, то почему сейчас возникают новые языки — Go, ClojureScript, Dart?

Я сейчас скажу фразу, которую очень часто повторяют в тренировочных лагерях, да и не только там — очень важно, чтобы инструмент соответствовал выполняемой работе. — А если мне нравятся яблоки, зачем есть другие фрукты? А все интерфейсы я пишу на JavaScript или Dart, и иногда я использую ClojureScript. Я пишу много кода на Go, потому что всё, что связано с блокчейнами, я делаю на Go или C++ — там очень важна скорость. Он приспособлен для приложений, которым особенно нужна скорость и хорошее управление памятью. Суть в том, что C в ближайшем будущем никуда не денется, хоть он и довольно старый. Например, сборка мусора всегда будет проблемой для JavaScript, и при написании крупных приложений вам всегда придётся разбираться с ней. Так или иначе вам придётся мириться с особенностями того языка, на котором вы работаете. Мой доклад ни в коем случае не направлен против Swift или Java — как я уже говорил, моё приложение с AR написано именно на Swift, поскольку, с одной стороны, я ещё не портировал его на Flutter, но, с другой, Swift прекрасно подходит для этой задачи. Неизбежно приходится жертвовать производительностью в рантайме ради простоты цикла разработки.

Что вы думаете о будущем Dart и Flutter, и о будущем Dart отдельно от Flutter? — Кажется, в 2013 году, когда объявили о создании Dart, вокруг него было много ажиотажа, но потом о нём многие забыли, и сейчас во многих сообществах можно услышать, что Dart умер и больше от него ждать нечего. Ведь есть и AngularDart, и Dart для бэкенда.

Если бы я знал ответ на него, то я сидел бы где-нибудь на тёплом пляже, или на собственной яхте с вертолётной площадкой. — Хороший вопрос. Думаю, библиотека Cupertino — интерфейс Flutter для iOS — будет расти. Если делать какие-либо предположения, то вначале нужно сказать, что я не вхожу в команду Flutter — я просто энтузиаст проекта и пользователь языка Dart. И, кажется, команда Flutter хочет добавить возможность писать нативные десктопные приложения на Flutter — но точно я в этом не уверен.

В 2013 это был год EcmaScript и, я считаю, это был явный перебор со стороны Google, пытаться повлиять на команду ECMAScript. Что касается создания Dart, то, на мой взгляд, о нём объявили слишком рано, и это привело к излишнему воодушевлению и преждевременным надеждам. Я желаю Dart и Flutter всего самого лучшего, в особенности с предстоящим выходом версии 1. И к тому же Flow и TypeScript с точки зрения типизации в языке, стали более популярны. 0 у Flutter.

Вот насчёт его будущего у меня действительно есть сомнения. Есть проект, который работает так же, как и Flutter, называется Fuse, но он основан на C#. В то же время сообщество JavaScript растёт очень быстро, и, поскольку Dart близок к JavaScript, это будет способствовать интересу разработчиков к Dart и Flutter.

Хотелось бы еще поговорить о конференциях. — Здорово, спасибо. Что в них самое важное для вас?

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

— Насколько я знаю, это будет ваша первая поездка в Россию?

— Да.

— Какие ваши ожидания от России, от Москвы и от HolyJS?

Как уже было сказано, я никогда не был в России — я в основном ездил в Китай и страны того региона, то есть в Тайвань, Южную Корею. — Поскольку кроме Москвы я ничего в России не увижу, первые две части вопроса будут, в сущности, одним и тем же. Это одна из причин, по которым мне нравится путешествовать — мне всегда любопытно, как живут другие люди, какие у них приоритеты. Как я понял из того, что я читал о России, у вас другая культура, вы всё делаете несколько иначе, чем мы, и мне очень интересно будет узнать, как это выглядит на практике. Так что меня ожидает новый и увлекательный опыт, каким именно он будет — я предсказать не могу. В Нью-Йорке своя культура, и всё моё знакомство с российской культурой сводится к получению визы и визитам в местный ресторан.

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

Ну и, конечно, я ожидаю холода в Москве.

— Да что вы, какой холод, -10 или -15 по Цельсию, сущие пустяки.

Тогда я буду в шортах. — Всего-то?

Если серьёзно, то у нас классные сообщества Dart и Flutter — хотя, конечно, им далеко до сообщества JavaScript. — И в солнечных очках. И в обоих случаях скоро заметные мероприятия: HolyJS пройдёт 24-25 ноября, а 1 декабря будет конференция по Dart и Flutter.

К этому времени Flutter выйдет из бета-версии. — Здорово.

А дискуссионные зоны на конференции означают, что после доклада будет возможность обсудить с Ари всё интересующее: хоть задать вопрос по Angular, хоть дать ему ng-book на подпись. Хотя в случае с Flutter код и пишут на Dart, доклад Ари на HolyJS будет рассчитан на людей с опытом в JavaScript: предварительное знакомство с Dart не потребуется. В общем, увидимся 24-25 ноября на Холи!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть