Comment gérer le code "presque bon" d'un développeur junior? [fermé]

95

J'ai une question sur la gestion d'équipe. En ce moment, je traite avec un développeur junior qui travaille à distance depuis une usine de codage. Le gars est ouvert à la critique et disposé à apprendre, mais je me demande si je devrais pousser des choses.

À l’heure actuelle, une violation évidente des bonnes pratiques est évidente: comme une violation de la SRP, des objections de Dieu, des noms non significatifs pour des méthodes ou des variables; Je montre ce qu'il doit réparer et j'essaie d'expliquer pourquoi c'est faux.

Ma question est: quand est-ce que je m'arrête? À l'heure actuelle, s'il y a des violations mineures du style de codage telles que des noms de variables dans la mauvaise langue (l'équipe précédente avait mélangé l'espagnol et l'anglais et que j'essayais de résoudre ce problème), ou des problèmes structurels mineurs, je les laisse résoudre le problème si J'ai du temps libre ou besoin de modifier la classe problématique. Je pense que cela est bon pour le moral des équipes, donc je ne repousse pas constamment le code sur ce qu'un débutant pourrait avoir l'impression d'être des détails mineurs, ce qui peut être assez frustrant, mais je crains aussi que le fait d'être trop "doux" puisse empêcher le gars d'apprendre à faire des choses.

Comment puis-je équilibrer la ligne entre enseigner le gars et ne pas l'épuiser avec des critiques constantes? Pour un junior, il peut être frustrant de lui dire de refaire ce qui fonctionne à ses yeux.

Zalomon
la source
7
Combien de temps avez-vous passé pour vous assurer qu'il sait quelles sont vos attentes?
Blrfl
13
@gnat Je pense que ce n'est pas le même cas, mon problème n'est pas que nous dépassons les estimations ou dépassons le code. En fait, nous sommes en avance sur le calendrier. Ma question est de savoir comment équilibrer la ligne entre enseigner le gars et ne pas le brûler avec des critiques constantes. Pour un junior, il peut être frustrant de lui dire de refaire ce qui fonctionne à ses yeux.
Zalomon
4
J'ai édité cela pour le rendre plus sur le sujet. Je pense que cela est également différent de la question liée en double.
Enderland
3
Certaines choses que j’ai essayé d’aider avec ceci: la programmation en binôme - comprennent mieux comment il travaille et pense, et l’exposez peut-être à votre processus de pensée tout au long de votre code. Trouvez les tâches pour lesquelles il est doué - parfois, vous obtiendrez de meilleurs résultats en lui lançant un tas de petits bogues contre des gros travaux. Tech designs - donnez-lui d’abord une chance de concevoir un logiciel sans toucher au code. Cela lui permet de réfléchir à la structure et aux processus, plutôt que de baisser la tête et de coder. Enfin, bonne chance. Il faut parfois plus de persistance que prévu mais cela en vaut la peine s'il devient productif.
Sandy Chapman

Réponses:

84

Si vous pensez que le code doit être corrigé avant la fusion, faites des commentaires. De préférence avec "pourquoi" pour que le dev puisse apprendre.

Gardez à l'esprit que le code est lu beaucoup plus souvent qu'écrit. Donc, les choses qui semblent "mineures" peuvent réellement être vraiment importantes (noms de variables par exemple).

Cependant, si vous vous trouvez en train de faire des commentaires qui semblent fastidieux, envisagez peut-être:

  • Est-ce que votre processus de CI devrait les attraper?
  • Avez-vous un "guide du développeur" clair à référencer (ou tout est-il documenté dans votre tête)?
  • Ces commentaires contribuent-ils réellement à la qualité du code?

Beaucoup de gens sacrifient la productivité à l'autel du processus ou de la perfection. Attention à ne pas faire ça.

Essayez de rendre visite à votre collègue en personne si possible. Ou utilisez des appels vidéo. Construire une relation facilite la gestion des critiques (même des critiques de code).

