Una tarea de programación está asustando a los candidatos, ¿deberíamos deshacernos de ella?

Es la primera vez que estoy haciendo recursos humanos y estamos buscando un desarrollador. El proceso de selección consta de tres rondas: entrevista telefónica técnica, tarea de programación (desafío de 0,5 a 1 hora) y, finalmente, una entrevista con la alta gerencia y conmigo.

El problema que tengo es que cuando les doy a algunos candidatos (en su mayoría recién graduados con 1 o 2 pasantías técnicas ya en su haber ) la tarea de programación, no solo no la completan en el marco de tiempo dado (una semana), pero No volveré a saber de ellos a menos que haga un seguimiento.

Estoy pensando en deshacerme de la tarea de programación, pero realmente creo que puede ayudar a establecer quién realmente sabe los idiomas que figuran en su currículum.

¿Cómo puedo mejorar nuestro proceso de contratación?

ACTUALIZACIÓN YA QUE ESTA PREGUNTA HA SIDO PUBLICADA

En su mayor parte, muchos candidatos se desaniman por las pruebas de programación, lo cual es muy frustrante ya que necesito pasar por MUCHOS candidatos para encontrar uno que esté dispuesto a hacerlo. Dicho esto, he encontrado algunos dispuestos a hacerlos y, en general, he descubierto que:

a) Muestra que tienen una buena actitud hacia la empresa y el papel si están preparados para hacer un esfuerzo adicional para completarlo.

b) Tienen capacidad de programación. Claro que pueden haber hecho trampa, pero si lo han intentado, nuevamente, una buena actitud para nosotros es mucho más importante ya que serán mucho más fáciles de manejar.

Desde entonces, contraté a un desarrollador graduado, que intentó y completó el ejercicio con éxito. También completó todos los 'puntos de bonificación' adicionales en la tarea. Es demasiado pronto para decir lo bueno que es en su papel, ya que acaba de empezar.

En algunas ocasiones, evito dar el ejercicio a los desarrolladores si ya tienen una cartera sólida que trabaja para buenas marcas y un historial. Ya que para entrar en las grandes marcas tendría que hacer sus propias pruebas de acceso.

SEGUNDA ACTUALIZACIÓN DESDE QUE ESTA PREGUNTA HA SIDO PUBLICADA

El desarrollador graduado ha resultado ser un empleado estrella. Lo mantuvimos y le dimos un aumento de sueldo.

Si alguien no tiene los medios para completar una tarea para una entrevista, no esperaría que complete tareas como empleado. Sería diferente si recibiera comentarios que dijeran que la tarea es demasiado difícil para el período de tiempo proporcionado, pero supongo que no están dando ningún comentario. ¿De qué país se encuentra/toma candidatos? De cualquier manera, no creo que eliminar una prueba de empleo sea un camino válido en este caso, parece que está persiguiendo a los candidatos equivocados.
Hablando desde mi propia experiencia como desarrollador de nivel de entrada, la demanda es tan alta que puedo omitir cualquier proceso de entrevista con una prueba de programación en línea y terminar fácilmente con una buena oferta (nota: entrevista no técnica con preguntas de programación , que debe hacer, me refiero a una prueba de 2 a 4 horas realizada durante mi tiempo libre, después de la cual puedo o no volver a recibir una respuesta). Basta con decir que la demanda de personas realmente experimentadas es probablemente aún mayor. ¿Por qué saltar a través de sus aros cuando reciben correos electrónicos de reclutadores todas las semanas, si no todos los días?
Evito entrevistas con tareas de programación, a menos que el trabajo esté por encima del promedio. No veo la necesidad de perder algunas horas en una empresa para la que estoy entrevistando, considerando que puedo obtener muchas entrevistas sin exámenes.
Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
Confía en mí, quieres ahuyentar a los candidatos que no pueden programar. Es posible que desee revisar su contenido y/o su enfoque para presentarlo (por ejemplo, tal vez invitarlos a una entrevista en el sitio, emparejarlos con un programador y hacer que se sienten en una habitación durante una hora con una estación de trabajo y par programar el ejercicio). Pero deshacerse de él por completo es una muy mala idea .
Personalmente, veo que no tener el código de los candidatos como parte de su entrevista es una señal de alerta. Si futuros colegas potenciales ingresaron al lugar de trabajo sin mostrar ninguna habilidad técnica y voy a ayudar a mantener su código, podrían ser malos tiempos. Además, este es uno de los puntos del Test de Joel .
Creo que la fuente de sus candidatos es crítica. Los agentes de contratación están interesados ​​en la salida fácil. A nivel local, se les paga (ganadosamente) para sacar a la gente de los pagos de la seguridad social, así que ahí es donde concentran sus esfuerzos. Si no está obteniendo SS, simplemente no están interesados ​​(Cita "No pierdas tu tiempo, no pierdas nuestro tiempo"). En consecuencia, los reclutadores nunca presentan mi título y 40 años de experiencia a posibles empleadores. - y la mayoría de los empleadores insisten en utilizar exclusivamente reclutadores.
Esta publicación de blog sobre "las entrevistas técnicas me hacen llorar" de un ex-desarrollador de Google Now Khan Academy piensa que una tarea que se le da una semana para hacer es, con mucho, la mejor manera de hacer entrevistas técnicas.
@FreeAsInBeer Estoy haciendo exactamente lo contrario. Creo que ese empleado no puede ser juzgado a menos que haga un trabajo significativo, por lo que prefiero unirme a una empresa que contrata durante un período de prueba en lugar de quedarme con alguien que no se puede despedir porque "superó alguna prueba abstracta, por lo que debe ser bueno en escenarios de la vida real completamente ajenos". Especialmente lo que busco en un junior es que su código sea fácil de leer y que el resto del equipo pueda mantenerlo, no que resuelva el problema P-vs-NP en su primer día de trabajo.
@Agent_L sí, tener un período de prueba siempre es una buena idea, y lo hacemos aquí. El problema es que para cuando te hayas dado cuenta de que no sirven para nada, habrás gastado 3 o 4 meses de salario y tiempo perdido. ¿Vale la pena?
¿Qué le dice un desafío de código sobre un candidato? Nada. Incluso si lo hace en la oficina como parte de una entrevista regular, a) les presentará un problema trivial que no le dice nada o b) les presentará un problema que no puede resolverse razonablemente. completado en unos pocos minutos a menos que el candidato lo haya visto antes. Lo cual, de nuevo, no te dice nada. "Determinar si una lista enlazada contiene un bucle" es una de esas preguntas "te pillé" que es inapropiada y desconcertó a los titulares de doctorados en ciencias de la computación durante 30 años, pero la solución es simple una vez que se conoce.
No estás siguiendo esto por casualidad, ¿verdad? En un mundo ideal, estoy seguro de que es la manera perfecta de contratar programadores desde la perspectiva de un empleador, pero la mayoría de los programadores talentosos se irán antes del #5. Nadie quiere perder el tiempo en algo que no está garantizado (y no mencionemos que en los EE. UU. un proceso de entrada tan difícil se ve finalmente socavado por el aviso de 2 semanas que es estándar antes de despedir a alguien).
@Cat'r'pillar porque entonces sabes que trabajarás con personas que tienen las habilidades para aprobar el examen, y que será un desafío trabajar allí. Por supuesto, si no está muy interesado en el puesto en primer lugar, no hay razón para ir a ninguna entrevista.
@ Draco18s no necesariamente, puede diseñar tareas 'simples' que usan mucha tecnología, por ejemplo, un formulario de comentarios donde los datos se publican en un servidor. Solo eso requiere AJAX, Jquery, javascript, CSS, HTML y JSON. Si el candidato puede hacer eso, seguro que no es lo más complejo que haya existido, al menos entonces sé que conoce todas las tecnologías anteriores hasta cierto nivel, lo que reduce el riesgo.
@bobo2000 O puede preguntarle al candidato directamente o ver su cartera. Si están solicitando un puesto de full-stack y tienen experiencia en full-stack, ¿qué te dice realmente el desafío del código que aún no sabías?
@ Draco18s eso es parte del problema, cuando recibo solicitudes a menudo no tienen una cartera o una cuenta de github
@bobo2000 ¿Tienen antecedentes laborales? ¿Alguna de sus referencias es un gerente de una posición similar a la que tenían anteriormente? Si la respuesta es "no", entonces es demasiado joven para el puesto que está contratando y, nuevamente, el desafío del código no le dice nada. A menos que esté contratando a un desarrollador junior, en cuyo caso, no necesitan todas esas habilidades.
@ Draco18s Estoy contratando graduados con una o dos pasantías técnicas en este momento y, para ser honesto, preguntarle a un gerente anterior no siempre es el mejor enfoque si el solicitante no se llevaba bien con él, pero por lo demás era un programador capaz.
@bobo2000 Las relaciones interpersonales deben ser posibles de excluir cuando se pregunta sobre la habilidad técnica. Un desafío de código sigue siendo la herramienta incorrecta para el trabajo en cuestión. nomachetejuggling.com/2014/06/24/…
@Draco18s no todos los gerentes son éticos: una vez trabajé con uno que era bastante vengativo, por lo que tomo lo que dicen con pinzas.
@bobo2000 Si el gerente va a ser vengativo, el candidato no lo incluirá como referencia. En serio.
@aroth, pero este tipo de tarea no 'asusta' en función de la capacidad, selecciona personas que no valoran tanto su tiempo y, de hecho, pueden reducir la calidad de los candidatos
@ Draco18s si es tu único trabajo, a veces no tienes muchas opciones.
@ bobo2000 Si bien eso puede ser, el desafío del código todavía no te dice nada. No hay una respuesta que sea objetivamente correcta para todas las personas involucradas en la revisión de la respuesta.
@JamesRyan o selecciona aquellos candidatos que realmente quieren trabajar para usted.
@bobo2000 no, no diferencia entre los que realmente quieren trabajar para ti y los que realmente quieren trabajar para cualquiera. Y además, hasta que realmente hayan trabajado para usted, aún no saben si les gustará trabajar para usted, por lo que tampoco está seleccionando empleados entusiastas y felices de esta manera.
Puede aprender el 90% en 1 hora de lo que aprenderá en varias horas. El resto no lo verás hasta que hayan tenido un par de semanas para adaptarse y aprender tu forma de hacer las cosas (o no). Estos desafíos prolongados son una pérdida de tiempo para todos y francamente groseros para hacer que las personas salten a través de los aros. Compañías como Facebook y Google tienen miles de solicitantes para reducir, tú no.
@RonBeyer si yo, como candidato, creo que la tarea está tomando demasiado tiempo, no dedicaré tiempo a proporcionar comentarios. ¿Cómo me beneficia eso? Solo pasa a la siguiente oportunidad. ¿Mi decisión es buena o mala para la empresa? No sé, no me importa. ¿Las empresas dedican mucho tiempo a proporcionar comentarios a los candidatos con los que han decidido no continuar?
He visto pruebas de codificación bien hechas, pero no como un pase de filtro previo a la entrevista. En un lugar en el que he trabajado, después del 80 % de las entrevistas técnicas, me pusieron en una habitación con un entorno de desarrollo de VM, un documento de requisitos y un conjunto de pruebas creado específicamente para el trabajo (bastante especializado) para el que me estaban contratando; cuando estuvo hecho, todos los ingenieros tuvieron la oportunidad de preguntarme sobre mis opciones. Esto fue (1) respetuoso de mi tiempo (no me pidieron que dedicara tiempo hasta que hubieran hundido el mío), y (2) mostró esfuerzo de su parte (construyendo esta herramienta para un puesto que ocupaban solo uno) .
...cuando una prueba de codificación está estructurada de esa manera, donde los ingenieros de la empresa dedican su propio tiempo a ella, y solo se presenta después de entrevistas anteriores, se lee menos como "no respetamos su tiempo como candidato". , y más como "realmente, realmente nos preocupamos por construir un equipo de ingeniería de alta calidad". Tomé ese trabajo (que era en una tienda que tenía un equipo de primera), después de pasar por muchos otros lugares haciendo la prueba de código previa a la llamada telefónica sin respeto por su tiempo.
Si espera que el candidato haga la programación por usted, págale por su tiempo. El hecho de que estén buscando trabajo no significa que no lo tengan ya, o que su tiempo no sea valioso. Cuando lo piensa, ya está quemando efectivo en términos de horas de empleados solo para entrevistarlos. Por lo tanto, le está pidiendo al candidato que "entreviste" durante 2 a 4 horas más y, sin embargo, se está ahorrando el tiempo que le habría costado en horas de empleado entrevistarlo durante otras 2 a 4 horas. Por lo tanto, pagarle al candidato por sus horas de codificación de prueba no es gastar más dinero.
Las pruebas en el sitio de @CharlesDuffy solo funcionan si el candidato está en el mismo país, si está entrevistando a candidatos en el extranjero que buscan un puesto en el Reino Unido, no es una solución práctica.
@bobo2000 entrevistar de forma remota a candidatos de otro país es muy raro y, por lo general, solo se realiza cuando se requieren habilidades muy especializadas. El riesgo de que tengan problemas para reubicarse es demasiado alto y, en la mayoría de los casos, hay un solicitante local igualmente bueno.
@JamesRyan en realidad no lo es, muchos graduados en particular hacen pasantías técnicas en el extranjero y van a las mejores escuelas. Entrevisté a uno hace un par de días que se graduó en Cambridge.
@ bobo2000 decir estas tonterías a los graduados es aún peor porque no tienen la experiencia para realizar pruebas. Además, si son graduados de Cambridge, estarían en el Reino Unido entrevistando para trabajos antes de terminar la universidad, así que creo que estás diciendo tonterías.
@JamesRyan, muchos de los graduados que entrevisté han realizado 1 o 2 pasantías técnicas, de hecho, el graduado de Cambridge se encuentra actualmente en Hong Kong haciendo una. Está construyendo una API RESTful como parte de su pasantía.
¿Tuvo que completar una tarea de recursos humanos de 2 horas para demostrar que era bueno en recursos humanos antes de ser contratado?
@DA. No es mi puesto de trabajo, soy PM. Simplemente lo estoy haciendo, ya que no hay nadie más para hacerlo... y eso no viene al caso, si eres un codificador seguro y estás interesado en trabajar para la empresa, ¿cuál es el problema? En todo caso, si no lo hacen, probablemente los elimine, ya que, para empezar, nunca estuvieron tan interesados ​​​​en trabajar para la empresa (o no confiaron tanto en su capacidad de codificación)
El punto de @ bobo2000 es que la mayoría de las personas no requieren que los profesionales realicen "pruebas" de varias horas para "demostrar su valía". Idealmente, uno obtiene una buena imagen del candidato a través de entrevistas, currículos, portafolios, educación y referencias. Que exigimos a los desarrolladores que hagan esto es realmente algo extraño en general.
@DA y ¿qué haces si no tienen una cartera, una cuenta de github sino solo un CV con un montón de empresas desconocidas? ¿Cómo sabes que en x, y empresa el tipo estaba escribiendo un código bien escrito?
@bobo2000 aplica eso a cualquier profesión
@DA. Acabo de mirar el CV de un empleado anterior que fue despedido después de escuchar mucho sobre él desde que se unió a la empresa. Tenía todas las habilidades en papel, TDD/BDD, Ruby on Rails, Rspec, pero cuando llegó el momento lo despidieron porque era pobre... la mala contratación le costó a la empresa tiempo de contratación, recursos y código de mala calidad. que desde entonces ha sido reescrito. No había ningún proceso de selección en ese entonces. Los desarrolladores están demasiado bien pagados para no ser evaluados. Si alguien se postuló y fue pobre en administración, es un problema menor ya que no está construyendo una casa digital.
Sin embargo, @bobo2000 de nuevo, aplica eso a CUALQUIER profesional. ¿Cómo sabes que un médico es bueno en cirugía? ¿Cómo sabes que un piloto es bueno para volar aviones? No estoy diciendo que las pruebas sean malas o buenas. Solo estoy señalando cómo parece extraño que los desarrolladores parezcan ser una de las pocas profesiones en las que sentimos una fuerte necesidad de probarlos siempre. Yo diría que contratar a un desarrollador que se veía bien en el papel pero no en realidad fue una falla del gerente de contratación que tal vez no verificó completamente las referencias ni dio una entrevista en profundidad. Un punto final es que una persona puede hacerlo muy bien en una prueba y aun así fallar en la métrica del día a día.
@DA. porque un mal equipo de desarrollo puede arruinar una startup tecnológica, donde la calidad del producto es un factor clave para su éxito. Sin ningún tipo de prueba, el desarrollador puede criticar la entrevista; las referencias pueden estar sesgadas (su amigo podría estar dando la referencia) y aunque estoy de acuerdo en que una prueba no es la respuesta de todos modos, cuando se combina con una entrevista telefónica técnica, probablemente obtendrá una muy buena idea de las habilidades de los candidatos. Se trata de reducir el riesgo de una mala contratación, no de eliminarlo.
¿Le importaría mostrar una copia de uno de los ejemplos? Tengo mucha curiosidad por lo difícil que es. En cualquier caso, ¿cómo envían los candidatos sus resultados? Encuentro ideone.com una gran manera de hacer pruebas simples. Usted crea una plantilla con la "entrada", ellos pegan su código y le proporcionan la fuente y la "salida". Guarde las presentaciones para ver si los candidatos solo están copiando y pegando desde CareerCup o StackOverflow. Intente dividir los problemas grandes de 1 hora en 3 a 5 partes para que los candidatos no sientan que es un examen de todo o nada.
@Dogbert No puedo publicarlo públicamente, pero la forma en que estructuro la prueba es tener la tarea principal y otorgar puntos de bonificación al candidato por tareas adicionales. Entonces, por ejemplo, para la prueba de Javascript fue similar a completar la prueba usando Jquery, javascript, css, html, ajax donde se otorgan puntos de bonificación por completar la prueba en un marco JS como AngularJS. La prueba en sí será una funcionalidad muy simple. Recientemente, un solicitante hizo la tarea en AngularJS a pesar de que no era necesario, muy impresionado por su actitud. Lo contrató de inmediato.
@Dogbert También creo que lo principal que estoy buscando es que alguien al menos lo intente, ya que me da una buena idea de su actitud hacia el papel y cuánto lo quieren.
@ bobo2000 Es interesante que los candidatos ni siquiera hicieran la prueba. Bueno, tal vez sea un mejor mecanismo de filtrado de lo que te diste cuenta inicialmente. :)
Al final, @Dogbert, que hizo la prueba, resultó funcionar bien para nosotros; finalmente, encontramos a alguien que lo intentó y lo completó bien (obteniendo puntos de bonificación), resultó ser una muy buena contratación. Necesita muy poco entrenamiento, no es un dolor de manejar, y está comenzando a funcionar.
@bobo2000 ¡Es bueno escucharlo! Espero que las cosas sigan yendo bien con este enfoque para su empresa.
Esta es exactamente mi experiencia también. Hago la prueba de programación en la entrevista, en una pizarra, que suele tardar una hora. Alrededor del 90% de los candidatos fallan. El 10% restante vale absolutamente la pena no contratar al otro 10%. También lo hacemos con candidatos senior, pero esperamos un estándar más alto.
El mercado está del lado de los desarrolladores experimentados que pueden saltarse esas estúpidas pruebas triviales.
@SuperUberDuper No doy la prueba de programación a desarrolladores experimentados si ya han demostrado sus habilidades en su CV al tener un sólido historial de trabajo para marcas respetables. Sin embargo, es una historia diferente para los pasantes/graduados, donde a menudo carecen de experiencia comercial, por lo que la clave es tratar de averiguar si tienen potencial y los fundamentos ya establecidos para moldearlos. También dice mucho sobre su actitud hacia el trabajo si pueden tomarse un tiempo y completar la prueba.
@bobo2000 exactamente, buenos puntos
@RonBeyer Creo que estás haciendo una comparación injusta. Como empleado, te comprometiste a hacer ese trabajo, tienes un contrato con la empresa y te PAGAN por tu tiempo. Pero como simple entrevistado, no existe ningún compromiso de relación profesional, ni por su parte ni por parte de la empresa, ni implícito ni explícito. Por lo tanto, negarse a realizar una tarea de programación de varias horas como parte de una entrevista es muy diferente a que un empleado se niegue a algo similar.
@RaduMurzea, la clave es diseñar una prueba de programación que sea corta, de 30 minutos a 1 hora como máximo. Si el candidato no se molesta en hacerlo, lo rechazaremos, ya que dice mucho sobre su actitud hacia el puesto.
Los proyectos de audición son diferentes a la codificación de las preguntas de la entrevista. al menos un proyecto puede involucrar tareas más interesantes y darle la libertad de elegir qué y cómo implementar algo. Las pruebas de codificación suelen ser muy concentradas y, francamente, bastante aburridas.
"buena actitud hacia la empresa y el puesto": imagínese si el entrevistado recibe 10 tareas de este tipo a la semana y todas las empresas piensan lo mismo. Desde su perspectiva, el entrevistador está fuera de contacto con la realidad.
@Pithikos muchas empresas en estos días tienen entrevistas técnicas. Google es muy riguroso. No somos Google, no, pero eso no significa que debamos bajar nuestros estándares al no tener un proceso de selección técnica que aumente el riesgo de contratar a un mal empleado.
@Pithikos también acaba de verificar, Facebook tiene una tarea de codificación de entrevistas para llevar a casa para algún puesto
Dar un ejercicio de codificación muy corto (5-10 minutos) durante la entrevista está bien, pero no puede esperar que las personas pierdan una hora de su tiempo. Los entrevistados no saben que muy pocas personas lo completan. La conclusión es que puede pensar lo que quiera, pero a menos que vean algo extraordinario acerca de su empresa, no van a hacer todo lo posible para complacerlo, no solo en una pequeña posibilidad de que los llame entre las decenas potenciales. o cientos de personas que completaron la misma prueba. Simplemente pasan a la siguiente empresa.
Además, ¡acabo de notar que les diste la prueba por teléfono! Ponte en sus zapatos por un momento. Ni siquiera te han conocido. No saben nada de tu empresa y ya les estás haciendo perder el tiempo con lo que consideran juegos sin sentido. ¿Cómo reaccionarías en esa situación? Mencionas Google y Facebook, y siento mucho decírtelo, pero no eres ni Google ni Facebook. Las empresas extraordinarias pueden darse el lujo de exigir un esfuerzo extraordinario de sus solicitantes, las empresas ordinarias no pueden. No hay nada que puedas hacer excepto lidiar con eso.
@Demonblack sí, absolutamente, hacer esto significa que obtendremos menos candidatos, pero es por eso que cuando terminamos contratando a alguien, hemos reducido la probabilidad de una mala contratación y generalmente contratamos a personas que carecen de experiencia pero que están extremadamente motivadas para aprender. . Solo toma más tiempo hacerlo, y para aquellos que confían en su habilidad, no les molesta en lo más mínimo.
@ bobo2000 Entonces creo que me estoy perdiendo algo aquí. Por cierto, creo que con su método también tiene una probabilidad reducida de una buena contratación, pero eso no viene al caso. Si realmente estás obteniendo lo que querías, ¿cuál es el problema?
En el momento en que publiqué esta pregunta (hace un año), teníamos problemas para usar este proceso, y mi pregunta era si era un enfoque demasiado pesado, pero desde entonces lo he optimizado y funciona bien ahora.
Ehm pregunta rápida, ¿cómo puede un programador hacer trampa en una tarea? El 80 % de nuestro trabajo consiste en obtener código de Internet.

