Soy un ingeniero que trabaja para Amazon y que está involucrado en su proceso de entrevistas, así que iré de anónimo, por si acaso 🙂 Creo que estas consideraciones son algo que la mayoría de las empresas tecnológicas de primer nivel utilizarán y sopesarán en su proceso, pero quién sabe. No deberían considerarse "secretos comerciales". Supongo que, si algún día abro mi propia empresa, probablemente tomaré prestados algunos de estos conceptos, ya que personalmente me gustan.
Asumo que esta pregunta está relacionada con los roles de SDE? Descargo de responsabilidad: debo tener en cuenta que no puedo representar a Amazon en su conjunto; esta es mi opinión personal sobre el proceso.
¿Qué busca Amazon en la evaluación online?
Que tengas unas habilidades decentes para resolver problemas y que puedas codificar lo suficiente, dentro de un límite de tiempo. Que cuando te lleven a una entrevista, te mantengas firme y sepas codificar.
Aquí te beneficia conocer tantas estructuras de datos y algoritmos como puedas y estar familiarizado con su uso, en al menos un lenguaje popular. Java o C++ es probablemente lo más ideal. Depende del puesto para el que te entrevistes y de la organización con la que trabajes en Amazon, pero lo normal es que te examinen de estructuras de datos que puedas utilizar a diario, como gráficos, árboles, listas, pilas, colas, conjuntos y mapas/diccionarios. Los algoritmos suelen estar orientados a los casos de uso, es decir, normalmente no se le pide que escriba un algoritmo de ordenación o un algoritmo de recorrido de árboles o gráficos. En función de los requisitos, es posible que tenga que hacer uso de uno, y en tales casos se le permite utilizar implementaciones de bibliotecas base.
Una buena regla general (que también se aplica a las entrevistas) es tratar de responder al problema como lo haría si ya estuviera contratado. Por ejemplo, ¿realmente reimplementarías un mergesort o quicksort frente a utilizar una implementación bien probada para ordenar que ya existe? Ahórrate el tiempo, no lo hagas, a menos que se te pida clara y específicamente que lo hagas. Deberías tener una muy buena razón para reinventar una rueda.
¿Qué busca Amazon cuando te entrevista?
Nos interesa tu encaje en la cultura, tu capacidad para resolver problemas y si eres un candidato "excepcional". Si te contratan y te involucras más con Amazon, aprenderás la terminología específica para estos conceptos dentro de Amazon; no los estoy usando a propósito, ya que creo que estos conceptos no son exclusivos de Amazon, sólo tienen una "marca" específica.
Para el ajuste de la cultura, se trata de demostrar que estás personalmente interesado en hacer las cosas mejor para nuestros clientes, y cómo encajarás en el equipo. Para esto, se trata de dar con precisión los aspectos más destacados de su experiencia en la industria. Merece la pena repasar tu historial y conocer los casos en los que has beneficiado a tu equipo con tu toma de decisiones y tu comunicación, y/o los casos en los que has tenido que entender un problema difícil y los pasos que has dado para resolverlo. Hay un par de facetas diferentes aquí, así que es importante venir preparado. Si no tienes suficiente experiencia en la industria a la que recurrir (aunque también deberías intentar recurrir primero a tu experiencia en la universidad/escuela), deberías hablar con sinceridad y dejar que el entrevistador determine cómo proceder. No tener nada aquí no te falla, sólo significa que nos centraremos más en las otras cosas que aportas.
Para la resolución de problemas, se trata de demostrar que eres capaz de "hacer el trabajo", y la codificación puede o no estar involucrada (cada hueco de la entrevista es diferente). Esta es la faceta más compleja de las tres; requiere que el entrevistador te transmita bien su problema, que tú lo entiendas bien, y que seas capaz de transmitirle bien tu respuesta, ya sea en código y/o en explicación. Para ello, yo diría que intentes actuar como si ya estuvieras contratado: ¿qué preguntas les harías/deberías hacer para entender mejor este problema antes de entrar en materia? ¿Qué es lo que realmente les interesa? Es importante intentar ver de dónde viene el entrevistador y cómo darle lo que busca; cada entrevistador (porque todos somos humanos) es diferente. También es importante saber que algunos entrevistadores insistirán en buscar una serie de detalles específicos que quizá no puedas darles. Si puedes reconocer esto, es importante ser honesto y decirle al entrevistador que no sabes o no entiendes lo que te piden, y lo ideal es que cambien el problema para darte una mejor oportunidad de resolverlo. Estas situaciones nunca son ideales; cuanto más conozcas las estructuras de datos y los algoritmos y más familiarizado estés con reconocer cuándo un problema te pide que uses uno frente a otro, menos a menudo debería ocurrir esto.
Para ser un candidato "excepcional", se trata de demostrar que para el puesto en el que te contratan, puedes ser mejor que los compañeros con los que trabajarás, y que crecerás y asumirás más responsabilidades si te dan tiempo. Aquí es donde el éxito de la entrevista puede ser más volátil; no creo que ninguna empresa, incluida Amazon, haya encontrado una forma justa o razonable de medir esto de forma consistente. Todo lo que puedo decir es que la razón por la que serás entrevistado por varias personas es para que podamos intentar construir una imagen objetiva de cómo trabajarás en Amazon. Es importante que estés personalmente interesado en ayudar a nuestros clientes, y es importante que estés interesado en convertirte en un mejor programador/ingeniero/etc.
En conclusión, queremos específicamente contratarte si estás personalmente interesado y eres capaz de servir a nuestros clientes, y eso juega de varias maneras, cubiertas arriba. Si no estás interesado en convertirte en un mejor programador/ingeniero/etc., entonces no vas a ayudarnos a servir a nuestros clientes. La codificación en pizarra es probablemente la parte más cuestionable de toda la experiencia, pero está ahí para ayudarte a probarte a ti mismo. Sólo tienes una hora para impresionar a la persona que te entrevista; ¿cómo la vas a impresionar? Decir que amas a los clientes de Amazon es una cosa ("hablar por hablar"), pero demostrar que consideras cuidadosamente los problemas de Amazon, sus requisitos, y que eres capaz de trabajar en soluciones para ellos, eso ayuda a respaldarlo ("caminar por el camino"). Si eres capaz de hacer estas cosas de forma consistente, harás una buena entrevista.
No dudes en pedir más detalles, si los necesitas.
¿Cómo se "califica" la evaluación? Sólo se pasa si se superan las dos preguntas de forma óptima con cada caso de prueba superado? El código/solución es revisado por un humano para determinar dónde estuvo el error o los errores?
Por lo que sé, la evaluación online puede diferir entre las organizaciones de Amazon en cuanto a cómo se te califica. De las organizaciones con las que trabajo, el código/solución es típicamente revisado por ingenieros (humanos 🙂 para determinar los errores y hacer la decisión final sobre si se acepta. Por lo que sé, es posible aprobar una solución imperfecta, siempre que el enfoque general parezca correcto y resuelva la mayoría de los casos límite. Es bueno ser proactivo a la hora de señalar las desventajas de tu enfoque y realizar pruebas sobre él. También es bueno, como se ha dicho antes, no sobredimensionar la solución (por ejemplo, intentar reimplementar quicksort casi nunca sale bien). Pasar todos los casos de prueba para todas las preguntas es definitivamente preferible (hace que sea mucho más fácil para nosotros revisar y calificar la solución).
Tratamos de hacer revisiones "humanas" para la cordura, ya que algunas soluciones en el pasado han logrado exponer los errores en el calificador de evaluación y / o inconsistencias en la presentación del problema. Hemos hecho lo que podemos para iterar y mejorar los problemas de evaluación, y eso también incluye probarlo contra ingenieros que trabajan en Amazon.