Cómo saber si alguien puede realmente programar

Prefiero las preguntas abiertas. Nunca hago preguntas frías, porque a veces los cerebros de las personas se encierran. Siento a la persona primero para ver dónde está su experiencia. Comienzo con preguntas muy generales que tienen muchas respuestas buenas posibles. Esto les ayuda a relajarse. Luego, una vez que tengo una idea de lo que dicen saber o lo que deberían saber en función de su experiencia afirmada, formulo preguntas más detalladas, pero aún con posibles respuestas abiertas.

Algunas de las preguntas que hago:

Les pregunto la diferencia entre pasar por valor y pasar por referencia. Les digo que una matriz tiene al menos un millón de elementos y les pregunto si debe pasarse por valor o por referencia y por qué. Cada programador debe tener una buena respuesta a esta pregunta.

Por lo general, les pido que implementen una cola de una gran matriz. Les digo que pueden usar diagramas de flujo, pseudocódigo, código real o cualquier método con el que estén familiarizados. Les digo que la matriz tiene un tamaño arbitrario pero es muy grande. Miro para ver si hacen cosas ineficientes, como mover cada elemento cada vez que hay un empuje o un pop. ¿Prueban sus punteros o índices para detectar errores fuera de rango? ¿Verifican el desbordamiento y el desbordamiento? ¿Envuelven la matriz cuando un empuje lo lleva más allá del último elemento? Si pierden un detalle, diríjalos a él. Si no comprobaron el flujo insuficiente, les pregunto qué sucede si se produce un flujo insuficiente.

Para los programadores de firmware, les pido que expliquen qué sucede cuando ocurre una interrupción. Les pido que expliquen qué sucede cuando se interrumpe una interrupción. Les pido que expliquen una operación atómica. Les pido que expliquen el uso de la memoria big endian y little endian. Puedo pedirles que escriban una rutina de adición de varias palabras.

Si escriben software grande, les pregunto acerca de la programación multihilo. Pregunto cómo aseguran la integridad de los datos compartidos.

Puedo preguntar por la diferencia entre variables estáticas y automáticas.

Si son programadores DSP, les pido que implementen un filtro digital.

A veces sucede algo inexplicable. Obtengo un estudiante con un promedio de todos. Elijo un curso para el que obtuvieron una A. Les pido algo simple del tema. A veces, obtengo un solicitante que no puede recordar nada sobre un curso en el que obtuvieron una calificación perfecta de 4.0.

Creo que esto está relacionado con entrevistar a una persona. Básicamente, pregunte sobre una prueba de práctica o intente hacer preguntas sobre problemas de casos de prueba en lugar de hacer preguntas basadas en la teoría.

Si la persona está al tanto de la codificación, deberá compartir su opinión sobre los problemas de casos de prueba.