Respuestas (24)

Necesitas una prueba de programación. Pero debería ser de 5 a 10 minutos. 30 minutos como máximo. No hay una prueba de 2 horas que le diga exactamente qué tan bueno es un programador. No podrá saber si continuamente escriben código mantenible, o si siempre comentan correctamente, o si presentan problemas ilegibles de soluciones 'inteligentes' a problemas, etc. En 2 horas, lo único que podrá lograr es descubrir quién está mintiendo abiertamente acerca de conocer un lenguaje/programación.

Excepto que debería poder detectar fraudes absolutos en mucho menos tiempo que 2 horas. 5 minutos escribiendo FizzBuzz y 2-3 preguntas rápidas sobre características específicas del idioma le dirán si son absolutamente inútiles. Y eso es lo mejor que puedes hacer en una entrevista de trabajo.

Déjame decirte lo que pensaría si me hicieran un examen de 2 horas por el privilegio de realizar una entrevista:

"Estas personas piensan que esto tiene valor, lo que significa que no tienen idea de lo que están haciendo, O saben que esto es una pérdida de tiempo, pero por alguna razón (probablemente siguiendo ciegamente los trámites burocráticos de Recursos Humanos), están dispuestos a desperdiciar la oportunidad del candidato". tiempo antes de que el candidato sea contratado Imagínese lo que pensarán que pueden salirse con la suya una vez que me estén pagando.

De cualquier manera, no quiero trabajar allí".



Hay otra cosa que podría alejar a los candidatos : la duración de su proceso de entrevista. Tienes gente haciendo una entrevista telefónica. Luego, una prueba para llevar a casa que tienen una semana para terminar. Luego pasas las pruebas. Luego establece una entrevista cara a cara con la gerencia. Luego (supongo) haces un par de entrevistas cara a cara. Luego vuelves con el tipo que quieres contratar. ¿Qué lleva eso? ¿2 semanas? ¿Más extenso?

En ese tiempo ya he recibido 3 ofertas. Acepté uno y empiezo la próxima semana. ¿Crees que voy a ir a hacer tu prueba de 2 horas?

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
Pero debería ser de 5 a 10 minutos. 30 minutos como máximo. - No tiene que ser tan corto, pero hacer que lo hagan en el sitio antes de irse aumentaría la tasa de finalización. No importa si es un desafío de 2 horas, si les pides que lo hagan en casa, no llegarán a casa y decidirán que no vale la pena el esfuerzo. Pero, en general, estoy de acuerdo en que es probable que un desafío rápido del tipo zumbido efervescente arroje resultados similares a una prueba más profunda con menos esfuerzo requerido para evaluar los resultados. Y si se tarda de 3 a 4 semanas en pasar por un proceso de contratación, ya he comenzado en otro lugar.
No me importan los procesos de entrevista más largos, creo que eso varía un poco. Es una cuestión de si los candidatos quieren un trabajo en cualquier lugar o con su empresa . Dame una semana o dos para hacer mi tarea y averiguar si quiero mudarme y dónde quiero mudarme, y cuánto costará, y es más probable que acepte la oferta. Apresúrame, y puede que no.
No, no necesitas ninguna prueba de programación. Lo que necesitas es un período de prueba.
@Agent_L Un empleado que gana $40,000 cuesta (en promedio) $16,000 para reemplazarlo. Reemplazar a un empleado que gana $80 000 cuesta $120 000. Esa es una cantidad increíble para pagar por un período de prueba para descartar a la mitad de sus candidatos cuando podría dar una prueba de 5 minutos gratis en su lugar. En serio, ¿por qué demonios contratarías a alguien y comenzarías a pagarle durante varias semanas o meses solo para descubrir que mintió en su currículum? ¿Por qué hacer eso cuando puedes pasar 5 minutos y no pagarles un centavo para descubrir lo mismo?
pero necesita saber qué tan familiarizados están con la plataforma en la que los hará trabajar. dependiendo del nivel de experiencia que requiera, la cantidad de concepción y arquitectura que su prueba puede requerir puede variar mucho.
@Shane ¿QUÉ? Solo les pagas por lo que trabajaron. Si mintieron, es obvio en los primeros días y luego los dejas ir (sin mencionar que si logró engañarte en la entrevista, contratalo como vendedor). $ 40k / año es simplemente $ 158 por día. Lo que citó son los costos de contratar a la persona equivocada basándose únicamente en las capacidades de resolución de pruebas. Y tarda meses en darse cuenta de que no es un jugador de equipo. Su solución es la que cuesta $ 16k, no la mía.
@Agent_L: Los costos de una contratación fallida son mucho más altos que los salarios mal gastados. Incluyen la necesidad de volver a realizar la contratación, por ejemplo, y toda la administración asociada con la incorporación de una persona a su personal. No sé de dónde salieron las cifras de Shane, pero no parecen descabelladas. Probablemente esos 16.000 están por encima del salario que se le dio a la mala contratación. Como está proponiendo soluciones alternativas, presumiblemente ha sido gerente de contratación o trabaja en alguna capacidad relacionada con la contratación.
Me parece que un período de prueba para conseguir un trabajo atraería a muchos programadores mediocres / terribles, mientras que los muy buenos no vendrán a trabajar para usted durante 1 o 2 meses para averiguar si los contratan. Solo es mi opinión
"No tiene que ser tan corto, pero hacer que lo hagan en el sitio antes de que se vayan aumentaría la tasa de finalización..." - Personalmente, haría que lo hicieran antes de que se les invite al sitio. Haz que lo hagan cuando envíen un currículum. ¿Por qué perder el tiempo con candidatos que no cumplen con los estándares mínimos o básicos?
@Agent_L depende de dónde trabaje. En algunos países, cuando comienzas un trabajo, no puedes solo para el chico después de 2 días, puede llevar semanas o meses y, mientras tanto, tienes que pagarles.
@Agent_L Vivo en uno de esos países donde es muy difícil despedir a alguien después de contratarlo. Tienes que pasar por un proceso formal que lleva meses.
Vale la pena agregar que estos mismos principios se aplican a todas las pruebas, no solo a las pruebas de programación. Todas las pruebas de "tareas" discriminan a las personas ocupadas y solicitadas , y tienden a evaluar las cosas incorrectas (conocimiento del dominio que se puede aprender en el trabajo, no aptitudes que no se pueden). Tuve exactamente lo mismo en un equipo que reclutó a diseñadores gráficos usando una tarea de varias horas de "diseño X en nuestro estilo de marca", que reemplacé con una especie de efervescencia en la entrevista para el pensamiento creativo .
@GustavBertram Sí, vivo en Polonia, donde es tan difícil despedir a alguien que ya nadie consigue un contrato de trabajo real. Contrato de duración predefinida, transferencia de derechos de PI, contrato para realizar una tarea específica, contrato de trabajo ocasional: las opciones son infinitas. Todo lo que necesita es la voluntad mutua de sortear las limitaciones.
@Shane, el costo de una mala estadística superior es muy interesante. ¿Tiene usted una fuente para eso? Te creo y estoy de acuerdo en que las malas contrataciones cuestan mucho, pero las cifras me parecen altas. ¡Gracias!
No entiendo a todas las personas que dicen que @Agent_L está mal y que será más caro. Se hace juicio para que te despidan por el motivo que sea y solo te tenían que pagar un mes de sueldo. Se podría decir que el proceso de contratación cuesta dinero, etc., pero no contratar a nadie también les cuesta dinero.
@EpicKip Entonces contratas a alguien para hacer un trabajo. Digamos que su salario mensual es de $1000. En lugar de ser productivos y generar una ganancia de $2000 para la empresa, no hacen nada. Luego se necesita un mes para encontrar a alguien nuevo. Con una buena contratación, la empresa podría tener $ 4000 dólares en su bolsillo después de las ventas y el salario. En cambio, es una deuda de $ 1000 por gastar el salario. Eso es $5000 que la compañía perdió. Hay otros factores, como cómo te vuelves más eficiente en el trabajo cuanto más tiempo estás en él, pero esa es en gran medida la esencia.
@Shane No puedes encontrar todo desde una prueba. Soy programador y cualquier lugar que contrate (al menos en los Países Bajos) lo contratará en base a una prueba de 1 mes (tienen una entrevista y tal vez una prueba muy pequeña). Y no contratar a nadie debido a un proceso de contratación largo/incorrecto le costará a la empresa más dinero en horas extras.
"tienen una entrevista y tal vez una prueba muy pequeña" Uhh, sí. Esa es exactamente la parte de la que estamos hablando aquí. La pregunta es sobre esa parte de la entrevista y si quizás se haga o no una prueba muy pequeña. Y mi primer párrafo continúa extensamente sobre cómo "No se puede encontrar todo en una prueba". Siendo de los Países Bajos, ¿tal vez hay un poco de barrera del idioma? Pero le sugiero que vuelva a leer la pregunta y mi respuesta porque creo que aquí estamos más de acuerdo que en desacuerdo.
@ Draco18s Primer párrafo: " Una cosa que he notado en la búsqueda de un trabajo recientemente es la cantidad de empresas que insisten en que les escribas una muestra de código según las especificaciones. No cualquier muestra de código, sino una aplicación completa y completamente funcional. Esto es absurdo, por varias razones ". Continúa diciendo: " Joel Spolsky habla sobre cómo es importante pedir a los desarrolladores que escriban código durante su entrevista. Pero también entra en detalles sobre cómo interpreta esto en su propia empresa: a saber, le pide a la gente que escriba funciones durante la entrevista ". Esto es idéntico a lo que estoy diciendo. 1/2
@Shane Quick, en una pizarra, escríbame una función que determinará si una lista enlazada individualmente contiene un bucle o no. Vamos. Además, no puede modificar la estructura de datos o crear una nueva lista.
2/2 Termina diciendo: " Haga algunas preguntas técnicas que requieran código en una entrevista ". La queja que está haciendo sobre las pruebas de codificación es sobre el tipo de prueba que estaba preguntando el OP. Esta respuesta recomienda lo mismo. Además, no estoy de acuerdo con que muestre que no pueden aprender. Muestra que aprendieron al menos algo. Su estilo de codificación no es 'Google para ejemplos de código y esperanza'. Además de mostrar la capacidad de haber aprendido programación 101, no mucho de lo que hará en el proceso de la entrevista puede mostrar que alguien está aprendiendo con el tiempo. O al menos, me encantaría saber cómo puedes averiguarlo en unos minutos.
Sí, esa sería una pregunta decente, suponiendo que su tienda funcione con tecnologías que usan listas vinculadas. Aunque, personalmente, no soy un fanático de los límites artificiales como los que tienes allí.
Una prueba para llevar a casa bastante larga antes de la primera entrevista cara a cara es una broma.
"Pero deberían ser de 5 a 10 minutos", entonces perderá muchos buenos candidatos que solo necesitan algo de tiempo para considerar diferentes soluciones, etc. 30 minutos tiene sentido.

