Esta é a terceira e última parte da série de artigos
“Sendo bem-sucedido em processos de seleção na área de TI: você faz a coisa certa?”.
Na primeira parte,
discutimos como preparar o espírito e o curriculum
vitae (CV). Na segunda
parte, foi vez de detalharmos como enfrentar entrevistas por e-mail
e telefone. Nesta terceira parte, por fim, estarei focado naquele que é o ponto
crítico e decisivo de todo e qualquer processo de recrutamento: a
entrevista presencial.
Detalhando o processo
Nas grandes empresas de TI (Google, Microsoft, British Telecom, etc.), uma entrevista
presencial é uma verdadeira maratona, ocupando um turno inteiro (uma manhã ou tarde).
A entrevista, na verdade, é dividida em várias sub-entrevistas seguidas (cerca de
4 ou 5), cada uma durando de 45 minutos a uma hora.
Existem boas chances de você participar simultaneamente da maratona de entrevistas
junto a outros candidatos (novamente, uns 4 ou 5), que são entrevistados pelos recrutadores
em um esquema de rodízio. Diz-se que, quanto mais sub-entrevistas você fizer, mais
os recrutadores estão interessados em você. A princípio, é provável que candidatos
dispensados após a terceira sub-entrevista não tenham despertado o interesse da
equipe de entrevistadores.
Os cuidados básicos para uma entrevista presencial são óbvios: checar antecipadamente
o horário e o local de sua entrevista. Informe-se antecipadamente sobre o tempo
que leva do hotel para o local, pois esse é um péssimo momento para atrasos, que
podem impactar no cronograma da entrevista assim como nas impressões iniciais que
recrutadores terão de você.
Por outro lado, chegar excessivamente cedo à entrevista pode não ser interessante.
Os recrutadores talvez ainda estejam ajustando o ambiente de entrevistas e acertando
os detalhes finais entre si, sendo sua presença antecipada uma preocupação a mais
para eles. Recomendo que você chegue 15 minutos antes ao local, até mesmo para bater
um papo com os demais candidatos e espantar um pouco do nervosismo.
Em tempo: não considere os outros candidatos como concorrentes! No processo de recrutamento
das grandes empresas, geralmente, cada candidato compete contra si mesmo, e não
com os demais. Se todos forem bem-sucedidos, é bem provável que todos sejam selecionados.
Aproveite o momento para conhecer pessoas novas e ampliar seu networking!
Observe, entretanto, as normas estabelecidas pelos recrutadores em relação a conversas
com outros candidatos nos intervalos das sub-entrevistas. É bem provável que não
seja permitido conversar sobre o que está sendo perguntado durante o processo. Além
disso, pode ser exigido que vocês conversem entre si apenas em inglês (de modo que
os recrutadores possam ter ciência do que está se passando).
Outro ponto bastante importante é se informar qual o
dress code da entrevista (isto é, qual a roupa apropriada para a ocasião).
Isso pode parecer óbvio ou desnecessário, mas o fato é que diferentes empresas de
TI possuem diferentes dress codes, ainda
mais se consideramos o assunto no âmbito internacional.
Por exemplo, enquanto Microsoft e Google adotam uma linha mais casual (camisa de
botão, sem calça social), empresas mais tradicionais, como a British Telecom, praticam
o velho terno e gravata. Estar destoando (inclusive dos demais candidatos) em algum
desses ambientes pode lhe deixar desconfortável para a entrevista e/ou passar uma
impressão estranha.
Por fim, um cuidado fundamental é uma boa noite de sono, para manter a mente fresca
no dia seguinte, assim como dar uma lida completa e final no seu CV no dia anterior,
se capacitando para responder a qualquer pergunta mais específica sobre algum detalhe
do mesmo.
Uma boa notícia é que muito do que você já fez para se preparar para a entrevista
telefônica será útil para a entrevista presencial. De fato, entrevistas presenciais
possuem muitos elementos em comum com uma entrevista telefônica:
·
Perguntas clássicas de RH, como:
o
“Por que você quer trabalhar na
<Google/Microsoft/etc.>?”
o
“Fale sobre um projeto no qual você enfrentou um problema difícil
mas foi bem-sucedido”
·
Charadas (ou
puzzles), como:
o
Você é apresentado a um jarro com X bolas azuis, Y verdes, W brancas
e Z amarelas. Quantas bolas você precisa tirar, sem olhá-las, para garantir que
irá pegar pelo menos duas da mesma cor?
o
10 jarros estão cheios de pílulas, todas pesando 10 gramas, à exceção
das pílulas de um certo jarro, que pesam 9 gramas. Encontre esse jarro com apenas
uma única pesagem.
·
Bate-bola que vai ficando cada vez mais
técnico, como:
o
“Como você explicaria
o Excel para sua avó?”
o
“Compare C++ com C#”
o
“Discuta o padrão de projeto dependency
injection”
Diversos exemplos de perguntas pertencendo às três categorias acima, assim como
dicas e sugestões de como resolvê-las, foram apresentados previamente na
segunda parte desta série artigos. Dessa forma, focarei o restante deste
artigo na quarta e última categoria de perguntas: os problemas técnicos mais elaborados,
que precisam ser resolvidos na presença do entrevistador.
Antes disso, entretanto, gostaria de enfatizar uma sugestão: talvez seja interessante
criar um documento contendo perguntas e respostas pertencentes às três categorias
apresentadas acima. Leia-o todos os dias antes da entrevista. Ensaiar as respostas
através de um documento desse tipo pode garantir que você desenrole mais tranqüilo
as respostas na hora em que isso for perguntado para valer.
Resolvendo problemas técnicos mais complexos
Você pode se preparar de diferentes maneiras para resolver os problemas técnicos
mais complexos de uma entrevista presencial. Livros específicos para entrevistas
presenciais em TI (como
Programming Interviews Exposed
e o How Would You Move Mount Fuji?)
são de fato úteis. Da mesma forma, você se surpreenderá com a quantidade de informação
que já existe online sobre isso, como
aqui,
aqui, aqui,
aqui,
aqui, aqui,
aqui, aqui,
aqui e
aqui.
Em especial, não se limite apenas a ler os exercícios e suas respostas presentes
nos sites e livros. Treine por conta própria e tente resolver você mesmo. Não se
decepcione se você não conseguir solucionar tudo de primeira, o mais importante
é como você resolve os problemas, e
não chegar ao resultado correto. Falarei mais sobre isso adiante.
Cabe ressaltar, entretanto, que nenhum livro ou recurso na internet é milagroso.
Se você possui uma base fraca, por exemplo, em orientação a objetos, algoritmos
e estruturas de dados, é importante trabalhar esses conceitos antes de partir para
os problemas. Se você for um programador Java ou C#, um cuidado especial é relembrar
os conhecimentos em C/C++.
Pois bem, o que faz a diferença na resolução de problemas técnicos mais complexos
em uma entrevista presencial? Antes de responder, vamos checar alguns exemplos de
problemas desse tipo:
·
Implemente a função a seguir contemplando restrições de espaço e tempo:
RemoveChars(char[] originalString, char[] charsToBeRemoved).
·
Implemente a função CountBits(int x),
que retorna o numero de bits de x iguais
a 1.
·
Escreva uma função para rotacionar um bitmap em 90 graus, de modo
in place (isto é, sem precisar alocar memória adicional).
·
Implemente um algoritmo para remontar a tabela FAT de um disco.
·
Implemente um gerenciador de
heap (funções malloc
e free), focando a discussão nas estruturas
de dados a serem utilizadas, abordagens de implementação e
trade-off entre elas.
·
Dada uma arvore binária e dois nós dessa árvore, implemente um algoritmo que encontra
o primeiro pai comum a ambos.
·
Percorra uma árvore com algoritmos pre-order,
in-order e
post-order.
·
Implemente ordenação em um array com <quicksort/mergesort/etc.>.
·
Implemente
a função memcpy.
·
Implemente a função
atof (que converte de string
para float).
·
Dada uma lista ligada, troque os elementos
de índice par pelos de índice ímpar.
·
Dada uma lista ligada, remova os elementos
cujos índices são múltiplos de 3.
·
Remova os elementos duplicados de um
vetor ordenado.
·
Implemente uma classe para armazenar
números inteiros de tamanhos infinitos.
·
Implemente um algoritmo para identificar
se uma string é um palíndromo.
·
Escreva uma função para encontrar a maior
e a menor palavra de uma string.
·
Implemente um algoritmo in place para
inverter uma string.
·
Implemente um algoritmo in place para
inverter as strings dentro de uma frase.
·
Dada duas listas ligadas, realize o
merge entre elas.
O primeiro passo em busca da resolução
de tais problemas é não se assustar caso um problema aparente ter um nível de complexidade
acima do que você estaria preparado. Pode ser o caso, inclusive, do entrevistador
ter lhe passado o enunciado com alguma informação faltando, que seria fundamental
para um melhor entendimento do problema.
Na verdade, aí está a primeira grande
dica: pergunte tudo o que possa lhe ajudar a entender o problema antes de escrever
qualquer linha de código! Mostrar que você tem a preocupação de entender perfeitamente
o que lhe foi proposto é uma virtude apreciada pelos entrevistadores.
Por exemplo, no penúltimo problema apresentado
na lista acima (inversão in place de
strings dentro de uma frase), perguntar quais são os caracteres separadores de palavras
(como vírgulas, hífens ou espaços em branco) pode contar pontos a seu favor. Outro
exemplo seria questionar se as listas ligadas do último problema apresentado acima
(merge de listas) já estariam ordenadas,
o que facilitaria sua vida na aplicação de um algoritmo similar ao
mergesort. Ou então questionar se você precisaria criar uma terceira lista
para armazenar a resposta ou se a resposta pode ser uma das listas de
input modificada.
Outra dica é diagramar o problema proposto.
Escreva exemplos de input/output da questão, faça rabiscos e outros desenhos que
possam lhe ajudar a abstrair melhor o problema e entender sua essência. “Pensar
alto” em todos os momentos da resolução do problema, falando e explicando ao entrevistador
o que passa por sua cabeça, é uma dica extremamente valiosa. Isso permite a você
expor sua linha de raciocínio gradualmente ao entrevistador, o que é um bom momento
para fazer um pouco de marketing sobre suas habilidades.
Por exemplo, você pode afirmar que “uma
maneira simples de resolver esse problema é utilizando recursão, embora isso possa
impactar na performance do algoritmo devido às mudanças de contexto ocasionadas
pelas chamadas recursivas assim como ocupar a memória mais do que o desejado”. Dessa
forma, o entrevistador pode ter uma noção mais clara de seus conhecimentos (no caso,
ele saberá que você entende minimamente os trade-offs
de um algoritmo recursivo). Adicionalmente, e o que é mais importante, o seu “pensar
alto” permite que o entrevistador lhe auxilie quando você não estiver conseguindo
progredir em seu raciocínio.
Quando você estiver preparado para implementar
a resposta (que geralmente é feita em pseudo-código baseado em C++, Java ou C#),
considere a conseqüência de cada linha de (pseudo-)código que você escrever. Em
vez de “vomitar código” para apenas depois analisar seus efeitos, procure checar
o impacto de suas linhas de código passo a passo, sem que o entrevistador precise
interferir ou lhe chamar a atenção para eventuais conseqüências do novo código introduzido.
Aliás, vale lembrar que isso é uma boa prática de programação, seja a programação
para uma entrevista ou não.
Ao final, é interessante provar que seu
código está correto, testando-o com diferentes variações de
input. Percorra o código com os valores informados para checar não apenas
se o resultado desejado é obtido, mas também se o algoritmo implementado se comporta
como esperado. Saber como testar o próprio código é outra virtude bastante apreciada.
Questões que exigem sua criatividade como testador também são comumente apresentadas.
No nível menos técnico, o entrevistador pode lhe perguntar como você testaria objetos
cotidianos, como um papel, um copo ou um browser.
A idéia aqui é ser o mais criativo possível, apresentando a maior quantidade de
casos de teste que vier à sua cabeça. No caso do copo, por exemplo, algumas opções
seriam questionar se o copo é fácil de pegar, de lavar, de ver o líquido que está
dentro dele, se ele é inodoro, etc.
Outras questões de teste podem surgir após a apresentação de uma questão técnica
qualquer. Por exemplo, o entrevistador pode pedir para você implementar uma busca
em um array ordenado e, em seguida, definir
casos de teste para esse problema. Em outro exemplo (ocorrido durante minha entrevista
para a Microsoft), o entrevistador solicitou que eu implementasse uma função para
encontrar o primeiro caractere repetido de uma string, com restrições de espaço
e performance. Em seguida, pediu que eu criasse casos de teste para o problema.
Preocupe-se nesse momento não apenas em testar a funcionalidade do seu código, mas
também atacar questões como segurança, performance de tempo/espaço e qualquer combinação
de valores de entrada que possa fazer o código dar algum erro, como valores nulos,
zerados, fora do intervalo permitido ou justamente na fronteira desse intervalo
(“valores-limite”).
Alguns problemas podem ser bastante criativos e mais longos de serem explicados,
como o seguinte: Você precisa implementar a inteligência de dois robôs, que irão
pousar em um mundo unidimensional e discreto (uma régua). Seus pára-quedas ficam
no lugar onde eles pousam. Sua tarefa é fazer os robôs se encontrarem, programando-os
através das seguintes instruções, cada uma levando 1 segundo para ser executada:
·
StepLeft
·
StepRight
·
If parachute GOTO <label>
·
GOTO <label>
Não se assuste com a quantidade de informações apresentadas no enunciado. Você verá
que com as perguntas certas e um pouco de calma, será até mesmo bastante divertido
resolver tais problemas.
Por fim, nunca é demais lembrar: durante a entrevista presencial, assim como na
entrevista por telefone, o Inglês pode ser um desafio adicional. Entretanto, não
hesite em pedir cordialmente para o entrevistador repetir ou falar mais devagar
caso você não entenda alguma coisa.
Dinâmicas de grupo
Algumas empresas podem adotar, como parte de seu processo de recrutamento, dinâmicas
de grupo. Essas consistem em um problema ou desafio que deve ser resolvido coletivamente
por todos os candidatos, em um esforço conjunto.
Um exemplo de desafio proposto em uma dinâmica de grupo, passado a você e demais
entrevistados, seria: uma empresa pretende lançar
um novo jogo no mercado. Tal jogo deve ser jogado online pelos jogadores e em turnos,
isto é, cada jogador terá sua vez. Vocês devem bolar, em conjunto, um jogo que satisfaça
essas restrições e que seja o mais inovador possível.
Os candidatos devem resolver o desafio em um tempo fixo (por exemplo, 15 minutos)
aos olhos dos entrevistadores, mas geralmente não podem interagir com esses últimos
durante a resolução. Os entrevistadores, nesse momento, estarão observando o comportamento
dos candidatos e anotando suas impressões sobre os mesmos.
Uma dica básica que eu ofereço para atuar em dinâmicas de grupo é inspirar-se em
programas como o The Apprentice (“O Aprendiz”).
As habilidades avaliadas pelos entrevistadores em dinâmicas de grupo em processos
de seleção são similares aos critérios de aprovação/eliminação de candidatos usados
nesses reality shows.
Uma das principais habilidades é a proatividade e capacidade de liderança. Não tenha
medo de participar, de tentar conduzir a equipe à luz, ou até mesmo de errar. Não
se iniba ou sinta vergonha. Se você ficar quieto no seu canto, calado, não tenha
dúvida de que os entrevistadores não anotarão impressões muito positivas sobre você.
Torne-se um líder implícito, pelo respeito, participando com sugestões criativas
e que mostrem como seu conhecimento técnico e habilidades de comunicação são úteis
para a solução do desafio proposto.
Entretanto, cuidado para não se impor em excesso. Saber ouvir os demais e trabalhar
em equipe, em dinâmicas como essas, é essencial. Diante de algum impasse, é bem-visto
propor soluções democráticas, como uma votação, ou ainda uma análise de custo-benefício
para melhor avaliar as opções apresentadas.
Mais do que tudo, procure manter o foco da equipe no tempo restante e na objetividade.
É melhor finalizar o desafio com um alguma resposta ou solução, mesmo não sendo
perfeita ou 100% completa, do que ver o tempo acabar e nada ter sido proposto de
fato pela equipe.
Por fim, lembre-se: as dinâmicas são exercícios
coletivos, em que todos ganham ou todos perdem. Sempre busque em suas ações
maximizar os resultados da equipe em relação ao desafio. Porém, invista em atitudes
que, unindo o útil ao agradável, façam um pouco de marketing pessoal, revelando
aos entrevistadores algumas das suas virtudes e habilidades.
Considerações finais
Existe a chance do entrevistador lhe perguntar sobre sua expectativa salarial em
entrevistas presenciais. Dessa forma, é interessante ir para a entrevista já sabendo
dos valores que o mercado pratica para posições de trabalho similares à desejada.
O ideal nesses casos é nunca citar para o entrevistador um valor específico, e sim
um intervalo de valores, o que pode dar margem a uma melhor negociação. O livro
Programming Interviews Exposed oferece
mais detalhes sobre o assunto.
Tão importante quanto responder as perguntas dos entrevistadores é também saber
fazer perguntas, não só para sanar dúvidas
sobre a empresa e a posição de trabalho aplicada, como também para mostrar interesse.
Geralmente, os entrevistadores reservam um tempo ao final da entrevista apenas para
que você esclareça dúvidas com eles. Assim, é interessante, antes da entrevista,
informar-se sobre a empresa, sua posição de trabalho, sobre a equipe para a qual
você está aplicando, etc. Leve suas dúvidas sobre quaisquer desses itens para o
momento da entrevista.
Por fim, a última e mais importante dica de toda esta série de artigos é:
seja você mesmo! Não queria projetar uma imagem de alguém que você não é;
não corra o risco de soar artificial. Embora seja necessário trabalhar o seu próprio
marketing no momento da entrevista, como vimos ao longo deste artigo, ser autêntico
e espontâneo ainda são os elementos-chave para transmitir segurança, manter a calma
e deixar todo o seu conhecimento e preparação fluírem naturalmente nesse momento
que é o mais importante de um processo de seleção profissional.
Em meu blog antigo no The Spoke,
relatei em mais detalhes cada etapa dos processos de recrutamento pelos quais passei.
Se você procurar pelos arquivos a partir de junho de 2006, encontrará bastante coisa
interessante sobre o assunto. Em especial, destaco o
relato completo de minha experiência quando entrevistado pela Microsoft
Corp.
Em meu novo blog no Live Spaces,
apresento eventualmente dicas mais pontuais sobre processos de seleção em empresas
de TI, assim como novidades de empresas que estão recrutando atualmente e experiências
de trabalho nas mesmas. Aguardo sua visita!
No mais, boa entrevista, boa sorte e um feliz novo emprego!