Comment pouvez-vous expliquer le «beau code» à un non-programmeur? [fermé]

44

En parlant avec un ami non programmeur, il m'est arrivé de mentionner le concept de "beau code" et elle voulait comprendre ce que cela signifiait, mais je ne savais pas trop comment l'expliquer à quelqu'un qui n'aurait aucun problème. contexte que ce soit.

Quand tout le code ressemble à du charabia à quelqu'un de toute façon, comment pouvez-vous expliquer ce qui rend un morceau de code plus joli qu'un autre? Les analogies pourraient aussi être utiles.

Daniel Vandersluis
la source
12
Pouvez-vous expliquer un beau code à un programmeur sans le montrer? La description est elle-même un art.
Kojiro
9
Si nous pouvons avoir une bonne idée ici, je pourrais peut-être l'utiliser pour décrire une belle preuve à un non mathématicien.
David Thornley
Un beau code peut être celui qui utilise les idées les plus simples et les moins nombreuses tout en effectuant le travail correctement. Ironiquement, la tâche précédente consistant à trouver des idées simples peut être un travail complexe, et c'est ce que nous admirons. - Désolé, je ne trouve pas en ce moment un moyen d'expliquer cela d'une manière plus naturelle à quelqu'un.
LatinSuD
Beau code est lorsque vous définissez votre police IDE à Comic Sans. soupir
Kirk Broadhurst

Réponses:

88

Analogie linguistique

Pensez à votre histoire préférée. C'est probablement bien écrit. Pour un non-anglophone, le simple fait de ne pas comprendre ou comprendre pourquoi il est beau n'enlève rien à sa beauté.

Analogie de construction

Considérez une maison mal bâtie. Il a des portes et des fenêtres qui sont évidemment briques. Le mortier est fissuré dans un coin où la fondation était insuffisante. Et personne ne peut comprendre pourquoi une cage d'escalier menant au 2e étage n'existe pas. Les toilettes sont construites à côté de la cuisine sans ventilateur d'extraction et situées de manière à ce que les vents dominants dissipent les mauvaises odeurs de tourbière dans le reste de la maison. La cheminée de la cheminée à foyer ouvert se trouve à 5 cm du bois, prête à prendre feu.

Cela contraste avec une maison où tout est là où elle devrait être, elle demande peu d'entretien, est parfaitement isolée pour qu'un peu de chaleur solaire la maintienne au chaud en hiver, l'énergie est récupérée grâce à la ventilation, pour que vous ayez à la fois de l'air frais et une température confortable et des factures d'électricité négligeables. Il est construit avec des matériaux ininflammables afin qu'il ne puisse pas brûler après un incendie. Il résistera à un séisme de 9,0 et à une tornade de niveau 5. La construction ne coûte que 30% de plus que celle de l'autre maison, mais la différence sera remboursée dans 5 ans. Et c'est esthétiquement agréable.

L'interface graphique est comme l'apparence extérieure d'une maison. Un utilisateur peut reconnaître la beauté dans une interface graphique, tout comme il peut apprécier une belle maison. Mais peut-être plus important encore, la vraie beauté dans la conception des maisons et des programmes réside dans les choses invisibles pour les non-initiés, mais importantes ou agréables à avoir malgré tout.

utilisateur21007
la source
19
Cette analogie de construction est parfaite!
Daniel Vandersluis
1
+1 @ user21007: Il y a très longtemps, j'étais un architecte de l'information pour des sites gigantesques - tout le monde a l'analogie de la construction et le concept de systèmes qui fonctionnent et se sentent bien.
gaffes
1
Bonne analogie pour les produits avec des interfaces graphiques. Pas si bon pour les frameworks et les bibliothèques.
Den
1
Cela me rappelle cette annonce: youtube.com/watch?v=p9tjs-6wbsI
JohnL
4
J'ai beaucoup utilisé l'analogie linguistique dans le passé: "Je travaille avec ce code laid ..." "Attendez, que voulez-vous dire par laid?" "tu vois, son écriture liek que"
DistantEcho
28

Pensez à une voiture.

La plupart d'entre nous regardons la voiture et ne peuvent voir que le corps. Si quelqu'un répare quelques bosses et applique un nouveau travail de peinture sur la voiture, cela aura l'air beaucoup plus beau. C'est fondamentalement la même voiture, mais c'est tout ce que nous voyons.

Un mécanicien ouvre la voiture et regarde le moteur. Ils voient à quel point ce moteur est bon. Ils voient que tout est conçu pour être facile à obtenir, à maintenir et à travailler. Ils voient les pièces et savent à quel point il a été conçu. Pour un mécanicien expérimenté, le moteur d'une voiture de haute qualité bien entretenue devient un objet de beauté. Ils ne peuvent pas vous expliquer ce qui la rend belle, mais leur notion de beauté se traduira probablement par une réduction des coûts de maintenance, une plus longue durée de vie de la voiture et de meilleures performances. Tout cela ajoute à la valeur de cette voiture, même si vous ne la voyez pas.

