Faut-il toujours utiliser les meilleures pratiques de codage [fermé]

20

Lors du codage d'un logiciel, l'architecture doit-elle toujours être les meilleures pratiques ou les pratiques pratiques en ce qui concerne l'application en cours de construction?

Si je crée une application Web de deux pages pouvant vivre 5 ans et avoir 2 améliorations au cours de ces 5 années, dois-je coder en injection de dépendance, modèles de conception, modèle-vue-contrôleur avec modèles de vue, etc.

Kyle Johnson
la source
53
La suringénierie n'est pas une meilleure pratique.
5gon12eder
18
Il n'y a pas de «meilleures pratiques» qui s'appliquent à tous les logiciels dans toutes les situations. Vous devrez évaluer ce qui vous rapporte le mieux pour le coût qui s'applique à votre situation spécifique.
whatsisname
10
Soyez un programmeur pragmatique. Cela devrait vous conduire sur le chemin de la moindre résistance.
Jon Raynor
3
Pouvez-vous fournir une définition des meilleures pratiques? De nombreuses réponses semblent confondre cela avec une sorte d'interprétation littérale qu'ils ont créée.
JeffO
5
Il est recommandé de toujours utiliser les meilleures pratiques.
Goose

Réponses:

40

Faut-il toujours utiliser les meilleures pratiques de codage

Toujours? Non, c'est idiot.

Les meilleures pratiques sont des lignes directrices. Pour la plupart des gens, pour la plupart des situations, s'ils sont mis en œuvre avec une certaine finesse, ils donneront les meilleurs résultats. C'est là que vous commencez lorsque vous envisagez des solutions. Mais il y aura des endroits où les meilleures pratiques peuvent et doivent être ignorées, car il existe de meilleures solutions.

Le problème est que les humains ne peuvent pas voir l'avenir. Et les débutants (et un tas de non-débutants) pensent inévitablement qu'ils sont dans ce scénario spécial où les règles ne s'appliquent pas à eux. En cas de doute, utilisez les meilleures pratiques. Des années de débat et d'expérience à travers des tonnes d'ingénieurs plus intelligents que vous ou moi ont trouvé qu'ils produisent toujours de bons résultats. Mais aucun (ou presque aucun) d'entre eux ne connaît votre problème particulier aussi bien que vous. Parfois, vous rencontrerez des cas exceptionnels où les règles peuvent être contournées.

Telastyn
la source
12
... Mais, définissez les "meilleures pratiques".
svidgen
4
Je pense qu'il est plus courant pour les débutants de vouloir faire les choses "correctement" et de suivre aveuglément certaines des meilleures pratiques (par exemple, les modèles de logiciels) sans vraiment comprendre pourquoi ils existent ou comment les utiliser. C'est peut-être la deuxième étape de l'illumination, la première étape étant «Je ne sais pas ce que je fais».
Robert Harvey
19
@RobertHarvey - vous apprenez d'abord quoi faire, puis vous apprenez pourquoi vous le faites, puis vous apprenez pourquoi vous ne le faites pas
HorusKol
1
@HorusKol qui pourrait être l'une des choses les plus profondes que j'ai jamais lues.
Jared Smith
+1 pour "les humains ne peuvent pas voir l'avenir"
Tulains Córdova
29

Oui. Cela va de soi. Pourquoi ne feriez-vous pas ce qui est le mieux?

Ce n'est pas le problème cependant. La partie difficile est de savoir quelle est la meilleure pratique, car pour répondre à cela, vous devez savoir exactement quelles exigences vous avez et comment le projet est susceptible d'évoluer au fil des ans, et c'est diaboliquement difficile.

Cependant, une bonne règle de base: il n'est PAS recommandé de prendre les noms d'un tas de modèles de conception et de les coincer sans réfléchir.

À part cela, votre question ne peut vraiment pas être répondue. Déterminer exactement ce qu'est une «meilleure pratique» pour une situation donnée, c'est ce qu'est un ingénieur logiciel. Tu vas devoir le réduire pour obtenir de meilleures réponses.

