Monday, February 13, 2006

Este 'e um post antigo que meu colega do RH revisou e sugerir uma serie de melhorias.  Acho que fico tao mais claro deste jeito que decidi publicar novamente.

 

Meu parecer sobre o processo de seleção da Microsoft

Em função das perguntas de entrevista da Microsoft que eu publiquei aqui, varias pessoas já me perguntaram como fazer para entrar no processo de seleção da Microsoft. Vou tentar descrever alguns passos que eu acredito que ajudam os candidatos a chegarem lá. Antes de mais nada, o que será descrito 'e única e exclusivamente a minha opinião e não tenho autorização ou responsabilidade para falar pela Microsoft.

Alguns passos do processo

 1. Estudar muito! O primeiro passo para quem quer se candidatar para uma vaga nos times de desenvolvimento de produtos na Microsoft 'e estudar muito. Estude aqueles tópicos da faculdade que você achava que jamais usaria. Fundamentos da computação, arquitetura de sistemas operacionais, desenho de um compilador, estrutura de dados (pilhas, arvores binárias, heaps), gerenciamento de memória, transações em banco de dados, e outros tópicos básicos que certamente foram vistos na faculdade. Você vai ver que alguns dos problemas que eu publiquei são relacionados com o que você aprendeu ate no colegial, por exemplo, o problema da abelha 'e um simples problema de velocidade.

2. Encaminhar seu CV! Agora vamos assumir que você esta preparado para entrevista, já estudou tudo que tinha para estudar e o próximo passo 'e mandar o seu currículo para http://www.microsoft.com/jobs (no Brasil http://www.microsoft.com/brasil/carreiras).  Não se esqueça de adicionar suas experiências passadas, tecnologias que você trabalhou ou pesquisou durante a faculdade, e principalmente tente customizar o seu currículo para o time que você esta se candidatando.

 3. Pesquise o Mercado! Pesquise sobre o mercado, as tecnologias e os competidores do produto que você quer trabalhar, e utilize esta informação durante o interview Lupo. Mostre que você esta interessado e não fique com vergonha de mostrar que você pesquisou sobre o time. Se você tiver uma daquelas perguntas difíceis ou uma critica construtiva melhor ainda. Só não cometa o erro de criticar algum aspecto do produto sem ter uma sugestão de como melhorá-lo.

4. Conheça as oportunidades! Os times de desenvolvimento oferecem três tipos de oportunidade: tester, developers e program managers (PM).  

 Testers

 Como tester você será responsável por escrever o código que ira testar o produto. Geralmente se escreve duas a três vezes mais linhas de código de teste do que de produto. Uma das razoes 'e que o código de teste não precisa da qualidade que o produto exige. Não fique pensando que os testers da Microsoft ficam brincando com o mouse e o teclado o dia inteiro e não fazem nada de excitante. Trabalhar como tester significa que você ira escrever muito código, vai investigar muitos bugs, vai apreender muito como não escrever software, quais os principais erros que os developers fazem, tudo isso com tempo de sobra para você fazer suas pesquisas adicionais em tecnologias que aparecem por ai. O outro lado da moeda, entretanto 'e que você não 'e reconhecido publicamente tanto quanto os developers no desenvolvimento do produto, principalmente no mercado brasileiro. Muita gente ainda tem a opinião de que os tester não possuem um papel importante no desenvolvimento de um produto. Na minha opinião a qualidade de um software esta diretamente ligada à qualidade do time de testers. Qualquer developer sem nenhuma qualificacao escreve 100.000 linhas de código em duas semanas, mas fazer com que aqueles milhares de linhas se transformem em algo útil no nível de qualidade desejado, vai depender fundamentalmente do time de teste.  

Program Manager (PM)

O outro cargo que muita gente não conhece 'e o de program manager (PM). Apesar de ter manager no titulo, este cargo não gerencia ninguém inicialmente. Os PM são responsáveis por gerenciar o processo de desenvolvimento. Dependendo do time, isso significa tarefas diferentes, mas em geral os PM controlam os cronogramas, atuam como juizes nas discussões entre testers e developers, escrevem bastante especificações funcionais e tem contato direto com os clientes do produto. Dependendo do produto e do PM, às vezes são adicionadas tarefas mais técnicas nesta lista tais como desenhar APIs, descrever protocolos de comunicação, especificar funcionalidades de linguagens de programação, entre outras. Para você se candidatar a um cargo de PM, você terá que ter uma fluência em inglês um pouco acima da necessária para os cargos de tester e developer. Muitos testers e developers possuem habilidades básicas de comunicação, e geralmente isso 'e suficiente para começar a trabalhar na Microsoft. Já os PM precisam de uma fluência melhor, pois 90% do tempo deles será gasto em discussões e em reuniões com o time todo.

Developer

Finalmente a posição de developer 'e aquela em que a maioria de vocês conhece como programadores. Os developers escrevem os produtos e são responsáveis pelo como e quando uma funcionalidade 'e adicionada. Só para se ter uma idéia das atividades de um developer, a gente vai às reuniões para discutir features do produto, muitas vezes definir ou entender o que o PM esta querendo dizer sobre o comportamento de uma feature, projetar os componentes que serão implementados, escrevê-los, escrever os testes iniciais para a feature, disponibilizar uma versão do produto com a feature adicionada para o time de teste, realizar uma revisão do código escrito, pesquisar novos rumos para o produto, responder os e-mails dos clientes nas listas de suporte, resolver os bugs que a gente mesmo colocou no produto, e outras coisas mais. Em resumo, o dia passa muito rápido e não dá tempo de acabar tudo que você gostaria de realizar num dia.