Quelle est la simplicité d'une vraie solution KISS? [fermé]

12

J'avoue : la plupart du temps, j'ai un problème avec "Keep It Simple and Short" car essayer de le faire en fonction des livres que j'ai lus, des modèles de conception que j'ai entendus, etc. me donne un tel enthousiasme - un enthousiasme venant de le sentiment que je suis sur la bonne voie vers une perfection probable.

D'un autre côté, oui, cela me met un stress supplémentaire en termes de respect des délais parfois ...

Mais chaque fois que je me dis: "La prochaine fois, reste simple, stupide!" Je trouve ça très difficile de rendre "simple" la prochaine fois, car ça commence à paraître bizarre ... et inconfortable après un point.

Ensuite, je commence à juger ma compréhension de «simple» ...

SIMPLE signifie-t-il trop court qu'il fonctionne mais difficile à maintenir et à étendre?

SIMPLE signifie-t-il briser de nombreux principes de la POO?

SIMPLE signifie-t-il tricher?

SIMPLE signifie-t-il simplement respecter les délais sans faire de bruit? etc.

En fait, c'est quoi?

La question est : pouvez-vous écrire la définition EXACTE de SIMPLE en termes de principe KISS? -s'il y a.

Merci!

crayonGâteau
la source
4
C'est "Keep it simple, stupid!", Pas court. et après avoir écrit cela, j'ai vu que vous le saviez, mais il n'y a pas de lien de suppression de commentaires sur mobile p.se ...
yannis
4
Je n'ai jamais trouvé quelque chose d'aussi court que c'était difficile à prolonger. J'ai trouvé BEAUCOUP de choses qui étaient des monstruosités massives qui étaient presque irréalisables parce que changer une chose a cassé tout le reste.
Ben Brocka
1
Je pense que l'erreur que la plupart des gens font en essayant de comprendre KISS est qu'ils pensent que la solution devrait être si simple, c'est évident . La vérité est que trouver une solution simple est tout sauf simple. C'est vraiment dur !!! Une fois que vous l'avez trouvé, tout le monde pense "oh, c'est tellement évident , pourquoi ne l'ai-je pas vu avant?"
Treb
2
Un bon KISSing est difficile à expliquer ou à définir avec précision, mais une fois que vous aurez bien compris, vous saurez. Continuez simplement à pratiquer!
Cascabel
1
Je suis désolé que cela ait été migré ici au lieu d'être simplement fermé, mais c'est hilarant hors sujet ici.

Réponses:

35

Apprenons un baiser français:

La perfection est atteinte, non pas quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retirer. - Antoine de Saint-Exupéry

Ce qui se traduit par:

La perfection est atteinte, non pas quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à emporter. - Antoine de Saint-Exupéry

mouviciel
la source
2
Devrait être "La perfection est quand il n'y a rien à supprimer"
normanthesquid
2
C'est une excellente citation mais elle manque de conseils pratiques.
c_maker
2
Vous pourriez rendre cette réponse plus simple (alias plus parfaite) si vous supprimez la partie française. :)
Phil
1
@Phil: Au contraire, mon ami.
Gilbert Le Blanc
14

Scénario

Vous devez couper et pincer.

Solution A: pas KISS

entrez la description de l'image ici

Solution B: BAISER

entrez la description de l'image ici entrez la description de l'image ici


Quant à une définition exacte : il est difficile de définir une échelle absolue pour mesurer la simplicité. Principalement parce que la vraie simplicité empêche la vraie compréhension du problème en question, et c'est rarement réalisable. Mais disons que les solutions A et B illustrent la différence entre les solutions qui tendent respectivement à la sur-complexité et à la simplicité.

back2dos
la source
Cela m'a fait sourire.
c_maker
Très violent, n'est-ce pas!
NoChance
2
Ce n'est pas. Mon chaton dort avec. Il est donc non violent.
Thomas Eding
11

"Rendre les choses aussi simples que possible, mais pas plus simples" -Einstein

Garder le code aussi simple que possible, mais pas plus simple dépend du problème résolu. Tant que le problème résolu a tendance à changer, KISS aussi.