Si vous trouvez qu'un morceau de code a trop de va-et-vient sur les problèmes, demandez la révision plutôt que des morceaux de code plus petits. Les modifications incrémentielles sont plus susceptibles d'éviter certains des problèmes de conception les plus importants, car elles sont par définition moins importantes.

Mais il ne faut absolument pas fusionner des éléments, puis revenir en arrière et les réparer. C'est passif agressif et si le développeur trouve que vous faites cela, vous tuez leur moral.

Enderland
la source
65
@ 9000, c'est étonnant de constater combien de fois les gens sont frustrés de ne pas contribuer selon leurs normes, alors que ces normes ne sont même pas documentées nulle part ...
vendredi
32
Les noms de variables sont extrêmement importants pour décrire l’intention du code; noms de méthodes / fonctions, encore plus. Bien attribuer les noms n’est pas un perfectionnisme inutile, c’est indispensable pour la maintenabilité.
9000
9
@Zalomon le mentionne certainement; plus, en faire une discussion. En tant que développeur junior, j'ai travaillé avec plusieurs développeurs seniors différents. Ma meilleure expérience a été avec un développeur qui m'a expliqué toutes ses recommandations, même "petites", comme un nom légèrement meilleur pour une variable. Non seulement j'en ai appris beaucoup, mais je me sentais tellement bien qu'il écoutait mes processus de pensée et m'incluait dans la discussion; cela me donnait envie qu'il revoie mon code davantage afin que je puisse en apprendre davantage. (suite)
dj18
6
@Zalomon (suite) D'un autre côté, un développeur expérimenté qui a effectué des modifications dans mon dos (même si vous le lui dites après, il est toujours dans son dos) était totalement démoralisant - cela m'a fait sentir que je travaillais avec un autocrate dû trouver comment plaire.
dj18
6
Ma (petite) expérience de mentor auprès des développeurs juniors montre qu'il est utile de faire réfléchir un développeur sur le nom propre et d'exprimer le but des données dans le nom de la variable. Cela aide les développeurs à comprendre réellement ce que fait leur code, d'une manière beaucoup moins agitée à la main qu'ils ne le sont habituellement. Cela les amène parfois à trouver des erreurs logiques dans le code impliqué, ou tout simplement de meilleures façons d’exprimer des choses. (La même chose fonctionne pour moi; la différence est que la discipline est intériorisée, grâce aux réviseurs de code stricts que j'avais auparavant.)
9000
19

Gardez la critique sur le code plutôt que sur l'auteur.

Tout travail produit comporte un attachement émotionnel inhérent. Pensez à atténuer cela en dissociant le plus possible le code de l'écrivain. La qualité du code doit toujours être établie comme un objectif commun auquel vous êtes tous deux confrontés, plutôt que comme un point de friction entre vous.

Une façon d'y parvenir est de choisir judicieusement vos mots. Bien que les individus STEM aiment se considérer comme hautement logiques, les émotions font partie de la nature humaine. Le verbiage utilisé peut faire la différence entre des sentiments blessés ou épargnés. Dire "Ce nom de fonction serait plus conforme aux conventions s'il était en anglais" est préférable à "Vous avez mal écrit ce nom de fonction et il devrait être en anglais." Bien que ce dernier soit encore apprivoisé et seul semble bien, par rapport à l'ancien, ses défauts deviennent évidents - lors de la préparation de ce qu'il faut dire en personne ou par courrier électronique, examinez si votre contexte, vos mots et votre attention sont ou non centrés sur les problèmes. la personne .

Le langage du corps

Bien que les mots soient importants, la plupart des communications sont non verbales. Faites attention au langage corporel, même aux subtilités apparemment insignifiantes telles que la matière d'orientation. Par exemple, de nombreuses interactions entre jeunes seniors se font face à face. Cependant, une approche côte à côte serait beaucoup plus propice au résultat souhaité.

Donner des commentaires positifs honnêtes

Une multitude d’études montrent que les informations sont apprises plus rapidement et mieux retenues lorsque nous récompensons les bons comportements plutôt que de punir les mauvais. Parfois, il suffit de noter que les performances ont été améliorées avec un simple "bon travail" ou un mot plus spécifique "J'ai récemment remarqué que votre style correspondait à nos normes à un tee-shirt, excellent travail!" Même en complétant cette reconnaissance d'amélioration en leur demandant, à leur tour, de conseiller quelqu'un d'autre sur les problèmes qu'ils ont modifiés peut faire toute la différence pour votre jeune développeur et son travail.

Legato
la source
2
Sur le point de verbiage: lorsque vous devez utiliser un pronom personnel, le simple fait de choisir "nous" au lieu de "vous" dépersonnalise également la critique, selon mon expérience des deux côtés de la révision du code.
Josh Caswell
6

Le gars est ouvert à la critique et disposé à apprendre, mais je me demande si je devrais pousser des choses.

Poussez tout ce que vous pouvez. Si le gars apprend et qu'il est de votre devoir de revoir son code, vous avez beaucoup à gagner s'il fait du bon travail.

Cela signifiera moins de code à réviser dans le futur et donnera éventuellement à votre équipe un objectif d'embauche.

En outre, si vous vous retenez, vous n’aidez pas, mais vous condescendez.

Le simple fait que vous avez posté votre question ici, demandant si vous en faites trop, me signale déjà que vous n'avez pas besoin de ce conseil spécifique, mais pour les autres, le voici: rappelez-vous que pousser fort ne veut pas dire être un imbécile.

Être un mentor n'est pas une tâche facile. Vous devrez également lui laisser un espace pour faire des erreurs et les corriger lui-même. Assurez-vous simplement qu'il le fera quelque part sans faire de véritables dégâts.

Machado
la source
5

Sur la base de votre description, je la laisserais à: "c’est bien. Il ya quelques choses que j’aurais faites différemment mais qui ne sont pas très importantes."

Comme vous semblez le comprendre, la critique a un coût et si vous passez beaucoup de temps à détailler des détails, cela devient un problème de moral. Idéalement, toutes les normes de codage sont vérifiées automatiquement et vous ne pouvez pas construire si vous ne les suivez pas. C'est un gain de temps considérable et vous permet de vous mettre au travail. Si vous réservez vos critiques pour des «choses qui comptent», vos conseils auront beaucoup plus d'impact et vous serez perçu comme un mentor précieux. Il est vraiment crucial de faire la distinction entre les choses qui ne sont pas bonnes et les choses qui ne sont pas exactement comme vous le feriez.

Je crois au concept du moment propice à l' apprentissage . Si le développeur a suffisamment de capacité mentale, il peut demander des détails sur ce que vous feriez différemment. (S) il pourrait ne pas et c'est OK. Les gens s'épuisent et au début de leur carrière, il peut falloir beaucoup d'énergie mentale pour accomplir des choses qui semblent simples plus tard.

JimmyJames
la source
L'un des moyens d'éviter des cycles interminables de révisions de code consiste à effectuer de petits changements. Aucune demande de tirage n’est ridiculement petite si elle apporte un changement bénéfique (j’ai fait ma part de relations publiques à 1 caractère). Le plus petit, mieux c'est. Sans pitié, réduisez le nombre de tickets remis aux développeurs juniors et aidez-les à faire le nécessaire. Une fois qu'ils maîtrisent l'ensemble du processus de lecture-compréhension-code-test-relecture-déploiement, leur portée peut augmenter.
9000
1
Je ne pense pas que ce soit une bonne idée de dire au développeur "ils ne sont pas très importants" s'ils sont suffisamment importants pour que le PO puisse revenir en arrière et changer plus tard.
enderland
3
@enderland D'après mon expérience, le code parfait n'existe pas. Vous pourrez toujours l'améliorer plus tard, de sorte que ce n'est pas vraiment pertinent ici. Le PO dit que ce sont des choses à "réparer si j'ai du temps libre". Il y a deux sortes de problèmes. Des choses qui doivent être réparées et des choses qui n'ont pas besoin d'être réparées. Ces derniers peuvent ou ne peuvent pas être fixés et ceux-ci sonnent comme s'ils tombaient dans cette catégorie. C'est un jugement à un certain niveau mais je pense que si, en tant que développeur expérimenté, vous n'êtes pas sûr que cela vaut la peine d'être appelé comme un changement indispensable, ce n'est probablement pas le cas.
JimmyJames
5

Je considérerais accepter son travail quand il est acceptable, pas parfait. Et ensuite, la tâche suivante consiste, après une discussion, à la refactoriser immédiatement en effectuant tous les changements mineurs mais importants que vous souhaitez.

Ainsi, quand le travail est accepté pour la première fois, votre message est que ce n’est pas mauvais et que certains endroits l’auraient jugé assez bon - mais pas des endroits où vous voudriez être un développeur junior qui veut apprendre son métier correctement.

Donc, vous ne dites pas "je rejette votre travail parce que ce n'est pas assez bon". Vous dites (a) "j'accepte votre travail parce qu'il est assez bon", puis (b) "mais je le veux mieux".

gnasher729
la source
3
Ou "(b) Et je sais que tu peux faire mieux". S'il demande "enseigne-moi", vous savez qu'il est sur le bon chemin. :)
Machado
1
Dans mon poste précédent, nous utilisions Stash / BitBucket comme outil de révision de code. Il avait l'option de bloquer une demande d'extraction en définissant une tâche en attente ou en refusant la demande d'extraction. Je ne les utiliserais que pour les changements nécessaires. S'il y avait un changement superficiel (par exemple, lisibilité du code mineur, meilleure structure de données, refactoring), je le signalerais avec des suggestions, mais sans ajouter de tâche de blocage, faites-le si vous avez le temps. Cela évite également les échéances manquantes lors de conflits mineurs.
Hand-E-Food
4

