Acabo de conseguir un trabajo de desarrollador en Facebook. Así es como me preparé para mis entrevistas.

Acabo de terminar siete entrevistas in situ en empresas de tecnología de Silicon Valley. Finalmente acepté una oferta para un trabajo de ingeniería de software de Facebook.

Así es como me preparé para estas entrevistas y lo que aprendí en el camino.

Mi viaje de varios años hacia Silicon Valley

Cuando estudiaba Ciencias de la Computación en mi universidad en Australia, siempre imaginé mi futuro como ingeniero de software en Silicon Valley.

Me encantó la idea de estar en el centro de toda la innovación de la industria tecnológica, así como sus errores. Este objetivo me mantuvo motivado. Me mantuvo concentrado.

Dejé mi puesto como ingeniero jefe de iOS en una empresa increíble en Melbourne y regresé a mi ciudad natal de Perth para estudiar. Allí me prepararía para el proceso de entrevistas que tenía por delante en Silicon Valley. Sabía que sería increíblemente difícil y arduo.

Si menciona el proceso de entrevista técnica a una sala de ingenieros de software, muchos se pronunciarán en contra de las prácticas habituales de entrevista. Gran parte del argumento proviene del razonamiento de que resolver algoritmos en una pizarra en realidad no representa ni se traduce en las tareas diarias de un ingeniero de software.

Por el bien de este artículo, no entraré en esa conversación. En cambio, exploraré estos diferentes tipos de prácticas de entrevistas desde la perspectiva de un candidato, también me enfocaré en lo que aprendí del proceso.

Entrevistar es una habilidad

Durante mi preparación, siempre supe que la entrevista sería un desafío. Pero honestamente, no tenía idea de lo difícil que sería hasta que estuve hasta las rodillas en mi primera entrevista.

En el período previo a las entrevistas, había utilizado servicios tanto de pago como gratuitos, que simulaban entrevistas telefónicas de codificación y pizarra con personas que tenían experiencia en la industria entrevistando candidatos. Esas entrevistas de práctica fueron esenciales para prepararme para la presión involucrada. Pero como me di cuenta más tarde, solo representaban una fracción de lo que consiste en una entrevista real.

Le desaconsejaría entrevistarse en el trabajo de sus sueños sin tener algunas entrevistas simuladas o reales en su haber. El nerviosismo puede ser increíblemente abrumador y solo se puede mitigar con la práctica.

Como ocurre con muchas otras cosas en la vida, la práctica mejorará su confianza.

Los diferentes tipos de entrevistas que encontré

Si se prepara y se desempeña lo suficientemente bien en las pantallas preliminares del teléfono, se le dará la oportunidad de venir al lugar y realizar entrevistas durante días completos. Por lo general, estas entrevistas durarán de cuatro a seis horas, según la empresa para la que se entreviste.

Durante mi viaje a Silicon Valley, logré alinear siete entrevistas in situ en total. Esto me dio una perspectiva única del panorama actual para las entrevistas.

Por lo general, un sitio cubrirá tres temas principales: algoritmo, diseño de arquitectura y comportamiento, que es para lo que había estudiado y preparado. Sin embargo, hay algunas empresas que parecen oponerse a esta tendencia y ampliar sus entrevistas para cubrir más habilidades prácticas.

Voy a repasar brevemente cada uno de los temas que encontré.

Entrevistas de algoritmos

El tipo de entrevista más común que encontrará. El entrevistador le pedirá que resuelva un problema en una pizarra que evaluará su conocimiento de estructuras de datos, algoritmos de clasificación, recursividad, análisis de complejidad de tiempo / espacio, así como reconocimiento de patrones y casos de borde. En esta entrevista, normalmente se le ocurrirá una solución de fuerza bruta y luego tratará de mejorar esa solución y analizará las compensaciones, si las hay, con las diferentes soluciones que proponga.

Este fue el pan y la mantequilla de mi preparación, todos los días durante seis semanas, resolví algoritmos en una pizarra de colgar barata, analicé su complejidad de tiempo / espacio y traté realmente de comprender qué sucede en cada línea de código.

Personalmente, disfruto mucho de los algoritmos de pizarra porque no necesariamente tengo que preocuparme por escribir sintaxis compilable (la mayoría de las veces), lo que me permite concentrarme únicamente en el problema en cuestión. Es posible que a otras personas no les guste la pizarra, pero les diría que la practiquen de manera constante y pueden cambiar de opinión.

Entrevistas en Arquitectura y Diseño

Esta es una entrevista interesante y una que subestimé profundamente. El entrevistador le pedirá que diseñe un sistema (en una pizarra, por supuesto) como un sistema de venta de boletos de estacionamiento, chat de mensajería, twitter, entre otros sistemas comunes.

