Buenos proyectos de programación de entrevistas [cerrado]

26

Estoy buscando algunos pequeños proyectos de programación que puedo dar a los empleados potenciales para evaluar sus habilidades de programación. Estos serán programadores directamente de la universidad. Estoy buscando proyectos que le tomarían a alguien un par de horas y le enviarían sus respuestas por correo electrónico después de la entrevista.

Un ejemplo sería tomar este párrafo de texto y devolver una lista de palabras únicas alfabetizadas. Después de cada palabra dígame cuántas veces apareció la palabra y en qué instancia (s) apareció la palabra.

¿Alguien tiene una buena sugerencia?

bigtang
fuente
Preguntas del concurso de programación de ACM. Puede encontrar un archivo de esas preguntas aquí .
whatsisname
1
¿Te interesarían estos sitios de rompecabezas de programación? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Respuestas:

43

Hace tiempo que llegué a la conclusión de que nada que alguien pueda hacer en poco tiempo puede decirme algo útil sobre esa persona. Pero todo buen candidato tiene proyectos personales ya escritos que pueden decirle mucho. Así que he reemplazado desafíos específicos con "dame un código del que estés orgulloso y feliz de estampar tu nombre".

Su elección de proyecto le dice más que cualquier tarea de una hora. Y luego puedes pasar una hora discutiéndolo para aprender aún más.

pdr
fuente
44
Recuerdo que me entrevisté en una empresa y me dieron una función bastante simple (15-20 líneas) y me preguntaron "¿Qué hace esto?" Les dije, luego pregunté "¿Alguien se equivoca?". Me dijeron que la mayoría de las personas que habían entrevistado no podían responder. Tal vez sea una alternativa rápida (no conozco a nadie que pueda leer código que no pueda escribirlo, pero tal vez simplemente no he conocido a las personas equivocadas).
TMN
44
@ TMN - Oh, también lo hacemos un poco. Pero he conocido personas que pueden leer el código y no escribirlo bien .
pdr
@TMN Siendo autodidacta, pasé una cantidad significativa de tiempo leyendo el código desde el principio hasta el punto de ser mucho mejor al leerlo que al escribirlo. Puede y sucede, solo toma tiempo y práctica para mejorar la habilidad de escribir.
Jimmy Hoffa
28

Me canso tanto de esta mierda de juego mental. He estado en lugares que me pidieron muestras de código, las separé y luego me pidieron que explicara el código de ejemplo de sus sistemas que parecía escrito por niños de 2 años descifrados. Me han pedido que implemente algoritmos de tipo oscuro, servicios de red, guis, estructuras de datos (siempre un árbol o una lista vinculada). Todos los sabores de preguntas molestas y molestas sobre lo que el entrevistador piense es la parte más importante de la programación.

Al final todo es bastante inútil. La mejor manera de evaluar a un empleado es contratarlo por 30 días y ver qué tan bien hace el trabajo. Pase todo el tiempo que quiera desarrollar pruebas, y no le dirá nada sobre cómo alguien trabaja día a día.

Satanicpuppy
fuente
8
La codificación de un algoritmo simple como el descrito por bigtang no es "mentalidad" en lo más mínimo. Ser capaz de hacer algo así debería ser un requisito previo incluso para obtener una entrevista (y lo es, en mi empresa). Es muy útil para descartar candidatos que de otro modo se verían bien en papel. Lo último que quiero hacer es pasar horas entrevistando a alguien que no puede escribir una función para saber si una cadena es un palíndromo. Te sorprendería la cantidad de doctorados de CS de las mejores escuelas que no pueden hacer la prueba de bigtang. En resumen, poder completar una prueba como esta es necesario pero no suficiente.
Jer
+1 @Jer. La última vez que entrevisté a un programador, seis de ocho candidatos no pudieron completar las tareas más básicas (incluso con Google y SO). No hay forma de que los deje cerca de mi base de código real durante cinco minutos, y mucho menos 30 días.
Julia Hayward
2
@ JuliaHayward: Espero que cualquiera pueda completar un proyecto con acceso a la web / documentación. El problema surge cuando alguien comienza a lanzar palabras de moda y algoritmos de clasificación oscuros sin acceso a Internet, bajo el falso supuesto de que haber memorizado varias técnicas de clasificación o lo que sea crítico para el desempeño laboral diario.
Satanicpuppy
12

Permitir que alguien haga un proyecto práctico en su propio tiempo no significa necesariamente que sean ellos quienes lo hagan.

Todos llegan temprano para una entrevista (bueno, al menos deberían). Tenemos una hoja "mientras espera" para que trabajen hasta que estemos listos para verlos. Tiene ocho (8) preguntas que evalúan el conocimiento de los solicitantes en el idioma que usamos principalmente.

No estamos buscando las respuestas para que todo sea correcto, ya que cualquiera puede acertar con una computadora frente a ellos. Estamos buscando procesos, incluso intentan la pregunta, ¿cómo llegan a sus respuestas?

