Atlasingeniería

Carrera profesional y entrevistasEntrevistasTema 1

Resolver un problema mientras alguien te mira

En una entrevista de programación se evalúa mucho menos la solución de lo que se cree y mucho más cómo llegás a ella. Quien te entrevista está imaginando cómo sería trabajar con vos, y para eso necesita escucharte pensar.

Dos personas resuelven el mismo ejercicio. La primera escribe en silencio quince minutos y llega a la solución óptima. La segunda pregunta por los casos borde, propone una solución simple, dice por qué es lenta, mejora una parte y llega a algo casi óptimo hablando todo el tiempo.

La segunda suele pasar y la primera no siempre. No es injusticia: la entrevista no evalúa si sabés el truco, evalúa cómo trabajarías con el equipo, y de alguien que resuelve en silencio no se sabe nada más que el resultado.

El procedimiento que conviene seguir siempre

Los seis pasos

  1. Repetí el problema con tus palabras. Treinta segundos que evitan resolver algo distinto de lo que te pidieron, que es el error más caro y más común.
  2. Preguntá lo que falta. ¿Puede haber repetidos? ¿Qué tan grande es la entrada? ¿Qué devuelvo si está vacía? Preguntar no es no saber: es lo que hace alguien con experiencia.
  3. Escribí dos o tres ejemplos a mano, incluido un caso borde. Muchas veces la solución aparece mirándolos.
  4. Decí una solución simple primero, aunque sea ineficiente. «Lo más directo sería probar todos los pares, que es cuadrático.» Ahora tenés algo funcionando de referencia y ya demostraste que entendés el problema.
  5. Mejorala en voz alta. Qué se repite, qué se puede recordar, qué estructura ayuda.
  6. Recién ahí, escribí el código. Y probalo a mano con tus ejemplos.

Pensar en voz alta, sin narrar todo

Narración que no ayudaNarración que ayuda
«Ahora voy a declarar una variable i»«Voy a recorrer una vez guardando lo que ya vi, para no repetir la búsqueda»
Silencio largo«Estoy pensando si conviene ordenar primero; dame diez segundos»
«Esto está mal, lo borro»«Esto no maneja el caso de la lista vacía, lo arreglo»
«No s黫No recuerdo la sintaxis exacta; la idea es agrupar por clave, lo escribo así y lo verifico»
No se trata de hablar todo el tiempo: se trata de que quien escucha pueda seguir tu razonamiento.

Antes de seguir, predecí

Te trabás y no se te ocurre cómo seguir. ¿Qué conviene hacer?

Hablar de complejidad sin recitar

Casi siempre se pregunta, y conviene responder con criterio y no con una etiqueta:

Respuesta pobreRespuesta con criterio
«Es O(n²)»«Es cuadrático porque por cada elemento recorro el resto; con un conjunto auxiliar bajo a lineal a cambio de memoria»
«No sé la complejidad»«Tiene dos recorridos anidados, así que crece con el cuadrado; puedo calcularlo bien si querés»
«Es eficiente»«Para mil elementos cualquiera de las dos anda; si son millones, la diferencia importa»
Lo que se evalúa no es la etiqueta: es si podés razonar sobre el costo y decidir con eso.

Los primeros cinco minutos

Escenario · 1 decisión como mínimo

«Dado un arreglo de números, devolvé los dos que suman un valor dado»

Te dan el enunciado y una pantalla en blanco. Se te ocurre enseguida la solución de dos ciclos anidados, y también sospechás que hay una mejor. ¿Qué hacés primero?

Ninguna decisión acá es sobre el algoritmo. Todas son sobre qué se ve de cómo trabajás.

Cierre

Autoevaluación

¿Lo entendiste?

¿Qué se evalúa principalmente en una entrevista de programación?
¿Cuál es el paso que más se saltea?
Necesitás pensar en silencio un momento. ¿Qué hacés?
Te trabaste y no se te ocurre cómo seguir. ¿Qué conviene?
¿Qué rinde más al preparar entrevistas de código?