Sara
la source
6
Votre réponse n'a échappé à un vote négatif de ma part qu'à cause de votre troisième paragraphe.
Robert Harvey
4
Je vais voter pour le troisième, mais uniquement parce que c'est une bonne pratique de le faire. <Grin & Duck>
Blrfl
5
Mon vote positif s'applique également aux quatre paragraphes.
Quuxplusone
4
"meilleures pratiques" est une expression idiomatique dans la discussion anglaise de génie logiciel, et cela signifie quelque chose de différent de ce que cette réponse interprète, ce qui est quelque chose comme "la meilleure solution possible à un problème donné". Ainsi, par exemple, "utiliser le contrôle de code source" est décrit comme une "meilleure pratique", qu'il existe ou non un problème pour lequel le contrôle de code source ne fait pas partie de la solution, c'est-à-dire qu'il soit ou non toujours le meilleur. Cela peut être un abus de langage épouvantable, mais c'est ce avec quoi nous sommes coincés.
Steve Jessop
1
@SteveJessop J'en suis conscient. Cependant, il existe de nombreuses "meilleures pratiques", et parfois elles sont contradictoires. La clé est le contexte et la portée. Il y a toujours quelque chose qui rend votre situation spéciale. Ce n'est qu'en réalisant exactement quelles sont vos exigences et quelles sont vos contraintes que vous pouvez identifier les «meilleures pratiques» les plus applicables à votre situation. Un exemple super artificiel: Utiliser le contrôle de source est la meilleure pratique À MOINS QUE quelqu'un ne menace de faire exploser la terre si vous utilisez le contrôle de source. Ce serait un contexte supplémentaire qui changerait ce qui serait considéré comme la meilleure pratique.
sara
11

La meilleure pratique est celle qui remplit le plus efficacement les exigences fonctionnelles et non fonctionnelles de votre logiciel en termes de fonctionnalités, de maintenabilité, de performances, etc. Mais si ce n'est pas le cas, le pragmatisme l'emporte.

Là où je travaille actuellement, nous construisons une nouvelle interface Web pour notre produit à partir de zéro. Il ne sera en aucun cas RESTful; il utilise exclusivement POST. Ce n'est pas à plusieurs niveaux, n'utilise aucun microservice et n'utilise pas de base de données NoSQL. Il n'a aucune sorte d'architecture comme Enterprise Java.

En d'autres termes, ce n'est pas du tout la hanche.

Mais il intègre un cadre HTML5 à la pointe de la technologie qui comprend une liaison de données de type angulaire, une mise à l'échelle automatique vers différents types d'appareils comme le mobile et le bureau, une intégration avec l'interface utilisateur Kendo de Telerik pour effectuer tous les travaux lourds, et un chiffrement et une sécurité entièrement cryptés canal de données.

Mieux encore, cela se fera en 30 jours, un exploit qui nécessiterait une armée de développeurs Java dans une architecture d'entreprise par an. Le code est ES6 / Typescript; c'est le code le plus propre que j'aie jamais vu.

Robert Harvey
la source
Je pense que votre réponse illustre le point que j'essayais de faire valoir dans la mienne ... Du moins, je le pense. +1 ... même si je suis toujours en VTC sur cette question par manque de détails!
svidgen
Cela ressemble à mon genre de projet! Être très fatigué de la mode apparaît en développement.
Matt Lacey
RE Telerik: un mot d'avertissement sur certains de leurs widgets, le DateTimePicker est horrible lorsqu'il est utilisé en conjonction avec Angular si vous souhaitez modifier les dates du côté Angular.
Dan Pantry
@ DanPantry: Je garderai cela à l'esprit.
Robert Harvey
3

Non . Les meilleures pratiques sont des choses qui sont généralement considérées comme la meilleure chose à faire 99% du temps, mais cela ne signifie pas qu'elles s'appliquent toujours à chaque situation.

En tant que développeur, votre travail consiste à connaître et à utiliser ces meilleures pratiques, mais aussi à savoir quand il est sûr de les mettre de côté.

Ce n'est pas censé être une auto-promotion, mais j'ai récemment écrit un article de blog lié à mon travail sur la plate-forme Salesforce.com qui détaillait l'une de ces occasions . L'une des règles d'or est «Ne faites jamais de requête à l'intérieur d'une boucle», mais récemment, pour la première fois en 7 ans de travail sur la plateforme, j'avais une raison parfaitement valable de ne pas respecter cette règle.

L'essentiel est que la plate-forme a des limites sur le nombre de requêtes que vous pouvez effectuer dans un contexte d'exécution donné, mais dans ce cas, j'ai dû interroger à l'intérieur d'une boucle pour éviter de manquer d'espace de tas et je savais que je serais bien dans la requête limite.

C'est donc rare, mais il y a des moments où les meilleures pratiques ne sont pas pertinentes pour un scénario, donc si elles ne correspondent pas, ne les forcez pas.

