Статьи

Главные разработчики: Адди Османи

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

Его блог — сокровищница передовых знаний и стоит посещения. В этом посте мы поговорим с Эдди о том, как он начал работать в JS, и затронем некоторые сложные темы, касающиеся его работы в отношениях с разработчиками в Google.


JavaScript должен был сыграть большую роль в этом.

Я написал свой первый JavaScript-код, когда Netscape Navigator был доминирующим браузером. Динамическая внешняя разработка только начинала становиться все более популярной в то время, но идея иметь возможность писать что-то только с помощью HTML / CSS / JS и работать везде, была мощной. Я увлекся этой идеей и с тех пор. Некоторые из моих первых творений были мелочами, над которыми вы бы смеялись сегодня — калькуляторы, генераторы паролей, ничего особенного.

Как энтузиасту языка, мне понравилось, что JavaScript основан на прототипах и слабо типизирован, поэтому я решил продолжить его изучение наряду с другими языками, такими как C ++. Еще в начале 2000-х я пытался связать языки, написав небольшой интерпретатор поверх SpiderMonkey (движка JavaScript Mozilla), который позволил мне написать логику для моих настольных приложений в JS и определить компоненты пользовательского интерфейса с помощью C ++. Это была глупая идея, но я многое узнал о внутренностях движка JavaScript в процессе.

Я потратил много времени на создание небольших сайтов для хобби, но когда я учился на последнем курсе в старшей школе, я решил по-настоящему застрять в мире браузерного оборудования. Я написал облегченный движок рендеринга, базовые парсеры HTML 4.01 / CSS 2.1 и обернул все эти части в свой маленький браузер. Надежность работы над проектом была кошмаром, отчасти из-за того, что слабые веб-разработчики придерживались стандартов на своих страницах — теперь забавно находиться на другой стороне забора! Более сложными задачами были соответствие спецификациям, рендеринг больших таблиц и поддержание производительности при загрузке видео-плагинов (кто-нибудь помнит хороший старый ActiveX?).

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

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


Если вы перейдете к какой-либо нетривиальной теме с таким мышлением, необходимо разбить ее на простые, более легко усваиваемые шаги

Секрет в том, что я считаю себя несколько глупым. В самом деле. Если вы перейдете к какой-либо нетривиальной теме с таким мышлением, необходимо разбить ее на простые, более легко усваиваемые шаги, чтобы она имела какое-то подобие смысла.

Я думаю, что именно эта перспектива делает мое письмо доступным — я пытаюсь разобраться в тех концепциях или инструментах, которые изначально могут показаться довольно сложными для среднего разработчика. Важно иметь возможность применять это к статьям и особенно к документации. Так что будь проще. Это помогает сделать статьи более целенаправленными. Как я могу генерировать так много контента, понимая материал? Ну, я делаю понимание обязательным условием.

Сначала сделайте это, затем сделайте это правильно, затем сделайте это лучше.

У Эйнштейна есть замечательная цитата: «Если вы не можете объяснить это просто, вы не понимаете это достаточно хорошо», и это правда. Вы не можете учить или требовать основы, инструмента или передовой практики, если вы действительно не нашли время, чтобы использовать его самостоятельно. Найти это время легче в моей нынешней роли, но в те дни, когда я работал инженером 9-5 лет, я активно проводил время за завтраком и обедом, используя то, о чем позже напишу на выходных.

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

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


Есть что-то особенное в том, чтобы быть частью компании с такими высокими стандартами.

И AOL, и Google — это компании с потрясающими инженерными командами, и любое из моих представлений о культуре касается не каких-то конкретных групп, а общего наблюдения.

Инженерная культура в Google такова, что мы очень заботимся о том, чтобы отшлифовать и доставить вещи, когда чувствуем, что они просто правы. Есть что-то особенное в том, чтобы быть частью компании с такими высокими стандартами.

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

Когда есть возможность отложить релизы, чтобы, как говорят в Google, сделать это «правильно», я думаю, что это может изменить мир ваших пользователей к первым впечатлениям о вашем продукте.


Я доволен тем направлением, в котором TC39 следовал последние несколько лет.

Я доволен тем направлением, в котором TC39 следовал в течение последних нескольких лет, чему частично помогли Рик Уолдрон и Йехуда Кац из проекта jQuery. Они уделили пристальное внимание шаблонам и библиотекам, на которые в значительной степени полагались разработчики, и изучали, как их можно лучше решить с помощью примитивов платформы. Я не буду комментировать конкретно ES6, но я с нетерпением жду, чтобы модули, классы, let и Object.observe() более доступными.

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


Один из самых больших мифов заключается в том, что он существует, чтобы заменить JavaScript.

Мне было очень любопытно узнать больше о целях, которые ставил Дарт, когда я впервые присоединился к Google. Один из больших мифов заключается в том, что он существует для замены JavaScript, но оказывается, что это не совсем так. Dart ориентирован на разработчиков, более знакомых с Java, C ++, C #, которые пытаются создавать высокопроизводительные веб-приложения; и так далее, имейте определенные ожидания относительно их инструментов и языка. Я думаю, что это законная причина существования чего-то вроде Дартса.