Il y a un équilibre entre la suringénierie (oh mec, cela ressemble à un endroit idéal pour montrer mes compétences en conception de modèles!) Et la sous-ingénierie (si seulement j'utilisais une usine, je n'aurais pas ce couplage qui m'a fait faire 20 changements de code ...). L'objectif est la maintenabilité.

P.Brian.Mackey
la source
1
"Gardez votre complexité cyclomatique à la valeur qu'elle devrait être, et aucune autre valeur". "Achetez une maison avec un rapport prêt / valeur aussi bas que possible, mais pas inférieur". "Mangez un petit déjeuner aussi bon que possible, mais pas mieux". "Achetez aussi bas et vendez aussi haut que possible, mais pas plus bas / plus haut". "Grandir aussi haut que possible, mais pas plus grand". Msgstr "Rendre les noms de variables aussi significatifs que possible, mais sans donner plus de sens". "Donnez un pourcentage d'effort aussi élevé que possible, mais pas plus". «Il n'y a pas de« je »dans« équipe », mais il y en a un dans« supérieur »». "Arrêtez et sentez les roses, mais seulement quand il y a des roses". "Ecrire un commentaire
psr
11

Simple ne signifie pas enfreindre les bons principes de programmation. En fait, cela signifie davantage le contraire.

SIMPLE signifie-t-il trop court qu'il fonctionne mais difficile à maintenir et à étendre?

Non. Être difficile à maintenir et à étendre est un gros symptôme de complexité. En fait, je trouve que rendre le code extensible conduit à un code plus simple, puisque vous ne traitez pas tous les cas pour commencer, vous pouvez garder le code de base plus simple.

SIMPLE signifie-t-il briser de nombreux principes de la POO?

Non. La plupart des principes de POO sont conçus pour garder le code plus propre et plus organisé, ce qui en fin de compte est plus simple.

SIMPLE signifie-t-il tricher?

Non. Il est difficile d'écrire pour maintenir le code et les hacks sous prétexte de respecter les délais.

SIMPLE signifie-t-il simplement respecter les délais sans faire de bruit? etc.

Non. Les délais et la simplicité de votre code sont deux problèmes distincts. L'écriture de code simple ne prend pas plus de temps à écrire (bien qu'il s'agisse d'une idée fausse courante).

GSto
la source
Peut-être pensez-vous que je souffre de cette idée fausse, mais je pense que la solution simple idéale n'est pas toujours la première chose qui nous vient à l'esprit, donc cela prend parfois parfois plus de temps pour écrire du code plus simple - puis plus tard, vous rattrapez ce temps et plus en ne pas avoir à faire face à la complexité.
Cascabel
6

C'est très difficile à expliquer car simple ne signifie pas la même chose pour tout le monde.

Exemple. Certains développeurs pensent que ?:c'est simple mais d'autres pensent qu'une ifdéclaration est meilleure. Quand c'est à ce niveau, vous ne pouvez pas plaire à tout le monde.

En général, simple signifie sans complexité . Pour comprendre la simplicité, nous devons comprendre la complexité.

Il existe deux types de complexité:

La complexité essentielle fait référence à une situation dans laquelle toutes les solutions raisonnables à un problème doivent être compliquées (et éventuellement déroutantes) car les solutions "simples" ne résoudraient pas correctement le problème. -- Wikipédia

La complexité accidentelle est la complexité qui survient dans les programmes informatiques ou leur processus de développement (programmation informatique) qui n'est pas essentielle au problème à résoudre. -- Wikipédia

Vous pouvez vérifier la complexité essentielle avec les questions suivantes:

Cette solution est-elle simple? Puis-je l'expliquer à mes pairs en quelques minutes et ils l'obtiennent? Existe-t-il une solution plus simple au problème? Si oui, y a-t-il des compromis entre la solution compliquée et la simple? Pouvons-nous vivre avec ces compromis? Par exemple, de nombreux programmeurs font une erreur de micro-optimisation de tout et leur solution (ainsi que le code) devient trop compliquée.