Lorsque vous consultez un site Web ou une application, vous le voyez comme si la plupart d’entre nous voyions des voitures. Quand je regarde le code, je le regarde comme si le mécanicien regardait le moteur de la voiture. Vous ne pouvez jamais expérimenter la beauté de ce code comme je le fais, il est littéralement invisible pour vous. Mais cette beauté est importante, tout comme la beauté du mécanicien. Il détermine le fonctionnement du logiciel, le type de problèmes qu'il rencontre, la facilité d'amélioration du logiciel, etc. Tout cela ajoute à la valeur de ce logiciel, même si vous ne le voyez pas.

billy
la source
11

Tout le code présent est requis, et aucun d’eux n’exige d’explication.

Steven Evers
la source
2
@zdan: Je répondrais en disant que ceux qui la trouvent belle ont les connaissances requises (donc aux yeux du spectateur). En outre, intelligent! = Belle IMO.
Steven Evers
2
@zdan: Quand cela nécessite de nombreuses explications, ce n'est pas un "beau code", mais un "piratage intelligent".
Mason Wheeler
1
La FFT est un hack très intelligent, mais il n’est pas possible de l’appeler beau.
Kyte
1
Je suis d'accord avec SnOrfus pour la plupart. Cependant, pour moi, un beau code doit non seulement être nécessaire, suffisant et explicite, mais aussi subjectivement parfait et léger. Je crois que beaucoup de code pourrait qualifier les critères exposés par SnOrfus tout en se sentant assez encombrant ou imparfait d'une autre manière. Je dirais que ce code est beau.
asoundmove
1
Je pense vraiment que l'idée de "quelque chose de réduit à l'essentiel, mais pas plus" est sur la bonne voie. Cependant, une définition impossible à maintenir et écrite dans la mauvaise langue pour la tâche correspondrait également à cette définition. En outre, en exigeant que cela n'exige pas d'explication, il est probable que la plupart des tâches correspondant à votre définition doivent également être triviales. Je ne pense pas que "Hello World" puisse être qualifié de beau.
user21007
5

Je ferais référence à la poésie:

Un poème bien écrit a un sens différent de celui d'un extrait d'un manuel mal traduit sur le même sujet.

utilisateur1249
la source
C'était aussi ma pensée, mais tout le monde n'aime ni ne comprend la poésie. On pensait aussi à la musique: bonne chanson contre mauvaise chanson, mais c'est assez subjectif aussi.
PSU
Qu'est-ce que ... 25 interfaces +25 classes héritant toutes de classes abstraites? Je voulais juste une brouette rouge. Et peut-être des poules.
Erik Reppen
5

Les problèmes de codage concernent la conceptualisation, de sorte qu'un code magnifique représente une conceptualisation remarquable du problème.

Par exemple, nous aimons cela lorsqu'un problème peut être réduit à un problème déjà résolu, ce qui donne un aperçu de la nature du problème lui-même .

Parfois, une nouvelle conceptualisation du problème peut le rendre si facile; nous parlons de solutions élégantes qui nécessitent des astuces simples qui simplifient une tâche difficile.

Pour moi, le Quicksort est un bel exemple: choisissez un élément aléatoire dans un tableau, puis comparez tous les autres éléments du tableau à celui-ci; si le nombre est inférieur, placez-le dans la pile A; si le nombre est supérieur, placez-le dans la pile B. Maintenant, par l'inégalité du triangle, aucun élément de la pile A ne devra jamais être comparé à un élément de la pile B. Recurse sur A et B, et vous avez terminé. .

Macneil
la source
5

Cela me rappelle ceci:

http://imgs.xkcd.com/comics/lisp.jpg

Source: XKCD - LISP

Nick Bedford
la source
5
Mieux vaut avoir cela comme lien, surtout que le texte de survol est manquant.
user151019
1
Et le hovertext est la moitié de la blague dans ce cas.
4

Aucun code non trivial ne peut être parfait car un code parfait requiert à la fois la satisfaction d'objectifs souvent contradictoires. Beau code, par conséquent, équilibre parfaitement tous les attributs importants pour la tâche à accomplir et est plus proche de la satisfaction de tous en même temps que ce que la plupart des gens penseraient possible. Dans aucun ordre particulier:

  • Lisibilité
  • Concision
  • Efficacité
  • Souplesse
  • Explicitation
  • La robustesse
  • Sécurité / imbécillité
  • Complétude
  • Cohérence
  • Facilité d'utilisation (pour les API)
Dsimcha
la source
2

Les peintures de Jackson Pollock sont un exemple de quelque chose de beau pour certains et de charabia pour d'autres.