Question assez ouverte, mais voici quelques idées.

  1. Évaluations par les pairs (par le développeur junior)

    Le meilleur moyen pour quelqu'un d'apprendre le "bon" moyen est de voir les autres le faire. Est-ce que tous vos développeurs effectuent des revues de code? Ce n’est peut-être pas une mauvaise idée de laisser votre développeur junior les exécuter également (bien que vous deviez également exiger au moins un examen d’un développeur senior également). De cette façon, il verra de bons codeurs en action, en plus de constater qu'il existe des commentaires de révision destinés à des ingénieurs autres que lui-même, ce qui signifie que cela est personnel.

  2. Premiers commentaires / évaluations de tâches

    Autoriser le développeur à participer à sa propre répartition des tâches. Demandez-lui d’enregistrer sa conception dans les notes de tâches et de soumettre une «révision de code» sans ensemble de modifications et uniquement pour la tâche. De cette façon, vous pouvez revoir son plan avant qu’il n’ait écrit une seule ligne de code. Une fois que sa tâche a été passée en revue, il peut commencer à coder (après quoi il soumettra une autre révision de code). Cela évite la situation démoralisante dans laquelle le développeur a écrit un tas de choses et que vous devez lui dire de le réécrire.

John Wu
la source
3
J'aime l'idée de l'examen par les pairs, pour le moment, nous ne sommes que deux membres de l'équipe, mais je peux lui demander de réviser mon code. S'il peut comprendre ce que je fais et trouver des incohérences, cela peut être dû à la qualité du code et à son moral. Cela m'a aidé quand j'ai appris que je n'étais pas le seul à faire des erreurs +1
Zalomon
2

