Quels sont les obstacles à l'adoption des meilleures pratiques? Comment les surmonter? [fermé]


22

Nous avons tous vu (et la plupart d'entre nous ont écrit) beaucoup de code mal écrit. Pourquoi? Qu'est-ce qui nous fait adopter de mauvaises pratiques plutôt que de bonnes?

La réponse la plus évidente (pour moi) est "l'ignorance", mais je suis sûr que ce n'est pas la seule raison. Quels autres sont là? Que pouvons-nous faire pour surmonter la tentation d'écrire du mauvais code?


Coût ---------- Simple en simple.
dustyprogrammer

Quelle est la raison pour laquelle vous pouvez dire aujourd'hui que le code est mal écrit par opposition à pourquoi il a été écrit?

@ Thorbjørn: Je suis désolé, je ne comprends pas la question?
Kramii Reinstate Monica

@Kramil, avez-vous reconnu lorsque vous avez écrit le code mal écrit qu'il était mal écrit, et si oui, pourquoi l'avez-vous écrit de cette façon? Sinon, ce qui s'est passé depuis que vous pouvez le reconnaître maintenant, par opposition à plus tôt.

4
@Kramii, aucune "meilleure pratique" ne peut jamais remplacer une pensée critique rationnelle. Toutes les "meilleures pratiques" ne sont que des outils, et les utiliser à l'aveugle serait tout simplement dangereux. Il est stupide de suivre quelque chose simplement parce qu'il est considéré comme une "meilleure pratique", sans en comprendre la raison d'être. Mais avec une telle compréhension, vous n'aurez pas besoin de suivre vos "meilleures pratiques". Par conséquent, la notion même de "meilleure pratique" est profondément viciée et intrinsèquement nuisible.
SK-logic

Réponses:


29

Résistance au changement.

C'est le principal moteur de l'ignorance, de la mauvaise gestion, etc.

Le chapitre 30 de Peopleware 2nd Edition est consacré à ce sujet. Et il cite un livre d'un autre consultant assez bien connu, écrit un peu plus tôt:

Et il faut considérer que rien n'est plus difficile à gérer, plus douteux de succès, ni plus dangereux à gérer, alors se mettre à la tête de l'introduction de nouvelles commandes. Car l'introducteur a tous ceux qui bénéficient des anciens ordres comme ennemis, et il a des défenseurs tièdes dans tous ceux qui pourraient bénéficier des nouveaux ordres.

Niccolo Machiavelli: Le Prince (1513)

DeMarco et Lister continuent à énoncer le mantra à garder à l'esprit avant de demander aux gens de changer:

La réponse fondamentale au changement n'est pas logique, mais émotionnelle.

Le processus de changement est rarement un passage direct et sans heurt des conditions sous-optimales actuelles au nouveau monde amélioré. Pour tout changement non trivial, il y a toujours une période de confusion et de chaos avant d'arriver au nouveau statu quo . Apprendre de nouveaux outils, processus et modes de pensée est difficile et prend du temps. Pendant cette période de transition, la productivité baisse, le moral souffre, les gens peuvent se plaindre et souhaiter si seulement il était possible de revenir aux bonnes vieilles façons de faire. Très souvent, ils le font, même avec tous les problèmes, car ils estiment que les bons vieux problèmes connus sont meilleurs que les nouveaux problèmes inconnus, frustrants et embarrassants. C'est la résistance qui doit être tactiquement et doucement, mais résolument vaincue pour réussir.

Avec patience et persévérance, l'équipe arrive finalement du Chaos à l'étape suivante, la pratique et l'intégration. Les gens, même s'ils ne sont pas complètement à l'aise avec les nouveaux outils / processus, commencent à s'y habituer. Il peut y avoir des expériences positives "Aha". Et progressivement, l'équipe atteint un nouveau statu quo.

Il est vraiment important de réaliser que le chaos fait partie intégrante et inévitable du processus de changement . Sans cette connaissance - et sa préparation -, on peut paniquer en franchissant la phase du Chaos et la confondre avec le nouveau statu quo. Par la suite, le processus de changement est abandonné et l'équipe revient à son état misérable précédent, mais avec encore moins d'espoir de toujours améliorer quoi que ce soit ...


Pour référence, les phases décrites ci-dessus ont été définies à l'origine dans le modèle de changement de Satir (nommé d'après Virginia Satir ).