Как компания, JavaScript и Dart — это технологии, в которые мы верим и инвестируем. Мы участвуем в TC39, работаем над будущим JavaScript, а также продолжаем работу над V8, быстрым движком JavaScript. Инженеры Chrome продолжают работу по продвижению Интернета с помощью новых спецификаций, таких как веб-компоненты. Тем временем, команда, которая изначально создавала V8, сейчас создает Dart VM.

Возвращаясь к вашему первоначальному вопросу — я считаю, что разветвление WebKit было гораздо больше связано с расхождением многопроцессорной архитектуры между обоими проектами, чем с попыткой встроить Dart в Chrome. Dart — это отдельный проект с открытым исходным кодом, имеющий свои собственные цели, и вы все еще можете получить Dartium сегодня (сборка Chromium с использованием Dart VM).


Когда я впервые услышал новости о Blink, я был обеспокоен тем, что теперь у нас будет еще один браузер для поддержки.

Однако реальность такова, что уже было так много различий между различными портами WebKit, что это не окажет негативного влияния на то, как вы разрабатываете и тестируете.

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


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


Многоразовые компоненты.

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

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


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

угловая

Возвращаясь к идее компонентов, я думаю, что между веб-компонентами и интерфейсным управлением пакетами у нас есть огромная возможность по-настоящему изменить способ разработки для Интернета. AngularJS (и директивы Angular) проделали большую работу по повторному представлению идеи многократно используемых блоков функциональности, и вещи действительно смотрят на аспекты управления пакетами через Bower.

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


йомен

Нам повезло иметь в нашем распоряжении множество полезных инструментов на переднем крае — инструменты, которые экономят наше время и делают нашу жизнь немного проще. Абстракции, такие как Sass и CoffeeScript , фреймворки, такие как Twitter Bootstrap , загрузчики модулей, такие как RequireJS , бесконечный список MVC и библиотек модульного тестирования. проект запущен.

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

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

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

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

Практически, мы являемся набором инструментов и задач, которые помогут вам автоматизировать некоторые из наиболее утомительных задач в разработке переднего плана. Мы состоим из yo (инструмент скаффолдинга), grunt (инструмент сборки) и bower (для управления пакетами).

беседка

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


Сообщество разработчиков Windows может действительно помочь нам здесь.

Создание инструмента командной строки, который хорошо работает кроссплатформенно, может быть деликатным танцем. Одной из первых проблем с поддержкой Windows было то, что многие из нашей команды привыкли использовать систему * nix и иметь доступ к homebrew / apt-get. Тем не менее, мы не были так хорошо знакомы с PowerShell или Chocolatey (Windows PowerShell, эквивалентная apt-get), и нам нужно было время, чтобы понять, насколько хорошо эти решения по сравнению с инструментами, которые мы имели в других местах.

Затем потребовалось время, чтобы найти (или получить) все пакеты, которые нам требовались в Chocolately, так как нам были нужны git, фантомы, опции и многие другие. Ситуация там значительно улучшилась с момента нашего первого выпуска, и теперь Windows официально поддерживается Yeoman, используя инструкции на нашей домашней странице.

Сообщество разработчиков Windows может действительно помочь нам в этом, выступая за более широкое распространение таких инструментов, как Chocolately, и помогая нам достичь паритета с такими инструментами, как apt-get. Помимо этого, они были фантастическими, и мы очень ценим помощь и поддержку, которую сообщество разработчиков Windows предоставило нам на протяжении всего пути к совместимости.

Я должен позвонить Синдре Сорхусу, Микаэлю Дэниелсу и Полу Айришу, которые действительно помогли улучшить наши усилия по Windows в первые дни.


На данный момент написано много (фантастических) инструментов разработки, которые не просто * nix, но специфичны для Mac, потому что их кроссплатформенность требует собственных затрат на разработку и накладных расходов. Я хотел бы видеть больше открытых дискуссий и разработки инструментов, которые могут работать везде, но это не может быть сделано без помощи пользователей.

Если вам нужен инструмент для Windows, который вы просто видите на Mac, пожалуйста, о нем говорите — еще лучше, отправьте запрос на извлечение!

Попробуйте выяснить, что нужно сделать, чтобы перенести его в Windows (и в других местах), и кто знает? Возможно, совместных усилий нескольких сообществ будет достаточно, чтобы что-то произошло.


Выпуск моей первой книги « Изучение шаблонов проектирования JavaScript» (с О’Рейли), вероятно, был достижением, которое принесло мне наибольшее удовлетворение. Это был мой самый большой писательский проект, и я принял решение, чтобы он был полностью открытым исходным кодом — вызов, о котором я никогда не пожалею. Предоставление учебного материала каждому, где бы он ни мог себе позволить, может принести много пользы.

Это также может увеличить влияние вашей книги, поэтому, если вы автор — подумайте об этом. Вы не пожалеете об этом!


Огромное спасибо Адди за то, что сели с ней. Если у вас есть какие-либо вопросы к нему, я уверен, что он не возражает ответить ниже в комментариях!