Aider les programmeurs juniors à surmonter leurs lacunes? [fermé]

15

Quels sont vos reproches courants concernant les développeurs juniors qui rejoignent votre équipe ou avec qui vous devez travailler? De toute évidence, ils sont inexpérimentés, vous ne pouvez donc pas vous attendre à ce qu'ils sachent tout, mais quelles compétences manquent souvent inexplicablement - et comment, en particulier, pouvons-nous les aider à développer ces compétences manquantes?

Je ne parle pas de compétences interpersonnelles comme «écouter des conseils», je veux dire des questions techniques comme (le cas échéant):

  • «vous n'avez jamais fait de SQL?

  • «vous n'avez jamais écrit un test unitaire?

  • 'vous ne savez pas comment utiliser une ligne de commande Unix?'

Choses auxquelles vous vous attendez - J'aimerais entendre vos observations et vos techniques pour enseigner aux nouveaux programmeurs à surmonter ces lacunes spécifiques.

Andrew M
la source
13
La chose la plus irritante: demander constamment ce qui est irritant. :-)
Jerry Coffin
12
Je ne pense pas que vous devriez être irrité quand les gens ne savent pas ce que vous attendez d'eux. Ce qui est important, c'est qu'ils sont prêts à apprendre =)
koenmetsu
Ouais d'accord avec @KoMet si vous avez la volonté d'apprendre à écouter je pense que c'est important :)
MalsR
8
Je n'aime pas cette question, elle a une mauvaise mentalité pour un développeur. NOUS AVONS ÉTÉ TOUS UNE FOIS ce débutant, et tous les jours nous sommes novices dans quelque chose. Je ne serais JAMAIS irrité par quelqu'un qui ne sait rien. Cela sent qu'il y a trop d'arrogance en jeu ....
Darknight
3
Oh, fermé, BRAVO. J'ai lu les six lignes directrices des questions subjectives constructives et cela répond à toutes. Franchement, la partie non constructive est des corps occupés fermant un fil auquel 13 personnes ont déjà répondu, juste parce qu'ils ont mal compris la question. C'est simplement une réalité que les développeurs seniors seront parfois déçus par les capacités des développeurs juniors, cette question ne cherche qu'à trouver des schémas dans cette déception afin que nous puissions mieux éviter les difficultés. Ignorer les plaintes et les critiques légitimes ne profite à personne et cela n'a rien à voir avec l'arrogance.
Andrew M

Réponses:

25

Ne pas savoir ce qu'est le contrôle de version ni comment l'utiliser correctement .

L'un des développeurs juniors qui travaille dans mon entreprise depuis plusieurs mois récemment a dû apprendre les bases de Subversion. Cela m'a vraiment fait grincer des dents ... elle vérifie le code pour vivre des projets tout le temps ... et n'avait aucune idée de ce qu'elle faisait ...?

sevenseacat
la source
4
Reculer? Elle a de la chance d'avoir toujours un travail.
Rein Henrichs
2
Il semble que ce soit plus une question de «ne pas savoir ce que vous ne savez pas» ou de «ne pas admettre ce que vous ne savez pas». Si elle avait demandé de l'aide dès le départ, cela aurait-il été un gros problème?
Michael McGowan
1
aïe, ça sonnait comme moi haha, nous n'avons pas implémenté le contrôle de version jusqu'à récemment, et j'ai rejoint la société en tant que nouveau diplômé, j'ai appris un peu le contrôle de version et le genre de subversion à l'Université, mais jamais avant.
Sufendy
1
"C'est l'outil de sauvegarde n'est-ce pas? Vous l'utilisez pour enregistrer votre code tous les soirs?"
David
2
C'est une grande chose qu'ils ne vous enseignent presque jamais à l'école
Elijah Saounkine
23

Ne pas poser suffisamment de questions

Je sais que ce sont des juniors, je m'attends à ce qu'ils commettent des erreurs et ne sachent tout simplement pas. Tant de f ** k ups royaux auraient pu être évités en posant simplement une question au lieu de supposer quelque chose. Honnêtement, je ne peux pas être assez harcelé.

J'avais des TONNES de questions quand j'ai commencé - les demander m'a sauvé le cul à plusieurs reprises. Bon sang, j'ai encore beaucoup de questions ... J'aime juste penser que ce sont de meilleures questions maintenant.