Je pense que cela est vrai pour les programmeurs plus établis, mais je pense qu'ils ne représentent qu'un très faible pourcentage de ceux qui ne codent pas selon les meilleures pratiques. Tout le code que j'ai vu qui ne suit pas les meilleures pratiques provient de deux autres réponses ici - manque de temps et de naïveté.
AndrewKS

1
@AndrewKS, cela concerne non seulement les développeurs mais aussi les gestionnaires et les clients. Dans une bonne équipe et un bon processus de développement, les délais sont réalistes et les développeurs ne sont pas affectés à des tâches supérieures à leurs capacités actuelles - ou du moins pas sans un mentorat et une vérification appropriés. Leur échec est presque toujours le signe que la direction résiste à l'adoption des meilleures pratiques.
Péter Török

Très bon point - je ne pensais pas aux non-programmeurs dans cette situation jusqu'à présent.
AndrewKS

La réticence se traduit souvent par une certaine paresse, qui engendre finalement l'ignorance.
S.Robins

23

Péter Török a raison, mais a omis un point important et optimiste:

  • les gens peuvent aimer le changement auquel ils participent, mais ils n'aiment presque jamais le changement qui leur «arrive»

alors impliquez-les, laissez-les apporter des idées, laissez-les créer un enjeu, et ce ne sera pas si douloureux

Remarque: ceci est pertinent pour la programmation dans la mesure où de nombreux projets logiciels techniquement réussis échouent parce que les utilisateurs les rejettent .


1
en effet une excellente façon de gérer le changement
Newtopian

Vous devez faire attention au bikeshedding ! Ne les laissez pas s'impliquer TROP!
shapr

18

Le temps semble être un grand moment où je travaille.

Par exemple, pourquoi adopter les tests unitaires lorsque vous devez écrire plus de code, et que cela prend donc plus de temps pour obtenir un produit libérable? Le client x le veut maintenant! Codez plus vite!

(Ce n'est évidemment pas bien fini)

Cela est également le résultat d'une mauvaise gestion et d'une mauvaise économie, ne facturant pas suffisamment aux clients pour se permettre de passer du temps à bien faire les choses.


5
Le temps est énorme ici aussi. En fait, mon patron nous a dit lors d'une réunion du personnel: "L'entreprise ne paie pas pour un excellent travail".
Joshua Smith

@Joshua Smith: wtf !? Sérieusement? Je ne serais pas surpris si elles obtiennent exactement ce qu'ils font payer.
Steven Evers

2
J'ai souvent vu l'approche que nous ne pouvons pas nous permettre de bien faire. Mais, nous pouvons nous permettre de passer un temps infini à réparer le gâchis. Pour les sociétés de conseil qui facturent à l'heure, quelle approche est la meilleure?
BillThor

1
@jwenting: Pour mettre mon commentaire précédent en contexte, je préconisais les tests unitaires lors d'une réunion du personnel. Actuellement, seuls deux d'entre nous écrivent des tests unitaires (et nous devons le faire en catimini). Personnellement, je ne considère pas les tests unitaires comme des garnitures en or et des décorations en diamant.
Joshua Smith

1
@shapr: C'est un truc terrifiant à entendre d'une entreprise qui construit des FUSÉES ET DES MISSILES. >: P
M. JavaScript

11

Malgré les preuves massives du contraire, les gens sont généralement des créatures très rationnelles. La raison pour laquelle les gens n'adoptent pas les meilleures pratiques, comme TDD par exemple, c'est qu'ils ne pensent pas que cela en vaudra la peine. Soit ils pensent que les pratiques ne sont pas, en fait, les meilleures; et que cela leur coûtera en fait plus que cela ne les sauvera. Ou ils pensent que l'avantage est si marginal que le coût du changement l'emportera sur le petit avantage. L'essentiel est que le problème des meilleures pratiques est un problème de résultat.

Si vous voulez être un agent de changement, votre tâche consiste à démontrer que leur perception du résultat net est erronée. Vous devez montrer que la meilleure pratique est vraiment la meilleure. Que les avantages soient immédiats et importants . Vous devez montrer que la courbe d'apprentissage est suffisamment petite pour durer et qu'au moins certains des avantages commencent immédiatement.

Comment montrez-vous cela? En adoptant vous-même les meilleures pratiques! Rien ne sert à convaincre les autres mieux que votre propre comportement. Si vous suivez la meilleure pratique, et que vous en parlez , d'autres verront que vous avez fait l'analyse économique et pris la décision inverse. Cela les obligera à reconsidérer leur décision. Ils le feront en privé et ne l'admettront jamais au début. Mais tous ceux qui vous voient utiliser cette meilleure pratique réexamineront leur position.

C'est le mieux que vous puissiez espérer. Si la meilleure pratique est une meilleure pratique, le reste suivra automatiquement. Oh, ce ne sera pas rapide, et il y aura beaucoup de retards. La transition sera lente et inégale; et vous éprouverez de nombreuses déceptions. Mais la transition sera également inexorable et inévitable. Cela peut prendre une génération, mais la meilleure pratique l' emportera.

Pour preuve, demandez-vous quand vous avez vu quelqu'un pour la dernière fois utiliser goto.


+1: La meilleure façon de surmonter est de montrer l'exemple en adoptant vous-même les meilleures pratiques. "Vous devez être le changement que vous voulez voir dans le monde." ?
Johnsyweb

7

C'est le résultat de ne pas savoir ou de penser que l'on connaît la méthode idéale. Les gens choisissent mal d'écrire du code; il s'agit plutôt de ne pas savoir mieux. « Naïveté », par opposition à « ignorance » serait un meilleur mot.

Le moyen le plus simple de se conformer aux bonnes pratiques consiste à reconnaître qu'il existe (très probablement) une meilleure façon d'écrire le code que vous venez d'écrire, puis à aspirer à apprendre ce qu'est cette `` meilleure façon ''.


1
+1 et tous les développeurs ne reçoivent pas ou ne prennent pas suffisamment de temps pour apprendre ou explorer de meilleures façons. pour beaucoup (gestion et développeurs), il est différé jusqu'à ce qu'il devienne un obstacle incontournable. pendant ce temps, les résolutions ne sont pas assez heuristiquement prises - il est courant que de nombreuses personnes acceptent une solution ou une recommandation existante à la place. cette pratique implique le hasard, l'approximation et contourne une grande partie du processus d'apprentissage, qui est essentiel à la compréhension. à son tour, ne pas comprendre (négativement) affecte sa capacité à faire les meilleurs choix.
juste le

6

Deux causes

  • Ignorance.

  • Arrogance.

Comment les surmonter?

  • Des incitations.

Jusqu'à ce que les gestionnaires (c'est-à-dire les personnes achetant les compétences du développeur) aient besoin des meilleures pratiques dans le cadre de la livraison de logiciels, rien ne peut changer. De nombreuses organisations sont clairement schizophrènes: elles éduquent les développeurs dans diverses technologies et exigent ensuite des logiciels non testés ou une conception non testable. Ou pire.


