¿Cómo puedo eliminar rápidamente los codificadores de "copiar y pegar"? [cerrado]

15

Necesito una forma de filtrar los currículums de personas que solo copian y pegan código y luego esperan que funcione, y lo comprueban si lo hace. Todo esto sucede sin tener una comprensión (o cuidado) para comprender el resto del código en el sistema.

Claro que sé que copiar y pegar código es parte del aprendizaje de un nuevo objeto, control, etc., pero ¿cómo se puede saber si eso representa el 70% (o más) de su carrera de desarrollo?

Me he encontrado con algunos muchachos de nivel superior, quizás cuyas habilidades están tan desactualizadas o irrelevantes para el proyecto, que todo lo que hacen es google, copiar y luego pegar un código sin pensar en la solución en su conjunto. Como resultado, tenemos una mismah de JSON, AJAX, callbacks, ASMX, WCF y postbacks en el mismo proyecto. Está claro que no hay coherencia o lógica detrás del uso de cada tecnología.

En el peor de los casos, este tipo de desarrollador crea problemas de seguridad y vectores para el ataque.

Pregunta

¿Cómo recomendaría que filtre a las personas que tienen un bajo nivel de programación? ¿Puedo hacerlo a nivel de currículum? Si no, ¿cómo hago esto durante la entrevista?

goodguys_activate
fuente
Parece que necesita un arquitecto de tecnología para su proyecto. Alguien tiene que establecer la ley WRT según los estándares utilizados, las tecnologías utilizadas y alejarla de la idea favorita de la semana.
rapid_now

Respuestas:

47

Me he encontrado con algunos muchachos de nivel superior, quizás cuyas habilidades están tan desactualizadas o irrelevantes para el proyecto, que todo lo que hacen es google, copiar y luego pegar un código sin pensar en la solución en su conjunto. Como resultado, tenemos una mismah de JSON, AJAX, callbacks, ASMX, WCF y postbacks en el mismo proyecto. Está claro que no hay coherencia o lógica detrás del uso de cada tecnología.

No creo que las habilidades de tus desarrolladores sean el problema. Su problema radica en otra parte, tal vez un líder de equipo o arquitecto que no tiene la confianza en sí mismo para "alentar" mejores disciplinas de codificación, o un equipo de gestión que no comprende la importancia de administrar la deuda técnica y no da su desarrolladores el tiempo y los recursos para hacerlo. ¿Su empresa tiene revisiones de código?

El liderazgo puede ser el problema, no los desarrolladores de copiar y pegar.

Robert Harvey
fuente
16
+1 Leadership may be the problem, not copy-paste developers. Esa fue precisamente mi interpretación.
George Marian el
Seriamente. Algo está severamente ausente en el departamento de comunicación.
MIA
+1: Lo mismo ocurre con los comentarios de George Marian. Muy bien dicho, Robert.
Jim G.
Esa es buena. Espero que llegue tanto como los entrevistadores, reclutando gerentes.
Saar
Parece que hay mucho consenso sobre esta respuesta, pero los chicos de nivel "senior" no dictan la funcionalidad y luego la implementación se deja a los codificadores, ¿verdad? Quiero decir que el tipo de nivel superior podría decir "Oye, no uses una horda de tecnologías, solo usa <estos dos>", ¡pero los desarrolladores de copiar y pegar van a copiar y pegar! Me equivoco ?
Chani
13

La forma de eliminar a los programadores que no pueden programar es establecerles un ejercicio práctico de programación como parte de la fase de selección o de la entrevista. (Esto último probablemente sea mejor porque puedes controlar el medio ambiente para evitar trampas).

Pero no creo que eso realmente vaya a resolver su problema.

... tenemos una mismah de JSON, AJAX, callbacks, ASMX, WCF y postbacks en el mismo proyecto. Está claro que no hay coherencia o lógica detrás del uso de cada tecnología.

En mi opinión, el verdadero problema aquí es que su equipo no está haciendo suficiente revisión interna del código y no está desarrollando un "libro de jugadas" de soluciones preferidas a problemas conocidos. Esto es en parte un problema cultural, en parte un problema de comunicación y (probablemente) en parte un problema con los plazos del proyecto.

