Visitando os bastidores da criação do Windows 8

Criando o Windows 8

Nos bastidores com a equipe de engenharia do Windows

Visitando os bastidores da criação do Windows 8

  • Comments 6

Ao começarmos a falar sobre mais alguns detalhes e alterações da versão do Consumer Preview, ou apenas dos recursos que não ainda não tivemos oportunidade de comentar no blog, desejamos voltar um pouco atrás e apresentar novamente a equipe. A criação do Windows 8 é uma tarefa bastante significativa e envolve uma equipe com históricos e experiências diferentes. Temos orgulho do fato de que a diversidade em nossa própria equipe reflete a diversidade de clientes usando o Windows ao redor do mundo. Na última versão, um dos membros da equipe, Larry Osterman, escreveu sobre o trabalho no Windows 7 comparado às versões anteriores. Nesta postagem, Larry reflete sobre o projeto do Windows 8 através de dois outros membros da equipe. 
--Steven


Há três anos, escrevi uma postagem no blog Engineering Windows 7 sobre o processo de desenvolvimento do Windows 7. Desta vez, pensamos em deixá-los ouvir a opinião de alguns dos novos membros da equipe fazendo uma sessão de P&R informal com dois membros de nossa equipe de experiência de tempo de execução do Windows, ambos tendo entrado no Windows assim que começamos a planejar o Windows 8 (portanto, o Windows 8 é sua primeira experiência com o desenvolvimento do Windows do início ao fim).

Fale um pouco sobre você. De onde veio e quanto tempo está na Microsoft?

Chris: Olá, meu nome é Chris Edmonds. Sou do Oregon, estudei na Universidade do Estado do Oregon (Go, Beavers!) e fiz estágios na NASA e na Garmin. Durante essas experiências, trabalhei em diferentes projetos envolvendo desde robótica até aviação e pesquisei sobre roteamento de alta velocidade para processadores de vários núcleos. A Microsoft me recrutou na Universidade do Estado do Oregon e cheguei na equipe do Windows há aproximadamente dois anos e meio.

Mohammad: Olá, meu nome é Mohammad Almalkawi. Sou engenheiro de design de software na divisão do Windows da Microsoft. Também estou na Microsoft há uns dois anos e meio. Fiz a graduação na Universidade de Illinois em Urbana-Champaign (Go, Illini!) onde estava trabalhando em uma pesquisa sobre tolerância a falhas e integração de sistemas em tempo real.

Qual foi o seu trabalho no Windows 8?

Chris: Comecei a trabalhar na equipe do Windows alguns meses antes de o Windows 7 ser lançado. Logo depois, entrei para a recém-criada equipe de experiência de tempo de execução do Windows. A equipe de experiência de tempo de execução desenvolve várias partes da infraestrutura do Tempo de Execução do Windows (WinRT). Durante o desenvolvimento do Windows 8, tive a oportunidade de trabalhar vários aspectos do WinRT.

Na primeira etapa (de três), trabalhei para definir padrões de núcleo do sistema WinRT. Separamos o projeto em três etapas e dividimos a arquitetura e a implementação destas etapas do esboço até o produto final. Tivemos que incluir todo o trabalho necessário para coordenar as diferentes tecnologias no Windows 8. Na primeira etapa (M1), projetamos padrões para eventos, construção de objetos, métodos assíncronos e sobrecarga de método. Era importante definir padrões fortes para esses conceitos básicos para permitir que cada linguagem de programação que interopera com o WinRT expusesse esses conceitos de forma natural e familiar para seus desenvolvedores.

Na segunda etapa, tive a oportunidade de criar parte do processo de implantação para os aplicativos estilo Metro. Especificamente, trabalhei no registro dos aplicativos estilo Metro no WinRT para que pudessem ser iniciados e interagissem com os contratos.

A terceira etapa incluiu muita colaboração entre grupos, o que descobri ser fundamental para um projeto tão detalhado e amplo como o Windows 8. Trabalhei com uma equipe para definir e implementar as partes centrais do modelo de aplicativo para os aplicativos estilo Metro. Este trabalho garantiu que os aplicativos estilo Metro escritos em diversas linguagens e plataformas de interface do usuário apresentassem um comportamento consistente no que diz respeito aos contratos e à vida útil de aplicativos.

Mohammad: Tive a oportunidade de participar do Windows 8 desde o início. Tínhamos três grandes etapas (M1, M2 e M3) para alcançar as metas do Windows 8 relativas aos recursos. Cada uma destas etapas consistia de:

  • Fase de especificação e design para criar os requisitos através das reuniões e da participação ativa da equipe de recursos com as equipes dos parceiros no Windows em toda a empresa. Uma equipe de recursos é constituída de desenvolvedores, testadores e gerentes de programa que trabalham em um recurso específico — em geral, 4 ou 5 pessoas. O resultado desta fase foi um conjunto de documentos de especificação — funcional (pm), design de desenvolvimento (dev), design de teste e um modelo de ameaças (test) —, bem como um plano de execução (para todos nós). Isso permitiu que entendêssemos melhor os detalhes dos recursos e os executássemos com alta confiança e esforços concentrados.
  • Fase de codificação para implementar os recursos identificados na fase de especificação, juntamente com seus testes de unidade e funcionais.
  • Fase de integração e estabilização para integrar as diversas partes das várias equipes e corrigir bugs.