Permítanme comenzar diciendo que contratar empleados en general es una ciencia patéticamente inexacta, y obtendrá varios resultados sin importar lo que intente. Habiendo dicho eso, sentí que debía compartir mis pensamientos sobre esto.

Creo que los ejercicios de programación son un fracaso, principalmente porque obtendrás personas que están desesperadas y tienen demasiado tiempo libre para completarlos. Si tienen un trabajo de tiempo completo, tendrías que preguntar cuánto tiempo/energía mental están tomando de su empleador actual para trabajar para alguien que ni siquiera les paga. ¿Quieres que te hagan cosas así?

Además, si son buenos, lo más probable es que se entrevisten con muchos empleadores. ¿Adivina cuáles priorizarán? Los que no piden completar proyectos antes incluso de hablar por teléfono con un gerente de ingeniería.

También está el problema del plagio. Claro, se descubrirán en la entrevista en persona, pero para entonces ya habrá perdido el tiempo de personas (presumiblemente) bien pagadas en la empresa entrevistando a esta persona.

Mi compañía actual lo hizo bien, y esta es la ruta que seguiría en su posición. Asígneles una pequeña tarea que solo debería tomar entre 90 y 120 minutos y dígales que justifiquen en los comentarios por qué eligieron esa forma de resolver el problema. Esto es algo que se puede hacer en una noche y le dará una idea de su forma de pensar.

Puedo decirles ahora mismo que si obtengo un proyecto que toma más de 8 horas, les doy las gracias pero no estoy interesado. Tengo un buen trabajo y una vida. Si un gerente ve eso como un problema, eso me dice que no le importaría mi equilibrio entre el trabajo y la vida en el trabajo (especialmente si no le importa antes de que lo tenga). Ninguna empresa, excepto quizás Google, Apple o Facebook, podría salirse con la suya.

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
@Aron no tiene sentido económico pagarles para que hagan la prueba dada la cantidad de desarrolladores que entrevistamos. Al mismo tiempo, estoy abierto a sugerencias sobre cómo mejorar el proceso. Mi única preocupación es si no hice esto y terminamos haciendo una mala contratación porque resulta que el tipo no puede programar (ha sucedido), nos costará mucho más a largo plazo.
No estoy de acuerdo con otros aquí y +1, desearía poder más, porque "Creo que los ejercicios de programación son un fracaso". Es como retroceder sugiriendo un desafío de programación, pero aún así. Estoy de acuerdo contigo, son ridículos y no sirven para nada porque he trabajado al lado de muchas personas que aparentemente pasaron estas pruebas pero son incompetentes. De hecho, muchas personas con las que trabajé no hicieron su trabajo real, sino que se sentaron allí a estudiar preguntas tipo entrevista para poder postularse a otros trabajos de programación en el trabajo. Este proceso necesita morir.
Google y Facebook tienen procedimientos de reclutamiento altamente optimizados y ninguno utiliza pruebas en el hogar como parte de dichos procedimientos.
Esto debe haber sido escrito antes de que el autor de la pregunta aclarara la duración de la prueba, porque ahora es una respuesta terrible.
@stannius Eso no es cierto. Facebook tiene un proyecto en casa como parte de su proceso de entrevista. lo he tomado
"Déles una tarea pequeña que solo debería tomar entre 90 y 120 minutos" Esto parece peor según su propia descripción que una tarea de programación que toma entre 30 y 60 minutos, que es lo que tienen actualmente.
Google también tiene una evaluación de programación en el hogar (en línea y cronometrada). Aunque no toma mucho tiempo en absoluto.
Bueno, o es un proceso nuevo (en el último año), no se usa para sus oficinas del área de Seattle, o no hacen que todos lo hagan.
@stannius: tiene razón sobre la parte de la prueba para llevar a casa, al menos para Google, según mi experiencia. Sin embargo, te harán escribir código durante la entrevista. Repetidamente. Por lo general, en una pizarra y frente a varios entrevistadores diferentes (que son todos miembros del equipo de desarrollo). Además, la respuesta no dice "los ejercicios para llevar a casa son un fracaso", dice "los ejercicios de programación son un fracaso". Que es muy diferente. Tanto Google como Facebook utilizan absolutamente ejercicios de programación cuando entrevistan a programadores. Esa parte de esta respuesta es simplemente incorrecta .
@aroth Me refería a ejercicios de programación para llevar a casa en ese contexto, no a los que se hacen en una pizarra durante la entrevista. Esperaría eso para cualquier empresa para la que entreviste sin importar qué.
¿Recuerdas a esas personas en la escuela secundaria que simplemente no eran inteligentes en absoluto? Sí, esas personas trabajarán contigo de una forma u otra. Pueden ser programadores, doctores, abogados, plomeros, profesores, lo que sea, hay gente tonta haciendo ese trabajo. El problema es que hay demasiados trabajos para llenar y no hay suficientes personas dedicadas, trabajadoras e inteligentes para llenarlos. Por lo tanto, obtienes a los mentirosos, los tramposos, los marrones en todos los campos en cada tipo de trabajo. He escuchado historias de terror de programadores que ni siquiera pueden encender una computadora, literalmente. No hay forma de combatirlo.
90-120 minutos? Si me dijiste que quieres que pase dos horas haciendo un ejercicio como parte de la primera entrevista, es mejor que esperes que las cifras salariales anunciadas sean notablemente más altas que las de la competencia, porque de lo contrario me iré y también todos los demás que no están desempleados. . Sólo los desesperados aceptan este tipo de pérdidas de tiempo y, a costa de ser injustos, suelen no ser los mejores programadores.
Entonces, ¿no contrataría a alguien que trabaja a tiempo completo y también en otros proyectos personales o de código abierto? No conseguirá que nadie gaste el 100% de su ancho de banda de programación para su empresa. Espero que puedan ayudar a sus hijos con la tarea.
Incluso Google, Apple o Facebook no solicitan un proyecto para llevar a casa de más de 8 horas. Sin embargo, muchos candidatos están dispuestos a hacerlo. Simplemente porque los proyectos para llevar a casa son una gran bandera roja.

En mi experiencia, los proyectos para llevar a casa no eliminan a los malos codificadores y probablemente hacen que los buenos codificadores encuentren un trabajo en el que no tengan que pasar por un aro para hablar con el gerente de contratación.

Piensa en ello de esta manera. Un buen codificador puede obtener fácilmente entrevistas telefónicas y en persona. Cada aro adicional que tengan que atravesar significará que tomarán la ruta más fácil y serán entrevistados (y serán contratados) por otra persona que pagará lo mismo. Si hace que las personas salten a través de los aros, asegúrese de que vean que vale la pena desde el principio.

Un mal desarrollador puede tardar todo el tiempo que quiera. No los verá tomar 4 veces más tiempo; solo verás la prueba completada. Tampoco los verá ir a Google o a su amigo para obtener ayuda con una ifdeclaración.

Mi última empresa hizo esto, y la gran mayoría de las personas que trajimos para una entrevista en persona fallaron en Fizz buzz (alrededor del 65%). Creo que esto sucedió porque, sin darnos cuenta, eliminamos a personas buenas y ocupadas que no necesitaban la entrevista de otra empresa y, al mismo tiempo, colgamos una entrevista fácil frente a programadores malos.

Lo que creo que deberíamos haber hecho en su lugar

En lugar de dar a las personas una tarea para llevar a casa que tomó de 15 a 20 minutos para calificar, deberíamos haber hecho una entrevista de Skype de 15 a 20 minutos en la que hicimos preguntas como Fizz buzz. Esto habría llevado la misma cantidad de tiempo, pero probablemente habría eliminado a los malos programadores antes de una entrevista en persona de dos horas.

FYI -> Aquí hay un artículo muy detallado sobre Fizz-buzz y prácticas generales de entrevistas.

Una vez me pidieron que completara una tarea de programación en hackerearth.com y me pidieron que ingresara información personal para registrarme. Fue un desvío inmediato. Además, la tarea de programación en sí misma no era un indicador confiable de la capacidad. Estoy de acuerdo en que tales tareas para llevar a casa realmente no valen la pena.
La primera y única vez que realicé una tarea de programación para llevar a casa, el gerente de contratación me persiguió porque no tenía un plazo de entrega de 1 día. Después de eso, decidí si obtenía una tarea para llevar a casa nuevamente, para decir que no estaba interesado en el trabajo.
el tiempo solo no es suficiente para completar correctamente una tarea.
El problema con la práctica de codificación de entrevistas de Fizz Buzz es que tienes números que son divisibles por 3 y 5. Eso es lo primero que me viene a la mente, y cómo querrías el orden en esas situaciones. A menos que solo quieras datos.
@Chad, ¿qué hay para ordenar? coliru.stacked-crooked.com/a/bab3aa8f4ea44fcd
@TechnikEmpire tiene números que son divisibles por 3 y 5. Entonces obtienes tanto Fizz como Buzz en una sola iteración. El orden en que uno de los dos viene primero depende de cómo ordene sus divisores, por ejemplo, 3 primero o 5 primero. Algo que vi en tu código de ejemplo, has hecho exactamente lo mismo.
@Chad, está bien, simplemente no sabía a qué te referías.
@TechnikEmpire por cierto, solo por diversión, lo hice a la vieja usanza. coliru.stacked-crooked.com/a/31dc2f5cbbc0e76b
@TechnikEmpire Realmente disfruté leyendo su código, es interesante ver hasta dónde ha llegado C++.
@Chad Niza. eso es extraño para mí porque nunca he usado printf en mi vida. jajaja
Cuéntame más sobre estas ifafirmaciones: ¿son esas las que causan un ataque de velociraptor?
@CodeJockey Sí, si las declaraciones son malas, vamos, manténgase al día con los 10000000 de "estándares" arbitrarios que crean personas y empresas aleatorias para decidir quién es más elitista que el siguiente. Caramba, no pasaste la prueba de la entrevista, debes ser un mal programador (esto es obviamente sarcasmo).
Mi forma favorita de hacer FizzBuzz si tengo mi elección de idioma (sin matemáticas, declaraciones if o técnicamente incluso bucles):filter fb{@($_,"Fizz","Buzz","FizzBuzz")[0+(@(2)[$_-match'[^05]$'])+(@(1)[$_-notmatch'(^([369][0369]?|[258][147]|[147][258]))$'])]}1..100|fb
@CodeJockey: Y te pediría que escribieras una versión que pueda entender.
@ gnasher729: es por eso que no me daría la opción de elegir el idioma o me pediría (si tuviera tiempo) que explique cómo funciona mi ejemplo. En el caso de mi ejemplo de arriba (PowerShell), en lugar de matemáticas (es decir, más que simples sumas y multiplicaciones) usas expresiones regulares; en lugar de declaraciones if, utiliza la selección automática de índice de matriz; y en lugar de hacer un bucle, usa un rango de enteros canalizados a un filtro.
@gnasher729: esta es la versión más legible que agregué a Rosetta Code, si está interesado: rosettacode.org/wiki/…
Ha explicado todo mi problema con problemas de programación de pizarra especialmente difíciles. Los grandes programadores no se molestarán en estudiarlo, ya están nadando en ofertas. Los programadores ambiciosos pero mediocres saben que están en desventaja y estudiarán. El resultado final de ese tipo de prueba, que es el resultado final de la mayoría de las entrevistas sin sentido, es que la señal se pierde totalmente en el ruido.
@CodeJockey Fallarías tanto en la prueba de mantenibilidad como en la prueba de smartass :-) Solo (algo) bromeando sobre la última; pero lo primero es extremadamente importante. Las soluciones "inteligentes" son derribadas en la revisión del código

Una visión contrastante, de alguien en las trincheras a ambos lados de esta cuestión. Sospecho que esta respuesta atraerá votos negativos, pero es una opinión muy informada, desarrollada durante varias décadas en este negocio. Como me gusta hacerlo, todavía escribo código todos los días para ganarme la vida y como pasatiempo en mi "abundante tiempo libre", pero también he sido quien tomó la decisión final sobre la contratación de un par de docenas de programadores, y he ayudado a entrevistar y asesorado en la contratación de un número bastante grande más.

