Porque estudei a tempo inteiro durante 8 meses para uma entrevista no Google

por Googley como Heck

>
Meu quadro branco bem usado, adornado com o algoritmo de caminhos mais curtos de fonte única de Dijkstra.

É verdade. Passei milhares de horas lendo livros, escrevendo código e assistindo a palestras de ciência da computação, tudo para me preparar para a entrevista do engenheiro de software do Google.

Se você gostaria de se preparar para uma entrevista no Google, aqui está meu plano de estudo:

jwasham/google-interview-university
google-interview-university – Um plano diário completo para estudar para se tornar um engenheiro de software do Google.github.com

Como cheguei aqui

Comecei a programar no ensino médio, mas quando chegou a hora da faculdade eu me formei em Economia. Meu raciocínio era que haveria muitos programadores procurando empregos na época em que eu me formasse. Rapaz, eu estava errado.

Later, entrei para o Exército para me tornar um programador, mas o recrutador me convenceu a um cargo de inteligência militar, e passei os dois anos seguintes estudando a língua coreana. Eu servi na Coreia do Sul por 2 anos depois.

Antes de deixar o Exército, tentei voltar à programação e fiquei surpreso com a dificuldade. Eu tinha aprendido o BASIC no ensino médio e continuei programando-o durante o ensino médio. Mas reiniciei meus estudos de programação com C++, e o salto foi muito grande. Eu simplesmente não conseguia entender.

Eu gostava de fazer websites, no entanto, mas usava software com uma interface parecida com uma palavra que eu usava para publicar meus websites. Eu não sabia como fazer websites do zero.

Após o Exército, decidi ficar na Coréia por um ano e ensinar inglês. Usei minhas noites e fins de semana para estudar programação web, usando Perl, HTML, CSS (que era novo na época), JavaScript e SQL.

Após um ano de estudo intenso, consegui um emprego na área de Seattle, e estou aqui desde então.

Fazendo algum trabalho a partir da varanda na bela Bellevue, WA.

Sou um desenvolvedor web há 15 anos. Criei 3 empresas, 2 das quais ainda estão em funcionamento e gerando receita. Trabalhei em grandes e pequenas empresas, ajudei no lançamento e crescimento de start-ups, e recrutei e gerenciei equipes. Fui gerente de produto, CEO, designer e comerciante.

Tive uma carreira de sucesso e aprendi muito ao longo do caminho. Mas ainda não terminei.

Vendo uma mudança de carreira

Remmbrar a parte em que não me formei em ciências da computação? Fez diferença.

A poucos anos atrás, eu pensei que podia ser contratado em qualquer lugar. Pensei que eu era uma brasa: o elusivo desenvolvedor web de pilha cheia. Mas durante minha busca de emprego em 2013, percebi que minhas habilidades estavam faltando. Eu tinha passado tanto tempo atrás de dólares correndo atrás de dólares no meu tempo livre, que eu tinha deixado minhas habilidades atrofiarem. Eu não tinha conseguido acompanhar a tecnologia.

Durante anos, eu tinha aprendido o suficiente para sobreviver. Eu tinha um vasto conjunto de habilidades, mas não era especialista em nada.

Não me interpretem mal, eu ainda podia ser contratado, mas não nas tecnologias ou áreas em que eu queria trabalhar. Eu podia ser contratado para áreas onde a pilha de tecnologia estava um pouco ultrapassada, como eu. Há muito dinheiro lá dentro, mas não vi perspectivas excitantes.

A realização atingiu seu auge no ano passado em uma feira de carreira. Eu estava interessado em talvez trabalhar para uma das empresas locais que estavam iniciando laboratórios dirigidos por empresas de capital de risco. No entanto, o fato de eu não ter um diploma de ciências da computação, e as habilidades e conhecimentos que acompanham tal diploma, significava que eu não tinha nenhuma chance.

Eu estava trabalhando em tempo integral nos meus negócios na época, e ainda estou hoje.

No início de 2016, decidi que era hora de fazer uma mudança de carreira de desenvolvedor web para engenheiro de software. Eu precisaria estudar muito e praticar a fim de comprimir um diploma de ciências da computação em alguns meses, mas uma vez que o fizesse, eu poderia começar uma nova carreira.

Você pode não ver o desenvolvimento web e a engenharia de software como posições diferentes. Ambos envolvem programação e artesanato, mas a engenharia de software acrescenta-lhe conhecimentos de estruturas de dados e algoritmos, linguagens compiladas, considerações de memória e compreensão do impacto da codificação e decisões de arquitectura nas máquinas onde residem.

As grandes empresas que contratam para posições de engenharia de software esperam que os candidatos tenham esses conhecimentos.

Conheci um conhecido que trabalha no Google e fiz-lhe perguntas sobre a sua experiência na empresa. Eu tinha lido Como funciona o Google e já estava bastante familiarizado com o Google.

Atraves de outro contato, recebi uma cópia das notas de treinamento do Google que são fornecidas para entrevistar os candidatos. Esta tornou-se a base do meu plano de estudos.