Otro problema es que el proyecto generalmente tiene una larga vida útil, y durante esa vida útil, aparecerán nuevas tecnologías / técnicas y es probable que las antiguas caigan en desgracia. Si desea evitar el uso de tecnologías / técnicas de "desayuno de perros", debe:

  • establecer y hacer cumplir una lista de tecnologías / técnicas que pueden usarse por proyecto, o
  • invertir esfuerzo en actualizar las tecnologías utilizadas por un proyecto.
Stephen C
fuente
1
Si no está dando una prueba escrita durante la entrevista, podría dispararse en el pie. Los tuve en mis últimos cuatro empleadores y a menudo me sorprendió lo simples que eran algunas de las preguntas. En un lugar, me dijeron que otro candidato se fue sin completar la prueba, llorando.
Adrian J. Moreno el
1
Estoy totalmente de acuerdo en que una prueba escrita durante la entrevista es la única manera de asegurarse de que sus reclutas realmente tengan buenas habilidades de programación. Pero el objetivo principal de mi respuesta es que las habilidades del desarrollador por sí solas no son suficientes para abordar el problema del SO.
Stephen C
Quedó atrapado por el temporizador de edición. Estoy completamente de acuerdo en que los estándares y la revisión son necesarios. Recientemente publicamos un nuevo documento de estándares de codificación y, combinados con algunos nuevos procesos de revisión de código, hemos tenido muchos menos errores en el control de calidad. Uno si mis próximos objetivos es comenzar un equipo de entrenamiento interno.
Adrian J. Moreno
10

Contrata personas en libertad condicional de 3 meses. Despídalos si apestan.

Si no INSPECTA, no puede ESPERAR. Revisiones de códigos, herramientas de auditoría. Un servidor CI puede ejecutarlos automáticamente.

Haga preguntas reales en sus entrevistas, como en preguntas de código real.

Haga que escriban código en la pizarra.

Si usted es un gerente no técnico, no está calificado para juzgar esto.

Si no está calificado, obtenga un consultor profesional de renombre para que realice las pruebas. Pregúntele a su personal ya sus competidores comerciales si conocen a una persona productiva 100 veces mayor. Págales para hacer la entrevista.

Si desea administrar un hospital sin un jefe de cirugía, siga adelante.

Tim Williscroft
fuente
¿estás hablando de uno experimentado? ¿Por qué debería uno dejar su trabajo y unirse a un lugar donde necesitan 3 meses para dejar que él / ella apesta o no :) ¿Por qué hay recursos humanos?
Saar
Estoy hablando de personas experimentadas y competentes. Son más baratos a largo plazo. Los recursos humanos le impiden ser demandado por violar la ley de empleo. Originalmente allí para hacer cosas delicadas para los gerentes numéricos de Henry Ford. Historia verdadera, búscala. Si ya sabes que la persona va a funcionar bien, entonces eres mejor en esto que yo. La persona cambiará de trabajo porque es muy bueno para trabajar, hay un excelente ambiente de trabajo, y después de la libertad condicional obtienen un bono gordo. Si se hacen redundantes como permanentes, su empresa paga tres meses adicionales. Algo así
Tim Williscroft
9

He pasado los últimos años entrevistando a personas y descubriendo que el 90% de los candidatos simplemente no pueden programar. Mi técnica de entrevista para determinar la programación es darle al candidato un resumen demasiado simple y dejar que el candidato lo resuelva usando un marcador y una pizarra.

Los modos de falla incluyen:

idear un diseño y luego implementar algo diferente. Estos candidatos son rechazados porque son peligrosos en un equipo. No seguir las especificaciones, escribir errores, etc.

No poder inventar un diseño. Un sorprendente número de candidatos "experimentados" necesita una especificación para incluir el diseño de implementación.

sin conocer el lenguaje de programación, a pesar de la experiencia de reclamo de CV.

No hacer preguntas adicionales para extraer especificaciones más completas.

No poder explicar las decisiones de diseño. Este es importante. Si alguien no puede explicar por qué, cada vez lo hará de manera diferente y se perderá la coherencia.

El resultado final fue que pasé mucho tiempo entrevistando y no reclutando muy a menudo. sin embargo, el equipo de desarrollo fue muy bueno, y tuvo el respeto total de toda la compañía y lo entregó.

Michael Shaw
fuente
Tu experiencia suena bastante normal.
rapid_now
5