Cuando entramos en la entrevista, la revisamos con ellos y respondemos cualquier pregunta que puedan tener, lo que también puede llevarlos a obtener la respuesta correcta. También nos permite preguntar cómo obtuvieron las respuestas que obtuvieron.

Esto, combinado con el trabajo anterior, encontramos, son las mejores formas de filtrar candidatos.

ACTUALIZACIÓN 2016/06/15

Hemos cambiado significativamente nuestro proceso en la forma de contratar desarrolladores.

Fase 1: una entrevista telefónica de 15 minutos donde hacemos 7 preguntas. Los primeros 2 son "¿Qué es lo más divertido en lo que has trabajado?" (no tiene que estar relacionado con la programación) y "¿Qué codificas para divertirte en tu tiempo libre?".

Fase 2: un mini proyecto que completan en su propio tiempo. Luego compartimos la pantalla con ellos y nos muestran lo que han construido. Durante el uso compartido de la pantalla, también hacemos que hagan dos cambios en su proyecto y luego los vemos trabajar en él y hacerlo funcionar.

Fase 3: Entrevista en persona.

Este proceso nos permite determinar la cultura de forma inmediata (fase 1). Si pueden hacer el trabajo y realmente caminar su charla (fase 2). Finalmente, asegúrese de que sus valores estén en línea con lo que estamos buscando (fase 3).

RDL
fuente
1
Esto es algo brillante. ¡Me gusta!
Davidhaskins
3
aunque he estado en muchas entrevistas que se convierten en curiosidades. Tenga cuidado de no empantanarse con este tipo particular de sintaxis y obtener su comprensión a gran escala. Especialmente si se alega que tienen un poco de talento o interés. el resultado fue que no quería trabajar para ellos, y estoy seguro de que era mutuo.
John Nicholas
"Permitir que alguien haga un proyecto práctico en su propio tiempo no necesariamente significa que son ellos quienes lo hacen" - Es cierto, pero aún no he encontrado a alguien lo suficientemente valiente como para entrar en una entrevista y ser interrogado sobre el código que tienen No está escrito. En caso de que suceda, no van a superar la entrevista y su libertad condicional, pero puedo reconsiderar mi enfoque.
pdr
@John. De acuerdo, no puede ser "oh, olvidaste una coma allí". Como mencioné, es para entender cómo se enfocan las cosas y si entienden el lenguaje. Si saben que sus cosas definitivamente pasan a las cosas más grandes.
RDL
2
@RDL, la mayor parte de nuestro proceso de entrevistas está diseñado para ser un poco divertido para el tipo de desarrollador que estamos buscando e infierno para el resto. Ya sabes cómo los buenos desarrolladores no pueden resistir un desafío.
pdr
4

Es posible que desee ver el fantástico Cyber-Dojo de Jon Jagger .

Es un ambiente integrado basado en la web diseñado para hacer la práctica deliberada de Test Driven Development y aprender sobre la dinámica del equipo. Tiene muchas tareas de programación pequeñas (kata) y admite una variedad de lenguajes, desde Python y Ruby hasta Java y C ++.

A diferencia de los IDE diseñados para la productividad, no hay finalización de código, resaltado de sintaxis o refactorización automática, por lo que puede ver lo que su entrevistado puede hacer sin estos.