Google é um ótimo lugar para se trabalhar, mas antes mesmo de eu saber disso, Google era meu objetivo.

Por que Google?

Google estabelece uma barra muito alta para contratação. Eles querem contratar apenas o melhor. Por isso, se eu colocar a minha mira alta (ser contratado no Google), ainda serei bastante contratável em outro lugar, mesmo que eu não seja selecionado.

Quanto mais eu aprendo sobre o Google, mais eu quero trabalhar lá.

Em resumo, o Google é uma empresa que contrata pessoas inteligentes, criativas, e as trata bem. O Google recompensa o mérito, incentiva as grandes ideias e dá aos funcionários a liberdade de tomar boas decisões para o utilizador.

O processo de contratação é calibrado para trazer pessoas inteligentes e apaixonadas. O Google tem aperfeiçoado o processo de recrutamento e entrevista ao longo dos anos. As perguntas de provocação ao cérebro já se foram há muito tempo. Hoje em dia os candidatos são escolhidos com base na capacidade de codificação, conhecimento técnico e Googleyness. Há muita coisa acontecendo nessa palavra.

Em uma viagem de carro em 2015, eu visitei a sede Mountain View. Que plantou a semente.

A gestão é diferente. Os gestores não micro-gerenciam. Eles confiam nos engenheiros para tomar as decisões certas. Confiar nos funcionários muda o papel dos gestores no Google em relação ao que a maioria das pessoas imagina quando pensa em gestão. Além disso, os gestores não podem unilateralmente, contratar, despedir ou promover. Muitas das importantes decisões de gestão que poderiam ser percebidas como políticas de escritório são tratadas por uma comissão para remover esse perigo.

As operações de pessoal (RH) do Google aprenderam o que funciona ao longo do tempo, e utilizam dados e feedback dos funcionários para melhorar os sistemas de avaliação, o processo de contratação, promoções, remuneração, benefícios, e muito mais. Leia Regras de Trabalho! por Laszlo Bock (SVP, Operações de Pessoas) para mais.

Sim, os benefícios são incríveis. Fiz um tour pelo escritório do Google em Kirkland, WA, e isso superou minhas expectativas. E as minhas expectativas já eram altas.

Google Interview University

Recorde as notas de coaching que recebi dizendo-me o que estudar? A lista de tópicos parecia controlável, mesmo não sabendo nada da lista.

Fiz um esboço dos tópicos das notas e comecei a preencher os tópicos com vídeos de palestras do MIT e da UC Berkeley no YouTube. Um vídeo em listas ligadas em um lugar, um vídeo sobre filas de espera em outro. A lista começou a crescer.

Publicei a lista no Github porque a minha conta no Github estava bastante vazia. Como todo o código que escrevi para os meus negócios e trabalho era privado, minha conta no Github fez parecer que eu não codifiquei nada. Eu precisava construir um portfólio. Eu originalmente chamei o projeto de “Projeto 9894”. O Google foi lançado em 4 de setembro de 1998. Daí o nome. Mais tarde, renomeei-o para “Google Interview University”.

Até agora adicionei alguns tópicos opcionais que descobri ao longo do caminho.

Minha lista de leitura de verão. Um pouco acima do topo.

Fiquei bastante surpreendido por ter chegado tão longe na minha carreira sem sequer saber como uma CPU processou um programa, como funcionava a memória, ou qualquer um deles. Eu tinha conhecido “o suficiente” para ser um sucesso.

O meu pequeno projeto Github começou a receber algumas estrelas, e publiquei um post no blog celebrando 20 estrelas.

Uma manhã, acordei e descobri que tinha crescido para 120 estrelas. Alguém famoso tinha tweeted sobre ele durante a noite, e isso fez com que ele acabasse no relatório diário de tendências do Github. Eu fui o número 1 em tendências do Github por alguns dias.

Muitas pessoas amáveis me estenderam a mão para me agradecer e encorajar. Acontece que há milhares de pessoas que não só querem trabalhar no Google, mas querem trabalhar como engenheiros de software, e esta lista era apenas a lista de afazeres que eles precisavam.

Está agora com mais de 21.000 estrelas.

Ainda não consigo acreditar.

E se eu não conseguir o emprego?

Não será o fim do mundo.

Pus tempo e dedicação nos meus estudos para o objectivo de ser contratado como engenheiro de software do Google, mas mesmo que eu falhe, ainda estarei armado com as habilidades e conhecimentos necessários para trabalhar como engenheiro de software em qualquer empresa.

Aonde quer que eu acabe, vou entrar como um engenheiro de software de nível básico. Eu não vou entrar com 15 anos de experiência em engenharia de software porque simplesmente não a tenho. Quando se trata destas coisas, eu sou o equivalente a um novo nível de CS.