Si le code enfreint de manière objective une norme écrite et non ambiguë, je pense que vous devriez simplement continuer à pousser jusqu'à ce que chaque problème soit résolu. Certes, les premiers commits pourraient être légèrement gênants pour le développeur, mais ils pourraient tout aussi bien connaître les règles à suivre plus tôt que plus tard.

En outre, si vous permettez quelques infractions aux normes ici et là, elles créeront un mauvais précédent - voir la théorie des fenêtres cassées . En outre, il est beaucoup plus facile de se rappeler de suivre les normes si elles sont déjà appliquées de manière cohérente à la base de code. Donc vraiment, tout le monde y gagne, y compris les développeurs juniors en question.

Je ne pense pas que le moral soit un gros problème tant que la norme de codage est écrite. Seulement si cela devient plus subjectif "bien, je l' aurais fait différemment" -territory, alors vous devriez être inquiet, car l'approche des développeurs pourrait être tout aussi valable.

JacquesB
la source
2

Envisagez d'adopter un flux de travail de révision de code dans lequel les développeurs publient leurs modifications proposées sur un outil tel que Github Pull Requests ou Phabricator Diffusion et obtiennent la signature de leurs homologues avant d'imposer leurs modifications à la branche maîtresse partagée.

De cette façon, plutôt que de critiquer rétroactivement ou de demander à quelqu'un de refaire ce qui a déjà été fait, le travail n'est tout simplement pas terminé jusqu'à ce qu'il passe l'examen par les pairs. Les échanges avec les pairs font autant partie du processus d’ingénierie logicielle que les échanges avec le compilateur.

