Мастера разработки: Эдди Османи, инженер-разработчик ПО в Google, Часть I

2013-08-21

Эдди Османи рассказывает, каково это  создавать будущее Интернета.

В: Значит, Google. И как тебя туда занесло?

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

Что мне действительно нравится в моей работе – это помогать людям быть максимально продуктивными на front-end. При этом многое зависит от правильного инструментария. Многие годы я копался в open-source проектах, шерстил статьи и книги, и, думаю, команда Chrome решила, что я могу посвящать этому целый рабочий день.

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

В: В Google всё оказалось именно так, как ты себе и представлял?

О: Именно так и даже больше. Работа в Google – это американские горки. Это весело, непросто, но по-другому и быть не может. Перед тобой постоянно стоят задачи, решение которых не только окажет влияние на очень многих людей, но и приносит тебе настоящее удовольствие.

До этого я работал штатным  JavaScript-разработчиком, и всё было иначе. Тогда моя обязанность заключалась в ежедневной разработке веб-приложений. Сейчас моё время на работе занято анализом рабочего процесса других front-end разработчиков и обеспечением инструментов и документации, которые облегчат им процесс разработки.

Мы правда хотим превратить front-end разработку в увлекательное и продуктивное занятие.

В: Какова твоя роль в команде Chrome?

О: Я работаю в отделе разработки Chrome, мои основный круг задач лежит в плоскости инжиниринга и составления технической документации. Порой я занимаюсь евангелизмом для Chrome DevTools и пишу официальную документацию, а также работаю над front-end  инструментами вроде Yeoman – вспомогательного инструмента для ускорения создания веб-сайтов и приложений.

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

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

Разработчики хотят убедительного результата, который будет соответствовать тому, что получается в родном приложении, но  это не всегда просто. Мы работаем не только над тем, что можно улучшить со стороны платформы, но и над тем, чтобы повысить уровень образованности в сфере передовых наработок.

В: Расскажи, пожалуйста, подробнее о Yeoman.

О: Yeoman состоит из трёх инструментов, которые помогают автоматизировать стандартные front-end задачи: Yo отвечает за макет, Grunt – за билдинг, Bower – за управление пакетами.

Как только вам понадобится какой-нибудь новый макет, будь то макет сайта или приложения, Yo предоставит вам его. Например, вы работаете над Backbone приложением, и вместе с Yo вам нужно лишь написать в командной строке: «Yo, братишка, мне нужно поработать над Backbone-приложением». Он задаст вам несколько вопросов и создаст шаблон для начального этапа работы над приложением.

Если потом вам нужно будет создать новую модель, коллекцию или вид Backbone, вы можете попросить об этом Yo. Нам очень по нраву идея функционального тестирования, поэтому у нас есть шаблоны функциональных тестов. Это означает, что вы быстро получаете ту основу, над которой будете работать.

Мы стараемся сократить количество шаблонов, о которых вам нужно думать во время кодинга. У нас уже сейчас есть генераторы приблизительно 130 видов проектов, от Angular JS до Adobe TopCoat.

Типы проектов, генерируемых Yeoman, предполагают дальнейшее использование Grunt (JavaScript-менеджер задач) для отслеживания рабочего процесса. Наша задача здесь – предсказать те задачи, которые впоследствии вам пригодятся при разработке. Например, вы хотите использовать в проекте CoffeeScript. Замечательно. Мы можем автоматически включить задачу в Grant, которая скомпилирует файлы CoffeeScript при билде.

Облегчить управление взаимозависимостями, которые вы можете использовать в приложении, будь то jQuery или конкретный плагин, поможет первоклассная поддержка Bower. Несколько ударов по клавишам – и в командной строке вы сможете установить любые взаимозависимости для проекта, либо обновить их. Это гораздо проще, чем вручную копировать их из Downloads.

Мы верим, что все эти инструменты в дальнейшем сделают современную фронт-енд разработку гораздо проще.

В: Круто! А теперь расскажи, пожалуйста, о том, что нового появилось в инструментах разработчика Chrome.

О: Рассказываю. На Google I/O Пол Айриш (Paul Irish) представил новые функции (например, Workspaces), которые помогут разработчикам использовать нас в качестве встроенного в браузер редактора кода. Это круто. Разработчикам часто приходится тратить много времени на переходы между браузером и текстовым редактором при поиске и отладке или при внесении небольших изменений, поэтому мы решили упростить этот процесс. Workspaces позволяют редактировать файлы на локальном диске из браузера, сохраняя изменения текущей страницы сразу на диске («маппинг»).

Обычно вы сталкиваетесь с проблемой дебаггинга страницы, когда вам нужно работать в Sass и вносить изменения в панели элементов DevTools, но вы не можете, поскольку изменения сохраняются в файлы .css, а не в .scss. Теперь это не проблема. Сейчас вы можете просматривать стиль в scss и редактировать его там же. Мы внедрили живые ссылки к макросам… переменным… ко многому. Мы можем перезаписать CSS в Sass, если запущен daemon.

Все эти функции доступны в Chrome Canary, и мы надеемся, что люди, попробовавшие эти новые фичи, поделятся с нами впечатлениями.

В: Как думаешь, что ждёт JavaScript в будущем?

О: Я очень жду, когда в JavaScript появятся необходимые модули и генераторы.

Генераторы необходимы для выполнения многих задач, включая приостановку выполнения кода. Генератор – это функция, возвращающая функцию-итератор. Интерфейсом  генератора является просто итератор, который циклически перебирает элементы коллекции. Каждый раз, когда вы применяете генератор,  элемент, вызванный с помощью оператора yield, становится следующим в последовательности. Когда вы создаёте генератор, вы знаете, какую функцию контролируете, поэтому можете запускать и останавливать её. Опять же вы можете решить, когда функцию перезапустить, и это на самом деле здорово.

Что касается модулей, имеется тысяча способов определить модули в JavaScript (шаблоны модулей, AMD, CommonJS), но нет никаких средств внутри самого языка. ES6 модули полностью изменят эту ситуацию, дав возможность создавать модули вне зависимости от контекста. Они будут работать в браузере, на сервере, - везде. 

Продолжение здесь


Читайте также: 

Мастера разработки: Джон Резиг, автор jQuery

Работа в лучших компаниях мира. Riot Games vs Wargaming.net

jQuery Russia: мировая конференция приходит в Россию!