Lawrence tiene razón: la contratación es lamentablemente inexacta. Pero estamos mejorando con el tiempo. Más que chats cara a cara, más que preguntas de trivia, los desafíos cortos de programación en el sitio son una parte cada vez más esencial de eso: no solo por habilidad, sino por actitud.

Tenga en cuenta que dije "corto" . Les damos a los candidatos una computadora portátil configurada con un Eclipse correctamente instalado (nuestro IDE elegido) cuando vienen a la entrevista. La configuración adecuada significa que tienen acceso a la fuente jdk, pero no tiene Internet, y se les pide que no usen teléfonos celulares durante la prueba. Tienen una hora para resolver de cero a cinco problemas, comenzando desde "FizzBuzz" y subiendo en complejidad hasta algo del orden de un sistema simple de productor/consumidor múltiple de subprocesos múltiples.

Nadie ha resuelto los cinco en una hora, y no espero que nadie lo haga nunca (puedo escribir soluciones para cinco en menos de una hora, pero por supuesto he visto los problemas y los he resuelto todos anteriormente, así que estoy no es una prueba justa).

Por cierto, hemos tenido programadores ostensiblemente experimentados que no lograron hacer bien FizzBuzz. Permítanme decirlo nuevamente: hemos tenido un puñado de candidatos que no completaron FizzBuzz correctamente. Por lo general, al no seguir las instrucciones, pero leer las especificaciones es una parte esencial de ser un desarrollador.

Les pedimos que escriban código mientras están aquí en las instalaciones en lugar de darles tarea por varias razones, en parte por el riesgo de hacer trampa y en parte para darles a cada candidato la misma oportunidad de resolver los problemas. También rotamos los problemas dentro y fuera del conjunto de desafíos, y luego discutimos las soluciones con los candidatos.

Me siento extremadamente fuerte en este tema. Nunca he visto a un candidato rechazar un puesto o abandonar el proceso de entrevista debido a nuestra prueba de programación. Pero eso puede estar influenciado por el hecho de que les decimos a los reclutadores que nos atienden que el proceso incluye programación en el sitio. Por lo tanto, es posible que no veamos a los candidatos que piensan que pedirles que escriban una hora de código es "trabajo no remunerado". Si es así, buen viaje. Si piensan que una hora de codificación es más "trabajo" que una hora de responder preguntas de trivia, o que sus respuestas a problemas de prueba pueden producir algo útil, no necesito su actitud.

Una vez tuvimos un candidato que se quejó de la prueba, porque pensó que era demasiado mayor para tener que probarse a sí mismo (eso no es especulación, lo dijo). Y lo hizo bien en los desafíos, y tenía toda la experiencia que queríamos. Pero era un empleado terrible : aparentemente también pensó que era demasiado mayor para recibir instrucciones o aprender, y finalmente tuvimos que despedirlo.

Una de las cosas que he decidido a lo largo de los años que hemos estado haciendo esto es que cualquier empresa que no haga pruebas tiene menos probabilidades de contratarme como empleado. Al igual que sus respuestas a preguntas como qué utilizan para el control de fuente, etc., si una empresa realiza pruebas, me dice mucho sobre qué tan buenos son en el negocio del desarrollo de software.

Entonces, ¿qué debes hacer? Debe hacer lo que funcione para su organización, pero mi consejo es que continúe con las pruebas, pero hágalas en el sitio, como parte de la entrevista. Dígales con anticipación que eso es parte del proceso y hágalo antes de que se reúnan con la alta gerencia (pero debe reunirse con ellos primero para ayudarlos a sentirse cómodos). Y realmente: omita la entrevista con la alta gerencia si fallan. No se preocupe por la popularidad con los candidatos o carteles en Internet. El costo de una mala contratación es mucho peor que el costo de retrasar hasta que haga una buena contratación .

No espero votos negativos. Está perfectamente en línea con las otras respuestas, argumentando a favor de pruebas más cortas en el sitio y en contra de pruebas largas en el hogar. Lo único con lo que personalmente no estoy de acuerdo es con la cláusula de "no internet". Para un desarrollador, Internet es una de las herramientas básicas de su oficio: quitárselo muestra lo bien que les va sin Internet, lo cual es irrelevante para el 99 % de los trabajos de desarrollo.
@Peter Incluso puede ser mejor permitir el acceso a Internet y simplemente ver a dónde van. ¿Van a StackOverflow para verificar algo? ¿Vienen aquí a quejarse? (Por supuesto, dicho monitoreo debe indicarse explícitamente al programador y requerir su consentimiento para continuar evitando controversias).
Honestamente, su respuesta no contradice en absoluto las otras respuestas / sentimiento general. En mi opinión, hay una (enorme) diferencia entre "hacer esta tarea en su propio tiempo para tener una oportunidad en este puesto" (proceso actual de OP) y "evaluemos juntos su capacidad y ajuste para la empresa" (lo que está sugiriendo) .
En mi empleador actual, hacemos algo similar a esto, y esto es lo más cercano a la respuesta que habría escrito. Una cosa que agregaría (¿quizás podría agregar como una opción o nota para OP?): Permitimos el acceso a Internet y hacemos las pruebas como ejercicio de "codificación de pares" con los miembros del equipo con los que la persona estaría trabajando. El socio de codificación ayuda a explicar los objetivos y está allí para responder preguntas, ayudar en las cosas si es necesario, es decir, de manera muy similar a cómo trabajarían juntos en la práctica. No solo podemos evaluar las habilidades técnicas, sino que también obtenemos una buena idea de cómo el candidato trabaja con los demás.
@NeilSlater Estoy a favor del enfoque en el sitio, pero ¿qué pasa si el candidato está en el extranjero haciendo una pasantía técnica? Estoy entrevistando a un candidato que se encuentra exactamente en esa situación en Hong Kong, que busca regresar al Reino Unido una vez que termine.
@bobo2000: Si los candidatos son casos especiales, debe averiguar qué hacer. Podría ejecutar la prueba de programación de pares a través de videoconferencia para su ejemplo, y permitirle un poco de tiempo adicional. ¿Quizás esta es la base para una sesión de preguntas y respuestas de Workplace SE diferente? De cualquier manera, no creo que preocuparse por todos los posibles casos especiales deba impedirle tener un enfoque estándar bien pensado, y es bastante normal suponer que una parte de la entrevista es en el lugar de trabajo.
De acuerdo con @Peter. Si te estuviera entrevistando, el asunto de "no Internet" me haría pensar que valoras más memorizar una API que entender los conceptos, lo que me haría pensar dos veces antes de aceptar un trabajo u oferta de tu empresa. De lo contrario, generalmente estoy de acuerdo con la respuesta y la última oración es especialmente cierta.
@reirab No estaba claro. "Sin internet" no significa "memorizar la API". Cualquier ide decente (usamos eclipse) lo vincula a la fuente jdk. Estoy en Windows, por lo que "Declaración abierta" está vinculada a la tecla F3. Lo golpeo mucho . Me decepcionaría un candidato que no lo hiciera. I have just edited my answer to make clear that the jdk sources are available to the candidate.
@CPerkins desbordamiento de pila? Tal vez porque no soy un tipo de Java, pero escuchar que no hay bit de acceso a Internet sería una señal de alerta importante para mí. No me importa perder el tiempo reinventando ruedas. A menos que las tareas sean tan básicas (por ejemplo, fizzbuzz) que cualquier programador podría resolverlas de inmediato. Creo que les gustaría verme resolver problemas , el IDE es solo una herramienta de muchas que son necesarias para eso.
@JaredSmith sí, soy yo, ¿por qué? Naturalmente, también hacemos diseño verbal, repasamos trabajos anteriores, todo eso. Pero así es como lo hacemos. Me siento cómodo sabiendo que nos podría costar algunos buenos candidatos. El "no acceso a Internet" es deliberado. Se trata de la capacidad del candidato para solveresolver problemas a partir de su propio conocimiento y habilidad, respaldado por las fuentes jdk cuando sea necesario para recordarnos (a mí también) sobre los detalles de la API, en lugar de buscar en Google la solución de otra persona o pedir ayuda a un amigo. .
+1 explícitamente para "Una de las cosas que he decidido a lo largo de los años que hemos estado haciendo esto es que cualquier empresa que no realice pruebas es menos probable que me tenga como empleado". Una empresa que se preocupa por mi capacidad de código tiene muchas más probabilidades de obtener mi voto que una empresa que solo cree en mi palabra sobre las habilidades y le gusta mi personalidad. Esos también son importantes, pero no exclusivamente.
@Peter Estoy de acuerdo contigo, pero solo para los ejercicios más difíciles. Nadie debería necesitar Internet para resolver FizzBuzz u otros ejercicios triviales, pero no quiere perder a un buen programador solo porque no puede recordar alguna sintaxis oscura que usó una vez y nunca más, y se puede encontrar en Internet en cinco segundos. Buscar en Google es tanto una habilidad de desarrollo como la codificación en sí misma: conozco personas que son absolutamente terribles en eso. Se toman horas buscando algo que se puede encontrar en minutos con las palabras clave correctas.

¿Por qué no hacer pruebas en casa?

Incluso si ignoramos la posibilidad de hacer trampa y el filtro inverso que hace que los candidatos buenos y honestos eviten las empresas con pruebas de codificación en el hogar, el valor de las pruebas de codificación en el hogar es limitado.

Si es para un puesto sénior , un desarrollador sénior con don de gentes podrá saber en menos de 10 minutos si el desarrollador sénior al otro lado de la línea es bueno o simplemente está inventando cosas. No sabremos qué tan bueno exactamente, pero sabremos tanto, si no más, de lo que nos dice cada prueba de codificación en el hogar concebible.

Si es para un puesto junior , no esperamos mucho en términos de experiencia técnica. Estamos buscando entusiasmo, disposición para aprender y talento, ninguno de los cuales se detecta en una prueba de codificación en el hogar. Hay demasiadas cosas que los jóvenes pueden ignorar. Si los contratamos, debemos capacitarlos de todos modos.

¿Cómo probar en su lugar?

Como filtro, dales 10 minutos para resolver una variación de FizzBuzz en el sitio durante la primera ronda de entrevistas o, si te abruman con buenos CV y ​​necesitas otro filtro, hazlo por Skype antes de la primera ronda real de entrevistas.

Una vez que hayan pasado los filtros, necesita saber más sobre las habilidades de codificación de sus candidatos. Recomiendo pasar de 30 minutos a un máximo de 2 horas de programación en pares o revisiones de código: trabajo real real, en lugar de un ejercicio. Repita 1-2 veces con diferentes compañeros. La ventaja de la programación en pareja y las revisiones de código es que el desarrollador ya tiene suficiente conocimiento para contribuir.

No se preocupe de que la prueba sea diferente para cada empleado: el objetivo del proceso de contratación no es encontrar a la persona que obtenga la mejor puntuación en un par de pruebas medibles y repetibles. El objetivo es contratar a una sola persona que haga bien el trabajo.

Te estás engañando a ti mismo si crees que alguien puede decir en 10 minutos si la persona al otro lado del teléfono es buena.
¿Entusiasmo y ganas de aprender? ¿Qué pasa con el conocimiento existente o la capacidad de aprender?
@djechlin Es bueno tenerlo, pero no tan importante para un Junior. Por supuesto, si afirman estar entusiasmados con la codificación y dispuestos a aprender, pero no saben nada, entonces cuestionaría su entusiasmo. Tengo la suerte de nunca haber conocido a nadie que estuviera dispuesto pero no fuera capaz de aprender.
lol, entonces tu criterio funciona porque lo adaptas para que signifique lo que necesites cuando ves un candidato que te gusta o no. ¿Por qué no simplemente ir con "tiene chispa" o "carece de chispa", es más simple.
Aparte, enseñando una clase de matemáticas avanzadas, definitivamente me he encontrado dispuesto pero no capaz.
@djechlin Tienes razón. Ajustado por incluir "talento".
@Dunk No estoy de acuerdo. Me tomaría 10 minutos decidir si eran "ALGO buenos". Pero tomaría mucho más tiempo ver si eran "lo suficientemente buenos". El objetivo de tener "rondas" de entrevistas es eliminar progresivamente a los candidatos. Lo que ha hecho el OP es crear el equivalente a una "búsqueda de valía".
Para ser honesto, muchos de los jóvenes que hemos entrevistado han realizado 1 o 2 prácticas técnicas, por lo que los evaluamos. Si es un junior y nunca ha usado un marco MVC, o ha creado un programa en el que ha realizado la integración de API, entonces no estoy seguro de querer incorporarlos. El tiempo y el costo que lleva capacitar a alguien desde cero no hace que la empresa valga la pena.
+1000 para la parte "10 minutos al teléfono con un desarrollador sénior". Si desea saber si un desarrollador sabe lo que hace, conéctelo con otro desarrollador en cuya opinión confíe y lo resolverán más rápido que cualquier prueba. Las pruebas breves en persona están bien si insiste (pero lejos de ser necesarias), pero el método mucho más confiable para eliminar a los malos candidatos es que un compañero realmente interactúe con ellos.
¡Tuve que desplazarme demasiado para encontrar esto!
Bueno, Aron, si pudieras eliminar a las personas que son "algo buenas" en 10 minutos, entonces estás perdiendo el tiempo como desarrollador. Las empresas pagarían mucho, mucho dinero a las personas que solo pudieran alimentarlos con buenos desarrolladores. Diablos, si realmente quisieras seguir haciendo desarrollo, entonces probablemente harías una fortuna investigando a los desarrolladores un día a la semana y tendrías suficiente dinero para financiar tu propia empresa de desarrollo y hacer lo que te interesa. Especialmente, dado que su empresa solo contrataría a los "buenos" desarrolladores.
Con respecto a: "No es un ejercicio basado en código real, sino trabajo real real", esto necesita algunas advertencias/explicaciones. Te meterá en problemas legales en muchos países si tu proceso de entrevista involucra a candidatos que realizan un trabajo real que posiblemente podría beneficiar a tu empresa sin que se les pague. No importa si cree que la cantidad es demasiado trivial o si no usará esa revisión de código: es un trabajo real y muchas legislaciones requerirán que se pague a los candidatos (o incluso que se consideren contratados, aunque sea temporalmente, en ese momento) .
Tengo 10 años de experiencia y me enviaron una prueba de rol de contrato que me habría llevado de 2 a 3 días para hacerlo correctamente, no hace falta decir que me reí y rechacé.
Es posible que no identifique los (muy) buenos en 10 minutos, pero debería poder identificar los (muy) malos

