За кулисами создания Windows 8

Поскольку мы начали рассказывать о подробностях выпуска Consumer Preview, некоторых изменениях и возможностях, о которых мы еще не успели написать в этом блоге, хотелось бы вернуться назад и вновь представить нашу рабочую группу. Создание Windows 8 — это очень серьезное предприятие, для которого требуется группа специалистов с различным опытом. Мы гордимся тем, что разнообразие нашей группы отражает разнообразие пользователей Windows во всем мире. Во время выхода Windows 7 один из участников группы, Ларри Остерман (Larry Osterman) , писал о работе с этой версией по сравнению с другими. В этой записи Ларри опишет проект Windows 8 с помощью двух других разработчиков из нашей группы.
--Стивен


Три года назад я написал статью в блоге Windows 7, посвященную процессу разработки Windows 7. На этот раз мы провели неформальное интервью с двумя новыми участниками группы Windows Runtime Experience, которые стали работать с Windows как раз перед началом планирования Windows 8 (т. е. Windows 8 — это их первый опыт по разработке Windows с начала до конца).

Расскажите немного о себе. Откуда вы родом и как долго вы работаете в Майкрософт?

Крис: Привет, меня зовут Крис Эдмондс. Я родился в штате Орегон, учился в университете штата Орегон (вперед, бобры!) и проходил практику в NASA и компании Garmin. Во время практики я работал с разными проектами, от роботов до авиатехники, и исследовал высокоскоростную маршрутизацию для многоядерных процессоров. Корпорация Майкрософт набирала сотрудников из нашего университета, и я попал в группу разработчиков Windows около двух с половиной лет назад.

Мухаммед: Привет.Меня зовут Мухаммед Альмалкави. Я работаю инженером-программистом в подразделении Windows корпорации Майкрософт. Я в Майкрософт тоже около двух с половиной лет. Я окончил университет штата Иллинойс в Урбане-Шампейне (вперед, Иллини!), где я работал над исследованиями отказоустойчивости и интеграции систем в режиме реального времени.

Над чем вы работаете для Windows 8?

Крис: Я начал работать с группой Windows за несколько месяцев до коммерческого выпуска Windows 7. Через короткое время я присоединился к только что созданной группе Windows Runtime Experience. Эта группа создает многие компоненты инфраструктуры среды выполнения Windows (WinRT). Во время разработки Windows 8 я получил возможность поработать со многими частями WinRT.

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

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

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

Мухаммед: Я смог поработать над Windows 8 с самого начала. У нас было три основных этапа для достижения целей Windows 8. Каждый из них состоял из следующих фаз.

  • Фаза определения спецификаций и проектирования для формулировки требований на собраниях функциональных групп с активным привлечением партнерских групп подразделения Windows и других отделов компании. Функциональная группа состоит из разработчиков, тестировщиков и руководителей программы, работающих над определенной функциональностью. Обычно это 4-5 человек. Результатом этой фазы был набор документов: функциональное описание (руководитель программы), проект разработки (разработчик), проект тестирования и модель угроз (тестировщик), а также план выполнения (все мы). Так мы лучше понимали детали компонента и могли уверенно реализовать их, сконцентрировав все усилия.
  • Фаза кодирования для реализации функций, определенных на фазе спецификации, а также модульных и функциональных тестов.
  • Фаза интеграции и стабилизации для объединения различных компонентов от разных групп и исправления ошибок.

На первом этапе я работал над проектированием и разработкой обнаружения и активации расширений приложений. Эта инфраструктура WinRT позволяет приложениям участвовать в поддерживаемых ОС контрактах (таких как поиск и общий доступ) и служит основой для существующих компонентов Windows, включая экспресс-кнопки "Поиск" и "Общий доступ".

На втором этапе я отвечал за реализацию разрешения метаданных Windows, ключевого интерфейса API, который связывает метаданные Windows, созданные цепочкой средств WinRT, и языковые проекции JavaScript и C#.

А на третьем этапе я отвечал за проектирование и разработку интерфейса API перечисления пространства имен, который позволил модулю Chakra JavaScript поддерживать функции отражения с использованием пространств имен и типов WinRT. CLR также использует этот API для реализации разрешения метаданных, а Visual Studio применяет его для поддержки типов WinRT в Intellisense.

Каков ваш обычный рабочий день? Крис: Обычный день? Что мне действительно нравится при работе над Windows — это то, что обычные дни случаются редко. В зависимости от стадии разработки продукта я могу потратить весь день на написание спецификаций или кода, на обмен идеями с коллегами, устранение ошибок и многое другое. Хотя все операции разные, почти каждый день мне приходится решать задачи в определенной форме. Будь то поиск причины сбоя или разработка компонентов, каждый день я работаю с умными людьми над решением интересных задач.

Что было наибольшим сюрпризом для вас?

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

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

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

В чем отличие Windows 8 от других проектов, над которыми вы работали?

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