Na primeira etapa, trabalhei no design e no desenvolvimento da descoberta e ativação de extensões de aplicativo. Essa infraestrutura do WinRT permite que os aplicativos façam parte dos contratos de sistemas operacionais suportados (como a pesquisa e o compartilhamento) e serve como base para recursos do Windows interessantes, incluindo os botões Pesquisar e Compartilhar.

Na segunda etapa, fui responsável pela implementação do recurso de resolução de metadados do Windows, que é uma das principais APIs que vinculam os metadados gerados pela cadeia de ferramentas do WinRT, e pelas projeções das linguagens JavaScript e C#.

Na M3, fiquei encarregado do design e desenvolvimento da API de enumeração de namespace, que ativa o mecanismo Chakra JavaScript como suporte à funcionalidade de reflexão sobre o WinRT. O CRL também usa essa API para implementar resolução de metadados e o Visual Studio a usa como suporte ao Intellisense para os tipos de WinRT.

Como é um dia normal de trabalho?
Chris: Dia normal? Uma das coisas que mais gosto no trabalho com o Windows é que raramente há um dia normal. Dependendo do período do ciclo do produto, posso passar o dia escrevendo especificações, códigos, trocando ideias com as pessoas em minha equipe, corrigindo bugs ou fazendo muitas outras atividades. Mesmo as atividades sendo variadas, meu dia quase sempre envolve algum tipo de resolução de problema. Seja descobrindo a causa de uma falha ou ajudando a criar recursos, trabalho com pessoas inteligentes para resolver problemas interessantes todos os dias.

O que mais o surpreendeu?

Chris: Acho que a maior surpresa que tive trabalhando no Windows foi com o tamanho da equipe e o número de atividades que estão sempre em andamento. Estou trabalhando nos novos recursos que me foram atribuídos e tive a oportunidade de interagir com centenas de outras pessoas na equipe para criar especificações e soluções. Essa dinâmica parece muito frenética (e foi um pouco opressiva no início), mas sempre fiquei impressionado como as equipes se comunicavam bem para desenvolver algumas soluções realmente legais para os problemas. Quando penso no número de pessoas que usam o Windows e na quantidade de maneiras que o Windows é usado, acho incrível que façamos tudo isso com tão poucas pessoas.

Mohammad: O que mais me surpreendeu na Microsoft é que você enfrenta problemas do mundo real e tem a oportunidade de trabalhar com partes críticas desde o início. Você aprende no trabalho em vez de no treinamento, o qual também está disponível se necessário.

Claro que você não é deixado sozinho no escuro, uma vez que há muitos canais de suporte, especialistas em domínios e engenheiros seniores presentes para ajudá-lo quando necessário.

Qual a diferença do Windows 8 para os outros projetos em que você trabalhou?

Chris: Tendo trabalhado a maior parte do tempo em projetos menores na Universidade do Estado do Oregon e em meus estágios anteriores (a maioria dos projetos de código é pequena se comparada ao Windows), a maior diferença é a quantidade de códigos que leio todos os dias. Descobri que passava boa parte do tempo lendo e depurando códigos escritos por outras equipes antes de entrar para a Microsoft, bem como verificando os códigos que eu mesmo escrevi em uma etapa anterior. Isso realmente me fez valorizar códigos bem escritos.

Qual foi o maior desafio que você já teve que solucionar?

Mohammad: Assim que entrei para a equipe, tive que corrigir códigos desconhecidos na ativação COM. Esses códigos são muito infraestruturais, pois vários componentes no Windows são desenvolvidos a partir deles, assim, era essencial que minhas alterações não provocassem regressões.

Esses códigos poderiam parecer simples para os especialistas em minha equipe, mas este certamente não era o caso para um novato como eu. Tive que ler muitos códigos, passar pelo depurador e escrever muitos casos de teste para melhorar minha compreensão e confiança em fazer as alterações necessárias sem atrapalhar nada.

Você pode dizer como se sente criando planos para o Windows 8?

Chris: O planejamento do Windows 8 é diferente para cada pessoa na equipe. Como parte do esforço de planejamento, a equipe recém-formada de experiência de tempo de execução levou uma semana para desenvolver aplicativos usando várias linguagens, pilhas, estruturas e tecnologias. Isso porque um princípio de design do Windows 8 é a possibilidade de programação em várias linguagens. Parte do objetivo desse esforço era que cada um de nós usasse uma linguagem com a qual ainda não tivesse familiaridade para desenvolver uma curva de aprendizagem. Trabalhei em um programa de geração de terreno 3D usando IronPython e XNA, um aplicativo de galeria de fotos usando HTML\JavaScript e um mecanismo simples de física 2D em C++ usando GDI para desenho. Dos exercícios de desenvolvimento de aplicativos, criamos apresentações para a equipe sobre a experiência de desenvolver cada aplicativo, juntamente com uma lista do que houve de melhor e pior em cada experiência.

