Como prepararse para una entrevista técnica en Silicon Valley.

Las entrevistas se hacen en un pizarrón, sin computadora, Google ni Stack Overflow.

Después de 6 años de haber entrevistado a más de ~200 candidatos y haber aplicado al menos a una docena de empresas, puedo asegurar que las probabilidades de pasar un proceso de entrevista, en promedio, son extremadamente bajas.

Cuando quise entrevistar no sabia por donde empezar, estaba abrumado por la cantidad de cosas que no sabia, y me encontraba totalmente convencido que me era imposible pasar un proceso de entrevistas en una empresa importante de Silicon Valley. Ese miedo ademas era potenciado por no tener una buena educacion formal, ni siquiera tengo título de Ingeniero.

Espero que despues de leer esto puedas tener una idea un poco mas clara de como es el proceso y que cosas son las que deberias saber para incrementar tus chances.

Básicamente, en la entrevista entran en juego dos cosas, los conocimientos tecnicos y academicos que tenes, y como resolves problemas bajo presión. No podes pasar una entrevista sin esas dos cosas funcionando bien, podes saber un montón y tener experiencia, pero si te bloqueas o te pones nervioso lo mas probable es que no puedas resolver los problemas 1.

Formato

Las entrevistas en las companías “top” 2 de Silicon Valley son de las mas exigentes del mundo. El formato fue popularizado principalemente por Google, sobre todo cuando muchos de sus ingenieros emigraron a otras empresas y se llevaron con ellos esta “solucion” de como estandarizar la evaluacion de candidatos.

Si bien este formato no es la mejor forma de evaluar a un candidato, es entendible que cuando tu empresa esta creciendo exponencialmente se hace dificil tener tiempo para desarrollar un metodo propio y seguramente mejor.

El formato es muy simple y consiste en al menos dos o tres entrevistas telefonicas, luego de lo cual (si fueron existosas), una o hasta dos fisicamente en las oficinas. La entrevista “on-site” suele tomar por lo menos 5 horas dividido en entrevistas de 45 minutos cada una. Agotador.

Primera entrevista telefónica

De pronto suena el telefono, atendes, y del otro lado un ingeniero te saluda, hablan un rato y te plantea un problema tecnico que nunca escuchaste antes, y suena dificil de resolver en solo treinta minutos, del otro lado hay silencio, estan mirando cada tecla que apretas en el teclado y esperan que les demuestres no solo que podes resolverlo facilmente, sino que ademas tenes conocimientos que van mas alla de la solucion particular. Suena un poco estresante, no?

La inmensa mayoria de las personas que entreviste estaban nerviosas, es raro ver a un candidato tranquilo y relajado, es normal estar nervioso y tenes que acostumbrarte a eso, si lo peleas es peor porque entras en un ciclo donde pasas mas tiempo pensando que “estas nervioso” en lugar de concentrarte en la solucion.

Va a sonar raro, pero un muy buen consejo que me dieron es que “vaya a divertirme” a las entrevistas, que no las tome como la vida o la muerte sino como un ejercicio donde vas a charlar con gente que sabe de lo mismo que vos y esta interesada en ver como resolves los problemas. Una conversacion interesante, mas que un interrogatorio.

Otra manera de estar menos nervioso y estresado es entrevistar cuando tenes un trabajo estable y fijo, de esa manera si conseguis el puesto o no, no es el fin del mundo. Ademas, es muy comun entevistarse mas de una vez en la misma compania. Generalmente el minimo que tenes que esperar es 6 meses o 1 año para volver a aplicar.

“Entrevistá cuando menos lo necesitás.”

La mayoria de los candidatos no pueden resolver el problema planteado, pero muchos de ellos si pueden sugerir distintas alternativas validas de como encararlo, eso ayuda mucho al entrevistador para saber si sabes o no, es mas, en algunos casos eso vale mucho mas que simplemente saber la respuesta a un problema. Los entrevistadores no buscan simplemente una respuesta sino un dialogo que permita ver la forma en la que razonas y solucionas un problema. Especialmente si no sabes la respuesta a ese problema.. Varias personas que entreviste y no resolvieron del todo bien algun problema, resultaron ser excelentes ingenieros.

Es imprescindible practicar ser entrevistado, es extremadamente distinto usar un editor de texto sin autocompletar (o un pizarron) en lugar de tu computadora, busca algun problema en Internet y tratar de resolverlo en un papel o en un procesador de texto.

Por experiencia, despues de resolver al menos 30 o 40 de esos ejercicios empezas a ver patrones repetitivos y la confianza aumenta. Mira la parte de recursos que dejo acá. Cuando me preparo para entrevistar lo hago al menos con uno o dos meses de anticipación para refrescar todo lo que me olvidé y principalmente para acostumbrarme a programar en un pizarron o archivo de texto.

Entrevista “on-site”

Esta es seguramente la parte mas dificil ya que necesitas no solo estar mentalmente preparado sino ademas fisicamente listo para enfrentar casi 5 horas contestando problemas o preguntas tecnicas.

Generalmente cuando estas en las oficinas vas a conocer a los que podrian llegar a ser tus compañeros, es una buena oportunidad para ver que tan bien podrias llevarte con ellos y como interactuan con vos.

Las preguntas van a ser una mezcla de tu especialidad particular y temas de ciencias de la computacion, no te sorprendas que alguno te pregunte como implementar un hashtable o incluso preguntas abiertas de diseño y arquitectura de sistemas. Es más te diria que esta garantizado que te van a hacer ese tipo de preguntas.

Personalmente lo que mas me costaba (al no tener titulo de Ingeniero claro) eran las preguntas de ciencias de la computacion, por ejemplo complejidad temporal o implementar algoritmos mas complejos y generales (los cuales generalmente ya estan listos para usar y casi nunca en el trabajo dia a dia tenes que implementar).

La forma en que personalmente lo encare fue tomarme unos meses y aprender todo por mi cuenta, para eso me compre un par de libros:

Cracking the coding interview esta bueno, pero esta muy optimizado a la entrevisa en sí, esta bueno leer alguno de los otros como “Introduccion a algoritmos” o “SICP” aunque es muy avanzado. Otra alternativa es buscar los temas y aprenderlos online, hay muchos cursos por ahí sobre el tema.

Los temas basicos de ciencas de la computación que tenes que saber son los siguientes:

Se suele hacer mucho enfasis en algoritmos y estructura de datos en las entrevistas (no es soprendente sabiendo que este formato lo popularizo Google).

  • Temas muy generales de CS que tenes que saber
    • Big-O Notation
    • Lists
    • Dictionaries o Hashes
    • Stacks
    • Infix/Postfix
    • Queue
    • Deques
    • Recursion
    • Sorting and searching
    • Binary search
    • Sorting algorithms (Bubble, insertion sort, merge sort, etc.) y lo mas importante cuando usar cada uno!
    • Trees
    • Priority queues (casi fija que alguna pregunta con priority queues te hacen)
    • Binary Search Trees
    • Graphs (sobre todo depth vs breadth)
    • problemas P/NP, puzzles (estos estan tratando de no preguntarlos mas en las entrevistas por suerte)

1. Una vez me preguntaron algo que habia respondido muy facilmente el dia anterior —en otra entrevista—, pero el entrevistador me caia tan mal que no pude concentrarme y finalmente no lo pude resolver. La parte psicologica es fundamental.

2. No me refiero a startups pequeñas o medianas, sino empresas mas establecidas como Google, Apple, Facebook, LinkedIn, etc.