¿Cómo reconocer a un buen programador? [cerrado]

131

Nuestra empresa está buscando nuevos programadores. Y aquí viene el problema: hay muchos desarrolladores que se ven realmente bien en la entrevista, parecen conocer la tecnología que necesita y tienen un buen historial de trabajo, pero después de dos meses de trabajo, descubre que no pueden trabajar en un equipo, escribir un código les lleva mucho tiempo y, además, el resultado no es tan bueno como debería ser.

Entonces, ¿utiliza alguna prueba formalizada (¿hay alguna?)? ¿Cómo se reconoce un buen programador y una buena persona? ¿Hay alguna pregunta "buena" que pueda revelar problemas futuros? ... ¿o se trata solo de su 'sentimiento' sobre la persona (es decir, principalmente su experiencia) y de probarla?

Editar: Según la respuesta de Manoj, aquí está la pregunta relacionada con la tarea de codificación en la entrevista de trabajo.

gius
fuente
3
<joke> Para reconocer a un buen programador, siempre uso el código de vestimenta de los programadores como una vara de jardín. ;-) </joke>
Galwegian
77
Mido aproximadamente 6 ', 185 lbs., Cabeza rapada y perilla. Estoy usando Chuck Taylors y una camiseta azul sobre una térmica blanca. Por favor, búsqueme con suavidad. Respondí la pregunta. :)
MusiGenesis
66
Relacionados o duplicados: programmers.stackexchange.com/questions/4614/…
Maniero
1
Aquí hay otra vista del tema - Cómo entrevistar a un programador
2
Esta pregunta se ajustaba bien a este sitio, en 2008 cuando se le preguntó. Cinco años. CINCO AÑOS después, Prog.SE se convirtió en SO2, el duplicado.
Warren P

Respuestas:

157

Haz que hablen sobre lo que les interesa. Todavía tengo que conocer a un desarrollador que sea realmente apasionado cuando habla de programación pero que en realidad no puede codificar. Puede que existan, por supuesto, y su entrevista también debe verificar la competencia, pero la pasión es un buen indicador en mi experiencia. (Tenga en cuenta que eso no es lo mismo que poder "hablar en voz alta" en términos de palabras de moda).

Pregúnteles qué no les gusta de su idioma o plataforma favorita. ¿Cómo arreglarían las cosas? ¿Qué les gustaría ver en la próxima versión? ¿Tienen proyectos de hobby? Si tienen un blog, léelo. Verifique su presencia general en línea.

Jon Skeet
fuente
3
Grandes ideas, especialmente proyectos de pasatiempos y problemas con su idioma favorito, me parecen muy buenos. Debería revelar más sobre su relación con la programación. Un blog también es una buena idea. Desafortunadamente, por lo general no tienen blog :-(. Gracias ...
25
La pasión no necesariamente se traduce en profesionalismo o trabajo en equipo. Es posible que solo quieran codificar lo que es genial / divertido, no lo que necesita codificación.
22
@Preston: Si bien eso es cierto en teoría, no he conocido a nadie apasionado que no haya estado feliz de gruñir también. Conocí a codificadores de prima donna que piensan que están por encima de ese tipo de cosas, pero generalmente no son apasionados. La prueba de profesionalismo es bastante difícil de todos modos ...
Jon Skeet
36
COMPRUEBE SU CUENTA DE INSIGNIAS
83

Contratar gente buena es difícil .

Me ha costado algunos errores reales mejorar en eso. Empiezas a confiar mucho más en tu tracto intestinal después de las primeras veces que no confías en él y te arrepientes.

Tengo un gran respeto por las preguntas en la pantalla del teléfono de Steve Yegge y he usado esto como base para entrevistar a personas con cierto éxito.
También creo que mejoré al entrevistar a las personas después de leer la guía de Joel para las entrevistas de guerrilla (ahora en la versión 3.0, eso está por delante de la versión para la web y todo, solo tiene que ser bueno).

También hay otras 57 preguntas (a partir del 20/11/2008) sobre Software Engineering Stackexchange etiquetadas con entrevista y algunas de ellas parecen muy relevantes, así que échale un vistazo.

Hamish Smith
fuente
2
Contratar gente buena es muy difícil. :)
causa última
77
Las preguntas de la pantalla del teléfono comienzan bien, pero luego cada vez más preguntas se vuelven ridículas. Por mi parte, no creo que un buen programador deba saberlo 2^16de memoria. Y la versión de vía rápida en la parte inferior es solo una parodia pobre.
Peter
Los enlaces SO parecen estar rotos (sin resultados o 404).
Stijn Geukens
@StijnGeukens, parece que esa etiqueta se ha migrado a Ingeniería de software. He actualizado el enlace.
Hamish Smith
47