Steven Evers
la source
Gee ... presque la même réponse que j'ai postée, vous allez dans environ 5 secondes avant.
rapid_now
2
"tu es ennuyeux !! Je suis occupé ici, tu ne peux pas penser par toi-même?" si vous n'avez pas de chance !! haha
Sufendy
4
+1 - Un sous-cas de cela ne demande pas de retour après une explication. Cela m'a vraiment énervé quand j'ai expliqué une tâche à un junior, il a hoché la tête, je pensais qu'il l'avait compris et qu'il irait au travail, puis deux semaines plus tard, il revient, pose à nouveau les mêmes questions , acquiesce à nouveau, puis deux autres quelques semaines plus tard ... Très bien, ce n'était pas une tâche insignifiante, mais pour l'amour de Dieu, ne prétendez pas que vous le comprenez si vous ne le faites pas. Et si vous pensez avoir compris quelque chose, prenez des notes pour vous en souvenir deux semaines plus tard.
Péter Török
1
Certaines personnes, en revanche, posent trop de questions (sur Stack Overflow).
BoltClock
1
@SnOrfus: Ces personnes non qualifiées sont à qui je fais référence: P
BoltClock
14

Copiez le collage et les essais et les erreurs au lieu de chercher à comprendre les principes fondamentaux sous-jacents

De nombreux développeurs juniors copieront du code qui semble proche, puis essaieront presque aléatoirement différentes permutations de modifications par force brute jusqu'à ce qu'ils atteignent celui qui fonctionne. Si vous ne savez pas pourquoi cela fonctionne, il est probable que vous introduisiez des bogues dans les cas limites que quelqu'un qui le comprend devra nettoyer plus tard.

Garder leur "premier brouillon" de code

Lorsqu'un développeur expérimenté écrit une nouvelle fonction d'une certaine complexité, il commence avec un stub qui ne fait que compiler, puis réécrit pour ajouter des commentaires de pseudo-code de haut niveau pour l'algorithme global, puis réécrit ces commentaires un par un avec du code réel, en ajoutant et en supprimant du code factice au besoin pour les tests, puis en réécrivant pour supprimer la redondance apparue lors de la mise en œuvre, et ainsi de suite dans une série d'améliorations successives et incrémentielles.

Les développeurs juniors ont tendance à l'écrire en un seul gros morceau, puis à effectuer un débogage massif par force brute. Ils n'aiment pas supprimer une ligne de code une fois qu'elle est tapée dans l'éditeur, et sont si heureux qu'ils l'ont finalement fait fonctionner qu'ils répugnent à réécrire pour des améliorations non fonctionnelles, mais ce sont eux qui doivent le faire donc le plus.

Karl Bielefeldt
la source
1
+1 pour "copier-coller au lieu de chercher à comprendre", bien que ce ne soit bien sûr pas un problème propre aux nouveaux programmeurs, juste aux mauvais. Les nouveaux programmeurs ont au moins une chance de s'en sortir - les gars avec qui je travaille qui sont programmeurs depuis des décennies et qui ne le font toujours pas.
Tom Anderson
Une partie de cela peut également être une conséquence du style de gestion. La tâche parle déjà plus longtemps que prévu et le gestionnaire veut votre fonctionnalité demain. Vous vous précipitez pour le faire fonctionner et passez rapidement à la tâche suivante. Tout est décomposé en cartes de tâches microscopiques, donc il n'y a pas de temps pour refaçonner ou prendre du recul et regarder le problème plus large dans son ensemble
Jamie McGuigan
14

Croire que vous êtes le premier à rencontrer une situation.

Chaque problème de programmation auquel vous êtes confronté a été rencontré par d'autres, sous une forme générale. Il y a tant à apprendre des programmeurs expérimentés. Je suis assez vieux pour me souvenir de la programmation avant Google, et ça craignait . C'était encore pire quand nous avions des moteurs de recherche, mais il n'y avait tout simplement pas encore beaucoup de bonnes informations sur le Web. La programmation est désormais beaucoup plus productive car vous avez accès à des connaissances globales en quelques secondes. Les gens qui ne l'utilisent pas l'ignorent à leurs risques et périls.

Modifier :

Juste pour être clair, je ne préconise pas la programmation copier / coller. Je suis certain, cependant, que vous devez revoir les connaissances existantes avant de pouvoir prendre de bonnes décisions vous-même.