Lo mejor es que, después de hacer un kata, puedes volver y mirar la progresión roja / verde (o tal vez no si no hacen TDD * 8 ') de cada kata. Cada compilación / prueba confirma los cambios en un repositorio git junto con los resultados de la prueba.

Creo que usar esto para las pruebas de codificación de entrevistas podría informarle mucho sobre no solo la capacidad de los candidatos para resolver un problema, sino también su enfoque para la resolución de problemas y el proceso que utilizan cuando no están limitados por factores externos, solo seleccione un kata apropiado para el tiempo que desea que el candidato pase en él.

Si desea su propio servidor CyberDojo, todo el proyecto se puede encontrar en github e incluso hay una máquina virtual de dispositivo Linux llave en mano vinculada desde allí, lo que significa que suponiendo que ya tenga instalado el reproductor VMware o VirtualBox , puede estar funcionando dentro de ¡A pocos minutos de descargar el dispositivo!

Mark Booth
fuente
3

Solo me entrevisté con una vez la compañía que ha hecho esto. Le dieron una hoja de preguntas de 6 o 7 problemas. Las instrucciones fueron hacer un método para resolver cada problema.

Una parte de la tarea era darse cuenta de que podía reutilizar el código. Los problemas podrían usar código de otras soluciones. Tampoco fue secuencial. Por ejemplo, la pregunta 3 podría escribirse utilizando el método utilizado para la pregunta 5.

Sugeriría probar algo así.

¿En cuanto a las preguntas? Algunas de las preguntas iniciales en el sitio del Proyecto Euler son buenas.

También puedes probar un juego simple si quieres ver cómo pueden armar un proyecto.

O, si no quieres pensar en algo, pídeles que te envíen un código de un proyecto final.

Tyanna
fuente
3

Para pedirle a la gente que complete un proyecto, debe tener un conjunto específico de habilidades que desee evaluar en mente y diseñar el proyecto para evaluar esas habilidades.

Un ejemplo sería tomar este párrafo de texto y devolver una lista de palabras únicas alfabetizadas. Después de cada palabra dígame cuántas veces apareció la palabra y en qué sesión (s) apareció la palabra.

¿Qué buscas con esta pregunta? ¿De cuántas maneras hay para resolverlo y qué le dice cada enfoque sobre la persona que escribió la respuesta? ¿Las habilidades demostradas por una respuesta efectiva a esta pregunta son las mismas habilidades que son más importantes para su negocio?

No quiero las respuestas a estas preguntas; Solo quiero que haya pensado en las respuestas antes de someter a un grupo de candidatos a su proceso. Si sabes qué habilidades estás buscando, crear una pregunta para buscar esas habilidades no es difícil. Si utiliza la pregunta de otra persona sin un conocimiento profundo de lo que fue diseñado para evaluar (en todo caso), en realidad solo se está engañando a sí mismo y está perdiendo el tiempo de todos.

Caleb
fuente
Lamento haberte hecho perder el tiempo.
bigtang
1
@bigtang, no es eso en absoluto. Perdón si lo anterior sale como una queja, puedo ver cómo podría ser, pero mi objetivo era construir un caso para crear su propio proyecto basado en las habilidades que está buscando en los nuevos empleados. Puede hacer un pequeño proyecto con casi cualquier cosa, pero para que valga la pena tanto para usted como para los entrevistados, los requisitos deben basarse en las habilidades que más valora.
Caleb
Se eliminó por completo la primera oración (respetuosamente, si no eres lo suficientemente inteligente como para elaborar un proyecto decente por tu cuenta, ¿qué te hace pensar que eres lo suficientemente inteligente como para evaluar las presentaciones de los candidatos? "). valor y parecía un poco despotricado.
Michael Durrant
0

Un ejemplo sería tomar este párrafo de texto y devolver una lista de palabras únicas alfabetizadas. Después de cada palabra dígame cuántas veces apareció la palabra y en qué instancia (s) apareció la palabra.

¿En qué idioma escribirían esto? Si salen de una escuela que se centra principalmente en C, esto no sería tan rápido de escribir como uno que enseña Python / Perl / Ruby, etc ... O incluso Java o C #. Sin embargo, es una buena prueba.

Sugiero algunos más fáciles en realidad durante la entrevista. No hay preguntas capciosas. Estoy con TMN en este caso. Déles un par de funciones que realicen tareas básicas y pregunte qué hacen (leer el código de otras personas). Luego, deles un par de tareas básicas (<20 líneas) para escribir en el idioma que elijan. Eso debería ser suficiente para que un nivel de entrada sepa si puede codificar o no (en una posición de nivel de entrada). Eso junto con la entrevista y el GPA deberían darle una buena idea sobre lo que necesita saber.

Despertar
fuente
1
No encuentro el lenguaje crítico, incluso se puede hacer con pseudocódigo. La idea principal es ver si el empleado presunto "entra allí" y muestra buenas señales de resolución de problemas.
Jonas Byström
Francamente, cualquier lenguaje con split () y arrays / lists (con push / append) haría esto trivial. Permita que un programador de C 'asuma' split () y list, y se vuelve tan trivial :-)
ChuckCottrill
-1

Haga que implementen el Juego de la vida de Conway para cualquier idioma que esté viendo, utilizando los paradigmas de diseño de ese lenguaje.

Un juego de la vida de Java o C # Conway debe estar orientado a objetos, LISP o F # sería funcional, etc.

George Stocker
fuente
2
¿Cuánto tiempo les darías para completar esto?
Trabajo
Me lleva alrededor de 4 horas completar una implementación completa de OO, pero lo he hecho una docena de veces. Si desea ver cómo piensan y qué tan lejos llegan (y si escriben o no un código comprobable), deles menos tiempo que eso. Si lo hace en persona, deles 45 minutos y vea hasta dónde llegan y por qué eligieron el camino que hicieron. Es uno de esos problemas que desea que sepan con anticipación para que no se pierdan por completo, incluso aliéntelos a intentarlo por su cuenta. Revela mucho sobre un programador.
George Stocker
8
Pedirle a un candidato que escriba las pruebas de Juego de la vida de Conway qué tan recientemente estuvieron en la universidad, o que escribieron y estudiaron ese problema. Contratarías a @George Stocker porque lo ha escrito una docena de veces. ¿Cuán altamente correlacionado está el Juego de la Vida con cualquier trabajo de desarrollo del mundo real?
ChuckCottrill