Algunas ideas:

  • Haga varias preguntas abiertas desde varios ángulos diferentes:

    • Revisa un código. ¿Qué se identifica? Errores técnicos, inconsistencias de estilo, comentarios, algoritmos, mantenibilidad, etc.
    • Escribe un código. Busque procesos, pruebas de balas, legibilidad, etc.
    • Cree un diseño de alto nivel para un sistema pequeño. Busque la comprensión del problema, enfoque, comunicaciones, integridad, detalle.
    • Describa el proceso de desarrollo de software. Busque diseño, colaboración, revisión, pruebas, buenos / malos hábitos y experiencia general.
  • Elija algo, cualquier cosa, que el candidato dice saber bien. Haga una pregunta simple y luego, con base en la respuesta, haga otra, un poco más detallada, y continúe "cavando" hasta llegar al límite del conocimiento del candidato. Esto te da una idea de:

    • Honestidad: ¿sabe tanto como se dice?
    • Profundidad del conocimiento: ¿qué tan bien aprende las cosas?
    • Comunicación: ¿qué tan bien te explica algo desconocido? ¿Es lógico el proceso de pensamiento?
    • Reacción a situaciones estresantes: ¿qué tan duro trabaja para responder? ¿Lo fingió? ¿Es inevitable o difícil el inevitable "No sé"?
  • Pregunta cómo el candidato ocupó de diversas situaciones a trabajos anteriores: el trabajo en equipo, proyectos atrasados, depuración, etc . ¿Las respuestas son positivas o negativas? ¿Apasionado? ¿Inteligente? ¿Arrogante?

Encuentro que los mejores candidatos son entusiastas, experimentados, confiados pero educados y, lo más importante, presentes . Necesitas saber que hay alguien adentro. :-)

Adam Liss
fuente
44
Recuerdo mi primera entrevista de programación. Me pidieron que revisara un código impreso. En la parte superior había algunos comentarios que explicaban lo que hacía el código. Verifiqué esto leyendo el código, luego básicamente leí los comentarios textualmente y me dijeron "¡Muy bien!" Le dije: "sí, eso dice más o menos aquí mismo en el bloque de comentarios". Estaban bastante avergonzados.
Dustin
@Dustin IMO fue bastante descuidado (?) De su parte dejar los comentarios en el código que el candidato debe revisar. Básicamente, eso les da una respuesta gratuita o confusión, según lo que contiene el comentario.
cst1992
39

Para reconocer a un buen programador, debes ser un buen programador. Eso significa que debe conocer muy bien la programación para ver a través de lo que se dice y se hace en la entrevista, y debe saber qué preguntas hacer.

He visto a los candidatos dar una respuesta incorrecta en la entrevista, pero su explicación ha demostrado que conocían el tema (y, por lo tanto, podrían obtener fácilmente la respuesta correcta buscando en la red). Para ver eso, debes conocer muy bien el tema sobre el que haces la pregunta.

Otra cosa es evitar preguntas sobre detalles que podrían fácilmente buscarse en Google. Esas preguntas solo muestran qué tan bueno es el candidato para recordar cosas, no si él o ella realmente tienen el conocimiento y la comprensión que está buscando.

Mi recomendación es obtener ayuda de alguien que conozca una gran cantidad de programación y que tenga buenas habilidades con la gente para ayudar con las entrevistas.

Editar: También escribí un comentario sobre entrevistas aquí .

