¿Qué tipo de cursos o temas de estudio prepararían a un programador para los acertijos de programación que utilizan compañías como Facebook y Google en su proceso de solicitud?

Estoy de acuerdo en que solo conocer algunos idiomas no será suficiente. Como mínimo, debe sentirse cómodo con las estructuras de datos comunes y algunos conceptos de CS relacionados, como la recursividad. La programación dinámica y otras técnicas de optimización también pueden ser útiles.

Muchos de esos acertijos tratan sobre la coincidencia de patrones del problema con las soluciones de la teoría de grafos, generalmente con algún giro para hacerlo más interesante. Una buena clase de algoritmos debe abarcar mucho de lo que necesita saber para hacerlo “correctamente”, y el resto puede completarlo con una buena solución de problemas a la antigua.

Hay algo que decir para hackear soluciones sobre creatividad en bruto, pero ese no es el mejor enfoque cuando estás cronometrado o bajo presión. Como siempre, tener el juego de herramientas adecuado te ayuda a elegir tus batallas.

Entrevisté a varios candidatos mientras trabajaba en una empresa como esa. No uso rompecabezas de programación durante las entrevistas, y tampoco he visto a ninguno de mis colegas hacerlo. Pedimos a los candidatos que resuelvan el tipo de problemas con los que nos enfrentamos a diario: algoritmos, escalado, eficiencia, diseño, análisis, etc.

Generalmente dejo que el candidato elija un idioma que sea cómodo. Estoy buscando un enfoque razonable, un proceso de pensamiento claro y lógico, y un uso apropiado del lenguaje, en lugar de una sintaxis perfecta. Y no te preocupes por encontrar el algoritmo óptimo la primera vez, o incluso hacerlo bien. Todos cometemos errores y nos ponemos nerviosos, y además, en realidad estoy más interesado en la conversación que estamos teniendo.

¿Puedes explicar por qué elegiste una función, algoritmo o estilo en particular? ¿Puedes decirme cómo buscarías problemas o encontrarías ineficiencias? ¿Has trabajado en algo similar antes? ¿Qué aprendiste de eso?

Si incluye algo en su currículum que despierte mi interés, le preguntaré al respecto. Y si dice saberlo bien, espere que investigue bastante profundo. Quiero saber qué tan bien lo aprendiste, y si puedes explicarlo, sin palabras de moda. Si no sabe, ¿será honesto al respecto o tratará de farolear?

En resumen, no estoy buscando a alguien que lo sepa todo. Estoy buscando a alguien que pueda trabajar en una situación desconocida; quien se comunica clara y abiertamente; quien es lo suficientemente apasionado como para pensar que el trabajo es divertido; quien se recupera de los errores, aprende de ellos y formula opiniones sensatas; en quien confiaría como miembro del equipo; quien me desafiará o me enseñará; y quién creo que prosperará en nuestra cultura.

Ah, y hay puntos de bonificación si entiendes mis bromas, aprecias los juegos de palabras y sí, te encantan los rompecabezas: eso demuestra que eres observador, disfrutas los desafíos y piensas bien de pie. Pero no te pediré que resuelvas acertijos durante la entrevista. Lo prometo.

Lea este libro, especialmente la primera parte sobre la mentalidad de las principales compañías tecnológicas que usan estas tonterías.

Entrevista para descifrar la codificación: 150 preguntas y soluciones de programación: Gayle Laakmann McDowell: 9780984782802: Amazon.com: Libros

Ella hace un buen trabajo al decirle lo que está buscando, lo cual no es necesariamente la mejor o incluso la respuesta correcta a la pregunta.

Editar: Google, por cierto, ha descubierto que los rompecabezas son una mierda y ha dejado de usarlos.