Escribo sobre la verdad, no sobre consejos y trucos
Actualización: Siguiendo los consejos escritos a continuación, conseguí ofertas de Google, Microsoft, Amazon, Quantcast y Bloomberg.
Esta es una guía completa que contiene todo lo que necesitas saber sobre la entrevista de codificación. Explica a fondo qué aprender, cómo aprender y, lo que es más importante, cómo presentar la solución durante la entrevista.
Si quieres pasar la entrevista de codificación, has encontrado el artículo adecuado. Después de leerlo puede que te sientas tentado a buscar otros artículos sobre el mismo tema, porque «a lo mejor encuentro más consejos y trucos que me ayuden».
Deja de buscar consejos y trucos, esto es lo que te aleja del trabajo de tus sueños.
No hay consejos ni trucos para conseguir ese trabajo. Es sólo trabajo duro y punto. Así que si realmente quieres machacar esa entrevista, ve a practicar después de leer este artículo.
El artículo tiene tres partes & tres vídeos y te llevará unos 30 minutos leerlo.
- ¿Qué es la entrevista de codificación?
- ¿Cómo prepararse para la entrevista de codificación?
- ¿Cómo dar lo mejor de ti durante la entrevista de codificación?
Primero, déjame presentar, para que sepas que estoy seguro de lo que estoy hablando.
Me llamo Andrei y soy programador de competición desde hace cinco años. He participado en la final mundial de Google HashCode, la mayor competición de algoritmos organizada por Google, y antes de eso, gané tres medallas de oro en la Olimpiada de Informática de Rumanía. Con esta experiencia, he publicado el curso online «Introducción a los Algoritmos y Estructuras de Datos en C++» que ha ayudado a más de 8000 estudiantes de 135 países a dar sus primeros pasos en este campo.
Ahora estoy estudiando Ciencias de la Computación en el University College de Londres y mientras tanto, estoy creando un curso para ayudar a los estudiantes y jóvenes profesionales a prepararse para la entrevista de codificación en las grandes empresas tecnológicas. Por lo tanto, en este artículo, quiero compartir mi experiencia con la entrevista de codificación y decirte la forma más directa de pasarla. Puedes contactar conmigo aquí.
Déjame hacerte una pregunta: ¿has soñado alguna vez con trabajar en una gran empresa tecnológica, como Microsoft? Si es así, ten por seguro que la mayoría de nosotros también lo hemos hecho. Y como hay tanta demanda para unas pocas docenas de puestos de trabajo, necesitan una forma de ver qué candidatos están mejor preparados.
Antes de que te inviten a la entrevista de codificación, tienes que solicitar el puesto y tener un CV que brille entre los demás. En este artículo, hablaré de la entrevista de codificación propiamente dicha y de cómo puedes prepararte para ella, y no del proceso de solicitud del puesto.
Para la mayoría de las empresas tecnológicas, la entrevista de codificación consiste en problemas de Algoritmos &Estructuras de datos. Piense en estos como preguntas de resolución de problemas, en el que el entrevistador está buscando para evaluar su capacidad para resolver un problema que no ha visto antes. Una entrevista dura aproximadamente 45 minutos y se le plantean uno o dos problemas de codificación. El entrevistador espera que encuentres la solución más óptima, la codifiques y expliques lo que acabas de codificar.
Por último, tendrás la oportunidad de hacerle algunas preguntas sobre la empresa o cualquier cosa que te interese. Hablaremos exhaustivamente de todos estos pasos en la última parte de este artículo.
¿Cómo preparar la entrevista de codificación?
Quiero ser claro contigo desde el principio: no existe tal atajo o truco para pasar la entrevista. La única manera de encontrar soluciones óptimas a los problemas algorítmicos es practicando, resolviendo tantos problemas como sea posible.
En dos palabras, es un trabajo duro.
Puede que no te guste y empieces a buscar en otro sitio un truco para entender cómo resolver las preguntas de la entrevista, pero no existe. Piensa por un segundo: si existiera ese truco, ¿por qué no lo usaría todo el mundo y pasaría la entrevista?
Entonces, tienes que entender que la única variable de pasar la entrevista es lo mucho que practiques antes. Tu experiencia, inteligencia y todo lo demás ya está fijado. Por lo tanto, el tiempo dedicado a la práctica marcará la diferencia entre los candidatos que aprueban y los que fracasan.
La entrevista de codificación es una lucha contra ti mismo, y la única manera de ganarla es practicar mucho.
El primer paso es sentirse cómodo con un lenguaje de codificación corriente, como C/C++, Java o Python. Algunas empresas también aceptan otros lenguajes, pero la clara mayoría se queda con estos tres. Elige el que más te guste y quédate con él. No decidas a mitad de la preparación que quieres cambiar de lenguaje. Para el resto del artículo, supondré que has elegido un lenguaje y que conoces bien su sintaxis.
Ahora bien, normalmente la entrevista de codificación versa sobre Algoritmos y Estructuras de datos. Incluyen algunos temas fundamentales que necesitas entender a fondo, y ni siquiera consideres ir a la entrevista sin sentirte cómodo con ellos.
Abajo hay una lista de los Algoritmos y Estructuras de Datos que necesitas conocer. Los he escrito en orden de importancia y es el mejor camino de aprendizaje.
1) Complejidad Big O: Es imprescindible y forma la base subyacente de tu pensamiento algorítmico. Entienda lo que significa y llegue al punto en que pueda decir la complejidad de un algoritmo básico con sólo mirarlo.
2) Arrays: A estas alturas deberías estar familiarizado con el concepto de arrays. Este tema se refiere a problemas en los que el array se usa sólo para almacenar y la solución incluye técnicas básicas, como iterar con dos punteros. Un problema clásico es comprobar si un array dado es una permutación.
3) Cadenas: Conozca cómo manipular una cadena en su lenguaje, y familiarícese con los problemas que le piden concatenarlas o rotarlas.
4) Listas enlazadas: Es habitual encontrarse con un problema de listas enlazadas en la entrevista. Aquí debes prestar especial atención a los casos de esquina. Piensa qué pasa si la lista enlazada está vacía? ¿O sólo tiene un elemento? ¿O quieres iterar hasta el último elemento? Cuando resuelvas un problema con listas enlazadas, piensa dos veces en los casos de esquina.
5) Tablas Hash: Estructura de datos fundamental que está presente en la mayoría de las entrevistas. Si profundizas en un tema, elige las tablas hash. Domina la biblioteca de tablas hash de tu lenguaje y practica al menos cinco problemas. Al final, acepta este reto: ¿Cómo encontrarías la submatriz más larga con entradas distintas?
6) Pilas: Familiarízate con la idea de que puedes manipular sólo un extremo de la pila. Resuelve este reto: Implementa una Pila con una API MAX, es decir, que en cada momento puedas preguntar cuál es el elemento máximo de la pila.
7) Colas: No las confundas con las pilas, porque tienen dos extremos. Implementa el clásico problema de simular una cola utilizando dos pilas.
8) Greedy: Esta técnica es bastante sencilla y probablemente la utilices a diario. Básicamente se refiere a tomar la mejor decisión posible en un momento determinado, sin considerar las consecuencias futuras. Practica algunos problemas y no pienses que cualquier problema se puede resolver utilizando Greedy.
9) Tipos primitivos: Se trata sobre todo de la manipulación de bits y de las operaciones básicas con números. Sin embargo, algunos problemas pueden llegar a ser bastante complicados. ¿Cómo se puede contar el número de 1’s en una representación binaria?
10) Árboles binarios: Centrarse en los recorridos, los ancestros comunes e iterar recursivamente a través de los árboles.
11) Montones: Son ampliamente utilizados en la aplicación del mundo real, así que ¡conoce los heaps! Practica hasta que te sientas seguro de cuándo usar un min-heap o un max-heap. ¿Cómo imprimirías los cinco elementos más grandes de una secuencia de números? ¿Usas un min-heap o un max-heap?
12) Búsqueda: La búsqueda es un tema básico que todo el mundo debería conocer. Por ello, practica al menos tres problemas utilizando la búsqueda binaria.
13) Ordenación: Asegúrate de que puedes implementar el mergesort y el quicksort. Conozca muy bien sus complejidades en el mejor, medio y peor de los casos. Si tiene tiempo, aprenda también Heapsort.
14) Árboles de búsqueda binarios: Son muy preguntados en la entrevista de codificación, y tienes que ser capaz de implementar todas sus operaciones básicas, ¡incluyendo la eliminación de un elemento!
15) Backtracking: Se trata básicamente de generar todas las soluciones posibles y tomar las que respetan sus requisitos. Implementar un generador del conjunto de potencias del conjunto y el problema n-Queen.
16) Grafos: Son probablemente la estructura de datos más utilizada en informática. ¿Sabías que toda red social no es más que un enorme grafo? Practica sobre cómo hacer una copia del grafo en memoria y cómo detectar ciclos en los grafos.
17) Programación dinámica: La programación dinámica es vista por la mayoría como el tema que más miedo da. Pero es el más bonito si entiendes el pensamiento que hay detrás. Así que, practica las cinco preguntas más comunes y quédate con ellas hasta que entiendas de dónde vienen las recurrencias.
En el curso, que estoy creando ahora, estoy explicando cada tema en este orden. Todavía estoy trabajando en el curso, pero puedes tener acceso anticipado a algunas de las lecciones y también ayudarme con tus comentarios, uniéndote al grupo de Facebook del curso.
Si muchos temas no te resultan familiares, significa que tienes que empezar a practicar justo después de este artículo. No busques más en internet otras guías, sólo ve y practica. Recuerda que la entrevista es una lucha contigo mismo, cuanto más practiques, más posibilidades tendrás de ganar. Depende de ti aumentar tu zona de confort de problemas.
¿Cómo dar lo mejor de ti durante la entrevista de codificación?
La entrevista tiene cinco partes que vamos a tratar en profundidad. Mira los vídeos explicativos para ver ejemplos reales.
1) Introducción
Esta parte inicia la entrevista y dura entre tres y cinco minutos. El entrevistador quiere saber más sobre usted y le da la oportunidad de presentarse. Por lo general, se interesa por los proyectos en los que has trabajado antes y cuál fue el más impresionante. Esta es tu oportunidad de brillar, así que no la desperdicies.
No intentes ser adulador. Es fácil detectar una personalidad falsa que trata de engañarte. Yo y todo el mundo odiamos a esa gente, así que asegúrate de mostrar tu verdadera personalidad.
Tienes que saber de antemano lo que vas a decir sobre tu proyecto favorito, así que prepáralo antes de la entrevista. Ahora bien, la mayoría de la gente dice sólo dos frases cortas, lo cual es malo. ¿Qué respuesta te gusta más?
1) «Trabajé en una aplicación web para gestionar mejor a los pacientes en los hospitales. Escribí el backend en Node.js.»
La forma en que te presentas realmente importa
2) «Un proyecto que me gustó mucho fue sobre la creación de una aplicación web para los Servicios Nacionales de Salud del Reino Unido para ayudarles a gestionar mejor a los pacientes en el hospital. Formaba parte del plan de estudios de la Universidad, duró dos meses y fui el líder de un equipo de tres personas.
Tomamos el proyecto desde una idea básica y lo convertimos en una aplicación real. Me encargué de codificar el backend en Node.js y la base de datos en MongoDB. Era la primera aplicación que creaba para un cliente y no estaba familiarizado con las tecnologías web. El proceso de desarrollo fue iterativo, y cometimos algunos errores en el camino.
Al final, superamos con muchas características, y mi favorito es que los usuarios pueden actualizar las habitaciones del hospital, en lugar de ser codificado duro.
Aprendí muchas cosas de este proyecto, especialmente cómo trabajar en un equipo. Hubo algunos momentos en los que surgieron problemas técnicos o de equipo, pero al final, todo salió bien y ¡obtuvimos la nota más alta del año!»
¡Convierte esta presentación en tu ventaja! El entrevistador está realmente interesado en saber más sobre ti, así que empieza con una presentación concisa del proyecto, explicando de qué se trata. A continuación, di cuál ha sido tu contribución (si has ayudado al equipo con una idea inteligente, dilo) y qué has aprendido del proceso de desarrollo. También puedes mencionar qué diferencia hiciste para los usuarios.
Debes hablar de uno a dos minutos sobre tu proyecto.
2) Entender el problema
El entrevistador te dirá brevemente el planteamiento del problema que debes resolver. He dicho «brevemente» porque no te dará muchos detalles sobre las restricciones, los casos de esquina o cómo recibes los datos. Es parte de tu trabajo pedir todo lo que necesitas para resolver el problema. Repite el enunciado en voz alta para asegurarte de que lo has entendido bien.