Lo que se está evaluando es cómo se toma un concepto amplio y se diseña un sistema que cumpla con todos los requisitos y restricciones. Pero depende del candidato hacer las preguntas correctas, que definen los requisitos y las limitaciones. Esta entrevista es más una conversación mezclada con algunos diagramas de dibujo y quizás incluso la estructuración de la clase. Todo es de alto nivel, por lo que no escribirás ningún código de implementación real.

Naturalmente, debe dirigir la conversación para cubrir su conocimiento sobre cómo funcionan los sistemas. Si usted es un ingeniero de backend, realmente no entraría en la mecánica de los detalles de la aplicación del cliente a menos que tuviera experiencia previa en esa área. Soy ingeniero de iOS, por lo que hablé sobre patrones de arquitectura, modularización de funcionalidad, patrones de diseño en lugar de cómo escalar los puntos finales de API, agregar trabajadores, AWS y demás.

Entrevistas de comportamiento

El entrevistador le hará preguntas sobre sí mismo y cómo maneja ciertos tipos de situaciones. La preparación para este no es tan difícil como los demás, pero requiere mucha introspección por su parte.

Las preguntas suelen ser del tipo:

¿Cómo lidias con el fracaso?

¿Cuál es tu mayor debilidad?

¿Cómo resuelven los conflictos?

¿Qué harías de manera diferente?

Siento que sería bastante difícil arruinar esto, pero he escuchado a mucha gente que lo hace. Intentan disfrazar sus fortalezas como debilidades, diseñar su respuesta a algo que creen que el entrevistador querría escuchar o incluso simplemente pasar la culpa de los proyectos fallidos a otras personas.

"Mi debilidad es que estoy demasiado concentrado"

"Todo fue culpa de Jerry, estuvo enfermo la mayor parte del proyecto"

Estos entrevistadores están capacitados y calibrados para identificar a las personas malas y tienen una gran atención a la mierda. Es una forma rápida de hacer que su candidatura sea arrojada por la ventana. Simplemente sea genuino, muestre pasión por su trabajo, sea dueño de sus defectos, muestre iniciativa para mejorar y lo hará bien.

Ajuste de la cultura

Esto generalmente se combina con la entrevista de comportamiento y se centra en determinar si está alineado con los valores de la empresa. Por ejemplo, Facebook sigue la cultura de los piratas informáticos de ser audaces y enviar nuevas ideas, prueba por experimentación, sin miedo a romper cosas. Mientras que Airbnb quiere crear un mundo en el que las personas sientan que pertenecen a cualquier lugar al que vayan, buscan personas con grandes habilidades en hotelería.

Muchas de las grandes empresas tecnológicas ponen mucho énfasis en la cultura y contratan personas en función de la alineación de esa persona con sus valores. Si se está entrevistando en una de estas empresas, es importante que busque sus valores y encuentre experiencias pasadas que pueda relacionar y comunicar a su entrevistador.

Programación en pareja

Una categoría interesante para la que se le emparejará con otro ingeniero frente a una computadora que se ha configurado con un entorno de desarrollo, muy parecido al que usaría en el mundo real. Se le asigna una tarea básica con una lista de requisitos que debe completar, a medida que termina cada tarea, el entrevistador le pedirá que implemente más funciones hasta que se alcance el límite de tiempo. Puede usar los recursos que desee, como Stack Overflow o documentación en línea.

Siento que gran parte del éxito de un candidato en esta entrevista estaría determinado por la exposición a experiencias del mundo real. A diferencia de la pizarra, se requiere escribir código sintácticamente correcto, por lo que debe conocer su idioma y entorno por dentro y por fuera porque no quiere pasar demasiado tiempo en Internet o en la documentación buscando respuestas.

Durante mi rol anterior, escribía código limpio mientras trabajaba en una tarea, seguido de optimización una vez que sentía que la tarea estaba completa. Este tipo de flujo de trabajo no fue beneficioso para este tipo de entrevista. Me las arreglé para limpiarme el código en una esquina optimizando demasiado pronto, lo que hizo que fuera más difícil recuperarme. Descubrí que escribir código sencillo y mencionarle al entrevistador que lo haría de manera diferente en la producción se consideraba suficiente que escribir limpio y optimizado.

Encontrar y corregir errores

Mucho de lo que hacemos como ingenieros se centra en encontrar y corregir errores que nos informan de varias fuentes. En esta entrevista, se le dará una lista de errores para encontrar y parchear, así como también identificar otro código potencialmente problemático en el camino.

Solo vi una instancia de este tipo de entrevista y creo que sería bastante difícil para alguien prepararse realmente, especialmente si es un junior. Cada entorno de codificación tiene sus propias peculiaridades y matices, gran parte del mosaico que hice provino de experiencias previas con el IDE (entorno de desarrollo integrado) y los marcos relacionados que había acumulado a lo largo de los años.