Aquí hay otro punto que no veo cubierto en las respuestas existentes (que creo que cubren bien el tema en general). Echaría un vistazo de cerca y seriamente a cuánto tiempo le toma a la gente completarlo. Tuve cuatro entrevistas de trabajo durante las cuales tuve que completar un ejercicio de programación, cada uno de los cuales se hizo de manera diferente (y cada uno tenía sus propias ventajas y desventajas). Dos de los cuatro (números 3 y 4 a continuación) tomaron mucho más tiempo de lo que dijeron que debería, y terminé renunciando a ambos debido al nivel de dificultad involucrado. Los describí a continuación y los clasifiqué de mejor a peor desde mi perspectiva.

  1. Durante la entrevista técnica, me sentaron frente a una computadora que tenía una versión reducida de su código base y me pidieron que resolviera tres problemas relativamente breves relacionados con él (encontrar y corregir un error que habían agregado a propósito, agregar un nuevo campo a una tabla de información, etc.). Me dieron exactamente una hora para hacerlo, y después de una hora repasaron mi solución y cómo abordé los problemas. Esto les dio más información sobre mí como programador, mientras respetaban mi tiempo manteniéndolo breve y directo.
  2. Durante la entrevista técnica, me pidieron que trabajara en un problema que habían encontrado durante el desarrollo en una pizarra mientras podía intercambiar ideas con ellos. Esta fue la opción más corta, al mismo tiempo que les daba la oportunidad de ver cómo soluciono los problemas y cuánto puedo hacer realmente el trabajo necesario.
  3. Durante la entrevista técnica (para un puesto junior de desarrollo web de Ruby on Rails) me encargaron crear una aplicación web desde cero que navegaría a un sitio web, completaría múltiples formularios a medida que se presentaran, extraería datos de la página resultante y presentaría eso al usuario. Dijeron que este debería ser un ejercicio rápido, y puede haber sido para un desarrollador web de alto nivel, pero habiendo tenido solo un año de experiencia profesional en ese momento, pasé cuatro horas tratando de hacer que todo funcionara antes de darme por vencido y continuar. casa (todos los entrevistadores se habían ido horas antes que yo porque era una entrevista por la tarde, dijeron que debería guardar el programa terminado cuando terminara). Esta es una asignación ridícula para el puesto indicado, no les dio idea de mis habilidades de codificación, y me pareció que solo estaban tratando de obtener trabajo gratis del acuerdo. No hace falta decir que ni siquiera quería el trabajo cuando me fui ese día.
  4. Incluso antes de tener una entrevista técnica, me asignaron la tarea de crear una aplicación web que aprovecharía una API que usaba su empresa para "hacer algo interesante". Esto era exactamente tan amplio como suena. Esto me obligó a hacer lo siguiente incluso antes de intentar crear la aplicación: crear una cuenta de desarrollador para la API, descargar el kit de desarrollo de la API, crear una aplicación web de acceso público (con otra cuenta de desarrollador), aprender la API y crear un archivo de datos. repositorio para acceder con la API. Esto, por supuesto, tomó muchas horas solo para comenzar, y poco después de comenzar con la aplicación web en sí, obtuve una entrevista de trabajo diferente y poco después una oferta de trabajo, por lo que descontinué el trabajo en la asignación.

Entonces, para responder más directamente a su pregunta, ¿debería tener un ejercicio de programación? Sí, pero asegúrese de que esté diseñado para evaluar lo que realmente le interesa y que no requiera una tonelada de trabajo superfluo para el entrevistado. ¿Quieres saber sobre su pensamiento algorítmico? Plantéeles un problema de algoritmo. ¿Quieres saber sobre su estilo de codificación? Dales un problema de codificación. ¿Quieres conocer su proceso de desarrollo? Discuta su proceso con ellos mientras resuelven un problema.

¿los entrevistadores se dieron por vencidos y se fueron a casa? FFS, de todos modos no querías trabajar allí. Me hubiera ido 2 minutos después que ellos.
No se dieron por vencidos sino que se fueron a casa del trabajo. Una vez que me dieron la tarea, me dejaron solo para terminar el problema, y ​​como era una entrevista por la tarde y estuve trabajando en el problema durante cuatro horas seguidas, terminaron yendo a casa. Un par de empleados todavía estaban allí cuando me fui, y me di cuenta de que era hora de tirar la toalla cuando esos tipos ordenaron la cena en la oficina.

Permítanme comenzar con:

  • Me dieron pruebas para completar en casa que oscilaron entre 15 minutos y 10 horas.
  • Me han dado pruebas en línea para ejecutar.
  • Me han encargado que escriba la respuesta a FizzBuzz y otras pruebas de Internet de moda en pizarras.
  • Me han preguntado acerca de las tapas de alcantarilla cuadradas vs redondas.

En resumen, he tratado prácticamente todas las formas diferentes en que a los desarrolladores les gusta manejar las entrevistas. Para ser honesto, dudo seriamente que la gran mayoría de las personas que me entrevistaron siquiera entendieron cuáles eran los resultados potenciales de cada una de esas pruebas y, en última instancia, solo contrataron a personas sobre si les "gustaban" o no.

Antes incluso de publicar una lista de trabajos, debe sentarse y analizar exactamente qué es lo que está tratando de contratar y "desarrollador" no es una respuesta, al menos, no es adecuada. Una buena respuesta a esto sería algo así como "experto en dominio hipotecario".

Encontrar a alguien que pueda escribir un poco de código o buscar en Google cómo aplicar un patrón en particular es trivial en comparación con encontrar a alguien que haya estado en el negocio en el que está y pueda aprovechar ese conocimiento. En otras palabras, si estuviera contratando para una compañía de documentación hipotecaria, elegiría a alguien que pudiera hablar sobre la diferencia entre un préstamo fijo de 15 años y un préstamo ARM en lugar de alguien que pudiera escribir un algoritmo de clasificación de burbujas en 2 minutos. La razón es que la gente de negocios "normal" hace todo tipo de demandas extrañas y los expertos de dominio pueden llegar más fácilmente al corazón de lo que se necesita, mientras que alguien que no sabe nada felizmente agregará cosas que son inútiles o harán que la aplicación sea realmente mala.

Volviendo a las preguntas, solo haga preguntas de si/no .

¿Es fundamental que la persona pueda decirle la diferencia entre un método virtual y abstracto? Podría ser, por lo general no lo es. Apuesto a que una buena parte de los desarrolladores apenas saben cuándo usar esas palabras clave, pero no son sus superestrellas, son el rango y el archivo que usan no pueden codificar sin los diseñadores visuales.

¿Es crítico detectar cuándo una consulta está abierta para la inyección de sql? Para una posición Sr - absolutamente; para una posición Jr. no. Esto es algo que se puede entrenar y manejar fácilmente a través de la revisión del código. De ahí la razón por la que quieres el sr. saberlo por dentro y por fuera, para que puedan entrenar a los juniors.

¿Es fundamental que conozcan el valor máximo exacto de un Int32tipo de datos? Normalmente no: ese nivel de conocimiento trivial es para lo que está Google; pero tal vez su requisito sea codificar en dispositivos con memoria limitada; en ese caso: absolutamente.

Entrevisto y contrato a desarrolladores. No envío pruebas a casa; es demasiado fácil tener la ayuda de un amigo. No utilizo sitios de prueba en línea; dado que la puntuación debe automatizarse, es trivial jugar. No pido a los candidatos que escriban la respuesta a fizzbuzz; casi todos han visto esa prueba y deberían saber la respuesta de memoria; todos los demás ingresaron al campo en el último año y son jr. de todos modos. Tampoco hago preguntas triviales: ser capaz de recitar la respuesta generalmente solo significa que has escuchado la pregunta antes.

Lo que hago para entrevistar a la gente:

  • Les pido que describan uno o dos proyectos anteriores. Todo lo que me importa en este punto es hacerlos sentir cómodos y hacerlos hablar. Esto es un sí/no porque si no puedo entender lo que están diciendo, entonces no puedo trabajar con ellos.

  • Les hago algunas preguntas específicas sobre la tecnología que necesito que usen. Si es un servidor SQL, preguntaré sobre la actualización en una unión. Si es HTML, les entregaré un archivo html de 10 líneas con un par de clases CSS y les preguntaré cuál es el resultado. Estas son preguntas triviales para personas con experiencia en esas áreas y eliminan rápidamente a los pretendientes.

  • Si busco un desarrollador sénior, le haré preguntas sobre el conocimiento del dominio. No se trata de casos extremos, sino de principios básicos. Si necesito que dirija un proyecto en un back-end de contabilidad, es mejor que tenga una comprensión de los principios básicos de contabilidad.

  • Si estoy buscando un desarrollador Jr., le preguntaré sobre proyectos favoritos. todo lo que quiero saber es el tipo de tecnología utilizada. Esto debería darte una idea de lo que realmente quieren hacer. En otras palabras, no es probable que un desarrollador de C# esté haciendo proyectos favoritos en php. Sinceramente, no espero demasiado de un desarrollador jr, excepto que sea entrenable. Si están trabajando activamente en un proyecto favorito, entonces puedo capacitarlos. Si son del tipo que necesita gente que les diga qué hacer, hay empresas mucho más grandes en las que estos tipos pueden trabajar.

No hago estas preguntas sobre la marcha, las posibles respuestas se consideran con anticipación y se ajustan a un patrón de ir/no ir. Si una pregunta no se ajusta a eso, entonces no es relevante. También le pregunto a todos los candidatos lo mismo a menos que esté 100% convencido de que no los contrataré, momento en el cual detendré la entrevista.

Si por alguna razón aún insiste en enviar una prueba a casa, asegúrese de que las habilidades requeridas para completar con éxito esa prueba en un tiempo razonable sean realmente habilidades que le interesen.

Una empresa me hizo una prueba para llevar a casa que implicaba escribir un proveedor de servicios criptográficos personalizado. Completé la prueba porque era algo interesante; me contrataron En ningún momento de mi tiempo hice nada ni remotamente relacionado con la seguridad, la criptografía o incluso las matemáticas más allá de agregar algunos números. Me pregunto a cuántas personas expulsaron con esa prueba.

Gracias por tu respuesta, buena respuesta. Tenemos un enfoque similar menos la prueba para llevar a casa.
Un buen desarrollador puede adquirir conocimiento del dominio mejor que un buen experto en el dominio puede aprender a programar bien. Está reduciendo innecesariamente su grupo de contratación y su empresa sufrirá por ello.
@DavidThornley: Es probable que usted y yo tengamos diferentes definiciones para un desarrollador excelente, bueno y mediocre. En mi mundo, un gran desarrollador hará las preguntas correctas y adquirirá conocimiento del dominio rápidamente. Un buen desarrollador generalmente puede ejecutar bien lo que se le dice, pero no plantea preguntas inteligentes al respecto. Uno mediocre no cuestiona nada ya menudo tiene que rehacer su trabajo más de lo normal. Desafortunadamente, encontrar un gran desarrollador es mucho más difícil que encontrar buenos que ya conozcan el dominio.
"el valor máximo exacto de un tipo de datos Int32" ... ermmm, es INT_MAX, ¿no?

Desde el punto de vista de una persona que busca trabajo, generalmente evito los lugares que tardan más de 1 hora en codificar. Una vez fui a este lugar que requirió un proyecto de codificación java de casi 3 días. Lo hice todo y el chico incluso quedó impresionado con eso, pero me dijeron que contrataron a alguien más después de la segunda etapa de la entrevista. Después de eso, si llego a una empresa, ignoraría o aprobaría cualquier proyecto que requiera más de un par de horas para completarse. Mi tiempo es tan valioso como el de ellos y prefiero no desperdiciarlo en cosas que no me llevarán a ninguna parte.

Dicho esto, si su ejercicio de codificación es demasiado largo, tal vez las personas no estén dispuestas a dedicarle tiempo. Intentaría reducirlo de modo que tome una hora como máximo, pero al mismo tiempo demuestra una comprensión de la codificación y tal vez poniendo una fecha límite como, "Por favor complete antes de COB mañana" o algo así. Todavía pueden "copiar y pegar" algo en línea, pero lo dificultan al ser específicos en lugar de algo que lee en línea.

Un currículum sólido, referencias y ser capaz de desempeñarse en una prueba corta, puede ser todo lo que necesita. Cíñete a tus armas y buena suerte con la búsqueda de empleo.
Amazon se acercó a mí hace unos años, me pidió que hiciera una prueba de 3 horas con 3 acertijos diferentes para descubrir el código AND. Apagué los 3 pero solo terminé uno a mi satisfacción. Fue un poco divertido, pero la falta de cualquier tipo de retroalimentación fue muy decepcionante. Un año más tarde tuve otra entrevista de codificación con ellos, pero esta vez a un miembro del equipo se le ocurrió un rompecabezas y lo codificamos juntos. No conseguí el trabajo, pero aprendí tanto en esos 90 minutos de programación en parejas como en medio semestre de educación tradicional.
La única vez que tuve un problema de programación "para llevar a casa", la empresa nunca respondió después de que envié mi solución. Me puse en contacto con ellos después de una semana y el gerente dijo que lo consiguió, pero que aún no había tenido tiempo de revisarlo. Nunca volvieron a llamar, y yo tampoco.
"El tipo incluso quedó impresionado con eso, pero me dijeron que contrataron a otra persona" ¿Pero no lo suficientemente impresionado como para contratarlo a usted? ¿Te dijeron por qué?
@DaveisNotThatGuy Es como la prueba del OP. La prueba se administró solo para obtener una entrevista cara a cara; no se usa para contratarlos, sino para asegurarse de que estén bien informados antes de considerarlos. Quedaron impresionados de que completé la tarea y obtuve resultados correctos. Supongo que simplemente no quedaron impresionados con mi entrevista.
Entonces, aunque luego descubrieron que eras un buen programador, sabían antes de que salieras de la entrevista inicial que estabas en la columna de no contratar. ¿Cómo podría haber hecho la prueba de codificación de manera diferente para compensar eso y avanzar a la siguiente ronda? Apenas te parece justo.

Solía ​​​​creer firmemente en las pruebas de codificación y la codificación de pizarra, pero comencé a darme cuenta de que son bastante inútiles, porque

¿Qué estás probando, de todos modos?

Una prueba de pizarra o una breve prueba de programación le brinda una idea del individuo, pero en realidad no tanto. A menos que planee que alguien pase su tiempo escribiendo código en una pizarra o código de estilo FizzBuzz.

¿Qué quieres ?

Quieres a alguien que sea:

  • apasionado
  • dispuesto a aprender
  • capaz de resolver problemas*
  • razonablemente técnico
  • va a ayudar a su equipo a mejorar

* Tenga en cuenta que la mayoría de los desarrolladores resuelven sus problemas sabiendo qué términos buscar en Google.

Lo último que desea contratar es a alguien que no encaja bien en su equipo porque lo arrastrará hacia abajo.

¿Cómo se puede probar para estos?

  • Pregúnteles acerca de un proyecto que disfrutaron. Si parecen reacios a hablar de ello, intente expresar una leve incredulidad, por ejemplo, "No puedes hacer X, ¿verdad?" Si es algo que les apasiona, te corregirán. Esto también te ayudará a saber si son técnicos o no.
  • Pregúnteles acerca de las cosas que han aprendido recientemente. O lo que aprendieron del proyecto en el que trabajaron disfrutaron.
  • Pregúnteles sobre la última vez (o una vez) en la que les faltaba algún conocimiento. ¿Cómo obtuvieron la información que necesitaban? ¿Fueron a un compañero de equipo? ¿Buscaron en internet?
  • Pregúnteles si hay algo que les gustaría ver mejorado en su equipo actual/último. ¿Necesitaban mejores mensajes de confirmación? ¿Más revisiones de código? ¿Más pruebas? ¿Más automatización?
  • Pregúnteles qué tecnología los emociona y por qué.

Si tiene a alguien que es técnicamente competente en esta conversación, será lo más fácil del mundo saber si esta persona será la peor. Un ejemplo: tuvimos a un niño que vino y nos entrevistó; dijo que en una escala del 1 al 10, sus habilidades en Java eran como un 7-8. No creo que ni siquiera supiera que Java se compiló en un archivo jar que luego JVM compiló en lenguaje de máquina. Me clasificaría tal vez como un 2 o un 3 y lo sé.

En realidad, nuestro CTO le hizo la misma pregunta en una entrevista el día anterior, y nuestro CTO lo llamó y le explicó que no había forma de que fuera un 7-8.

Nuestro CTO también le preguntó sobre su proyecto favorito, que tenía que ver con los escáneres portátiles. Pero no pudo explicar nada acerca de cómo funcionaban, o el hecho de que usaron el sondeo para evitar las esperas ocupadas. No podía explicar una sola cosa técnica.