Vous pouvez afficher vos préoccupations sous forme de commentaires sur des lignes particulières et mener des discussions à leur sujet. Il peut faire la même chose avec votre code. La discussion reste centrée sur les modifications de code proposées spécifiques, et non sur les performances ou la compétence de quelqu'un en général.

Même les brillants ingénieurs de mon entreprise sont reconnaissants lorsque les critiques de code saisissent des fautes de frappe ou les forcent à rendre les choses plus claires. Il est tout à fait normal que les nouvelles recrues exigent plus d'itérations. Au fil du temps, vous commencez à résoudre par réflexe le type de problèmes qui, selon vous, attireront les commentaires avant de poster un diff. Obtenir un pourcentage plus élevé de vos différences au premier essai est la façon dont vous savez que vous améliorez.

proche parent
la source
1

Je ne repousse pas constamment le code sur ce qui pour un novice peut sembler être un détail mineur, ce qui peut être assez frustrant, mais je crains aussi que le fait d'être trop «doux» n'empêche pas le gars d'apprendre à faire certaines choses.

Ce sont à la fois des possibilités réelles et des préoccupations valables. Demandez au développeur ce qu’il en pense.

Kevin Krumwiede
la source
En fait, il m'a dit qu'il se sentait stupide. J'essaie de garder les critiques positives et je lui ai dit que j'étais heureux de son travail. Je lui ai également expliqué que j'avais ce genre de doutes quand je débutais, mais je dois supposer que certains des commentaires sur lui donner pour améliorer son travail, ça ne va pas.
Zalomon
2
Expliquez que vous ne perdriez pas votre temps à critiquer son code avec soin si vous ne vous attendiez pas à ce que cela lui rapporte de devenir un meilleur programmeur. Et faites bien la distinction entre "vous devez résoudre ce problème pour que le code soit acceptable" et "voici quelque chose que vous pouvez faire encore mieux la prochaine fois". Fournir un grand nombre de critiques perspicaces et précises est le plus beau cadeau que vous puissiez offrir à un programmeur débutant. Sinon, cela fait d'eux un pire programmeur. La critique devrait commencer à diminuer. Il suffit de faire chaque erreur une fois, peut-être deux fois, et il n’ya que très peu d’erreurs.
David Schwartz
1

En supposant que vous ayez un flux de travail de demande d'extraction ou de révision de code et que cela semble être le cas, je vous recommanderais de noter les éléments "non critiques" ou "préférés".