Какую самую трудную задачу вам пришлось решить?

Мухаммед: Вскоре после вступления в группу мне пришлось вносить исправления в незнакомый код по активации COM. Этот код был очень инфраструктурный, на нем основаны многие компоненты Windows, поэтому мои изменения не должны были вызвать каких-либо ухудшений.

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

Можете ли вы рассказать, как это — планировать Windows 8?

Крис: ПланированиеWindows 8 для разных людей в группе принимает различные формы. При планировании работы только что созданной группы Runtime Experience мы потратили неделю на создание приложений с использованием различных языков, стеков, платформ и технологий. Это связано с тем, что программы для Windows 8 можно писать на нескольких языках (это ее ключевая характеристика). Частью этой задачи было заставить каждого из нас использовать незнакомый язык, чтобы проанализировать кривую обучения. Я работал над программой формирования трехмерных поверхностей с использованием IronPython и XNA, приложением для коллекции фотографий на HTML и JavaScript, а также простым двухмерным физическим модулем на C++ с использованием GDI для рисования. На основе этих упражнений мы создали презентации, описывающие создание каждого приложения, и список плюсов и минусов каждого процесса.

Что вас впечатлило?

Мухаммед: Меня очень впечатлило качество системы проектирования Windows, которую мы используем. Она поддерживает тысячи программистов Windows и хранит миллионы строк кода в операционной системе, выполняет ночные построения и проверки качества. Автоматические проверки качества включают в себя важные комплексные тесты, проверки производительности, совместимости, статический код анализа и некоторые другие тесты, которые помогают нам быстро находить проблемы и жестко контролировать их распространение при интеграции компонентов.

Что такое этап качества (MQ)?

Крис: Этот этап полностью посвящен подготовке базы кода, средств и процессов проектирования к следующей стадии разработки продукта. Как я узнал, MQ — это время, необходимое для анализа кода и определенной переработки — от простой очистки исходных файлов до переделывания абстрактных концепций, с помощью которых мы подготовились к работе над Windows 8. Код — это наш актив, поэтому очень важно уделить время поддержанию его работоспособности. На этапе MQ для Windows 8 я участвовал в трех разных процессах. Первый из них заключался в создании системы, которая автоматически сообщает об объеме протестированного кода с помощью внутренней панели мониторинга для нашей группы разработчиков на основе ежедневных тестов. Это было первой задачей, над которой я трудился в Майкрософт, что позволило мне изучить наши системы проектирования. Второй процесс заключался в практике очистки кода для стандартизации применения функции assert в коде. И наконец, я работал над прототипом системы, которая использует части инфраструктуры IntelliSense для автоматической каталогизации всех компонентов нашего SDK.

Над чем вы работаете сейчас?

Мухаммед: Производительность, производительность и еще раз производительность!

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

Как вы проверяете свою работу?

Крис: Наша группа старается улучшить возможности разработчиков приложений, поэтому важно, чтобы мы регулярно переставали быть разработчиками операционной системы и выступали в роли разработчиков приложений. Мы это делаем понемногу в нашей каждодневной работе, но одной из наиболее структурированных форм этой работы являются недели создания приложений. Основываясь на первоначальной неделе разработки, проведенной на этапе планирования, мы выделили на каждом этапе время для разработки приложения с помощью WinRT, при этом разные группы использовали различные языки и интерфейсы API. При написании приложений для платформы, которая все еще разрабатывается, возникают некоторые интересные трудности, поэтому эти недели позволяют нам ненадолго сменить обстановку. Подобные периоды (в которых иногда участвовали дополнительные рабочие группы) позволили найти множество ошибок, из-за чего мы переработали и изменили некоторые наши API, чтобы позволить каждому разработчику работать в более естественной и знакомой среде. Ошибкой может быть все, что угодно, — неисправимый сбой, утечка памяти или уязвимость, все, что можно описать словами «что-то не так». Мы все отклонения считаем ошибкой и классифицируем все подобные отчеты. Отчеты поступают от групп разработчиков Windows, работающих над интерфейсами API, других групп Майкрософт, партнеров, таких как производители устройств и компьютеров, наших стажеров (как вы могли видеть на конференции //build/) и посетителей форумов, создающих приложения в версии Developer Preview.

Какой самый главный урок вы усвоили?

Мухаммед: Я получил практическое подтверждение закона «Если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет» с учетом размера и масштаба продукта и огромного числа пользователей (кстати, мы сами проверяем проект с самого начала на основных компьютерах для разработки). Благодаря этому я научился уделять внимание деталям и работать над качеством в каждой строке кода, что очень важно для общей стабильности продукта. Конечно, это всего лишь один из многих усвоенных мной уроков. Я все еще работаю над своим первым выпуском Windows и надеюсь научиться еще кое-чему на предстоящих этапах жизненного цикла продукта.

Не могу дождаться продолжения.

Крис: Я тоже!