revs Eigir
fuente
3
Tienes toda la razón acerca de googlear: un buen programador no tiene que saberlo todo, pero debería poder averiguarlo rápidamente.
2
"Alguien que conoce una gran cantidad de programación y tiene buenas habilidades con la gente" ... y ese es el problema: no es fácil encontrar uno. Por lo general, solo tienen una habilidad de estos. Es por eso que estoy haciendo todo lo posible para mejorar ambas ramas :-).
77
Tener grandes habilidades con las personas generalmente entra en conflicto con ser un pensador abstracto. No ser un pensador abstracto generalmente entra en conflicto con ser un buen programador.
Tomalak
77
Gius: Si tienes suerte, encontrarás programadores que entienden que los humanos son computadoras biológicas y, por lo tanto, están interesados ​​en cómo trabajamos / pensamos. Esos a menudo también han desarrollado buenas habilidades con las personas, ya que también están interesados ​​en mejorar en esa área.
Eigir: estoy de acuerdo. Pero como alguien ya mencionó aquí, si encuentra a alguien, gana el premio gordo ;-). Espero que seamos afortunados.
23

Recuerde que la capacidad de programación no lo es todo. Podría tener el mejor programador del mundo trabajando para usted, pero si odian trabajar con otras personas, no los encontrará muy útiles.

La personalidad de un programador debe estar más arriba en la lista de lo que la mayoría de los empleadores parecen clasificar. En mi lugar de trabajo actual tienen mucho cuidado al contratar al tipo correcto de persona.

Las personas generalmente pueden aprender a ser mejores programadores, las personas generalmente no pueden aprender a ser mejores seres humanos.

Doctor Jones
fuente
1
Si desdeñan trabajar con otras personas, ¿cómo podría llamarlos "el mejor programador del mundo"? La programación ciertamente no se trata solo de hablar con el compilador y fragmentar el código, sino que la mayoría de las tareas de un programador / desarrollador de software requieren una cierta cantidad de cooperación.
Christopher Creutzig
Entiendo su punto de vista, pero en este contexto "Programación" solo se trata de codificar; de lo contrario, habría utilizado el término "Desarrollador de software". Los términos "Programador" y "Desarrollador de software" no son sinónimos.
Doctor Jones
66
No, en realidad, muchas personas no pueden aprender a ser mejores programadores. Y, francamente, si tienen 5-10 años de experiencia, esperaría que ya sepan cómo hacer su trabajo . Esta NO es una respuesta a la pregunta; solo estás diciendo "identificas a los buenos programadores al no preocuparte si son buenos programadores"
Benubird
1
@Benubird, mi punto era que las habilidades interpersonales pueden ser más importantes que el talento de programación en bruto, especialmente cuando se trata de trabajar en equipo. No estoy abogando por la contratación de personas que no pueden hacer su trabajo. No vale la pena contratar a un programador "rockstar" si no van a funcionar bien en su equipo. No vale la pena la fricción y la molestia.
Doctor Jones
@DoctorJones y yo estamos de acuerdo contigo; no te equivocas en absoluto. Es solo que la respuesta que ha dado no es una respuesta a la pregunta "¿Cómo reconocer a un buen programador?"
Benubird
16

Hazlos codificar. Dé un problema que pueda resolverse en unas 4 o 5 horas e inspeccione el código en busca de documentación, estilo de codificación, cómo planeó la solución antes de comenzar a codificar, etc. No necesita tener que resolver el problema. Y como mencionó Jon Skeet, hágales hablar sobre programación, su lenguaje de elección y cosas por el estilo. Puedes reconocer la pasión en un buen programador. Pregunte cuántos sitios relacionados con la programación siguen, como stackoverflow. Los blogs que siguen también pueden ser un buen indicador.

Manoj
fuente
Me gusta la idea de darles una tarea de codificación (se puede hacer antes de la entrevista) y luego usar el código como tema en la entrevista. Haga que expliquen por qué eligen las diferentes soluciones y así sucesivamente ...
En general, la idea sobre la tarea de codificación es muy buena. Pero me temo que crear una tarea que realmente muestre lo que hay en ellas es bastante difícil, y es un buen tema para otra discusión bastante larga (¡pero muy poco interesante!). ... deberíamos hacer una pregunta al respecto aquí? ;-)
¡La lista de sus blogs favoritos sería un gran indicador!
66
He tenido una entrevista de codificación. El entrevistador insistió en que hablara sobre mi solución con él. Yo propondría una idea, él sugeriría formas en que podría fallar. De esta manera, aprendió cómo trabajo a través de un problema. Fue la entrevista más difícil y más justa que he tenido.
@gius - Creo que deberías hacer esa pregunta.
Manoj
16

