5 cosas que debes saber en una entrevista de programación

Este artículo está dirigido a aquellos que están tratando de comenzar su carrera como programadores o se están preparando para una entrevista para el trabajo de sus sueños. Como alguien que ha estado en ambos lados de la mesa de entrevistas, entiendo cómo se siente ser el entrevistado.

Esta lista no exhaustiva de preguntas flotaba en mi mente todo el tiempo.

  • "¿Se supone que debo hablar a través de mi código?"
  • "¿Con qué frecuencia debo comunicarme con el entrevistador?"
  • “¡Oh Dios, olvidé crear una instancia de mi variable! ¡¿Estoy condenado ?! "
  • "¿Qué piensa el entrevistador de mi respuesta?"
  • "¿Está bien si hago esto?"

… Y la lista continúa…

Es una experiencia muy aterradora. Es muy difícil. Y es extremadamente difícil operar dentro de este vacío cuando estás siendo examinado por cada cosa que dices y escribes.

Estás en una entrevista para el trabajo de tus sueños, algo con lo que has soñado desde los 12 años. Y todo se reduce a impresionar a alguien que nunca has conocido en 60 minutos.

La luchaes real.

1. Piense siempre en el futuro

A menudo, escuchará a un entrevistador preguntar esto: “Está bien, creo que se ve bien. Ahora, ¿cómo mejorarías este código? "

Esta es una pregunta asesina . Y esto se debe a que no es solo un relleno para pasar el tiempo. El entrevistador está tratando de evaluar cómo piensa usted sobre:

  • calidad del código
  • algunas preocupaciones / cuellos de botella que no se plantearon en la sesión de planificación del algoritmo
  • cómo escalaría la solución en cuestión.

El hecho de que haya resuelto el problema no significa que recibirá una oferta automáticamente.

Por ejemplo, cuando miras este fragmento de código a continuación, ¿qué hace? ¿Cómo lo mejorarías? ¿Qué puede causar que se rompa?

Déjame saber abajo en los comentarios. Me encantaría escuchar tus pensamientos.

¿Sorpresa ?: Ser capaz de encontrar una solución que funcione es lo mínimo para ser considerado para el puesto. T preguntas stos son pruebas básicas de competencia. Lo que distingue a los buenos candidatos de los grandes es la capacidad de pensar más allá de lo que se requiere.

Qué significa esto en una sesión de codificación

Piense en casos extremos, problemas de escala, áreas problemáticas. Piense siempre un paso por delante. Si está utilizando un enfoque recursivo, ¿qué pasaría si tiene un gran conjunto de datos? Si está utilizando un algoritmo hash, ¿cómo maneja las colisiones? ¿Qué posibilidades hay de que eso suceda y cuál es el peor de los casos?

2. Hay más de una respuesta

Siempre hay más de una forma de resolver un problema de entrevista de programación. Siempre . Por lo general, hay varias formas de abordar un problema, algunas de las cuales pueden no ser óptimas.

Uno de mis Youtubers tecnológicos favoritos me enseñó que una entrevista de codificación es un ejercicio mental para ver cómo piensa un candidato. Desde la perspectiva de un entrevistador, no estoy buscando comprobar si sabes cuál es la respuesta correcta. Sí, es importante que pueda escribir una solución que funcione , pero no es lo único.

Más que eso, estoy buscando cuán inteligente es esta persona, cómo se deriva la solución y en qué otras soluciones creativas podría estar pensando esta persona.

Un ejercicio de programación para ilustrar mi punto:

Fusionar dos listas enlazadas ordenadas. (Está vinculado a Leetcode si desea intentar resolverlo). Básicamente, puede abordar esto de varias maneras:

  1. Coloque todos los nodos en una matriz y luego ordénelos. Luego, cree un puntero y vincule todos los elementos de la matriz.
  2. Combínelos usando la manipulación del puntero. Compare los dos, controlando cuál es más pequeño, y luego devuelva los resultados al final.

¿Qué otras formas se te ocurren?

3. OOP no está muerto

La programación orientada a objetos no está muerta. Es una relación de amor-odio para algunas personas, pero es una habilidad valiosa. Esta es una de las habilidades fundamentales, una técnica de programación que todo programador debería conocer.

Muchos candidatos se lanzan de cabeza a un problema de programación sin pensar más en simplificar el código. Solía ​​estar en este grupo y, lo admito, todavía lo hago a veces.

Sin embargo, la capacidad de convertir problemas complejos en fragmentos más simples y manejables mediante la programación orientada a objetos es una habilidad rara y preciada.

Escribir código para que las computadoras lo entiendan es fácil. Escribir código para humanos es difícil.

4. Elabore su currículum

Imagina que te diriges a la noche del baile de graduación con la persona de tus sueños y te presentas en su puerta con chanclas y una camiseta sin mangas.

Su currículum es su tarjeta de presentación. Es la primera impresión que la compañía tiene de ti.

Si está comenzando en su búsqueda de empleo, lo primero que debe hacer es preparar un excelente currículum. Esa es la cosa número uno que a menudo se pasa por alto por quienes buscan empleo y, posiblemente, es la fruta más baja.