S.Lott
la source
Hmmmm ... Je ne le ressens pas.
Dynamique le
La programmation est plus artisanale que artistique (ou scientifique d'ailleurs). Pas que je frappe non plus.
Erik Reppen
1

Si la personne connaît bien les mathématiques, j'aime bien comparer un code magnifique à une solution élégante à un problème.

Chris Cudmore
la source
1

Certains aspects d’un bon code sont les suivants:

  1. Il a un grand nombre de petits détails qui vont tous dans la même direction
  2. sa structure est cohérente , chaque partie suit le même schéma
  3. mais il ne se répète pas , chaque partie est différente
  4. il a également ne permet pas le comportement qui est considéré comme invalide
  5. il a le plus petit nombre possible d'états différents
  6. vous pouvez comprendre tout le comportement du code en lisant des prototypes de fonctions
  7. il n'a pas d'effets secondaires
  8. l'exécution est garantie de s'arrêter
  9. il n'utilise aucune fonctionnalité avancée disponible dans les langages de programmation
  10. il n'est pas trop complexe par rapport à la complexité du problème qu'il résout
  11. il n'y a pas d'erreur ou de comportement indéfini
  12. il peut être compilé avec des compilateurs de plusieurs fournisseurs différents
  13. il n'a pas de dépendances à coder qui n'est pas utilisé
tp1
la source
0

Pour moi les langues sont mes outils.

Et comme tout artisan, je préfère que mes outils soient en parfait état.

Plus le code est bon, plus la clarté du concept, la facilité de maintenance et la lisibilité sont bonnes. le meilleur le code.

Donc pour moi, lire du code bien écrit, c'est comme ouvrir une boîte à outils avec des outils bien conçus.

J'ai utilisé cette analogie plusieurs fois avec succès. Les personnes ayant une formation plus pratique ou artistique semblent comprendre le concept de code propre / beau de cette manière.

guidhouse
la source
0

Je pense que cela dépend de ce que vous entendez par beau code.

Pour moi, le code est beau quand il est lisible. Outre les problèmes éventuels liés aux concepts de programmation, un non-initié pourrait lire et, du moins à un haut niveau, comprendre ce que fait le code.

Comme d'autres réponses l'ont déjà expliqué, le code peut aussi être beau dans le sens où il réalise des fonctionnalités complexes en combinant quelques concepts simples. Je ne sais pas quelle sorte d'analogie serait préférable pour expliquer cela à un non-programmeur, cela dépend du profane. Des jouets de puzzle me viennent à l’esprit, comme le NeoCube .

Paul D. Waite
la source
0

À mon humble et personnel opinion, beau code est comme un bon livre de roman:

  • vous pouvez le lire du début à la fin / vous ne devriez pas avoir à passer aux pages suivantes d'un livre pour comprendre la page en cours.
  • il n'y a pas de répétitions inutiles / un livre est un peu ennuyeux s'il dit toujours la même chose.
  • l'intention de chaque partie est évidente presque à chaque fois / vous ne devriez pas avoir de dictionnaire à vos côtés tout le temps pour lire un livre (à moins qu'il s'agisse de poésie / code golfing xD).
  • il est organisé en sous-structures de tailles et de complexités abordables (modules, fonctions, déclarations, etc.), il n’ya pas trop de «imbrication» / les chapitres, les paragraphes et les phrases sont bien équilibrés; il n'utilise pas trop de niveaux de subordination de la peine, etc.
  • il est agréable à l'oeil de manière esthétique (joliment échancrée, blocs correctement délimités, etc.) / comme un livre avec une composition correcte.
tran
la source
0

C'est comme une moyenne entreprise maigre où tout le monde connaît son rôle, il est facile de savoir qui est bon dans quoi et il n'y a pas de duplication d'effort

Contre.

Espace bureautique où la médiocrité est défendue, trois responsables n'ont rien de mieux à faire que de vous déranger au sujet des rapports TPS, le! @ # $ Ing FAX MACHINE NE FONCTIONNE JAMAIS !!! et un employé donné ne peut obtenir que 15 minutes environ de travail réel par semaine. Il se peut qu'un employé ne travaille même plus techniquement là-bas, parce que quelqu'un a oublié de le licencier (c'est difficile à dire, car personne ne travaille efficacement et il est difficile d'évaluer ce qu'il essaie d'accomplir). Et obtenir quelque chose de concret nécessite de naviguer dans un système absurdement trop compliqué que quelqu'un lirait et penserait bien paraître sur son curriculum vitae, même si cela ne résout pas réellement le problème qu'il avait.

Erik Reppen
la source
-1

Il n'y a pas de "beau code", il existe des "algorithmes élégants" et des "conceptions élégantes". La conception peut être comprise par les non-programmeurs.

Je déteste les programmeurs qui discutent du "beau code", car d’une manière ou d’une autre, ils ne savent pas vraiment comment un interprète ou un compilateur va le digérer et ce que la machine va faire. C’est plus comme un enfant qui montre à sa mère comment son histoire est merveilleuse, mais vraiment, ce n’est pas le cas.

jokoon
la source
-1

Est-ce que vous expliquez aux gens pourquoi une belle image est belle? Non, vous leur montrez l'image (car, vous savez, une image en dit plus que 1000 mots). Le mieux est donc de leur montrer un petit morceau de code vraiment élégant, beau, parfait (et peut-être à titre de comparaison, comment Joe Average l'aurait codé).

flolo
la source