Me gusta la respuesta de la pasión. Creo que tienes que ser apasionado por lo que trabajas para ser realmente bueno en eso.

Un buen programador programa aparte del trabajo (de vez en cuando al menos). A él / ella le gusta resolver problemas de programación. Y cuando él / ella no puede encontrar un programa que resuelva una necesidad particular en el hogar, generalmente intentará resolverlo él mismo.

Pero hay varios tipos de programadores.

  • Tienes los que ama documentar. Personalmente odio documentar. Pero documentar lo que se hace puede ser importante.
  • Tienes los "hackers". Los que están empeñados en resolver un rompecabezas complejo donde, si buscas en Google, probablemente no encuentres una solución. Pueden resolver "cualquier" problema siempre que tengan las herramientas que necesitan.
  • Tienes a quienes se educan para ser programadores solo porque el mercado era bueno para ser contratado para la programación. Esos son generalmente mediocres porque les falta la pasión.
  • Tienes aquellos que son excelentes para comunicarse y "pueden resolver cualquier cosa", pero una vez que consiguen el trabajo, se cuelgan de todos los demás para obtener ayuda para el problema que están resolviendo.

Si puede encontrar el "pirata informático" que también documenta muy bien y tiene excelentes habilidades de comunicación, creo que ha ganado el premio gordo.

Oh, y una última cosa. Probablemente no desee un programador que tenga ambiciones de líder, ya que solo usará la programación para iniciar. Eso significa que perderá ese recurso tarde o temprano.

Una pregunta que haría al contratar a un programador sería: "¿Por qué te educaste como programador?". Eso sería un regalo muerto si dudan allí.

Esa es mi opinión.

Wolf5
fuente
2
Pregunta inspiradora: "¿Por qué te educaste como programador?"
55
Perdemos todos los recursos tarde o temprano. Solo las rocas son para siempre.
Carl Manaster
1
Un poco miope. "Schlubladendenken"
66
Votaría esto si no fuera por el "Probablemente no quieras un programador que tenga ambiciones de líder". Los empleados que desean asumir responsabilidades son vitales y debe encontrar formas de avanzar en su organización.
Danny Varod
55
Tienes una definición diferente para un "Hacker" que yo. Un "hacker" para mí es alguien que "piratea" las cosas lo más rápido posible hasta obtener un resultado (de algún tipo), pero ha dejado un rastro de destrucción y horror porque no han seguido una sola mejor práctica. Un "hacker" no es profesional.
David Masters
7

Un amigo mío está trabajando en una empresa donde tienen un paso adicional en el proceso de contratación: después de la evaluación inicial y la entrevista, un solicitante tiene que "probar el trabajo" durante unos días. Me dijo que aunque un candidato tenía todas las habilidades y talentos necesarios, no lo contrataron porque era una persona no agradable para trabajar.

Svante
fuente
Esta es una gran idea, y me gustaría ver que sea una práctica estándar. Como alguien que ha sido despedido de varios trabajos por no ajustarse a la cultura de la empresa, o por un juicio erróneo de los niveles de habilidad, me encantaría probar el agua primero.
DarenW
20
El problema con esto es que si alguien ya tiene un trabajo, difícilmente puede tomarse una semana para ir a trabajar para otra compañía solo para averiguar si realmente consiguió el trabajo.
Cercerilla
@Cercerilla Derecha! es bastante difícil incluso encontrar tiempo para entrevistar y mucho menos tener una práctica de trabajar para ellos durante una semana.
eaglei22
6

Es muy difícil reconocer a un programador basado solo en una entrevista de trabajo.

Algunas cosas que deciden que alguien es un buen programador son:

  • capaz de trabajar en equipo
  • escribe un buen código que sea comprensible y mantenible
  • es capaz de aprender sobre nuevas tecnologías

Entonces, tiene algunas pequeñas sugerencias que puede encontrar en una entrevista:

  • ¿El candidato conoce un lenguaje de tecnología / programación o sabe varios? Si conoce diferentes idiomas, parece ser capaz de aprender cosas nuevas y posiblemente conozca las desventajas de su tecnología / idioma preferido actual. Por lo tanto, solicite conocimiento además de la tecnología que utiliza en su empresa.
  • Solicite proyectos en los que ya trabajó, especialmente proyectos de hobby y de código abierto. Los proyectos de pasatiempos te muestran que le gusta programar y hacerlo incluso en su tiempo libre (y de esta manera mejora sus habilidades). En un proyecto de código abierto, puede buscar el código que ha escrito. Si el proyecto involucra a más de una persona, puede obtener pistas sobre sus habilidades de equipo. En un proyecto de sistema operativo, puede buscar los archivos de la lista de correo para obtener más información.