Sugeriría FizzBuzz que Jeff Atwood menciona en la publicación en http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Escriba un programa que imprima los números del 1 al 100. Pero para los múltiplos de tres imprima "Fizz" en lugar del número y para los múltiplos de cinco imprima "Buzz". Para números que son múltiplos de tres y cinco, imprime "FizzBuzz".

Jetti
fuente
99
-1. FizzBuzz detecta idiotas totales. Para copiar y pegar códigos, no puedes ser un completo idiota.
back2dos
@ back2dos - Ya deberías eliminar a los "idiotas totales" para cuando llegues a una entrevista cara a cara. FizzBuzz hace que alguien piense en el problema y cómo resolverlo mejor. No es difícil, por lo que debe exponer a quienes copian y pegan, ya que quienes copian y pegan no aprenden el "por qué" detrás de las cosas.
Jetti
3
+1. FizzBuzz detecta más que idiotas totales. También detecta personas que compensan la falta de habilidades técnicas con habilidades sociales superiores a la media. Esas personas tienen buenas posibilidades de pasar una primera prueba de detección. Por ejemplo, pueden muy bien tener títulos legítimos.
MSalters
1
Bueno, me preguntas fizzbuzz y me alejo de inmediato. :) IMO en la categoría junior no es realmente útil, ya que entrenarás a los chicos de todos modos, y en la categoría senior es inútil + ofensivo. deberías ser capaz de ser alto con personas inteligentes y que se hacen cosas por otros medios. La codificación de las preguntas puntuales son indicaciones IME de las empresas de granjas de comadrejas. Si realmente estoy interesado en las habilidades de codificación de alguien, doy una revisión de código pregunta de . Y obtenga todas las respuestas relevantes sin frustración.
Balog Pal
@BalogPal: Me reiría y comenzaría a escribir como loco durante dos minutos, y luego me avergonzaría de mí mismo si no se compila, corre y funciona la primera vez.
gnasher729
2

Hago tres preguntas de entrevista

  1. Escriba una lista vinculada capaz de almacenar algún tipo numérico en Java sin importar nada del marco de colecciones
  2. Escriba un código que muestre cómo puede agregar / eliminar nodos de esa lista
  3. Escriba un código que muestre cómo puede obtener el máximo / mínimo de esa lista

He visto personas completar esto en 5 minutos y he visto a personas luchar durante 30 minutos antes de darse por vencidas.

sal
fuente
El primer requisito debería ser más específico. java.util.LinkedList l = new java.util.LinkedList()no importa nada, pero ciertamente usa las colecciones integradas.
Barry Brown el
Esta es una pregunta justa, especialmente para los recién graduados. Si prestaste atención o pasaste algún tiempo programando, esto debería ser casi trivial. Supongo que no tiene que ser exacto, pero lo suficientemente cerca.
Bryan Harrington el
3
@Bryan, nadie lo ha intentado todavía. Y realmente no me importa si la respuesta es 100% correcta. Solo que entienden el problema y son capaces de abordarlo de manera competente. El problema más común es uno en el que agregar / eliminar no funcionaría al principio o al final de la lista. He recomendado que se contrate a personas en función de su reacción hacia mí señalando esto.
sal
2

No puede hacer esto en el nivel de currículum, ya que esencialmente tienen tiempo infinito para escribir eso, pero puede hacerlo en una entrevista telefónica si hace algunas preguntas que requieren una visión técnica de lo que hacen. Esto te da la respuesta (buena o mala) y cuánto tiempo les llevó llegar allí.

Cuando estés en una entrevista, haz que escriban el código. Es la única manera de saber si pueden programar de verdad. Simplifique el problema, proporcióneles una computadora con conexión a Internet, y el IDE que usa instalado, permítales hacer cualquier pregunta (excepto gimme-hte-codez) y observe cómo funcionan.


EDITAR: Para el análisis post mortem, parece que PMD tiene un detector de copiar / pegar para encontrarlo: http://pmd.sourceforge.net/cpd.html