4
C'est vrai: en particulier le combo mortel ignorant + arrogant.
Sklivvz

6

La meilleure pratique pour moi est un logiciel écrit par une équipe de 8 personnes. Nous n'avions pas d'exigences écrites, de revues de code, de tests unitaires, de documents de version de format. Aucun test utilisateur final, rien de ce que tous les livres disent que nous aurions dû faire. Le code a été précipité, bogué et tout simplement impossible à maintenir. Il a été jeté 3 ans après sa sortie, c'était tellement mauvais. Alors, qu'est-ce qui était si génial Deux ans après la première libération, le propriétaire de l'entreprise (qui avait financé le développement d'une hypothèque sur sa propre maison) est reparti avec 30 à 40 millions de dollars dans sa poche arrière.

Nous perdons souvent de vue le fait que nous sommes (le plus souvent) ici pour créer des logiciels qui font de l'argent pour l'entreprise. Les entreprises n'existent pas pour nous donner l'occasion de développer des logiciels en utilisant les "meilleures pratiques", elles existent pour gagner de l'argent.

La plupart des pratiques de «meilleures pratiques» n'améliorent pas les bénéfices. Celles qui le sont, devraient et sont largement adoptées. C'est pourquoi la "meilleure pratique" n'est pas pratiquée.


6

Risque acceptable

Vous n'avez jamais pris de risque et joué sur quelque chose? Il y a un resserrement du temps, donc vous le faites fonctionner avec l'intention de le refactoriser plus tard (par opposition à le refactoriser plus tôt). C'est en fait considéré comme une bonne pratique pour certaines personnes.

Finalement, vous vous brûlez suffisamment de fois et vous changez de façon. Pensez à toutes les «meilleures pratiques» qui existent. Pouvez-vous tous les suivre tout le temps? Y en a-t-il qui se contredisent? Vous ne voulez pas perdre de temps à gérer chaque valeur aberrante.