Mnementh
fuente
3

Podrías realizar alguna prueba en la entrevista.

Pero muchas veces también hay un problema con el entorno de trabajo en sí. Seguramente este no sea el caso en su organización, pero es bastante común en el campo de la industria del software que la deuda tecnológica se vuelva demasiado grande. Luego, cuando contrata nuevas personas, no es de gran ayuda si son buenas o no, debido a la deuda. Maximizar la legibilidad y la comprensión del código de su programa ayuda a los recién llegados a ponerse a trabajar.

También muchas personas son tales que pueden cooperar, pero a veces no hay forma de cooperar. Por ejemplo, si todas las personas son desarrolladores, se supone que deben hacer su trabajo. Pues lo hacen. Pero, ¿tiene un arquitecto que dirija el proyecto de desarrollo y mantenga reuniones y demás? Los desarrolladores normales pueden sentir que no tienen el mandato necesario para comenzar las reuniones y pueden pensar que interrumpir a otros de vez en cuando no es el camino.

Comunicarse entre sí no debe ser el objetivo final. Cuanta menos comunicación se necesite, mejor, pero solo si es menos posible. Menos se hace posible si tienes un arquitecto. La cantidad total de comunicación puede mantenerse en un buen nivel, pero obtiene más resultados para la misma cantidad de comunicación.

Silvercode
fuente
Me gusta la idea de no solo mirar al empleado sino también a su propia organización y los procesos internos.
3

primero empiezo con las cosas habituales de la entrevista, considero muy importante ver si la persona frente a mí vale algo, y determinar sus habilidades y conocimientos.

Después de eso uso un par de técnicas en el campo de Java, como discutir algunos principios, principalmente tomados de Effective Java.

En esta etapa, cuando pienso que podría tener un buen programador frente a mí, le doy un código para que lo revise. Lo que quiero ver es que puede identificar las partes peligrosas del código, dar algunos consejos sobre las mejoras, encontrar dificultades en el rendimiento de un subproceso múltiple Y que puede distinguir entre comentarios importantes y "comentarios de sabor". Todo esto me ayuda a encontrar un empleado más competente.

pero al final siempre recuerdo que contratar es un tipo de juego ... muy muy difícil de anticipar ...

baba smith
fuente
2

Sé que esto no responde a lo que está preguntando, pero le recomiendo, si las leyes lo permiten, siempre contrate de manera temporal al principio (dos semanas o un mes, dependiendo del trabajo). Si la persona vale la pena, no se opondrá, además es una salvaguarda para los dos (puede dejarlo ir y puede que no le guste el trabajo y se vaya).

Vinko Vrsalovic
fuente
1
Tienes toda la razón, pero si él no es bueno para ti, aún pierdes una o dos polillas, su salario y el trabajo de las personas que lo involucran en tu proyecto. Por lo tanto, sería bueno evitar esta situación.
3
El problema es que los buenos programadores probablemente tienen otras ofertas de trabajo y si solo les ofreces un trabajo temporal al principio, pueden elegir a alguien más ...
@Rexxar: Todavía se irán si no les gusta. Es más honesto y directo ofrecerlo de esa manera, en mi opinión. Al menos para mí sería un plus, no un menos (dado que es un contrato temporal corto y que al final se vuelve permanente o es un adiós).
Vinko Vrsalovic
3
Necesito seguir pagando mis facturas, nunca debería considerar tomar un trabajo solo por un mes y renunciar a un trabajo permanente por él. Si está desempleado o tiene un cónyuge rico, esto podría funcionar. De lo contrario, pierdes muchos buenos candidatos porque no pueden darse el lujo de arriesgarse a que no les mientas para que te hagan permanente.
HLGEM
44
"Si la persona vale la pena, no se opondrá", bueno, este desarrollador aquí diría "joder eso" y encontrar un mejor trabajo.
gnasher729