Mas eu tenho o entusiasmo de um novo nível, também. Este é um mundo novo para mim. Estou só a começar. Eu não tenho medo de cometer erros. Eu sei que vou cometer. Também quero aprender tudo o que puder e ser uma excelente adição a qualquer equipa.

Não estudar tanto como eu fiz

Sim, levei 8 meses. Mas eu poderia ter abreviado o processo. Como qualquer partida com um grande objetivo, você comete erros e faz coisas que perdem tempo. Há muitas coisas que eu gostaria de voltar e fazer de forma diferente.

Estudei tópicos que não precisava, alguns porque achava que iria precisar deles para a entrevista, e outros porque queria ter o conhecimento em mãos para quando começasse a trabalhar. Eu não queria ser um fardo para a equipe para a qual fui designado. Acontece que eu simplesmente me preparei demais.

Passei 3 semanas lendo um livro de 1.000 páginas em C++. Não me lembro do valor de 1.000 páginas, mas sei um pouco sobre C++ agora. Acontece que estou usando Python para a entrevista, não C++. Eu tinha assumido que precisava de C++, C, ou Java, mas eu estava errado. É bom perguntar, não assumir.

Leio muito mais livros do que eu precisava. Existem apenas 3 ou 4 livros que eu deveria ter lido.

Eu tenho um catálogo de código de dezenas de algoritmos que eu reviso, a maioria dos quais eu não esperaria em uma entrevista. Você não precisa fazer isso.

Uma pilha de algoritmos, impressa para revisão.

Visto muitas horas de vídeos do YouTube, mas poderia ter visto muito menos, e espalhado os tópicos ao longo do tempo.

Devia ter parado de ler livros e ver vídeos mais cedo e começado a codificar problemas mais cedo. Eu teria sido capaz de gastar mais tempo aplicando os tópicos que aprendi.

Repetição espaçada é a chave para a memorização. Depois de aprender alguma coisa, reveja mais tarde, e mais tarde ainda. Em cada repetição, você reforça a sua aprendizagem. Passar horas e horas de cada vez em filas prioritárias não fará de você um especialista. Você se torna um especialista ao revisar e revisar ao longo do tempo. Se você fizer isso, você chegará ao ponto em que não pode esquecer detalhes.

Para ajudar na revisão, eu fiz 1.792 flashcards (flashcards digitais). Isto é demais. Eu os reviso no meu telefone ou tablet sempre que tenho um momento livre (como durante as compras de Natal). Os cartões flash e a repetição espaçada vão de mão em mão. Uma vez que eu tenha uma resposta correta em um flashcard, eu não o marco como conhecido. Guardo-o no baralho e uma vez que o vi e respondi correctamente muitas vezes, então marquei-o como conhecido.

A minha sensação de medo (“E se me fizerem uma pergunta sobre árvores pretas vermelhas?”) levou-me a estudar muito mais tópicos do que precisava.

Mas não queria apenas preparar-me para a entrevista, queria preparar-me para uma carreira no Google, resolvendo problemas em grande escala. Isso significa conhecer algoritmos que economizarão recursos computacionais de tempo, espaço e I/O.

Eu talvez nunca precise conhecer um algoritmo de fluxo máximo (Ford-Fulkerson), mas é bom saber que eu tenho essa ferramenta disponível se a situação surgir (sem memorizar a implementação), e posso reconhecer sua aplicação a um espaço problemático.

Conclusion

Early on, eu gostaria de pular todo esse aprendizado, e apenas me apressar e ser contratado para que eu pudesse, em vez disso, gastar meu tempo aprendendo as línguas e ferramentas para a equipe que eu participo. Mas pelo caminho, percebi a importância deste conhecimento, e mesmo que a maior parte dele possa não ser aplicável diariamente, estou contente por me esforçar. Tenho uma nova apreciação da história da computação, os grandes no campo, estruturas de dados e algoritmos (e como eles se complementam), e como os sistemas de computação funcionam em baixo nível.

Pouco tempo depois vou colocar na minha aplicação. Tem sido uma longa jornada até este ponto – quase um ano inteiro. Começou em janeiro, mas não consegui me comprometer a estudar em tempo integral até abril.

Estarei o mais preparado que puder. Eu não posso continuar estudando e adiar a inscrição para sempre. Em algum momento, tenho que dar o salto.

Vejo um futuro brilhante pela frente.

Obrigado por ter tempo para ler minha história.

Artigo também disponível em árabe, vietnamita e coreano.

Data: 10 de janeiro de 2017

Não fui contratado. Continue lendo. Obrigado a todos pelo seu incrível e esmagador apoio.

Atualização: 6 de março de 2017

A história tem um final feliz! Fui contratado pela Amazon para trabalhar como Engenheiro de Desenvolvimento de Software na Amazon Web Services!

Onde me encontrar

Eu blogo no Startup Next Door.

Google Interview University no Github:

jwasham/google-interview-university
google-interview-university – Um plano diário completo para estudar para se tornar um engenheiro de software do Google.github.com

Deixe uma resposta

O seu endereço de email não será publicado.