Ese tipo no fue contratado.

Averigüe el tipo de atributos que está buscando y luego descubra cómo probarlos

¡Pero realmente necesito ver cómo codifica!

Está bien, está bien, pero a menos que vaya a codificar en un silo, lo mejor que puede hacer es contratarla como contratista para un proyecto pequeño y bien definido. Tal vez esté agregando la capacidad de descargar algunos archivos de un FTP y luego volcarlos en su base de datos. Algo simple, que no requiere mucho/ningún conocimiento del dominio.

Haz que tus candidatos trabajen con uno o dos empleados existentes y págales por su tiempo. Podrás ver exactamente cómo trabajan y qué tan bien trabajan con el equipo. ¿Se comunican bien? ¿Se frustran fácilmente? ¿Son persistentes?

Hay cosas que puede hacer para contratar mejores empleados... pero una competencia de programación probablemente no sea una de ellas.

Planteas algunos puntos positivos, pero una desventaja de "lo mejor que puedes hacer es contratarla como contratista para un proyecto pequeño y bien definido" es que la mayoría de los candidatos preferirán una oferta de tiempo completo en lugar de un contrato para contratar. Si tienen varias ofertas, elegirán la opción más "segura".
@RQDQ estuvo de acuerdo. Creo que es el medio menos efectivo de entrevistar... pero es la forma más efectiva de entrevistar con código.
El viejo "pruebe antes de comprar". Aunque toda la industria va por ese camino, y mi próximo puesto probablemente será un contrato de 3 a 6 meses, me entristece el miedo que encierra. ¿Cuándo dejamos de hacer nuestra tarea y cuándo tuvimos miedo de despedir a alguien?
@JoshuaDrake desempleo, ahí es cuando;)

Como otros han señalado, algunos desarrolladores pueden desanimarse por un ejercicio de programación de 1 a 2 horas para solicitar un trabajo. Lo que puede funcionar mejor es tener una sesión de pizarra, donde el candidato resuelve un problema en una pizarra durante la entrevista. Esto le brinda la oportunidad de tener una entrevista en persona y al mismo tiempo asegurarse de que tengan habilidades técnicas.

Estos problemas no deberían ser extremadamente difíciles o diseñados para hacer tropezar a un desarrollador. Un ejemplo clásico es FizzBuzz . Esto le permite ver cómo piensan y también saber que al menos pueden programar y no necesitan buscar en Google cómo hacer un bucle.

¿Alguien realmente le falla a FizzBuzz?
@PatriciaShanahan: Sí, todo el tiempo, te sorprendería el rango de calidad. Un efecto secundario de la demanda de desarrolladores es que muchas personas quieren intentar ser contratadas como tales, incluso si no están lo suficientemente preparadas o son lo suficientemente buenas, pueden convencerse a sí mismas de que pueden aprender en el trabajo. Una prueba técnica corta y decente realmente ayuda a prevenir la contratación accidental de alguien que puede hablar pero no cumplir en la práctica, y esa situación es lo suficientemente común como para necesitar algún tipo de técnica de entrevista para filtrarlos.
La utilidad de FizzBuzz se analiza en Programmers SE: programmers.stackexchange.com/questions/15623/fizzbuzz-really
Esto ha funcionado muy bien para nosotros. Durante una buena entrevista, todo el equipo termina alrededor de la pizarra para diseñar la solución con el candidato. =)
@NeilSlater - FizzBuzz fue genial cuando salió por primera vez. Todavía era un buen discriminador hace cinco años cuando tuvo lugar esa discusión. No es tan bueno ahora. Una cosa en la que la educación estadounidense se ha destacado es en enseñar a los niños cómo sobresalir en una prueba estandarizada. FizzBuzz (junto con todo lo que se le parezca) ahora ha caído al estado de una prueba estandarizada.
@DavidHammen: Interesante. Sin embargo, podría redefinir "Prueba FizzBuzz" para que signifique "cualquier desafío de codificación simple similar a FizzBuzz". Llegar a un problema similar no debería ser difícil.
@PatriciaShanahan He realizado 2 entrevistas en mi puesto actual. El éxito de FizzBuzz es 0/2.
@NeilSlater Mucha gente ahora también conoce FizzBuzz. Tenga en cuenta que dije "Un ejemplo clásico es..." No tenía la intención de sugerir que FizzBuzz es el final de una prueba de pizarra, sin embargo, la idea general sigue siendo la misma. Dele al candidato un problema trivial para resolver y observe cómo lo resuelve.
@NeilSlater, estaría de acuerdo SI aún no viéramos a los candidatos fracasar en FizzBuzz. Dicho esto, no hacemos FizzBuzz de forma aislada, si simplemente escriben una implementación básica sin errores ni discusión, les pedimos que la implementen de una manera diferente. El seguimiento tiende a mostrar a aquellos que entienden lo que realmente está sucediendo frente a haber memorizado una implementación determinada. El seguimiento también verifica algunas habilidades de interacción humana.
@PatriciaShanahan: Estoy bastante segura de que no fallan en la comprensión de FizzBuzz, sino en la comprensión de los requisitos. Por ejemplo, imprimir tanto el número como el texto (por ejemplo, 1, 2, 3Fizz, 4, ...), cuando los requisitos piden imprimir solo el texto (por ejemplo, 1, 2, Fizz, 4). O si son más estrictos (jeje), no es suficiente agregar Fizz y Buzz por separado para crear FizzBuzz, sino que debe usar una tercera cadena "FizzBuzz" en el módulo 15, por ejemplo.
FizzBuzz, si me lo preguntaran en una entrevista, lo usaría como una oportunidad para descartar a los malos entrevistadores. Prueba una cosa "¿sabes qué es el operador de módulo?". Algo que rara vez uso en el código de producción. Qué completa pérdida de tiempo.
@AdrianThompsonPhillips Esa fue mi impresión inicial, hasta que vi a personas con 10 años de experiencia que no sabían la diferencia entre un operador de asignación y un operador de igualdad, o que no sabían cómo escribir un ciclo, etc. Desafortunadamente, hay algunos muy poco entendidos. candidatos calificados y decepcionantes.
@silencedmessage Estoy totalmente de acuerdo, hacer preguntas sobre esas cosas sería mucho mejor que oscuras preguntas históricas sobre listas vinculadas, módulos, bits de desplazamiento e intercambio de valores entre 2 registros.

NO TE LIBRES DE LA PRUEBA DE CODIFICACIÓN!!!!

Si quieres ser programador, tienes que escribir código que haga algo. Responder preguntas de trivia no es tan importante. Conversar sobre experiencias pasadas es bueno, pero de ninguna manera reemplaza la capacidad de codificar.

Haz lo que sea necesario para atraer a la gente a querer tomar la prueba y obtener este trabajo. Hazlo más corto o págales. Tráigalos un fin de semana para que todos tengan tiempo de observar a esta persona en acción.

Esto realmente depende de tener personas que puedan interpretar los resultados de las pruebas/observaciones. Es posible que desee contratar a un tercero para que realice esta evaluación si no sabe cómo hacerlo. Solo obtener la respuesta correcta es solo la mitad de la batalla. Los desarrolladores necesitan habilidades para buscar en Google, pero hay mucho más. Si un programador puede hacer la prueba más rápido, eso es una ventaja.

Dependiendo de su proyecto, puede preferir la fluidez en un idioma, para que el desarrollador pueda comenzar a trabajar de manera eficiente de inmediato. Por otro lado, podría sufrir a largo plazo si opta por el programador menos hábil que se va a quedar atascado con una característica clave de su aplicación o si construyen una estructura tan pobre que es difícil de modificar y mantener. Es posible que haya estado mejor con un buen programador que esté dispuesto a adaptarse y aprender el lenguaje necesario. Hay muchos desarrolladores que huirán absolutamente de ciertas pilas, marcos, lenguajes, herramientas y sistemas operativos.

Los desarrolladores son puestos críticos que son muy costosos de cubrir. Entiendo tu preocupación por ahuyentar demasiados buenos, pero solo necesitas uno. No escatimes.

Tu trabajo es asegurarte de no contratar a un mal programador y no evaluar adecuadamente a todos los que aplican. Se cometerán errores. Cubre tu apuesta y no hagas la peor.
Esa es exactamente la razón por la que lo presentamos, hay demasiados desarrolladores vaqueros que tienen un millón de idiomas en su CV, pero cuando se trata de eso, no saben programar. También es el puesto mejor pagado en la empresa, por lo que no podemos permitirnos correr el riesgo de una mala contratación... por otro lado, nos ha salvado el trasero un par de veces, un par de tipos que sospechaba que eran débiles. los candidatos por teléfono después de una entrevista técnica, retiraron su aplicación de trabajo en el último minuto una vez que introduje la prueba de codificación en la segunda ronda. Se me ha pasado por la cabeza hacer la entrevista técnica por teléfono.
@bobo2000: realmente debe sopesar la duración de la prueba con la disponibilidad de talento en su área. Desafortunadamente, si se trata de un mercado de programadores, es posible que deba hacer concesiones. Como una especie de prueba "A/B", puede elegir al azar algunos candidatos para dar una versión más corta de la prueba y ver si muestran más interés.
@bobo2000 Hay algo que no entiendo: en otros comentarios dices que la mayoría de los candidatos son recién graduados, pero aquí dices que buscas ocupar el puesto mejor pagado de la empresa. Algo realmente no cuadra. ¿Puedes explicar cómo encajan estos 2 hechos?
Una prueba de codificación es una cosa. Una prueba de codificación que lleva más de 8 horas es otra cosa completamente diferente.
@bobo2000 "Doy a algunos candidatos ( en su mayoría recién graduados ) la tarea de programación" + "También es el puesto mejor pagado de la empresa" = algo no encaja aquí.
La sensación que tengo es que los graduados "nuevos" ya no se enamoran de la promesa de romance y riquezas de la puesta en marcha escasamente financiada. ¡Bien por ellos! Hice esa última burbuja dos veces, y ninguno de esos vertederos sigue existiendo.
@RaduMurzea: En el mundo de las empresas emergentes, los programadores, incluso los programadores recién salidos de la universidad, tienden a ser las personas mejor pagadas, seguidos por los vendedores y luego por los CEO/fundadores. Después de un par de años, normalmente encontrará que los salarios de los gerentes aumentan, ya que ya no consideran demasiado arriesgado gastar un poco más generosamente en lugar de reinvertir. Después de unos cinco años, encontrará que los vendedores ganan más que los programadores si la empresa está ganando mucho dinero. Pero al principio, los fundadores suelen gastar mucho dinero para asegurarse de obtener los mejores programadores que puedan pagar.
@slebetman: como dijo. Para un inicio con recursos limitados, evitar la contratación de un mal codificador es clave para crecer, ya que están construyendo el producto.
si confía en recién graduados para construir su negocio, tiene un problema.
@sevenseacat, para ser honesto, la mayoría de las pequeñas empresas no pueden permitirse un desarrollador senior. Un buen desarrollador senior costará en la región de 50-100k, y un nivel medio está en el rango de 40-50. Si la puesta en marcha está en un período de crecimiento, que es el nuestro, entonces estás limitado a juniors. El truco está en encontrar uno que ya haya aprendido mucho haciendo prácticas. Probablemente seguirán adelante después de uno o dos años (después de obtener la experiencia inicial), pero para entonces habrá más recursos. Aquí también me tomo muy en serio la formación.
@DaveisNotThatGuy He trabajado en muchos como ex desarrollador y estoy de acuerdo contigo. El problema con muchos es que aceptan a un junior y no invierten en su capacitación, sino que esperan que codifiquen como un senior. Ahora que soy gerente, tengo la oportunidad de hacer algo diferente, siempre que tengan una buena base para trabajar.
Pregúntese: ¿realmente podrá capacitar a un desarrollador junior? ¿Estás calificado para entrenar a un junior? ¿Tienes tiempo? ¿Tiene otros desarrolladores experimentados para hacer esto? ¿Cuál es tu plan de entrenamiento? ¿Cuáles son sus expectativas de progreso? ¿Ha publicado estándares para construir su código por el cual puede medir al nuevo? La mayoría de las startups no tienen ninguno de estos. Si no puede responder ninguna de estas preguntas, no contrate a un novato. Tú y él se arrepentirán.
por eso evito las startups como la peste, eso no tiene sentido. "Contrata a alguien que probablemente no haga un buen trabajo, pero son baratos, por lo que tienes que gastar mucho más después limpiando".
No me llames un fin de semana para una entrevista. Reservo mis fines de semana para otras cosas además del trabajo (salvo el momento crítico, por supuesto). Si vale la pena hacerme una prueba de programación supervisada, vale la pena supervisarla en horario normal.

En mi opinión, el problema que tienes aquí no es necesariamente la prueba de programación. Primero tiene la entrevista técnica telefónica y luego una prueba de trabajo desde casa antes de una entrevista cara a cara. Parece que estás manteniendo a tus candidatos a distancia y dejándolo hasta el último minuto antes de conocerlos. ¿En qué momento espera que los candidatos decidan que quieren trabajar para usted?

Supongo que su anuncio de reclutamiento es similar a la mayoría y, por lo tanto, se enfoca en la ubicación, el salario y una lista (de deseos) de habilidades. Los candidatos no saben realmente en qué estarían trabajando, nada sobre el entorno o las personas con las que tendrían que interactuar. Todavía no les ha vendido el trabajo, aquí les está pidiendo que demuestren sus capacidades técnicas dos veces antes de que puedan hacer una sola pregunta sobre el trabajo.

Le sugiero que intente cambiar el formato de la entrevista telefónica técnica para que sea una conversación de 30 a 45 minutos sobre el trabajo que incluya muchas oportunidades para preguntas de los candidatos, luego 15 minutos de preguntas técnicas como pantalla para que aún tenga la oportunidad de elegir los mejores solicitantes sin hacerlo demasiado oneroso.

También consideraría mover el desafío de la programación para que se haga en el sitio antes de las entrevistas. Les parecería más alcanzable a los candidatos, dales un incentivo para mantenerse al día con el proceso y obtendrías el beneficio de observar el tiempo real dedicado al desafío (creo que podrías sorprenderte).

Gracias por esto, ¿qué debo hacer si el candidato no está en el mismo país y no puede ir al sitio para hacer la tarea? Voy a entrevistar a un candidato mañana que está en Hong Kong, estamos en el Reino Unido. Después de la entrevista cara a cara, esperamos que los candidatos decidan si quieren trabajar para nosotros.
Hay que ajustar la entrevista según las circunstancias. Aún así, debe vender el trabajo al candidato y no solo lanzarle pruebas. Además, todo el proceso es un ejercicio para generar confianza entre ustedes dos. Quiere que su candidato sepa exactamente en qué se está metiendo; si se requiere una mudanza internacional, es posible que desee dedicar un poco más de tiempo a conocerse más.
Use la pantalla compartida si alguien no puede visitarlo en persona.
@user70848 El objetivo del desafío de programación es asegurarse de que el candidato pueda manejar una tarea de programación. Compartir la pantalla es una forma horrible de hacerlo porque tendrías que pasar una hora observando al candidato y, sin duda, se sentirían más acomplejados que si lo estuvieran haciendo de verdad. Si, por el contrario, el trabajo requiere programación en pareja, esta sería una buena manera de hacerlo de forma remota.
@koan Eso es cierto, pero si se encuentra a medio mundo de distancia de alguien, literalmente, es una solución mucho más económica y sencilla para ayudar a ambas partes a tomar la decisión de invertir más tiempo y energía. No es que no puedas tener otra tarea de programación, siempre y cuando vuelvas a encontrarte en persona.