Prueba del conocimiento del dominio

La programación es fundamentalmente la misma en la mayoría de los lenguajes comunes que vemos hoy. Lo más probable es que, si conoce la programación orientada a objetos en un idioma, esas habilidades se transferirán principalmente a otro.

Sin embargo, esta entrevista se centra en los aspectos que no se pueden transferir entre lenguajes o frameworks. Se le entrevistará sobre las especificidades del entorno relacionadas con la API, la gestión de la memoria, las capacidades, las limitaciones, el historial, etc.

La práctica puede ser un desafío para este tema en particular. Al igual que en la entrevista de detección y corrección de errores, creo que muchas de las respuestas se derivarían de experiencias anteriores. Dependiendo del nivel de la función que está solicitando, las respuestas que proporcione pueden ponderarse de manera diferente. Por ejemplo, si alguien que solicita un puesto junior no conoce la historia de por qué una API está estructurada de una manera particular, se le puede otorgar una concesión. Sin embargo, si un candidato que solicita un puesto senior no lo sabe, es posible que se le critique con más dureza.

Comprensión de los sistemas operativos

Dependiendo de la función o el equipo para el que se está entrevistando, es posible que tenga una entrevista que se centre únicamente en los sistemas operativos. En esta entrevista, se le harán preguntas que evaluarán su comprensión de la mecánica de nivel inferior del sistema operativo de una computadora.

Es cierto que esta entrevista me tomó por sorpresa. Los sistemas operativos eran algo que había aprendido durante los primeros años en la universidad, pero desde entonces mi conocimiento se ha vuelto confuso sobre el tema, lo que se reflejó en mi desempeño.

Como debes prepararte

Como escribí anteriormente, la entrevista es una habilidad en sí misma. Incluso si ya eres un gran programador en tu trabajo diario o estás obteniendo excelentes calificaciones en tus estudios, esas habilidades no se transferirán exactamente 1: 1 cuando estás en una pequeña sala de entrevistas. La persistencia, la repetición y la coherencia con la preparación y la práctica de la entrevista serán los factores determinantes clave de su resultado.

Conocimiento mínimo

Si alguien me preguntara cuáles creo que serían las áreas en las que enfocarme, sugeriría lo siguiente:

  • Aprenda a escribir código a mano en papel y en una pizarra primero y luego colóquelo en un IDE para resaltar la sintaxis, esto debería convertirse en una segunda naturaleza para usted.
  • Desarrolle un conocimiento profundo de las estructuras de datos , sus fortalezas y debilidades en comparación entre sí. Descubrí que implementar estructuras de datos y sus comportamientos desde cero me enseñó mucho más de lo que sabía de sus conceptos abstractos.
  • Comprenda completamente la notación Big O para las complejidades de tiempo y espacio, esto se combinará perfectamente con su algoritmo y preguntas de clasificación.
  • Comprenda todos los algoritmos de clasificación principales porque la diferencia en las complejidades de tiempo / espacio tiene el potencial de descarrilar su solución óptima para un algoritmo que está tratando de resolver.

Cuando empezar

Dependiendo de su línea de tiempo, es posible que desee comenzar más temprano que tarde. Muchas de las empresas con las que entrevisté tuvieron un período de enfriamiento de 12 meses antes de que un candidato fallido pudiera volver a postularse. Por otro lado, si sabe que no estará listo dentro de un año, también puede comenzar el proceso ahora y obtener una pequeña muestra de cómo es pasar por el proceso de entrevista para que cuando esté listo, gane ' Ser casi tan aterrador.

No te preocupes

Tienes esto.

Recursos

Entrevistas simuladas

  • entrevistas.io (beta), Gratis
  • Pramp, gratis
  • CareerCup, pagado

Algoritmos

  • Entrevista para descifrar el código, libro
  • byte a byte, sitio web y YouTube
  • CS50, YouTube
  • Pastel de entrevista, sitio web
  • HackerRank, sitio web
  • LeetCode, sitio web

Sistemas operativos

  • Conceptos del sistema operativo, libro

Diseño arquitectónico

  • Introducción a la arquitectura y los sistemas, YouTube

Conductual

  • Introducción a las entrevistas conductuales, YouTube

Si te ha gustado lo que has leído hoy, puedes consultar nuestros otros artículos sobre el desarrollo de iOS y Swift, o si quieres ponerte en contacto, envíame un tweet o sígueme en Twitter @andyyhope , realmente me alegra el día.

Andyy Hope (@AndyyHope) | Gorjeo

Ingeniero de iOS. Blogger / Presidente de Swift y iOS twitter.com