¿Cuál es la mejor manera de evaluar a los mejores candidatos para conseguir un nuevo trabajo (hablando simplemente en términos de habilidades de programación)? En mi compañía hemos tenido muchas malas experiencias con personas que tienen buenas calificaciones pero que no tienen habilidades de programación reales. Sus habilidades son simplemente como monos de código, sin la capacidad de analizar los problemas y encontrar soluciones.
Más cosas que tengo que tener en cuenta:
El sistema educativo en mi país apesta, realmente apesta. Las personas que son buenas en este tipo de trabajo son buenas porque tienen talento o realmente intentan aprender por su cuenta.
El título universitario / posgrado / posgrado no significa necesariamente que sepa exactamente cómo hacer las cosas.
Las certificaciones tampoco significan nada aquí porque las personas a cargo del curso de certificación tampoco tienen habilidades (o están en trabajos mal remunerados).
Realmente necesitamos obtener buenos candidatos que sean flexibles y que no tengan un pensamiento mecánico (porque este tipo de personas por experiencia tienen un bajo rendimiento).
Estamos en una institución gubernamental y las personas que son candidatas no necesariamente provienen del exterior, pero tenemos la posibilidad de aceptar o no candidatos hasta que encontremos la correcta.
Espero no sonar demasiado agresivo en mi pregunta; y por cierto yo mismo soy programador.
editar: descubrí que preguntaba algo realmente complejo aquí. Desactivaré "la respuesta correcta" solo para dejar que la discusión fluya sin ningún sesgo.
Respuestas:
Con respecto a la selección de candidatos, generalmente sigo un plan de tres golpes:
Prueba regular con preguntas de codificación tipo FizzBuzz y muchas preguntas de conocimiento en las que tienen que dar ejemplos codificados. Dependiendo de la posición, pueden ser principios de OO, principios de diseño de SQL, etc. Incremento las dificultades de las preguntas en la prueba para ver hasta dónde pueden llegar. La idea no es realmente tener todas las preguntas respondidas (si es así, mejor), sino también ver si pueden reconocer cuando no saben algo. La confianza es esencial, y no quiero que alguien me mienta en mi equipo.
Regrese a la prueba con el candidato y discuta las respuestas. Posible extensión de las preguntas para alcanzar los límites del candidato. Esto puede ser extenso, y cuanto más extenso sea, mejor.
Última parte, pero no menos importante, The Code Review . Le pido al candidato que traiga un fragmento de código (generalmente espacio la prueba / discusión anterior y esta revisión unos días, para que pueda escribir y pulir un fragmento de código). Luego hacemos una revisión regular del código con dos personas: una persona que trabajará directamente con el candidato y la persona que revisó la prueba con el candidato previamente. Con respecto a la revisión del código, puede leer este artículo de JohnFX .
Al final de todo esto, debería poder decidir si desea que este candidato forme parte de su equipo o no.
fuente
Comienza dándoles FizzBuzz para que resuelvan. Eso debería eliminar a los peores de ellos.
Luego, algo un poco más difícil, por ejemplo, cómo invertir una cadena sin funciones de biblioteca incorporadas. Pídales que hablen mientras resuelven para ver cuál es su proceso de pensamiento.
Puede seguir dando problemas más difíciles si los encuentra muy fáciles, hasta que esté convencido de que pueden caminar y no solo hablar.
fuente
Solo busca pasión por el trabajo.
Para citar a Joel, busque personas que sean " inteligentes " y haga las cosas " .
El resto no importa
fuente
Basado en mis 25 años de programación (que, ciertamente, incluye solo 5 o 6 instancias de contratación de otros programadores):
Indicadores positivos:
Apasionado por la tecnología.
Programas como hobby
Hablará en voz alta sobre un tema técnico si se le anima
Proyectos paralelos personales significativos (y a menudo numerosos) a lo largo de los años
Aprende nuevas tecnologías por su cuenta.
Opinión sobre qué tecnologías son mejores para varios usos
Muy incómodo con la idea de trabajar con una tecnología que no cree que sea "correcta"
Claramente inteligente, puede tener excelentes conversaciones sobre una variedad de temas
Comenzó a programar mucho antes de la universidad / trabajo
Tiene algunos "icebergs" ocultos, grandes proyectos personales bajo el radar CV
Conocimiento de una gran variedad de tecnologías no relacionadas (puede no estar en CV)
Indicadores negativos:
La programación es un trabajo diario.
Realmente no quiero "hablar de compras", incluso cuando se me anima a
Aprende nuevas tecnologías en cursos patrocinados por la empresa.
Feliz de trabajar con cualquier tecnología que haya elegido, "todas las tecnologías son buenas"
No parece demasiado inteligente
Comenzó a programar en la universidad
Toda la experiencia de programación está en el CV
Centrado principalmente en una o dos pilas de tecnología (por ejemplo, todo lo relacionado con el desarrollo de una aplicación Java), sin experiencia fuera de ella
Además, sugeriría:
Gran parte del resumen anterior es de Cómo detectar un buen programador , que es un gran artículo, centrado un poco más en los indicadores de mayor alcance. Definitivamente confirma mis intuiciones y experiencia. También hay muchas cosas (como "pasión") que normalmente no se mencionan en una lista de verificación de "qué es un buen programador".
fuente
La evaluación de la inteligencia de programación es una forma de prueba de Turing. Por lo tanto, (actualmente) no hay procedimientos de evaluación de forma cerrada que garanticen su funcionamiento. Se necesitan programadores inteligentes para reconocer a otros programadores inteligentes, pero solo con alguna probabilidad razonable.
Sus posibilidades serán mejores si tiene entrevistadores en su equipo que pueden oler trabajos de nieve, y instintivamente no les gusta trabajar con personas estúpidas (incluso aquellos que son guapos, tienen currículums vitales impresionantes y pueden arrojar todas las soluciones enlatadas habituales de memoria) .
(Una metodología de posibilidad que ayudaría a la calidad de stackoverflow como efecto secundario es desenterrar viejas preguntas de stackoverflow, relacionadas de alguna manera con los requisitos de su trabajo pero que en su opinión tienen respuestas inferiores; pregúntele al entrevistado cómo responderían, y pídales que lo publiquen si es una buena respuesta. Similar a una recapcha para OCR de origen público).
fuente
Dales un problema, preferiblemente uno asociado con el dominio del problema en el que estarán trabajando, y pídeles que discutan cómo lo abordarían. Puede hacer que solo discutan, pseudocódigo o escriban bits de código real dependiendo de qué tan seguro esté en su nivel de habilidad
Por ejemplo, si su organización realizó conferencias, pídales que describan cómo codificarían un sistema seguro de registro en línea. Deben poder cubrir algunos de los conceptos básicos y hacer buenas preguntas sobre exactamente lo que debe implementarse. A medida que interactúa, debe poder determinar si encajarán bien en su organización y el rol que necesita que desempeñen.
No soy un gran fanático de la programación de pruebas de trivia y enigmas. Si bien pueden ser divertidas para algunas personas, también pueden molestar y / o estresar a otras personas, incluidas las personas que podrían ser la mejor opción para su equipo. Además, la información sobre muchas de estas pruebas está disponible en línea y fomentará la acumulación de pruebas y otras tácticas que reducirían su viabilidad para medir la capacidad del programador.
fuente
Leer esta pregunta y algunas de las respuestas que recibió me impulsaron a escribir un artículo que creo podría ser de interés:
Prácticas de reclutamiento extrañas al contratar desarrolladores de software
Ok, entonces el título del artículo es basura, pero el artículo llega al corazón del problema. No es problema del candidato que hayas elegido entrevistarlos, sin importar cuán inapropiados sean para el papel que tienes en mente. Si no ha logrado definir un procedimiento de contratación bien factorizado que le permita encontrar las gemas en bruto, entonces tendrá que vivir con las consecuencias, y sí, esto significa obtener algunos candidatos que podrían Nunca cumpla con sus expectativas. Filtrar a sus candidatos en función de sus cartas y currículums requiere que primero, pida a sus solicitantes que escriban una carta sobre ellos y lo que quieren del rol, y luego mire cómo se escribe el currículum. Si solo tiene uno o dos candidatos potenciales para entrevistar, entonces probablemente haya realizado la preselección correctamente.
Cuando eventualmente encuentre a los 1 o 2 candidatos que considera que realmente valen su tiempo, no haga simplemente un puñado de preguntas inútiles, sino que invierta el tiempo para conocer a estas personas y participar en debates abiertos sobre el software. ingeniería en general. Aprenderá más de un enfoque informal sobre el candidato de lo que nunca lo hará en la situación de entrevista tradicional (y algo conflictiva). Además, no se conforme con una sola entrevista, sino que invite a sus candidatos clave a varias reuniones donde se use una discusión abierta y donde el candidato pueda reunirse con sus posibles colegas. El tiempo nunca se pierde, ya que los candidatos inapropiados no prosperarán muy bien en una discusión altamente técnica, y mostrarán sus defectos muy rápidamente cuando bajen la guardia.
fuente
No ha dicho para qué idioma, pero es bastante fácil evaluar el conocimiento de alguien. También depende del nivel que esté buscando, pero hay un grupo bastante grande de preguntas con respecto a las preguntas de la entrevista.
Independientemente de cómo decida celebrar su entrevista, no haga esas preguntas de entrevista de "rompecabezas de pensamiento lateral" .
fuente
Le sugiero que vaya con una pregunta de FizzBuzz y contrate la primera que pase. Las pruebas adicionales tienden a ser defectuosas, ya que no todo buen programador abordará un problema como usted, o manejará una entrevista sin tartamudear, o sabrá los idiomas que desea o le importan o tonterías como intercambiar enteros sin una tercera variable (¿quién necesita eso de todos modos? es decir, ¿desde que la RAM excedió los 128 bytes?).
Piénsalo. Si la pregunta de FizzBuzz elimina 199 de 200, entonces solo eliminó cientos de entrevistas. ¿Realmente ibas a entrevistar a cientos de prospectos?
Simplemente parece que los rendimientos disminuyen después de FizzBuzz. Eso supone que 199/200 está incluso aproximadamente cerca. Y supongo que TU tiempo también es valioso ...
fuente
No estoy seguro de si esto es un comentario o respuesta, pero básicamente lo que dijo Matthieu. Desea preguntas estúpidas y fáciles que tardan uno o dos minutos (pero no más de 5) en hacerse y que deben ser sobre diferentes áreas.
Tales ejemplos de preguntas fáciles y estúpidas son preguntas sobre la recursividad, como tener una lista y debe imprimirla en orden inverso sin usar un bucle. Una simple pregunta sobre expresiones regulares si la expresión regular se realiza normalmente en su desarrollo. Una pregunta sobre bits y bytes si usa C ++ (escriba una plantilla que acepte char a long e imprima la representación binaria. No se requiere especialización, solo use sizeof () para calcular la longitud de bit)
Debería llevarte unos <= 3 minutos por pregunta
fuente
Pregúnteles sobre el desafío de programación más interesante que hayan intentado resolver pero que no pudieron, qué enfoque usaron mientras lo resolvieron, por qué no pudieron resolver y qué otro enfoque creen que puede resolver.
Esto es suficiente para juzgar las habilidades de un programador como programador.
fuente
¿Pueden aprender algo nuevo? Hable sobre un aspecto de alto nivel de la tecnología que está utilizando o sobre algo específico para el negocio en el que trabaja y vea si pueden comprender el tema. ¿Hacen preguntas inteligentes? ¿Pueden llegar a una analogía? ¿Es similar a algo que han hecho en otra industria o tecnología?
¿Prefieren estar programando? No tiene que ser el número uno en su lista, pero tienen que mostrar preferencia por escribir código. Y me refiero a escribir código y hacer algo, no sentarme y hablar sobre ello o dibujar en la pizarra todo el día. No para minimizar la planificación o para promover la codificación de vaqueros, pero eventualmente debes tener código. Evita a los que evitan el teclado. Esta no es una posición de gestión.
Puede hacer un puntaje en una escala de una a diez cosas o simplemente confiar en poder oler su propio tipo.
fuente
Si te hace sentir mejor, existen malos programadores en casi todos los países. Cómo eliminarlos es el problema.
El primer deshierbe es el currículum. Una cosa que busco es mucha experiencia lingüística y nada que describa lo que hicieron en ese idioma. He visto currículums que afirman que conocen todos los idiomas inventados y, sin embargo, su experiencia muestra que solo han trabajado con Access y Visual Basic. Esos van a la basura. Los currículums de 10 páginas van directamente a la basura (especialmente los currículums de diez páginas de personas con menos de 2 años de experiencia que he obtenido). De los graduados universitarios recientes con poca experiencia, debes ser muy exigente con la forma en que se presentan. Los mejores candidatos son cuidadosos con sus hojas de vida, no tienen errores. ¿Realmente estás buscando a alguien a quien le importe tan poco que no se molestó en revisar su currículum?
Los currículums preparados profesionalmente también van a la basura. Una vez que haya leído cientos de currículums, puede elegirlos ya que usan exactamente la misma redacción. No puede confiar en el contenido de un currículum profesionalmente preparado y sabe que la persona no hizo su propia preparación. Este es el tipo de persona que dependerá de otros para resolver sus problemas por él, ¿realmente quieres eso en una posición de programación?
Busque cosas que hagan que la persona se destaque por las que elija. Eso es más difícil, por supuesto, con los que acaban de salir de la escuela, pero busca logros, contribuciones al código abierto, etc.
La próxima eliminación es la entrevista telefónica. Pregunte acerca de los conceptos básicos que se relacionan con el trabajo real que tiene. Si las personas no tienen un conocimiento básico de los conceptos que necesita que tengan, no vale la pena molestarse en llevarlas a una entrevista personal. Los jóvenes a menudo piensan que esto es injusto porque pueden buscar todo en Internet, pero la verdad es que nunca he conocido a un buen programador que haya tenido que buscar todo en Internet. Debe tener algún conocimiento de su profesión que no tiene que buscar cada vez.
Después de la entrevista telefónica, debe elegir los mejores 4-5 candidatos y la entrevista. Por supuesto, si solo tiene 1-2 buenos candidatos, no se moleste en entrevistar a las personas que ya eliminó. Ahora hará las preguntas difíciles y tendrá una idea de cómo abordan los problemas. Nunca usaría la prueba de fizzbuzz porque es demasiado conocida, por lo que las respuestas no te dicen nada. En cambio, invente algunos problemas de su propia base de código. Podría darles un requisito y un fragmento de código y preguntarles si el código cumple con el requisito y si no, por qué no y qué podrían hacer para que cumpla con el requisito. Les pediría que describieran el problema de programación más difícil que tuvieron que resolver y qué pasos tomaron para encontrar la respuesta. Haría algunas preguntas técnicas más profundas. Recuerde que está tratando de tener una idea de su competencia técnica, su capacidad de resolución de problemas y depuración y su capacidad para adaptarse a su equipo actual. También hago preguntas que probablemente no saben la respuesta para juzgar qué tan bien manejan el estrés, es un trabajo estresante, no quiero a alguien que abandone la entrevista porque el estrés del trabajo es mayor que el estrés de la entrevista. . Busco fortalezas en áreas en las que actualmente somos débiles y la capacidad de trabajar en equipos y presentarnos a los clientes (nuestros desarrolladores tratan ampliamente con los usuarios), su lista puede ser diferente. No quiero a alguien que abandone la entrevista porque el estrés del trabajo es mayor que el estrés de la entrevista. Busco fortalezas en áreas en las que actualmente somos débiles y la capacidad de trabajar en equipos y presentarnos a los clientes (nuestros desarrolladores tratan ampliamente con los usuarios), su lista puede ser diferente. No quiero a alguien que abandone la entrevista porque el estrés del trabajo es mayor que el estrés de la entrevista. Busco fortalezas en áreas en las que actualmente somos débiles y la capacidad de trabajar en equipos y presentarnos a los clientes (nuestros desarrolladores tratan ampliamente con los usuarios), su lista puede ser diferente.
fuente
Los candidatos deben tener un problema del mundo real para resolver con la libertad de usar cualquier tecnología.
Si ella sale a toda velocidad, ¡está dentro!
fuente