Matt Lacey
la source
2

Je suppose que par "meilleures pratiques", vous entendez une liste de règles que quelqu'un a écrites dans un livre. Car bien sûr, si vous entendez l'expression littéralement, alors bien sûr, vous devez toujours écrire le meilleur code possible.

Dois-je souligner qu’il n’existe pas un ensemble unique de «meilleures pratiques» universellement acceptées? Pour toute règle promue par un expert, vous pouvez presque toujours trouver un autre expert avec des informations d'identification égales qui dit quelque chose de différent.

Mais au fait: Réponse courte: généralement, mais pas toujours.

Chaque domaine a ses «meilleures pratiques» et ses «solutions de manuels». Ceux-ci représentent l'expérience accumulée et la sagesse de beaucoup, beaucoup de gens au cours de nombreuses années et ne doivent pas être ignorés. MAIS! Il y a toujours des circonstances spéciales, des cas marginaux, etc. La personne vraiment capable dans n'importe quel domaine sait quand suivre les règles et quand les enfreindre.

Je dirais en général: commencez par suivre les règles du manuel. Lorsque le respect des règles du manuel conduit à des problèmes - complexité inutile, performances médiocres, peu importe - alors examinez si enfreindre cette règle une seule fois ne serait pas une meilleure idée.

Si vous ignorez les règles et allez où votre caprice du moment vous mène, votre code sera probablement un gâchis. Quelle que soit votre intelligence, vous n'êtes pas le premier programmeur au monde. Il est logique d'apprendre de l'expérience des autres. Dans notre vie quotidienne, c'est pourquoi nous avons des parents, des enseignants et des prédicateurs: nous n'avons donc pas à répéter chaque erreur stupide nous-mêmes pour apprendre que c'est une erreur stupide à faire.

Mais si vous suivez servilement une liste de règles d'un livre 100% du temps, vous vous retrouverez souvent à marteler une cheville carrée dans un trou rond. Les personnes qui ont écrit le livre de règles n'ont peut-être pas rencontré un cas comme le vôtre. Et même s'ils l'ont fait, si c'est assez rare, ils l'ont peut-être ignoré. Une règle qui fonctionne 80% du temps est une excellente règle - tant que vous comprenez qu'elle fonctionne 80% du temps et non 100% du temps.

J'ai écrit un livre sur la conception de bases de données qui comprend de nombreuses règles que je conseille aux concepteurs de bases de données de suivre. (Je m'abstiendrai de donner le titre pour ne pas avoir l'air de glisser sans vergogne dans l'autopromotion.) J'encourage certainement tous ceux qui veulent concevoir une base de données à lire un livre comme le mien et à apprendre tout ce qu'ils peuvent en tirer. . Mais bien sûr, il y a des moments où vous devez enfreindre les règles que j'énumère.

J'ai écrit une fois un document sur les normes de programmation pour une équipe de développeurs que je dirigeais à l'époque. Et la dernière règle était la suivante: "Si vous avez une bonne raison d'enfreindre l'une des règles ci-dessus, alors allez-y, MAIS vous devez inclure un commentaire dans votre code expliquant pourquoi vous avez enfreint la règle. Si vous ne pouvez pas venir avec une bonne raison, puis suivez la règle. Si écrire le commentaire est plus difficile que de suivre la règle, alors suivez la règle. " Nous n'avons eu qu'une poignée de fois que quelqu'un a trouvé une violation d'une règle qui valait la peine d'avoir à expliquer pourquoi.

Geai
la source
1

Par les meilleures pratiques , je suppose que vous voulez dire "des règles informelles que la communauté du développement logiciel a apprises au fil du temps, ce qui peut aider à améliorer la qualité du logiciel" et non une sorte de meilleure façon littérale de faire une tâche spécifique.

Oui, jusqu'à ce que vous ayez une raison de ne pas le faire. Ce devrait être une bonne raison pour laquelle vous avez sérieusement pris en considération et appliqué les circonstances et les limites de la tâche à accomplir. Cela signifie que vous comprenez parfaitement la pratique et êtes en mesure de l'appliquer. N'entrons pas dans cette notion que si vous ne la comprenez pas, alors ce ne doit pas être la meilleure façon de penser. Voir la définition.

Vous n'allez pas toujours faire ce qui est le mieux. Lorsque le patron vous dit de "expédier ce morceau de merde ou vous êtes viré!" Vous l'expédierez et irez probablement chercher un autre emploi, mais vous l'expédierez toujours. Parfois, vous vous retrouverez à faire quelque chose qui est assez bon. Bien sûr, vous ne voulez pas prendre l'habitude de cela, mais parfois vous devez faire rouler les wagons et vous ne pouvez pas vous inquiéter de la cécité des chevaux.