No me gustan las pruebas para llevar a casa como parte de las entrevistas, por muchas de las razones que la gente ya ha mencionado: extiende el proceso de contratación, devalúa el tiempo del solicitante, es posible que no le devuelvan la llamada de todos modos, etc.

Mi principal problema es que no es realista cómo funciona realmente el equipo y hace que el proceso de entrevista sea unilateral. Un solicitante quiere saber si este lugar es adecuado para él, incluida la cultura, cómo el equipo aborda y resuelve los problemas. Principalmente, también busca el ajuste, incluido cómo funcionan y si tienen el conjunto de habilidades adecuado. Una prueba para llevar a casa no le brinda al solicitante la oportunidad de evaluar las cualidades blandas de un lugar de trabajo, y los empleadores no pueden aprender cómo el solicitante abordó el problema.

Una mejor solución podría ser darle al solicitante un problema más abierto que pueda resolverse de cualquier forma creativa. Incluso podría restringirlo al lenguaje X. En lugar de enviarlo por correo electrónico, invítelos a que se lo presenten a usted y a la alta dirección. Les da autonomía e incentivo para hacerlo bien, porque promete otra entrevista y demuestra que te importa saber lo que piensan.

Si debe usar una prueba para evaluar qué candidatos logran entrevistarse con la alta gerencia, incluiría la prueba en la entrevista para que puedan discutir su proceso de pensamiento juntos.

¿Quieres contratar programadores que no saben programar ?

Me voy a aventurar que tú no.

Contratar programadores que en realidad no pueden resolver problemas y escribir código es una buena manera de arruinar una empresa de tecnología. Y no va a ser efectivo para eliminar a los programadores que en realidad no pueden programar (y hay muchos de esos por ahí) si su proceso de contratación no incluye algún tipo de prueba de programación.

¿Estás dispuesto a bajar tus estándares porque todos están tratando de contratar programadores?

Tal vez lo seas, pero no creo que debas serlo. Como se ha señalado en los comentarios y respuestas, hay candidatos que no se molestarán en hacer ejercicios de programación como parte de un proceso de entrevista porque simplemente no es necesario para conseguir un trabajo .

Pero, ¿son esas realmente las personas que desea contratar de todos modos? ¿Los que siguen el camino de la menor resistencia, hacen lo que sea más beneficioso para ellos a corto plazo y realmente no se preocupan lo suficiente por su empresa como para completar un simple ejercicio de programación? Esos no parecen atributos positivos y no brindan mucha confianza en términos de poder retener a esos candidatos a largo plazo (lo que también es importante para una empresa de tecnología, ya que las curvas de aprendizaje tienden a ser pronunciadas y el costo de reemplazar al personal existente es muy alto).

Así que deje que esas otras empresas tengan programadores que ni siquiera pueden molestarse. No querrás contratarlos de todos modos. A diferencia de ellos, tú tienes un plan. Uno que no se base en la falacia de "un programador es un programador". Su enfoque debe estar en la calidad y la sostenibilidad, no en el recuento de cadáveres.

¿Es un problema asustar a los candidatos?

Por lo general, no, siempre que los asusten por una buena razón. No querrás contratar a personas que no estén a la altura. Y algunas de las personas que dicen que "no se les puede molestar" debido a la gran demanda en realidad podrían estar usando eso como una excusa para encubrir un "realmente no es tan bueno programando, así que necesitaría toda la semana para completar un ejercicio de 1 hora". situación.

Es bueno ahuyentar a esos candidatos. Desea contratar a los candidatos capaces y motivados. Mientras no asustes a esos también, estás bien.

Cada candidato que no asustas es uno que tienes que probar y evaluar. Y eso puede ser difícil de hacer si no les está dando a sus candidatos técnicos ningún ejercicio técnico para usar en la evaluación.

¿Cómo puedo mejorar nuestro proceso de contratación?

Revisa el contenido de tu ejercicio de programación. ¿Es razonable y apropiado para un contexto de entrevista?

No desea algo que va a tardar días (o incluso horas) en completarse. Lo que quiere es algo simple para eliminar a las personas que simplemente no pueden programar , idealmente con suficiente espacio para los matices para que las personas que pueden programar realmente bien puedan diferenciarse. Tenga en cuenta lo que está tratando de lograr (eliminar candidatos no calificados y no serios) y asegúrese de que su contenido se adapte a ese objetivo. No te excedas.

Si ya tiene personal técnico, puede usarlo para verificar la cordura (y/o ayudar a diseñar) su ejercicio.

Y también considere cómo administra el ejercicio. Si solo les da algo de documentación y dice "aquí, haga esto durante la próxima semana y envíemelo por correo electrónico", probablemente solo será mínimamente efectivo.

Sería mejor si puede ejecutar el ejercicio a través de un portal web, en el que los candidatos pueden registrarse y comenzar el ejercicio, y una vez que comienzan, un temporizador comienza una cuenta regresiva desde 1 hora. Luego, o envían algo dentro de esa hora, o no. Eso es menos abierto, retiene mejor el enfoque del candidato y proporciona una fecha límite/calendario claro para que 1) no tenga que esperar toda la semana por un resultado que nunca llegará, y 2) los candidatos no calificados no desperdiciar una semana de su tiempo tratando de completar su ejercicio de programación. Obtienen 1 hora, resuelven el problema o no, y usted sabe el resultado de inmediato.

Y aún mejor sería traerlos para una entrevista en el lugar. Preséntelos a un miembro de su equipo de desarrollo. Enciérrelos en una habitación junto con una estación de trabajo. Haga que su desarrollador comience con algunas preguntas de entrevista generales/suaves, y luego puede programar en pareja con el candidato para resolver el ejercicio de programación. Esto le dirá no solo si el candidato puede codificar o no, sino también qué tan bien trabaja con su equipo. Su desarrollador también debería poder obtener mucha información adicional que simplemente no obtendrá al mirar un montón de código que un candidato escribió y luego le envió por correo electrónico.

Línea de fondo

No, no querrás deshacerte de tu ejercicio de programación. Pero es posible que desee revisarlo en busca de contenido apropiado, asegurarse de que no tome mucho tiempo resolverlo y también ver cómo lo está adaptando a su proceso general de entrevista.

Un ejercicio autodirigido para llevar a casa probablemente no sea el mejor enfoque. Pero la solución a eso no es desechar el ejercicio por completo. No, a menos que estés de acuerdo con contratar programadores de mierda, en cualquier caso.

Es mejor ahuyentar a muchos malos candidatos y un puñado de buenos que abrir las compuertas y contratar a unos pocos malos.

Hay más trabajos que personas, cualquier líder tecnológico puede pasar unos minutos leyendo el código de alguien en github y prescindir de la necesidad de tareas tontas para construir una aplicación de interfaz de usuario simple de forma gratuita para consumir JSON.
Usted dice "realmente no se preocupa lo suficiente por su empresa como para completar un simple ejercicio de programación": la mayoría de las empresas son completamente intercambiables: no son ni salvadoras ni destructoras del mundo. ¿Por qué alguien debería preocuparse por ellos antes de establecer una relación con la empresa y sus empleados? No busques cuidados, busca una mejor manera de identificar la habilidad.
No desea bajar sus estándares porque es un mercado atractivo para los programadores. Desea que sea fácil para ellos aplicar y evitar obstáculos adicionales para saltar porque, en un mercado caliente, las buenas personas se postularán en empresas a las que les resulte fácil postularse. Tienes la oportunidad de contratar a las personas que no pueden conseguir un buen trabajo en otro lugar.

Como respuesta directa a la respuesta de Bobo (que es la respuesta aceptada porque el tipo la escribió y la aceptó él mismo, lo que, francamente, creo que es un poco patético):

Vienes de una premisa totalmente equivocada. No quiero trabajar para ti. ¿De dónde sacas esa idea de que alguien quiere trabajar para ti ? Usted es solo una de las muchas empresas que ofrecen un trabajo. No quiero trabajar para ti. Quiero evaluar su empresa, y si sale por encima de todos los demás, ahí es cuando quiero trabajar para usted.

Hay una docena de empresas en las que puedo trabajar, estás en algún lugar de la cola. Primero miro qué empresas hay, les envío mi CV, pueden leerlo y quedar impresionados o no, luego normalmente tienes una conversación telefónica rápida en la que me muestran que tienen un trabajo interesante y yo demuestro que tengo las habilidades. , y cualquier prueba de codificación podría llegar al final.

Su prueba para llevar a casa lo coloca al final de la fila. Para compensar, tendría que publicar un rango de salario que sea £ 10k más alto que otros. De todos modos, encontrar un trabajo requiere mucho tiempo; alguien que lo hace diez veces más lento está al final de la lista. Si tengo que elegir entre enviar un currículum y tener una entrevista telefónica con diez empresas, y hacer la tarea para usted, adivine lo que haré.

Entonces, lo que sucede es que encuentras candidatos que quieren trabajar para ti porque no conseguirán trabajo en otro lado .

Una cosa que nadie parece haber mencionado; incluso si la prueba no es tu problema, debes buscar otras formas de atraer talento.

Si está buscando buenas personas en función de su trabajo publicado existente, no necesita ejecutar la prueba con ellos .

Si solo le envían personas a través de reclutadores y filtros, es vulnerable al hecho de que sus necesidades y las necesidades de los reclutadores no se combinan perfectamente. Quieren colocar a alguien contigo. Quiere un ingeniero de primer nivel. Si pueden encontrar un ingeniero de alto nivel que sea increíble porque volverás con ellos, pero si no pueden (y los ingenieros de alto nivel tienden a tener cosas en marcha que dejan poco tiempo para la entrevista), se conformarán con solo colocando a un ingeniero moderado con un lindo traje. La pérdida para ellos es un poco de reputación a largo plazo, pero eso es menor en comparación con perder sus objetivos. Si es probable que esto no sea cierto en su caso, quédese con ese reclutador y nunca lo deje ir (*),

Lo que quiere hacer es encontrar candidatos demostrablemente interesantes. Busque en StackOverflow y GitHub los mejores ingenieros (escuché que StackOverflow tiene una herramienta para ayudar con esto ), busque compañías técnicamente interesantes que produjeron un buen software pero que arruinaron sus finanzas o monetización, y acaban de despedir a 10 ingenieros de alto nivel. Pasa tiempo trabajando en universidades ayudando con proyectos de fin de año. Identificar buenos candidatos potenciales y hacerse amigo de ellos, preferiblemente en persona, alternativamente a distancia; incluso si tienen ofertas, los buenos ingenieros se juntan con buenos ingenieros. Además, pueden decirle cómo se sienten acerca de su proceso de contratación.

¿Suena esto como mucho trabajo? debería _ Una de las razones por las que la contratación parece tan "difícil" es porque estás tratando de hacerlo de la manera más eficiente posible. Cuanto más tiempo, capacidad intelectual y recursos le dediques, más fácil será. Si esos recursos se gastarían mejor en el envío del producto es la eterna pregunta de gestión. Pero si dedica mucho tiempo a la "filtración de programas basura", eso es gastar dinero . Al menos los pasos descritos anteriormente tienen un valor inherente más allá del proceso de contratación.

(*): Joder, contratalos .

Sí, ese es actualmente mi enfoque. Le sorprendería la cantidad de desarrolladores que no tienen 'git repos' disponibles públicamente,
Buen punto. Sin embargo, existe un riesgo al confiar en el código publicado: no todos codifican en su tiempo libre (diferentes pasatiempos, obligaciones familiares, etc.). Si bien muchas personas asumen que los "códigos en el tiempo libre" se correlacionan con la capacidad técnica, para mí no está claro que esto sea cierto. Conozco buenos desarrolladores que hacen cosas diferentes fuera del trabajo.
@sleske eso es cierto, codifico en mi tiempo libre (CS Major/ex desarrollador) y nunca publico mi código en repositorios públicos. Pero eso es probablemente parte del problema, un candidato podría ir fácilmente a una entrevista de trabajo y mentir sobre su conjunto de habilidades usando palabras de moda.
@sleske Estoy de acuerdo, por lo que "verificar repositorios de git" es una pequeña declaración en un párrafo mucho más grande (y en realidad lo eliminé ahora). Si está buscando a un desarrollador profesional que no publica su trabajo, mire la empresa para la que trabajó. ¿Es una buena empresa? ¿Hace un buen trabajo? ¿Por qué lo dejaron? ¿En qué aspecto trabajaron? Hay muchos datos asociados que puede usar que son más útiles que sus pruebas; y si no tienen esos datos, entonces puedes usar las pruebas . Pero si lo hacen, utilícelo en lugar de las pruebas.
@bobo2000 El trabajo publicado se extiende más allá de las muestras de github; ver mi comentario de arriba.
Siempre me divierte cuando las personas dicen que se comunicaron conmigo porque están asombrados con mis proyectos de github/public, y luego todavía quieren que pase 3 días entrevistándolos.
@grasshopper Mira, puedo verlo desde una perspectiva de "en qué te gusta estar realmente", pero no deberían preguntarte si sabes qué es un valor booleano.
@grasshopper bien dicho buen señor! Es tan molesto. Me siento mal cuando mandan la prueba de tarea y van a decirles que se vayan, mi tiempo es más valioso.
@SuperUberDuper buena señora en mi caso.
@grasshopper Estoy seguro de que es bonito;)
Re "Busque a través de Stack Overflow y GitHub para los mejores ingenieros" : Stack Overflow cerró su plataforma de reclutamiento .

Creo que ha formulado su pregunta un poco mal, pero la forma en que la ha formulado refleja un concepto erróneo común sobre la contratación de programadores. ¿Los candidatos están siendo "asustados" por la tarea de programación, o están filtrando a su empresa fuera de su propia consideración debido a la tarea?

Una anécdota para demostrar mi punto: mientras buscaba trabajo no hace mucho, vi un puesto para una empresa que parecía promedio. La forma en que describieron su proceso de programación hizo que sonara bastante bien, pero había muy pocos detalles, por lo que era escéptico. Tal vez eran un buen lugar para trabajar, tal vez no. Pero pensé que vería cómo llegar a la pantalla de un teléfono para poder descifrar los detalles y ver si eran tan buenos como parecían.

Hice clic en la publicación de trabajo e inmediatamente me pidieron que escribiera una carta de presentación. Puaj. Creo que todos los candidatos odian las cartas de presentación. No conocía esta empresa ni usaba sus productos, entonces, ¿qué podría decir sobre ellos? Los busqué en Google, leí su sitio web y sus ofertas de productos, descubrí dónde podría encajar en su organigrama si me contrataban y se me ocurrieron algunos párrafos "vendiéndome".

Luego proporcioné mi currículum y acceso a mi LinkedIn, pero inmediatamente después me pidieron que completara mi experiencia laboral relevante con fechas y descripciones. Esta información está tanto en mi LinkedIn como en mi currículum, fue ridículo tener que proporcionar la misma información 3 veces. Cerré la pestaña del navegador. 5 minutos más tarde estaba aplicando a otra compañía que ofrecía algunos beneficios realmente geniales que la primera no ofrecía. De hecho, podría aplicar a otra compañía con mejores beneficios más rápido de lo que podría pasar por los aros que la primera compañía quería de mí.

Debe asegurarse de que sus candidatos estén interesados ​​​​en su empresa en particular antes de presentarles obstáculos para saltar, o de lo contrario no saltarán. ¿Haces esto?