Si j'écris du mauvais code qui fonctionne et que personne ne le regarde à nouveau, est-il toujours considéré comme mauvais? (S'il vous plaît, ne ruinons pas le débat philosophique en argumentant sur ce qu'est un «mauvais code».)


+1 pour la notion que nous sommes payés pour produire le code en premier. Nous avons la responsabilité supplémentaire de (subjectivement) le rendre maintenable, en second lieu. Après tout - je ne paie pas le jardinier supplémentaire pour l'entretien de sa tondeuse à gazon - c'est à lui de gérer. S'il fait du bon travail et que son équipement tient le coup, je l'inviterai de nouveau et lui redonnerai mes affaires.
M. JavaScript

4

IME c'est une combinaison de ce que d'autres ont dit. Ignorance ("Je n'ai utilisé que des DataSets, pourquoi s'embêter avec ce truc LINQ?", Manque de temps ("Le Boss veut que ce soit fait le plus tôt possible, nous ne pouvons pas y consacrer beaucoup de temps"), manque de compréhension ("Qu'est-ce qui ne va pas avec l'écriture de tout mon code dans le code?") tous contribuent.

L'ironie que je vois est qu'une fois que vous commencez dans cette voie, vous vous embourbez plus profondément. Si vous coupez les coins ronds maintenant et jetez tout le code d'une application dans les fichiers ASPX, vous ne pourrez jamais y remédier plus tard; de nouvelles choses continueront à vous être lancées, ce qui signifie que vous devez les faire rapidement, ce qui signifie que vous devez simplement jeter tout le code dans le fichier ASPX (en jurant que vous le réparerez un jour), etc. etc. -en spirale car vous ne pouvez plus arrêter le développement et dire que les choses doivent être corrigées en premier.


4

Souvent, les développeurs n'ont tout simplement pas vu la meilleure pratique ou, plus important encore, les avantages de l'utilisation d'une meilleure pratique (je commence à cesser d'utiliser le terme «meilleures pratiques» pour diverses raisons).

Il existe une théorie selon laquelle les développeurs sont «délibérément paresseux». En d'autres termes, ils auront tendance à choisir la voie de moindre résistance.

Une fois que vous leur montrez rapidement les avantages d'une meilleure pratique (comme TDD, ou dites, en suivant les principes SOLIDES) et que cela leur permet en fait d'être un meilleur développeur (mais toujours `` paresseux ''), alors vous avez tendance à constater que la résistance fond une façon.

C'est une question d'éducation :)


J'ai appris la programmation en une courte session (2 à 3 heures). (En fait, quelques sessions avec différentes langues.) Pendant les sessions, un très bon code a été montré, et la raison de l'écriture du code tel qu'il a été expliqué. Aucun de mes cours de langue «officielle» n'a jamais réussi à introduire un bon code.
BillThor

«moindre résistance» est assez descriptif. Les programmeurs expérimentés ont juste une meilleure idée de ce que signifie "la moindre résistance" sur toute la durée de vie de l'application.

4

(Manque de) Connaissances et compétences + Temps d'investissement

Je suis surpris que personne d'autre n'ait sorti celui-ci, mais c'est peut-être évident pour moi parce qu'une grande partie de mon travail a été en tant que programmeur singleton, sans personne (autre que la pile) à qui aller quand je lutte sur quelque chose. Je connais «de» meilleures techniques - telles que le TDD - mais trop souvent je ne les comprends pas assez bien pour les utiliser et j'ai du mal à trouver de bonnes informations pour m'aider à commencer à les utiliser. Encore une fois, en utilisant TDD comme exemple, je comprends sa signification de base - construire des tests qui affirment que votre code génère un résultat spécifique - mais l'implémenter?

Mis à part le fait que XCode a intégré des tests unitaires ces jours-ci, je ne sais pas par où commencer. Dois-je affirmer que la vue comporte des boutons X après avoir exécuté une routine pour les créer? Que diriez-vous d'affirmer que mes UIViews ont été réorganisées correctement après avoir appelé la balise de rotation?

Heck, comment puis-je même écrire un test unitaire dans XCode? C'est autre chose dont j'ai besoin pour passer du temps à apprendre.


2

@Zues et @Joshua Smith

Oui, je suis d'accord parfois le temps et le budget sont des contraintes qui ne vous permettent pas de mettre chaque principe de «meilleure programmation» que vous connaissez dans un programme.

