Comment puis-je éliminer rapidement les codeurs «copier-coller»? [fermé]

15

J'ai besoin d'un moyen de filtrer les curriculum vitae des gens qui copient-collent simplement du code, puis espèrent que cela fonctionne, et vérifiez-le si c'est le cas. Tout cela se produit sans avoir la compréhension (ou le soin) de comprendre le reste du code dans le système.

Bien sûr, je sais que copier et coller du code fait partie de l'apprentissage d'un nouvel objet, d'un nouveau contrôle, etc ... mais comment savoir si cela représente 70% (ou plus) de leur carrière de développement?

J'ai rencontré peut-être des gars de niveau supérieur dont les compétences sont si obsolètes ou non pertinentes pour le projet, qu'ils ne font que google, copier-coller du code sans penser à la solution dans son ensemble. En conséquence, nous avons une incompatibilité de JSON, AJAX, rappels, ASMX, WCF et postbacks dans le même projet. Il est clair qu'il n'y a aucune cohérence ou logique derrière l'endroit où chaque technologie est utilisée.

Dans le pire des cas, ce type de développeur crée des problèmes de sécurité et des vecteurs d'attaque.

Question

Comment recommanderiez-vous que je filtre les personnes qui ont une mauvaise formation en programmation? Puis-je le faire au niveau du CV? Sinon, comment dois-je procéder pendant l'entretien.

goodguys_activate
la source
On dirait que vous avez besoin d'un architecte technologique pour votre projet. Quelqu'un doit fixer la loi WRT aux normes utilisées, aux technologies utilisées et l'éloigner de l'idée de la semaine.
quick_now

Réponses:

47

J'ai rencontré peut-être des gars de niveau supérieur dont les compétences sont si obsolètes ou non pertinentes pour le projet, qu'ils ne font que google, copier-coller du code sans penser à la solution dans son ensemble. En conséquence, nous avons une incompatibilité de JSON, AJAX, rappels, ASMX, WCF et postbacks dans le même projet. Il est clair qu'il n'y a aucune cohérence ou logique derrière l'endroit où chaque technologie est utilisée.

Je ne pense pas que les compétences de vos développeurs soient le problème. Votre problème se situe ailleurs, peut-être un chef d'équipe ou un architecte qui n'a pas la confiance en soi pour «encourager» de meilleures disciplines de codage, ou une équipe de gestion qui ne comprend pas l'importance de gérer la dette technique et ne donne pas leur aux développeurs le temps et les ressources pour le faire. Votre entreprise tient-elle des revues de code?

Le leadership peut être le problème, pas les développeurs de copier-coller.

Robert Harvey
la source
16
+1 Leadership may be the problem, not copy-paste developers. C'était précisément mon interprétation.
George Marian
Sérieusement. Quelque chose est sévèrement AWOL dans le service de communication.
MIA
+1: Idem sur les commentaires de George Marian. Très bien dit, Robert.
Jim
c'est bon. J'espère que cela atteindra autant que les enquêteurs, les gestionnaires de recrutement.
Sarre
il semble y avoir beaucoup de consensus sur cette réponse, mais les gars de niveau "senior" ne dictent-ils pas la fonctionnalité et ensuite l'implémentation est laissée aux codeurs, non? Je veux dire que le gars de niveau supérieur pourrait dire "Hé, n'utilisez pas une horde de technologies, utilisez simplement <ces deux>", mais les développeurs de copier-coller vont toujours faire du copier-coller! Ai-je tort ?
Chani
13