JeffO
la source
1

Certaines choses sont importantes, d'autres non.

Vous devez adapter votre choix de langue et de style au problème en question.

Par exemple, une «meilleure pratique» pour la gestion des exceptions peut être de toujours intercepter les exceptions et de les journaliser, mais lors de la création d'un test unitaire, la meilleure pratique est souvent de les laisser sortir afin que le cadre de test unitaire puisse les signaler correctement.

En revanche, considérons la règle "SEC". Il est toujours bon de rechercher du code qui ne se répète pas, non seulement pour des raisons évidentes, mais aussi parce que plus vous codez de cette façon, mieux vous devenez un codeur - c'est un excellent moyen de fléchir vos compétences de codage / réflexion. au lieu de vos compétences de frappe et de copier / coller, et à long terme, vous vous sentirez généralement mieux revisiter votre code (même si vous vous attendiez à ce qu'il soit à jeter) si vous avez suivi certaines règles raisonnables.

En résumé, soyez flexible, mais ne codez pas seulement des fichiers indésirables illisibles, car vous pensez que c'est du code jetable.

Bill K
la source
1

Je vais essayer de voir d'un point de vue différent.

Les cadres modernes d'aujourd'hui facilitent la configuration d'un projet de base avec mvc, l'injection de dépendances, l'architecture en couches, etc. (amateur de bottes de printemps ici). Je dirais commencer par une base générée et utiliser les outils fournis jusqu'à ce que vous tombiez sur quelque chose qui nécessite une solution à la main. Ensuite, vous pouvez couper les coins de ces meilleures pratiques.

Il n'est pas plus difficile d'utiliser quelque chose comme l'application Web Spring Boot pour 2 pages, puis de lancer vos propres servlets, requêtes jdbc et d'autres choses.

uylmz
la source
1

D'après mon expérience, il n'y a qu'une seule meilleure pratique que je considère comme obligatoire:

Restez simple, stupide (KISS)

En d'autres termes: quels que soient les outils, les API, les architectures, etc. que vous choisissez - si vous restez simple, il est plus probable qu'il soit facile de travailler sur l'avenir, d'avoir moins de bogues, d'être rapide, efficace en mémoire et tout ce que vous pourriez souhaiter.

Toutes ces autres choses dont les gens parlent: principes, modèles, pratiques, etc. Ils fournissent tous des techniques et des idées pour résoudre les problèmes. L'astuce consiste à déterminer si vous avez ces problèmes en premier lieu.

drekka
la source
0

Les meilleures «meilleures pratiques» contiennent toujours une section dans laquelle vous devez utiliser votre intelligence et votre expérience pour identifier les éléments inappropriés du manuel. Ils peuvent également contenir une section sur l'examen, l'approbation et la documentation de ces exceptions et leur intégration dans les "meilleures" pratiques.

Bradley Ross
la source
0

Lors du codage d'un logiciel, l'architecture doit-elle toujours être les meilleures pratiques ou les pratiques pratiques en ce qui concerne l'application en cours de construction?

En théorie, oui.

Dans le monde réel, [toujours] oui, tant que vous pouvez vous le permettre.

Ce qui, bien sûr, signifie «non».

Les pressions de temps et d'argent essaieront toujours de vous pousser sur la voie d'une solution «rapide et sale», car elle offre une «meilleure» valeur au client. La façon dont cela est mis en œuvre n'a aucun intérêt pour le client ou ses comptables. Si vous pouvez [mal] faire un travail en deux jours ou parfaitement en trois mois, que pensez-vous qu'ils vont vous demander?

L'écart entre les deux - les meilleures pratiques et ce avec quoi vous devez «vous en tirer» - est appelé «dette technique»; c'est parfaitement acceptable, tant que vous avez un plan pour le "rembourser", c'est-à-dire pour revenir en arrière et améliorer les choses plus tard. Encore une fois, ce n'est pas quelque chose pour lequel vous obtenez toujours (jamais?) Le budget.

Une tactique consiste à publier une version bêta précoce avec le correctif «rapide», mais assurez-vous que les améliorations architecturales nécessaires sont prioritaires avant la version «complète». Encore une fois, ce n'est pas quelque chose que vous (toujours?) Faites.

Phill W.
la source