Ejemplos de beneficios de calidad que comúnmente veo que ofrecen las empresas de tecnología:

  1. Trabajo remoto.
  2. Computadoras/monitores gratis como bono de firma.
  3. La empresa contribuye a respetados proyectos de código abierto.
  4. Reembolso por formación profesional y/o congresos.
  5. Almuerzos atendidos.
  6. Horario flexible.
  7. Oportunidad de trabajar con tecnologías nuevas o desconocidas.
  8. "Cultura de inicio" - también conocida como falta de política/burocracia.
  9. Patrimonio de la empresa.
  10. Reconocimiento de nombre: su empresa o su producto es conocido. A los candidatos les gusta mencionar dónde trabajan y escuchar a la gente responder "¡Oh, genial! Me gustan sus productos".
  11. Objetivos/visión de la empresa benéfica o revolucionaria. A la gente le gusta escribir código que mejore la vida de las personas.
  12. Salario por encima de la media. El dinero cubre una multitud de pecados organizacionales.
  13. Retiros anuales de empresa a lugares frescos.

Esta lista no es completa, pero si su empresa no ofrece uno o más elementos como los de esa lista, entonces cualquier obstáculo en su proceso de contratación podría enviar a un candidato a buscar uno que sí lo haga.

Así que digamos que, por alguna razón, no ofrece o no puede ofrecer incentivos como los anteriores para que sus candidatos los convenzan de que se gasten escribiendo código para usted de forma gratuita. Entonces, ¿qué puedes hacer? Tengo dos alternativas que la mayoría de los candidatos preferirán a las tareas de programación ajetreadas:

Alternativa n.º 1: págales una tarifa por hora para realizar tu tarea de programación como si fueran un contratista. Esto les anima a tomárselo en serio tanto por motivos profesionales como porque... les pagan. Esto le cuesta dinero, pero también lo hace cualquier forma de reclutamiento. Si es realmente bueno, incluso puede encontrar una manera de que diagnostiquen y corrijan un error real en su código, en cuyo caso obtendrá algo útil por su dinero.

Alternativa n.º 2: probablemente ya hayan escrito un código de forma gratuita que le mostrarán si solo se lo pregunta. La mayoría de los programadores tienen código en Github, Bitbucket, sitios web de preguntas y respuestas como Stack Overflow, o podrían proporcionarle algún código que aún no hayan publicado.

¿Por qué hacer que escriban un código que no les interese cuando podrías dejarles compartir un proyecto apasionante contigo? Se garantiza que será menos aburrido que leer otra solución al mismo problema genérico por centésima vez. Y dado que el código ya está escrito, le ahorra tiempo a usted y a su candidato. Además, verá qué tipo de código les gusta escribir, lo que da una idea de su personalidad y qué tan bien encajarán con la cultura de su empresa.

re: pago por encima del promedio: en mi experiencia de contratación, usted paga mejor, atrae a todo tipo de gorrones que piensan que pueden arruinar el papel y solo están interesados ​​​​en el dinero (usted ve esto en el tipo de nivel C todo el tiempo: -) ). Nunca atraigas a la gente solo con el dinero.

¿Cuál es tu problema empresarial?

Sin tener en cuenta todos los argumentos a favor o en contra de pruebas particulares, todo se reduce a una compensación: más filtros ahuyentarán a algunos buenos candidatos, menos filtros dejarán pasar a malos candidatos que quizás deba reemplazar poco después de la contratación.

Todo se reduce a observar la situación de su negocio en lugar de las prácticas generales.

¿Actualmente tiene un problema en el que carece de candidatos calificados y no puede contratar tan rápido como necesita para cumplir con sus objetivos comerciales? Debe deshacerse de esta tarea de programación inicial.

¿Actualmente tiene un problema en el que no está satisfecho con la calidad de sus contrataciones recientes? Entonces necesitas implementar más filtros como este.

¿Tiene ambos problemas y ambos son igualmente dolorosos? Enhorabuena, ha encontrado el equilibrio adecuado para esta compensación.

Realmente creo que puede ayudar a establecer quién realmente sabe los idiomas que figuran en su currículum.

Si ese es realmente su objetivo, consideraría un enfoque diferente. Como indicaron otras respuestas, SÍ, siempre debe tener una pregunta de codificación, pero las preguntas de codificación rara vez entran en detalles del idioma. Algunas preguntas que he visto que son útiles para probar esto:

  1. Compare y contraste Java y C (o los dos idiomas que sean relevantes, estén en el currículum del candidato, etc.)
  2. ¿Qué características crees que deberían agregarse al lenguaje? (O mejor aún, ¿qué piensa sobre este cambio reciente/propuesto en particular en el lenguaje?)

Los ingenieros que han visto una o dos cosas saben cómo responder a estas preguntas con bastante facilidad y en solo unos minutos.

..o escribe fizz buzz.
Por cierto, puedo pasar ambas preguntas en muchos idiomas en los que no puedo escribir un hola mundo.
Los he encontrado útiles. Es extremadamente difícil "aprobarlos" si no puede decir algo inteligente sobre cómo los enfoques son diferentes entre idiomas, cómo es diferente la asignación de memoria, cómo son diferentes las primitivas de concurrencia, etc., y tan bueno como la pregunta FizzBuzz no lo hace. se presta bien para discutir lo mismo.
@James De acuerdo. E incluso si no pueden escribir un hola mundo en Java, si pueden comparar y contrastar Java con varios otros idiomas, probablemente sean más útiles que alguien que puede escribir un hola mundo, pero no puede comparar y contrastar Java con otros idiomas.

En mi humilde opinión, hay casi un 0% de posibilidades de que un recién graduado universitario pueda hacer un código de programación difícil en un nivel de entrada. Si su prueba de codificación tarda una semana en completarse, debe mencionar claramente en su requisito que están buscando programadores con al menos más de 2 años de experiencia porque creo que se necesita mucha experiencia para completar un trabajo de código que requiere uno. semana para completar. Y creo que si está buscando recién graduados, diseñe su prueba en consecuencia y puede encontrar muchas ideas en Internet o puede pedirle a los programadores senior que trabajan para usted que diseñen una prueba adecuada para recién graduados.

Personalmente, no esperaría que un desarrollador senior escribiera una prueba adecuada, a menos que tuviera algo de experiencia sobre lo que funciona o no durante una entrevista. Es muy fácil concentrarse en lo que usted mismo sabe que es fácil y obvio, y es difícil corregirlo, lo que fallará innecesariamente a los candidatos que no saben exactamente lo que hace el redactor de la prueba. Creo que esta situación es una de las razones por las que las pruebas como FizzBuzz se hicieron populares: parecen funcionar en el nivel correcto de conocimiento compartido para filtrar candidatos correctamente.
@Neil Slater: - Es posible que un programador senior no sepa cómo diseñar una prueba para un candidato de programación de nivel de entrada. Pero no es tan difícil saber qué esperar de un candidato de nivel de entrada. Y cuando mi empresa anterior quiso contratar a un nuevo programador, sabía qué pedir/esperar de un nuevo programador y lo hice en consecuencia y contratamos a un buen candidato. También en muchos lugares donde he sido entrevistado para el trabajo de programación, fui entrevistado por programadores senior de esa compañía. Por eso lo sugerí y es una práctica muy común.
En realidad toma 30 minutos si sabes desarrollo web. Les doy 1 semana ya que entrevisto a muchos candidatos a mitad de semana, y les da tiempo para hacer la prueba en un marco de tiempo que se adapte a su horario; compromisos personales, trabajo, estudios, etc. Personalmente prefiero que los candidatos hagan la prueba más rápido porque me ahorra tiempo esperando por ellos. Estoy pensando en deshacerme de esto y simplemente hacer fizzbuzz para hacerme la vida más fácil.

Pensé que respondería a esta pregunta, ha pasado un año desde que se publicó y nos hemos ceñido a ella.

RECOMENDACIONES

Positivos del enfoque

1) La prueba para llevar a casa elimina a los candidatos desmotivados y los reemplaza con candidatos que realmente quieren trabajar para usted. Esto por sí solo hace que valga la pena hacerlo, ya que las personas motivadas = empleados productivos. Si no se molestan en hacer una tarea de 1 hora, eso dice mucho sobre su actitud para conseguir el trabajo.

2) Estoy de acuerdo con otros, que la prueba para llevar a casa no debe durar más de una hora; la mía es muy simple. He tenido los siguientes resultados al agregarlo al proceso de reclutamiento:

a) Algunos candidatos no lo completan. No vale la pena contratar.

b) Algunos alumnos lo intentan pero lo completan mal. No vale la pena contratar.

c) Algunos candidatos hacen trampa, momento en el cual vale la pena hacer preguntas de seguimiento sobre su asignación. Hicimos esto con un candidato reciente que luego no se molestó en responder a nuestro correo electrónico sobre la asignación. No vale la pena contratar.

d) Algunos candidatos al enterarse de que hay una asignación técnica repentinamente retiran su solicitud, donde anteriormente mostraban MUCHO interés. Probablemente esquivó una bala.

e) Algunos candidatos lo hacen muy bien, comentan su código y en una o dos ocasiones aportan documentación. Vale la pena contratar.

Negativos del enfoque

1) La deserción de la solicitud de los candidatos que se desaniman por la tarea de llevar a casa hace que sea más largo encontrar a alguien adecuado. PERO, por otro lado, es positivo para la empresa, ya que reduce la probabilidad de una mala contratación, lo cual es peligroso.

2) No siempre se puede saber si alguien ha hecho trampa, pero es por eso que a menudo se respalda con una entrevista telefónica técnica.

Resultado de este enfoque

Uno de nuestros empleados que contraté usando este enfoque resultó ser un empleado estrella. Él todavía está trabajando para nosotros después de más de un año. Es confiable y técnicamente talentoso.

Así que basaste toda tu estrategia de contratación en el desempeño de un tipo. Guau...
¿Exactamente por qué debería estar motivado para hacer un trabajo gratuito para su empresa? Contrátame y me encontrarás trabajando para ayudar a la empresa. Ponga demasiadas cosas que consumen mucho tiempo para hacer la solicitud y encontraré otro trabajo y trabajaré para ayudar a su empresa. Tenga en cuenta, empleadores, que muy pocas personas están interesadas en trabajar para usted específicamente, y que el tipo de desarrolladores que usted desea pueden encontrar trabajos a los que es más fácil postularse.
@DavidThornley este hilo ha seguido su curso. Se trata de administrar el riesgo, si las personas no se molestan en hacer un ejercicio de codificación de 30 minutos, entonces claramente no están lo suficientemente motivadas para querer desempeñar un papel. Además, como se mencionó anteriormente, los ejercicios de codificación son más aplicables a personas con antecedentes no probados; pasantes, graduados que empleados experimentados con mucha experiencia.
@ bobo2000 Parece que te estás perdiendo el punto. Supongamos que estoy buscando trabajo. Quiero un trabajo. Lo más probable es que no esté interesado en trabajar para usted en particular, pero si me contrataran, haría un buen trabajo para usted. Cuanto más tiempo paso en su proceso de solicitud en particular, menos tiempo tengo para trabajar en mis posibilidades generales de conseguir un buen trabajo. ¿Debo tomar su prueba o aplicar a dos trabajos más? Ahora, si esta fuera una ubicación de prueba central que sería utilizada por muchas empresas, valdría la pena mi tiempo.
@DavidThornley, muchas empresas tienen pruebas de programación como parte de su proceso de solicitud, también por experiencia, los mejores candidatos tienden a ser los que se toman el tiempo para hacerlas, y habrá muchos que lo harán.
@DavidThornley para agregar, puede pensar que este es un proceso de reclutamiento injusto, pero el costo de reemplazar a un desarrollador no probado que resultó ser un mal desarrollador que lo acusa es mucho más costoso que simplemente no contratarlos en primer lugar.
@bobo2000o La equidad no es el punto en el reclutamiento. Usted quiere darles a las buenas personas una buena audiencia para decidir, pero la justicia real para los candidatos ni siquiera se intenta en general. Creo que podría obtener un mejor grupo de contratación sin llevar a casa, y probar su competencia básica en media hora más o menos bajo supervisión. Si no puedes saber si alguien es básicamente competente, estás hundido de todos modos. No le importa a la gente con la que me junto. Conseguiremos trabajos. Te importa.
@DavidThornley, bueno, todas las personas que recluté usando este enfoque resultaron ser buenos empleados según la experiencia práctica de hacerlo. Por el contrario, si nunca hubiera tenido ningún tipo de proceso de selección técnica, habría sido costoso para el negocio.

Un mouse desconocido o un diseño de teclado inesperado (especialmente Mac vs PC), o un IDE diferente pueden ralentizar drásticamente el rendimiento sin ninguna diferencia en la competencia. Además, una aplicación completa a menudo requiere una gran cantidad de código repetitivo que un desarrollador puede no tener suficiente tiempo para escribir o incluso no recordar. Comenzar una nueva aplicación completamente desde cero es en realidad una tarea muy rara; la mayor parte del trabajo se concentra en ampliar o mejorar el código existente.

Por lo tanto, sugiero dar solo tareas muy cortas y preparadas con más cuidado durante la entrevista. Lo mejor es pedir escribir una función que debe tomar parámetros dados y devolver el resultado explicado y recomendaría hacerlo en papel, evitando la computadora en absoluto.

Los enviaría a un cuestionario en línea donde puedes filtrar a las personas que no tienen ni idea. Al menos tendrías una idea de si saben de lo que están hablando.

Al principio de mi carrera, los cazatalentos me decían "te enfrentas a personas que leen el recuadro y ponen una solicitud en su currículum". Asumo que esto todavía les puede pasar a los jóvenes e ingenuos, pero una vez que te critican en algunas entrevistas, te das cuenta de que es un mal consejo...

"leer el cuadro y poner una solicitud en su currículum", ¿qué significa eso?
En los días en que tenías que ir a una tienda, la gente leía el resumen sobre lo que hacía el software (que estaba en la parte posterior de la caja) y lo ponían en sus currículums. En estos días, sería comparable a visitar el sitio web o hablar con alguien al respecto y ponerlo en su currículum sin siquiera usarlo.
Los cuestionarios en línea son una ofensa para mí. A usted le pagan por entrevistar, a mí no me pagan por realizar pruebas gratuitas.
Tampoco me pagan horas extras por pasar las noches y los fines de semana limpiando lo que ensucia esta gente.

Recientemente me hice una prueba para llevar a casa. Era una aplicación completa que necesitaba conectarse a un servidor de socket que tenía que simular una alimentación lenta. El cliente se actualizó dinámicamente, pudo cancelar la fuente y escribir y leer XML.

De todos modos, quiero aprender sobre sockets, ya que estoy pensando en usarlos para un servidor de póquer que estoy escribiendo.

Quería aprender XMLreader y XMLwriter.

Al principio pensé olvidarlo. Pero luego lo vi como una oportunidad para demostrar lo que puedo hacer. No tengo un título en informática, así que echo de menos algunas cosas teóricas. Preguntaron cuáles son los 3 pilares de la programación orientada a objetos y querían decir a quién le importa.

Mi mensaje es que las personas que quieren el trabajo deben completar la prueba.

¿Qué quieres decir con "quería decir a quién le importa" ?
¡Eso es un suspenso! ¿Qué pasó después? ¿Conseguiste el trabajo? ¿Aprendiste algo que luego has aplicado? ¿Los "3 pilares de OOP" implican que no les importaba el resultado de la tarea de programación? ¿Qué dijeron sobre la tarea de programación completada?