Vérifier votre complexité accidentelle:

Le code est-il simple? Si j'y reviens dans trois mois, combien de temps me faudra-t-il pour créer le contexte dans mon cerveau afin que je puisse faire le changement que je dois faire? Est-ce que tout dans mon code source a un objectif clair et il le transmet efficacement à moi et aux autres développeurs ? Est-ce difficile de tester mon code? Habituellement, plus votre code est compliqué, plus il est difficile de faire des tests unitaires, donc j'utilise généralement cela comme une mesure de la complexité. Vous voulez généralement de petites classes et méthodes bien nommées et ciblées. Les modèles de conception vous aident généralement à les atteindre également.

Si vous souhaitez utiliser un modèle de conception simplement parce que vous venez de le lire, cela va probablement introduire une complexité accidentelle. Si vous voulez mettre quelque chose parce que vous pensez que c'est intelligent, cela introduira probablement une complexité accidentelle.

J'espère que cela aide et n'oubliez pas: simple ne signifie pas FACILE .

c_maker
la source
1
+1 pour définir la simplicité en termes de complexité essentielle et accidentelle.
Zach
2

J'ai toujours pensé que les principes derrière X11 ( http://en.wikipedia.org/wiki/X_Window_System#Principles ) valaient la peine d'être respectés. Je n'arrive pas toujours à atteindre cet objectif.

Plus précisément, je dois toujours me rappeler ... "N'ajoutez pas de nouvelles fonctionnalités à moins que vous ne connaissiez une application réelle qui en aura besoin.", Et "Si vous pouvez obtenir 90% de l'effet souhaité pour 10% du travail, utiliser la solution la plus simple. "

nwahmaet
la source
1

La question est: pouvez-vous écrire la définition EXACTE de SIMPLE en termes de principe KISS? -s'il y a.

Non.

Jeremy
la source
3
Pas sûr que cela devrait être une réponse. Si vous ne pouvez pas donner une telle définition, vous ne devriez pas répondre à mon humble avis. Si vous pensez qu'une définition exacte est impossible en général, vous devez en expliquer les raisons.
back2dos
Ce que j'aime dans cette réponse, c'est qu'elle suit à la lettre le principe KISS! +1
Treb
simple peut parfois être très compliqué.
GSto
@ back2dos c'est la revendication la plus forte; Je ne vais pas poster des réponses "je ne sais pas".
Jeremy
0

Simple - dans ce contexte particulier, c'est exactement l'opposé du complexe. Simple ne signifie pas nécessairement: toute personne stupide doit le comprendre - mais vous devez vous assurer que vous pouvez le comprendre, même si vous ne l'avez pas écrit vous-même.

La complexité pourrait être obtenue par une compréhension difficile des références - débarrassez-vous-en! De nombreux fichiers / classes liés les uns aux autres - pas question! Et du code compliqué (ce qui signifie: boucles chaînées, plusieurs couches ITE, etc.) - personne ne veut lire cela.

À mon avis: Il est très facile d'ajouter une autre fonction, dans les classes, vous pouvez également ajouter des fonctions privées, donc vous ne jouez pas avec l'interface. Alors pourquoi ne pas utiliser cet avantage et limiter vos fonctions / procédures à 50 lignes. Peut-être encore moins. Obtenez des noms significatifs. De cette façon, vous rendez la plupart des commentaires obsolètes. De cette façon, vos fonctions sont faciles à lire, faciles à modifier / étendre.

Bien sûr ... les dernières phrases auraient fonctionné comme: Dans les classes, il y a la possibilité de définir des fonctions privées, utilisez simplement cette possibilité pour diviser les fonctions en 50 lignes afin qu'elles soient beaucoup plus lisibles (n'oubliez pas les bons noms, vous n'avez donc pas besoin de commenter beaucoup).

MAIS: Il est beaucoup plus simple (!) De tout lire s'il y a un arrêt complet qui montre: j'ai terminé une pensée, passons à la suivante.

C'est ce que je définirais comme simple.

Philipp Wendt
la source