Vous savez que la tâche en cours peut être effectuée de manière beaucoup plus robuste si seulement vous aviez plus de temps. Mais très peu de clients (surtout s'ils obtiennent leur première application iPhone ou leur premier logiciel d'intelligence d'affaires sur mesure) comprennent quand vous dites que vous réimplémentez quelque chose déjà fait parce que vous avez trouvé une meilleure façon de le faire.

Idem pour les tests unitaires. Malheureusement, je n'ai pas encore rencontré un client qui est prêt à allouer un budget pour ceux-ci. La réponse typique est comme «Test de régression automatisé OK Je comprends mais des tests unitaires? Nous n'avons pas le temps pour ça! Nous devons arriver rapidement sur le marché! »


Je ne demande jamais aux clients d'allouer du temps pour les tests unitaires, mais je considère que cela fait partie du travail. Faire en sorte que les clients s'engagent sur des tests unitaires encourage simplement vos clients à micro gérer votre travail. Lorsque vous faites réparer votre voiture, les mécaniciens ne vous demandent pas quels outils utiliser pour faire le travail !! il en va de même pour les tests unitaires, VOUS devez juger du bon équilibre des tests qui vous semble nécessaire pour faire le travail correctement.
Newtopian

Malheureusement, les meilleures techniques de programmation peuvent être plus rapides que les techniques que vous ne pouvez pas vous permettre d'améliorer.
BillThor

2

Deux parties dans la plupart de mon expérience:

  • temps
  • obtenir suffisamment de personnes pour convenir des meilleures pratiques dans la situation actuelle

Les «meilleures pratiques» sont TRÈS subjectives dans de nombreuses situations réelles. Si une moitié de l'équipe essaie de faire un tas de SOLID & TDD tandis que l'autre moitié travaille 60 heures par semaine pour réduire les secondes de durée de course ici et là par tous les moyens nécessaires parce que vous avez dépassé le point où il est trop tard pour repenser quelque chose qui ne fonctionne pas à temps pour votre prochaine version, vous n'irez pas très loin.

Même si vous ne rencontrez pas trop de désaccords au sein de l'équipe, il faut beaucoup d'efforts pour obtenir un accord formel, de la documentation et une formation sur la politique que vous décidez de suivre. C'est un gros bloc de temps non productif du point de vue commercial que vous allez devoir justifier soigneusement.


2

Parfois, vous constaterez que l' habitude est également un contributeur majeur à l'écriture de code horrible.

Vous pourriez être un programmeur très expérimenté et vous pourriez tout savoir sur les meilleures pratiques actuelles de l'industrie. Enfer, vous pourriez même être l' expert de ces choses. L'expérience me dit que de telles personnes n'écrivent pas souvent de code horrible, et pourtant il peut être facile de se replier sur de vieilles habitudes et de faire quelque chose qui, selon vous, enfreindra les règles, tout simplement parce qu'il se sent en sécurité et pratique. Dans de tels cas, l'ignorance et l'arrogance et tous les autres adjectifs pointant du doigt que vous pourriez imaginer n'ont pas vraiment d'importance. Ce n'est pas nécessairement que ces programmeurs sont spécifiquement mauvais dans ce qu'ils font (bien que ce soit plus souvent le cas), ni même qu'ils veulent créer un désordre horrible.

Il est malheureux d'avoir personnellement vu cela se produire plus de fois que je ne le souhaiterais, où certaines personnes vraiment talentueuses ont produit des ordures parce que leurs doigts et leur cerveau fonctionnaient sur l'automobile depuis quelques mois. Le plus souvent, c'est là que vous voyez des signes d'épuisement professionnel, de chagrin et de stress s'accumulant. Parfois, c'est vraiment une habitude aveugle qui les porte à travers les mouvements quotidiens. C'est quelque chose que j'ai appris à surveiller attentivement afin d'éviter de risquer d'étiqueter inutilement les personnes vulnérables.

Juste un peu de réflexion pour ceux d'entre nous qui trouvent plus facile de sauter simplement à la conclusion négative ... même si malheureusement vous aurez raison le plus souvent.


-1

Personne ne montre d'intérêt à payer pour un projet intitulé quelque chose avec refactoring. Il doit contenir des mots qui font appel aux intérêts des «entreprises». Des mots tels que la refonte, la revigoration, le remake total, la mise à niveau du cycle de vie, etc. fonctionnent sur mon lieu de travail. Presque tous ont le refactoring comme partie principale du projet.

Malheureusement, grâce au tueur à gages économique, le travail ne se produit que lorsqu'il y a un salaire. Même si le travail n'est que pour sauver la fortune de l'entreprise à long terme.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.