Scott Whitlock
la source
1
Eh bien, vous ne voulez pas non plus que le développeur copie-colle tout le code de certaines ressources douteuses du Web. La recherche est bonne pour obtenir des idées, peut-être résoudre des problèmes de compréhension fondamentaux, mais jamais pour trouver des solutions prêtes. Cela rend également le développeur plus stupide; peut-être que cela fait de lui un bon collectionneur, mais pas un inventeur.
Elijah Saounkine,
Je suis d'accord à un moment avec Elijah, copier-coller du code sans prendre le temps d'apprendre ce qu'il fait, n'accélère pas vos compétences en programmation. Pire, il prendra le relais et deviendra une mauvaise habitude.
setzamora
1
Bien sûr, mais @Scott n'a rien dit sur la copie et le collage de code, il a simplement dit ne présumez pas que vous êtes le premier à rencontrer une situation, c'est-à-dire, réalisez qu'il peut y avoir des informations et de l'expérience dont vous pouvez bénéficier. Exemple: je veux savoir si deux chaînes sont similaires. Existe-t-il déjà un algorithme connu pour résoudre ce problème? Imaginez si un développeur venait de décider de lancer le sien sans même savoir que des réponses existent déjà.
David Conrad
@David Conrad, c'est vrai, remarquez, nous sommes sur la même page ici.
Elijah Saounkine
10

Pensant qu'ils savent tout.

J'ai eu un jr. stagiaire qui a essayé de tout résoudre avec javascript. J'ai essayé d'expliquer plusieurs concepts, mais il a toujours pensé qu'il pouvait mieux faire. Maintenant, il a quitté et retravaillé un programme majeur qu'il a construit pour la sortie d'impression en utilisant HTML au lieu d'une technologie prête à imprimer comme PDF. Sans parler d'une pile d'autres problèmes majeurs.

La leçon est de demander aux aînés des conseils généraux importants au début d'un projet, ne quittez pas l'architecture sans aide. Vous pouvez écrire le code et les détails seuls, mais assurez-vous d'utiliser au moins la bonne technologie.

P.Brian.Mackey
la source
5

Je m'énerve rarement lorsque les juniors ne connaissent pas les bases, on ne leur enseigne pas les compétences de l'industrie comme le SCC à l'université. C'est le travail des développeurs seniors de leur enseigner. Je ne suis ennuyé que par les affrontements de personnalité. Mais je suis très ennuyé par les développeurs seniors qui ne connaissent pas les bases.

Craig
la source
1
@Graig a raison, beaucoup de choses qui agacent les développeurs aguerris concernant les juniors sont des choses que nous avons dû apprendre non pas à l'université mais dans un environnement commercial.
Nickz
5

Ne voulant pas faire progresser leurs connaissances - prendre plutôt le chemin de la moindre résistance.

L'autre jour, un stagiaire et le graphiste (qui est étonnamment compétent en programmation) ont demandé de l'aide car ils avaient des problèmes pour implémenter quelque chose dans jQuery - la fermeture peut être douloureuse si vous ne pouvez pas la voir venir.

Je me suis assis avec le stagiaire et j'ai expliqué exactement ce qui n'allait pas et pourquoi. Nous avons corrigé le bogue, puis j'ai souligné plusieurs améliorations supplémentaires qui pouvaient être apportées ("puisque je suis ici") et nous avons fini par réécrire la fonction coupable en 10 lignes au lieu de 20 et sans bogues. Après avoir répondu à toutes les questions, convaincu que tout allait bien dans le monde, je suis parti.

Le lendemain, le stagiaire est venu avec une question qui a révélé qu'il "euh, voulait faire quelques changements et réécrit la fonction à ma façon parce que j'avais du mal à comprendre" (pour la plupart annuler mes améliorations).