O que o impressionou?

Mohammad: Fiquei muito impressionado com a qualidade do sistema de engenharia do Windows: ele oferece suporte a milhares de engenheiros de software do Windows e mantém a integridade de milhões de linhas de código no sistema operacional com compilações noturnas e execuções de qualidade do retransmissor. As execuções automatizadas e de qualidade do retransmissor incluem testes completos essenciais, testes de desempenho, testes de compatibilidade de aplicativos, análise de código estático e alguns outros testes que usamos para descobrir problemas com rapidez e controlar rigidamente sua propagação através de ramificações por integrações progressivas e reversas.

O que é a etapa de qualidade (MQ)?

Chris: Essa etapa está relacionada ao preparo da base de código, das ferramentas de engenharia e dos processos de engenharia para o próximo ciclo do produto. Pelo que sei, a MQ é quando analisamos o código e fazemos alguma manutenção — desde a limpeza de arquivos de origem até a recriação das abstrações que nos preparam para o trabalho que faremos no Windows 8. O código é nosso ativo, portanto, a dedicação de um tempo para manter esse ativo é muito importante. Durante a MQ do Windows 8, participei de três iniciativas diferentes. A primeira foi criar um sistema que reportasse automaticamente os números de cobertura de código através de um painel interno para nossa equipe com base nas aprovações dos testes diários. Essa foi uma das primeiras coisas em que trabalhei na Microsoft e que me deu uma ótima oportunidade para aprender sobre nossos sistemas de engenharia. A segunda iniciativa de que participei foi uma prática de sanitização de código para ajudar a padronizar a maneira como usamos asserções em toda a base de código. Por fim, trabalhei em um sistema protótipo que usaria algumas partes da infraestrutura do IntelliSense para catalogar automaticamente todas as partes do SDK.

Qual é o seu foco agora?

Mohammad: Desempenho, desempenho e desempenho!

Os recursos com que trabalho estão perto do final da pilha de software e são usados com muita frequência, assim, seu desempenho é fundamental. Portanto, meu foco agora está voltado para a análise do desempenho e para a prototipagem e integração de vários aprimoramentos de desempenho. Criamos as coisas desde o início para que tenham alto desempenho e agora estamos ajustando este desempenho, introduzindo os milhares de códigos escritos na infraestrutura.

Como você valida o trabalho como um todo?

Chris: Como parte de uma equipe dedicada ao aprimoramento da experiência do desenvolvedor de aplicativos, é importante que deixemos regularmente a posição de desenvolvedores de sistemas operacionais para nos colocarmos no lugar dos desenvolvedores de aplicativos. Isto é feito em pequenas doses em nosso trabalho diário, que tem uma de suas formas mais estruturadas nas semanas de desenvolvimento de aplicativos. Baseados na semana inicial de desenvolvimento de aplicativos que ocorre durante o planejamento, reservamos um tempo em cada etapa para desenvolver um aplicativo usando o WinRT, com diversas equipes voltadas para linguagens e APIs diferentes. Escrever aplicativos em uma plataforma que ainda está sendo desenvolvida cria desafios interessantes e essas semanas são uma mudança divertida de ritmo. Essas semanas de desenvolvimento de aplicativos (algumas das quais incluíram mais equipes) resultaram no arquivamento de inúmeros bugs e nos fizeram repensar e alterar algumas de nossas diretrizes de API para tornar a experiência de cada desenvolvedor mais natural e familiar. Um "bug" pode ser qualquer coisa, desde uma falha fatal, perda de memória ou falha de segurança até um relatório de que "algo não parece estar certo". Tratamos tudo isso como um bug e passamos esses relatórios por um processo de categorização e priorização. Os relatórios vêm dos grupos desenvolvendo nossas APIs no Windows, de outros grupos na Microsoft, de parceiros antigos, como fabricantes de dispositivos e PCs, de nossos estagiários (como você viu em //build/) e das pessoas nos fóruns que estão criando aplicativos agora no Developer Preview.

Qual foi a lição mais importante que você aprendeu?

Mohammad: Tive que pôr em prática a ideia de que "tudo o que pode dar errado, dará errado", dado o tamanho e a escala do produto e o grande número de usuários (a propósito, testamos nosso trabalho internamente desde o início em nossas máquinas de desenvolvedor). Isso me ensinou que prestar atenção aos detalhes e manter o foco na qualidade em toda linha de código é muito importante para a estabilidade geral do produto. Claro que essa é apenas uma das muitas lições importantes que aprendi até agora — continuo elaborando minha primeira versão do Windows e espero aprender mais algumas coisas durante as próximas fases do produto.

Mal posso esperar.

Chris: Eu também!