Veo a muchos candidatos que pasaron semanas, si no meses, preparándose para codificar entrevistas. Pero el tiempo que dedicaron a elaborar su currículum palidece en comparación.

5. Comuníquese temprano y comuníquese con frecuencia

Cuando comencé a entrevistar, estaba equivocado por el lado de comunicarme en exceso . Esto significaba que estaba tratando de hablar a través de cada línea de código que estaba escribiendo, incluso si era un simple bucle for.

No soy del tipo que es capaz de hablar y pensar al mismo tiempo. Algunas personas tienen el don de pensar en voz alta, pero yo no puedo.

Comuníquese con la frecuencia que necesite . Traté de comunicarme temprano y con frecuencia. Siempre que había un problema, se lo planteaba al entrevistador y se lo hacía saber. Me ayudó a determinar si me dirigía en la dirección correcta y si no lo estaba, el rumbo correcto.

Una entrevista de programación busca habilidades tanto duras como blandas. Carecer de uno u otro significa un no definitivo. Para obtener más información, escribí un artículo más detallado sobre cómo mejorar las habilidades blandas de un ingeniero de software aquí.

No se presione para hablar sobre cada línea de código. Si está utilizando algunas características esotéricas de un lenguaje de programación, puede explicarlo una vez que haya terminado de escribir todo.

Qué significa esto en una sesión de codificación

Si ya ha establecido alguna forma de resolver el problema, puede decirle cortésmente al entrevistador que profundizará en la escritura del código. No sienta que necesita explicar cada línea de código.

6. [Extra] Usa la abstracción

Aquí hay otro consejo adicional que recogí y que ayudó enormemente cuando estaba entrevistando: use la abstracción para métodos complejos.

Usar la abstracción para ocultar los complicados detalles de la implementación no significa que esté escondiendo los detalles sucios debajo de la alfombra. Significa que entiendes que menos es más. Recuerde, está escribiendo código para que los humanos lo entiendan. Mostrar buen juicio aquí definitivamente te hará ganar puntos extra con el entrevistador.

Qué significa esto en una sesión de codificación

Comparemos y contrastemos estas dos piezas de código:

En mi opinión, creo que el lado derecho se ve mucho más limpio y mucho más fácil de entender. Entonces puedo tomarme el tiempo para implementarlo getNeighborso isEmpty, según lo que se me solicite.

Lo importante aquí es que la abstracción ahora me ha ayudado a mantener mi código limpio, fácil de leer y fácil de entender. ¿A quién no le gusta tener su pastel y comérselo también?

¿Por qué quiero compartir mi experiencia?

De alguna manera me las arreglé milagrosamente para superar los obstáculos y encontrar el camino hacia el trabajo de mis sueños. Esta no es de ninguna manera mi forma de fanfarronear. No es mi intención en absoluto.

Realmente quiero ayudar a otros como yo que están luchando por conseguir el trabajo de sus sueños. Lo he pasado. Entiendo las dificultades, el sudor y las lágrimas de prepararme para una entrevista de programación. Creo que el mundo no es un juego de suma cero: cuantas más personas mejoren en la vida, mejor se volverá nuestra sociedad y más prósperos seremos todos como resultado de eso. Es una situación en la que todos ganan.

¡Esperamos que estos consejos puedan ayudar a otra persona que busca empleo! ¡Buena suerte! ?

Si disfrutó de este artículo, aquí hay algunos artículos más recomendados que escribí:

  • Cómo obtuve ofertas de Microsoft, Amazon y Twitter sin un título de Ivy League
  • Cómo escribir un excelente currículum para ingenieros de software
  • Cómo automaticé mi búsqueda de empleo mediante la creación de un rastreador web
  • Cómo diseñar el sistema

Recursos y herramientas que recomiendo

  • Elementos de las entrevistas de programación: ideal para problemas de codificación más difíciles
  • Cracking The Coding Interview: excelente para cubrir CS fundamental
  • OneNote: uso esto para almacenar todos los fragmentos de código
  • Evernote: para todo lo demás
  • CodeRunner: ¡Me encanta esta aplicación para Mac! Usé esto varias veces para ejecutar scripts / funciones de Python ad-hoc y simplemente funciona increíblemente bien. ?
  • Jobscan: Un amigo dirige esta empresa. He escuchado muchas cosas interesantes al respecto, y debería probarlas para su herramienta de evaluación de currículums.
  • Refdash: dirigido por un grupo de antiguos empleados de Google. ¿La calidad de las entrevistas simuladas aquí es ?. Los entrevistadores son ex-Googlers. Recomiendo encarecidamente probarlos.
  • CodePath: una organización sin fines de lucro que ayuda a las personas a prepararse para una carrera en tecnología. Nathan y Tim son grandes personas y he aprendido mucho de ellos. La comunidad es muy útil y todos están dispuestos a ayudar.
  • Marcadores de punta fina: llévelos a su entrevista. ¡Los recomiendo mucho!

Zhia Chong es ingeniera de software en Twitter. Trabaja en el equipo de medición de anuncios en Seattle, midiendo el impacto de los anuncios y el ROI para los anunciantes.

Lo puedes encontrar en Twitter y LinkedIn.