Le moyen d'éliminer les programmeurs qui ne peuvent pas programmer est de leur proposer un exercice de programmation pratique dans le cadre de la phase de sélection ou de la phase d'entrevue. (Ce dernier est probablement meilleur car vous pouvez contrôler l'environnement pour éviter la tricherie.)

Mais je ne pense pas que cela va vraiment résoudre votre problème.

... nous avons une incompatibilité de JSON, AJAX, rappels, ASMX, WCF et postbacks dans le même projet. Il est clair qu'il n'y a aucune cohérence ou logique derrière l'endroit où chaque technologie est utilisée.

OMI, le vrai problème ici est que votre équipe ne fait pas suffisamment de révision du code interne et ne développe pas un "livre de jeu" des solutions préférées aux problèmes connus. Il s'agit en partie d'un problème de culture, en partie d'un problème de communication et (probablement) en partie d'un problème lié aux délais des projets.

Un autre problème est que le projet a généralement une longue durée de vie, et pendant cette durée de vie, de nouvelles technologies / techniques apparaîtront, et les anciennes risquent de tomber en disgrâce. Si vous voulez éviter un "petit déjeuner pour chiens" en utilisant des technologies / techniques, vous devez soit:

  • établir et appliquer une liste de technologies / techniques pouvant être utilisées par projet, ou
  • investir des efforts pour rafraîchir les technologies utilisées par un projet.
Stephen C
la source
1
Si vous ne donnez pas de test écrit pendant l'entretien, vous pourriez vous tirer une balle dans le pied. Je les ai rencontrés chez mes quatre derniers employeurs et j'ai souvent été surpris de la simplicité de certaines questions. À un endroit, on m'a dit qu'un autre candidat était parti sans avoir terminé le test, pleurant.
Adrian J. Moreno
1
Je suis absolument d'accord qu'un test écrit lors de l'entretien est le seul moyen de s'assurer que vos recrues ont vraiment de bonnes compétences en programmation. Mais l'essentiel de ma réponse est que les compétences des développeurs ne suffisent pas à elles seules pour résoudre le problème du SO.
Stephen C
Vous avez été pris par le minuteur de montage. Je suis tout à fait d'accord pour dire que des normes et un examen sont nécessaires. Nous avons récemment publié un nouveau document sur les normes de codage et, combiné à de nouveaux processus de révision de code, nous avons eu beaucoup moins de bogues en QA. Un de mes prochains objectifs est de créer une équipe de formation interne.
Adrian J. Moreno
10

Embaucher des personnes en probation de 3 mois. Tire-les s'ils sucent.

Si vous ne contrôlez pas, vous ne pouvez pas vous attendre. Revues de code, outils d'audit. Un serveur CI peut les exécuter automatiquement.

Posez de vraies questions dans vos entretiens, comme dans les questions du vrai code.

Demandez-leur d'écrire du code sur le tableau blanc.

Si vous êtes un gestionnaire non technique, vous n'êtes pas qualifié pour en juger.

Si vous n'êtes pas qualifié, demandez à un consultant professionnel réputé de faire les tests. Demandez à vos employés existants et à vos concurrents commerciaux s'ils connaissent une personne 100 fois productive. Payez-les pour faire l'entretien.

Si vous voulez diriger un hôpital sans chef de chirurgie, allez-y.

Tim Williscroft
la source
parlez-vous d'un expérimenté? Pourquoi devrait-on quitter son emploi et rejoindre un endroit où ils ont besoin de 3 mois pour les laisser sucer ou non :) Pourquoi y a-t-il des ressources humaines?
Sarre
Je parle de personnes expérimentées et compétentes. Ils sont moins chers à long terme. Les ressources humaines vous empêchent d'être poursuivi pour violation du droit du travail. Initialement là pour faire des trucs délicats pour les gestionnaires numériques d'Henry Ford. Histoire vraie, regardez-la. Si vous savez déjà que la personne va bien fonctionner, vous êtes mieux que moi dans ce domaine. La personne va changer d'emploi parce que vous êtes si bon de travailler, il y a un excellent environnement de travail et après la probation, elle reçoit un gros bonus. S'ils sont licenciés en tant que permanents, votre entreprise paie trois mois supplémentaires. Quelque chose comme ça
Tim Williscroft
9

J'ai passé les dernières années à interviewer des gens et à constater que 90% des candidats ne pouvaient tout simplement pas programmer. Ma technique d'entrevue pour déterminer la programmation consiste à donner au candidat un mémoire trop simple et à le laisser le résoudre à l'aide d'un marqueur et d'un tableau blanc.

Les modes de défaillance incluent:

venir avec un design et ensuite mettre en œuvre quelque chose de différent. Ces candidats sont rejetés car ils sont dangereux dans une équipe. pas suivre les spécifications, écrire des bugs etc ...

Ne pas pouvoir inventer un design. Un nombre surprenant de candidats "expérimentés" ont besoin d'une spécification pour inclure la conception de la mise en œuvre.

ne connaissant pas le langage de programmation, malgré CV revendiquant de l'expérience.

Ne pas poser de questions supplémentaires pour extraire des spécifications plus complètes.

Ne pas pouvoir expliquer les décisions de conception. Celui-ci est majeur. Si quelqu'un ne peut pas expliquer pourquoi, à chaque fois, il le fera différemment et la cohérence sera perdue.

Le résultat final a été que j'ai passé beaucoup de temps à interviewer et à ne pas recruter très souvent. cependant, l'équipe de développement était très bonne et avait le respect total de toute l'entreprise et elle a livré!

Michael Shaw
la source
Votre expérience semble assez normale.
quick_now
5

Je suggère FizzBuzz que Jeff Atwood mentionne dans le post à http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Écrivez un programme qui imprime les nombres de 1 à 100. Mais pour les multiples de trois, imprimez "Fizz" au lieu du nombre et pour les multiples de cinq imprimez "Buzz". Pour les nombres qui sont des multiples de trois et cinq, imprimez "FizzBuzz".

Jetti
la source
9
-1. FizzBuzz détecte le nombre total d'idiots. Pour faire du copier-coller, vous ne pouvez pas être un idiot total.
back2dos
@ back2dos - Vous devriez déjà éliminer le "total des idiots" au moment où vous arrivez à un entretien en face à face. FizzBuzz incite quelqu'un à réfléchir au problème et à la meilleure façon de le résoudre. Ce n'est pas difficile, donc cela devrait exposer ceux qui copient et collent, car ceux qui copient et collent n'apprennent pas le «pourquoi» derrière les choses.
Jetti
3
+1. FizzBuzz détecte plus que le nombre total d'idiots. Il détecte également les personnes qui compensent un manque de compétences techniques par des compétences sociales supérieures à la normale. Ces personnes ont de bonnes chances de réussir un premier test de dépistage. Par exemple, ils peuvent très bien détenir des diplômes légitimes.
MSalters
1
Eh bien, vous me demandez fizzbuzz et je m'éloigne immédiatement. :) IMO dans la catégorie junior ce n'est pas vraiment utile, car vous allez quand même entraîner les gars, et dans la catégorie senior c'est inutile + offensif. vous devriez être en mesure de faire grandir les gens intelligents et bien préparés par d'autres moyens. Le codage sur des questions ponctuelles est une indication IME des entreprises de la belette. Si je suis réellement intéressé par les compétences de codage de quelqu'un, je pose une question de révision du code . Et obtenez toutes les réponses pertinentes sans frustration.
Balog Pal
@BalogPal: Je ris et je commence à taper comme un fou pendant deux minutes, puis j'aurais honte de moi s'il ne compile pas, ne fonctionne pas et ne fonctionne pas la première fois.
gnasher729
2

Je pose trois questions d'entrevue

  1. Écrire une liste chaînée capable de stocker un type numérique en java sans importer quoi que ce soit du framework de collections
  2. Écrire du code montrant comment ajouter / supprimer des nœuds de cette liste
  3. Écrivez le code montrant comment vous pouvez obtenir le max / min de cette liste

J'ai vu des gens terminer cela en 5 minutes et j'ai vu des gens lutter pendant 30 minutes avant d'abandonner.

sal
la source
La première exigence devrait être plus précise. java.util.LinkedList l = new java.util.LinkedList()n'importe rien, mais utilise certainement les collections intégrées.
Barry Brown
C'est une question juste, surtout pour les diplômés récents. Si vous avez prêté attention ou passé du temps à programmer, cela devrait être presque insignifiant. Je suppose que cela ne doit pas être exact, mais assez proche.
Bryan Harrington
3
@Bryan, personne n'a encore essayé cela. Et je m'en fiche vraiment si la réponse est 100% correcte. Seulement, ils comprennent le problème et sont capables de l'aborder de manière compétente. Le problème le plus courant est celui où l'ajout / la suppression ne fonctionnerait pas en tête ou en queue de liste. J'ai recommandé l'embauche de personnes en fonction de leur réaction à ce que je le souligne.
sal
2

Vous ne pouvez pas le faire au niveau du curriculum vitae, car ils ont essentiellement un temps infini pour rédiger cela, mais vous pouvez le faire lors d'un entretien téléphonique si vous posez quelques questions qui nécessitent un aperçu technique de ce qu'ils font. Cela vous donne à la fois la réponse (bonne ou mauvaise) et le temps qu'il leur a fallu pour y arriver.

Lors d'une interview, faites-leur écrire du code. C'est la seule façon de savoir s'ils peuvent programmer pour de vrai. Simplifiez le problème, donnez-leur un ordinateur avec une connexion Internet et l'IDE que vous utilisez installé, laissez-les poser n'importe quelle question (sauf gimme-hte-codez) et regardez comment ils fonctionnent.


EDIT: Pour l'analyse post mortem, il semble que PMD dispose d'un détecteur copier / coller pour le trouver: http://pmd.sourceforge.net/cpd.html


la source
Je suis d'accord avec vous jusqu'à ce que "... et l'IDE que vous utilisez". Les codeurs sont particuliers à propos de nos environnements de travail et ne sont probablement pas familiers avec $ random-IDE. Je code depuis plus de 20 ans, et je perdrais les 10 premières minutes à essayer de comprendre comment travailler un IDE si vous m'en jetiez un. J'utilise un éditeur (bluefish pour faire des choses webby, emacs pour tout le reste), et des outils de ligne de commande pour tout le reste (contrôle des révisions, compilation si nécessaire, etc.). Je n'utilise aucun débogueur. On m'a appris que si vous avez besoin d'un débogueur, vous le faites mal: c'est à cela que sert le code de débogage!
HedgeMage
@HedgeMage, je n'ai pas dit qu'ils devaient l' utiliser ... Voir comment une personne gère cette situation est très révélateur. Le bloc-notes + javac suffira-t-il? Télécharge-t-il et installe-t-il NetBeans? Va-t-il demander comment faire X dans votre IDE, pirater un peu et demander Y et Z?
@HedgeMage, le code de débogage est idéal si vous pouvez déterminer à l'avance toutes les choses possibles que vous pourriez avoir besoin de savoir. Les débogueurs sont agréables dans les cas où vous devez voir les réponses aux questions afin de déterminer la question suivante, qui avec le code de débogage nécessite un nouveau binaire et redémarrez et allez à nouveau à l'emplacement.
1
@ Thorbjørn: Certes, mes factures ont été payées par le travail dans des langages interprétés au cours des dernières années, mais même dans mes jours de codage C, j'ai rejeté le débogueur en faveur d'un bon code de débogage. C'est peut-être juste un préjugé de ma part: je suis allé à l'université avec beaucoup de gens qui n'ont jamais appris à coder en soi - ils ont simplement giflé quelque chose ensemble, puis corrigé tout ce que le débogueur criait jusqu'à ce que cela "fonctionne" un peu. Je ne supporte pas ce genre de codage slipshod. Je ne voulais pas laisser entendre que les débogueurs sont mauvais, juste qu'ils et d'autres fonctionnalités IDE n'appartiennent pas à tous les workflows.
HedgeMage
@HedgeMage, je suis d'accord sur l'approche "battre jusqu'à ce que ça marche" pour le débogage n'est pas bon, mais conclure que les débogueurs sont mauvais est peut-être une conclusion un peu trop large.
1

Facile

  • (1) Verrouillez-les dans une pièce + oxygène libre.
  • (2) Donnez-leur un PC avec connexion Internet + IDE de choix + accès à la nourriture.
  • (3) Avoir wire-shark ou une méthode similaire pour enregistrer tout le trafic entrant et sortant.
  • (4) Donnez-lui une mission moyenne.
  • (5) Examiner tout le trafic HTTP, après la fin de l'affectation.
  • (6) Si le sujet a copié de gros morceaux de code source, mettez fin au sujet .....

Éditer:

En tant que makerofthings7 comme indiqué, en termes pratiques, on pourrait faire une capture vidéo (capture d'écran).

Nuit noire
la source
Roman, mais finalement peu pratique.
Robert Harvey
... ou faites simplement une capture vidéo, voyez la progression logique. Regardez la beauté (ou le chaos) se dérouler.
goodguys_activate
1
mettre fin au sujet? En retirant l'oxygène libre? Désordonné!
@ Thorbjørn: Pas aussi désordonné que de se tirer une balle dans le pied, après avoir copié de gros morceaux de code source.
Joe D
1
Ceux qui ne parviennent pas à utiliser Internet à leur avantage sont bloqués dans les modes d'hier. Je suppose TOUJOURS que ce sont de bons exemples pour que je puisse regarder, quelle que soit la banalité de la question. Je ne fais pas de copier-coller, je regarde de bons exemples et j'applique la meilleure technique. Je suis un programmeur à pile complète, ce qui signifie que je suis un généraliste et non un spécialiste et que je compte sur le reste du monde. Clairement pécheur!
junky
1

Si vous voulez "éliminer" les mauvais codeurs, vous pouvez essayer par exemple la matrice de compétences des programmeurs (utile mais elle ne s'applique pas à tous les domaines possibles - bien sûr, vous pouvez les créer) ou codility.com (les tâches sont très bonnes et cela fait gagner beaucoup de temps).

Généralement, l'embauche de bons codeurs est difficile et nécessite souvent de nombreuses années de pratique. Vous pouvez créer votre propre base de données de questions d'entrevue, en posant non seulement des questions de codage, mais aussi en mathématiques, en logique, sans parler des questions de motivation.

Wojciech Sroczyński
la source
0

Je dirais que le problème avec vos candidats n'est pas qu'ils ne peuvent pas programmer du tout, mais qu'ils n'ont pas la sensation d'utiliser le bon outil pour le travail. Ma suggestion est une question d'essai où ils seraient donnés des exigences de haut niveau pour un nouveau système et invités à fournir une architecture et à justifier leurs choix de composants. Mais gardez le FizzBuzz pour les candidats qui ne peuvent pas du tout coder sans navigateur.

Larry Coleman
la source