Si vous voyez un PR dans un état similaire à ce que vous décrivez, avec quelques problèmes stylistiques mineurs ou nécessitant une refactorisation non critique, laissez un commentaire, mais n'hésitez pas à l'approuver. Dire quelque chose comme: "Dans le futur, essayez peut-être d'éviter les noms de méthode comme celui-ci au profit de quelque chose comme descriptiveMethodName", enregistrez votre opinion sans la forcer à la changer ou à bloquer son développement.

Maintenant, ils connaissent votre préférence et, s’ils tentent de s’améliorer, ils remarqueraient avec espoir une telle situation à l’avenir. Cela leur laisse également la porte ouverte pour qu’ils le modifient réellement à ce moment-là, s’ils sont d’accord avec vous et le considèrent comme suffisamment important.

zak
la source
0

Je traite avec un développeur junior qui travaille à distance depuis une usine de codage.

Ce n’est malheureusement pas une situation idéale: un programmeur expérimenté en charge d’un programmeur débutant, avec séparation géographique. Il n’est pas surprenant qu’il y ait des tensions, mais l’écart peut être atténué.

Je suis curieux, que voulez-vous dire par "usine de codage"? Selon moi, cette terminologie dénote une attitude troublante qui pourrait exacerber certains des problèmes de gestion que vous avez mentionnés.

… Violation de la SRP, des objets divins, noms non significatifs de méthodes ou de variables; Je montre ce qu'il doit réparer et j'essaie d'expliquer pourquoi c'est faux.

Le problème, je pense, est que votre développeur junior vomit du code sans avoir passé par un processus de conception approprié. En tant que gestionnaire et développeur principal, vous n’êtes pas en mesure de fournir des conseils et d’enseigner de bonnes habitudes en matière de développement de logiciels. Vous pouvez empêcher la création d'un mauvais code si vous travaillez d'abord ensemble pour dessiner un contour. Cela serait préférable à la critique et à la réécriture du code une fois qu’il a été produit, en termes d’efficacité et de moral.

Vous devrez probablement réajuster votre flux de travail. On dirait que vous attendez actuellement de lui qu'il vous livre des produits. Vous avez besoin d’une collaboration plus étroite afin de pouvoir vous guider à chaque étape du développement. Parlez de la conception et de l’interface avant que le codage ne commence. Pendant le codage, effectuez des points de contrôle plus fréquents pour détecter les problèmes plus tôt. Si possible, essayez de programmer en binôme, via le partage d'écran avec un canal audio.

Tout cela demandera plus d’efforts de votre part, mais cela en vaudra probablement la peine, compte tenu de la relation problématique que vous entretenez actuellement.

200_success
la source
-1

S'il s'agit d'une violation des normes de codage, montrez-lui où il se trouve pour qu'il le sache. Si vous devez continuer à lui montrer la même erreur, vous pourriez avoir un problème avec quelqu'un qui ne peut pas se conformer aux règles ou qui refuse de le faire. N'utilisez pas votre temps libre pour réparer les erreurs. Cette personne devrait corriger ses propres erreurs pour ne pas les refaire.

Toujours leur dire ce qu'ils ont bien fait et comment ils peuvent améliorer la prochaine fois. Nous pouvons toujours nous améliorer dans certains domaines. La rétroaction est essentielle pour devenir meilleur à tout.

acithium
la source
-1

Une autre idée pour traiter «trop de critiques» est de faire une tâche par vous-même de temps en temps, et de laisser le développeur junior faire une révision de code pour vous. Cela présente au moins deux avantages:

  • ils peuvent apprendre comment faire les choses.
  • dans les cas où il existe plusieurs bonnes solutions ou noms de variables, j'accepte les approches différentes mais (presque?) tout aussi bonnes. Lorsque je répare mon code à cause des commentaires de quelqu'un, je montre aux gens qu'ils sont respectés et que les critiques ne concernent que du code, quel que soit l'auteur.
BartoszKP
la source
Je serais heureux d'apprendre ce qui ne va pas avec mon message. Un vote négatif est un signe compréhensible de désaccord, mais supprimer des votes?!
BartoszKP