fuente
Estuve de acuerdo contigo hasta "... y el IDE que usas". Los codificadores son particulares sobre nuestros entornos de trabajo, y no es probable que estén familiarizados con $ random-IDE. He estado codificando durante más de 20 años, y desperdiciaría los primeros 10 minutos tratando de descubrir cómo trabajar un IDE si me arrojas uno. Utilizo un editor (bluefish cuando hago cosas webby, emacs para todo lo demás) y herramientas de línea de comandos para todo lo demás (control de revisión, compilación cuando sea necesario, etc.). No uso depuradores en absoluto. Me enseñaron que si necesita un depurador lo está haciendo mal: ¡para eso está el código de depuración!
HedgeMage
@HedgeMage, no dije que tuvieran que usarlo ... Ver cómo una persona maneja esa situación es muy revelador. ¿Será suficiente el bloc de notas + javac? ¿Descarga e instala NetBeans? ¿Le preguntará cómo hacer X en su IDE, piratear un poco y preguntar por Y y Z?
@HedgeMage, el código de depuración es excelente si puede determinar con anticipación todas las cosas posibles que necesita saber. Los depuradores son buenos en los casos en que necesita ver respuestas a las preguntas para determinar la siguiente pregunta, que con el código de depuración requiere un nuevo binario y reiniciar y volver a la ubicación.
1
@ Thorbjørn: De acuerdo, mis facturas han sido pagadas por el trabajo en idiomas interpretados durante los últimos años, pero incluso en mis días de codificación C, descarté el depurador a favor de un buen código de depuración. Tal vez es solo un prejuicio de mi parte: fui a la universidad con mucha gente que nunca aprendió a codificar per se, simplemente golpearon algo juntos y luego arreglaron lo que el depurador gritaba hasta que "funcionó". No soporto ese tipo de codificación descuidada. No quise decir que los depuradores son malos, solo que ellos y otras características IDE no pertenecen a todos los flujos de trabajo.
HedgeMage
@HedgeMage, estoy de acuerdo con el enfoque de "superarlo hasta que funcione" para la depuración no es bueno, pero concluir que los depuradores son malos es quizás una conclusión demasiado amplia.
1

Sencillo

  • (1) Ciérrelos dentro de una habitación + Oxígeno libre.
  • (2) Ofrézcales una PC con conexión a Internet + IDE de elección + acceso a Alimentos.
  • (3) Tener un wirehark o un método similar para registrar todo el tráfico entrante y saliente.
  • (4) Dale una tarea mediana.
  • (5) Examine todo el tráfico HTTP, después de completar la asignación.
  • (6) Si el sujeto ha copiado grandes fragmentos de código fuente, finalice el Asunto .....

Editar:

Como makerofthings7 como se señaló, en términos prácticos se podría hacer una captura de video (captura de pantalla).

Noche oscura
fuente
Novela, pero en última instancia poco práctica.
Robert Harvey
... o simplemente hacer una captura de video, ver la progresión lógica. Mira cómo se desarrolla la belleza (o el caos).
goodguys_activate
1
terminar sujeto? ¿Retirando el oxígeno libre? ¡Sucio!
@ Thorbjørn: No es tan desordenado como ellos disparándose en el pie, después de copiar grandes trozos de código fuente.
Joe D
1
Aquellos que no usan Internet para su beneficio están bloqueados en los modos de ayer. SIEMPRE asumo que hay algunos buenos ejemplos para que mire, sin importar cuán trivial sea la pregunta. No copio ni pego, miro buenos ejemplos y aplico la mejor técnica. Soy un programador completo, lo que significa que soy un generalista y no un especialista, y confío en el resto del mundo. ¡Claramente pecaminoso!
junky
1

Si desea "eliminar" a los codificadores pobres, puede probar, por ejemplo, la Matriz de Competencias del Programador (útil, pero no se aplica a todas las áreas posibles, por supuesto, puede hacerla propia) o codility.com (las tareas son muy buenas y ahorra mucho tiempo).

En general, contratar buenos codificadores es difícil y a menudo requiere muchos años de práctica. Puede comenzar su propia base de datos de preguntas de la entrevista, no solo preguntando sobre cosas de codificación sino también con matemáticas, lógica, sin mencionar las preguntas de motivación.

Wojciech Sroczyński
fuente
0

Diría que el problema con sus candidatos no es que no puedan programar en absoluto, sino que no tienen la sensación de utilizar la herramienta adecuada para el trabajo. Mi sugerencia es una pregunta de ensayo en la que se les darían requisitos de alto nivel para un nuevo sistema y se les pedirá que proporcionen una arquitectura y justifiquen sus elecciones de componentes. Pero mantenga el FizzBuzz para los candidatos que no pueden codificar sin un navegador.

Larry Coleman
fuente