Il aurait pu soit essayer plus fort à la place (poser des questions supplémentaires, lire les concepts que j'ai mentionnés) - un code si court ne peut jamais être si difficile à comprendre - ou prendre la solution de facilité. Cela m'attriste chaque fois que je vois quelqu'un faire ce dernier.

Jon
la source
Intéressant, je me demande cependant si vous l'avez rendu plus difficile à lire. Je me souviens que mon premier chef de projet l'avait fait plusieurs fois (et que j'étais coupable de l'avoir changé également) .
Maxim Gershkovich
3

Je ne comprends pas la POO. Malheureusement, c'est beaucoup plus courant que la plupart d'entre nous ne le pensent probablement.

Savoir créer une classe, une classe abstraite, une interface ou même connaître le polymorphisme est une chose; comprendre comment les utiliser correctement au profit de votre programme en est une autre .


Si vous voulez éviter celui-ci, j'ai trouvé ces questions et les réponses éclairantes:

Nicole
la source
Comme au niveau de base, ils ne savent pas ce que vous entendez par créer des objets, des classes et l'hérédité? Ou des trucs plus avancés comme l'utilisation des modèles de conception (vous devez admettre que le livre du GoF est assez abstrait, bien qu'il existe bien sûr d'autres livres / guides)
Andrew M
@Andrew, j'ai un peu élargi la réponse.
Nicole
1
Et je vois l'inverse: ne pas savoir écrire du vieux code procédural simple en C parce qu'on ne lui a enseigné que la POO. Là encore, ne me faites plus parler de personnes à qui on n'apprend plus à écrire des analyseurs parce qu'on leur dit que tous ces problèmes peuvent être résolus en utilisant lex et yacc.
rapid_now
1
@quickly_now C'est un bon point, cependant, writing code other ways than OOPet ce writing bad OOPsont deux choses totalement différentes. Le premier, je n'ai pas de problème avec.
Nicole
La plupart des universités n'enseignent pas la conception orientée objet. De nombreux lieux de travail fonctionnent également comme des silos même avec des développeurs juniors ... ou ont des développeurs "seniors" qui ne connaissent pas la programmation orientée objet. Il y a des développeurs "seniors" qui ont obtenu le titre en travaillant pendant x ans et des développeurs seniors qui connaissent leur métier ....
Cervo
3

Ne sachant pas ce que vous ne savez pas et ignorant en pensant que vous savez tout.

(Et son cousin proche, ne voulant pas demander.)

C'est en partie une chose organisationnelle - une induction entrante appropriée contribuerait grandement à éviter que certaines de ces choses ne deviennent des problèmes. Mais très peu d'entreprises ont du temps ou des personnes disponibles pour une induction entrante - quelque chose qui devrait prendre de quelques jours à quelques semaines et qui décourage les développeurs de leur travail. Nous devons donc éteindre les incendies à la place.

vite_maintenant
la source
2

Je suis étonné de voir combien de programmeurs juniors relativement récents d'un programme CS sont faibles avec les algorithmes. Un mauvais choix d'algorithme peut ne pas vraiment se démarquer dans la gamme d'applications métier, mais lors du traitement de milliards de demandes de service Web par jour, cela compte vraiment.

Voici une question d'entrevue que j'utilise que presque tous les programmeurs juniors manquent et qui met en évidence le problème:

Écrivez le code qui calcule le Nième numéro de Fibonacci .

Ils préfèrent presque toujours écrire le plus évident mais inefficace

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Lorsqu'on me demande de commenter la complexité algorithmique, j'obtiens généralement "c'est pire que O (N) ... uhm ... O (N logN)". C'est en fait (bien) pire que ça ...

Eric J.
la source
1
pour répondre à votre question sur la compleixty, il faut savoir que la formule pour calculer les nombres de fibonacci sans récursivité, qu'il utiliserait au lieu de récursivité en premier lieu.
P Shved
1
@Pavel: Il y a une solution O (n) et O (1) ... en fait Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
Eric J.
1
Je ne dis pas que la solution que vous avez publiée est parfaite. Je remets simplement en question la pertinence de votre question de suivi par rapport à une telle solution, la question de la complexité. Que voulez-vous réaliser en le posant et, surtout, pourquoi vous attendez- vous à ce que vous vouliez être réalisé compte tenu de la réponse à la question précédente? (Ai-je fait valoir mon point de vue?)
P Shved
pour clarifier mon propos, je vous suggère de demander comment le code pourrait être amélioré au lieu de demander d'estimer la complexité. Je suis sûr que certains diplômés CS proposeraient la mémorisation, ou diraient qu'ils connaissent la formule mais ne voulaient pas la montrer à la fois car on pourrait penser que ce sont des smartasses.
P Shved
Concrètement, une telle fonction pourrait être découverte à l'aide d'un profileur et optimisée en ajoutant un cache de mémorisation. L'inefficacité n'est vraiment un problème que pour les grandes valeurs de N. La meilleure façon d'enseigner à un junior à propos de ce code est de les forcer à parcourir toute l'exécution du code à l'aide d'un débogueur. Pour les très grandes valeurs de N, il s'avère qu'il existe une formule mathématique maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/…
Jamie McGuigan
1

Faire une indentation de code en arrière!

Bien sûr, ce n'est pas très "typique". Je ne pourrais jamais croire que c'était même possible, mais ce qu'un développeur normal écrirait comme

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

elle écrirait comme (Dieu, ça me semble encore impossible!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Frustrant n'est-ce pas?

Elijah Saounkine
la source
Au nom de ...
Mike Speed
1
C'est très étonnant !!!
javanna
C'est presque comme s'ils étaient l'arabe, l'hébreu ou le chinois où vous lisez de droite à gauche, plutôt que la convention occidentale de gauche à droite. Est un moyen parfaitement valide de mettre en retrait votre code, mais cela signifie que vous devez ré-indenter tout votre fichier en fonction de votre niveau d'imbrication le plus profond, et cela rend votre code incompatible avec tout le monde partageant la convention opposée.
Jamie McGuigan