Qu'est-ce que le beau code? [fermé]

30

Je lis souvent que les développeurs doivent écrire du beau code, mais pour un débutant comme je le suis, il reste obscur de ce qu'est un beau code et comment le reconnaissez-vous?

La question corollaire est: Comment écrire du beau code et quelles sont les habitudes pratiques pour améliorer la qualité de votre code? , que dois-je faire pour rendre le code que j'écris beau (et ce que j'apprendrais).

Torr
la source
4
C'est juste une figure de style. La beauté réside dans les yeux du spectateur, et au-delà, il s'agit de la clarté des instructions que vous avez définies dans un fichier texte pour résoudre un problème, et de la facilité avec laquelle vous ou quelqu'un d'autre pouvez le modifier et le maintenir dans le futur. Au-delà de cela, la beauté de votre code est entièrement à vous - indentations, structure modulaire, complexité, efficacité simultanément avec une lisibilité facile, conventions de dénomination, etc.
bad_keypoints
Vous pourriez être intéressé par la lecture de Beautiful Code: les principaux programmeurs expliquent comment ils pensent alors!
UncleZeiv

Réponses:

55

"La beauté s'achète par le jugement de l'œil".

Cela dit, je pense que la plupart des programmeurs conviendront que le beau code démontre un équilibre entre clarté et transparence, élégance, efficacité et esthétique.

  • Clarté et transparence : la clarté est la facilité avec laquelle un lecteur peut déduire ce que fait le code. Le code transparent fait ce qu'il semble faire. Si le code semble faire une chose mais fait réellement autre chose (ou quelque chose de plus), ce n'est pas transparent - c'est trompeur.

  • Élégance : il existe de nombreuses façons d'implémenter la plupart des algorithmes, mais certaines sont maladroites tandis que d'autres sont soignées et gracieuses. Le caractère succinct ajoute souvent de l'élégance, mais un caractère succinct excessif peut réduire la clarté.

  • Efficacité : éviter l'utilisation inutile des ressources (telles que le temps CPU, la mémoire et les E / S).

  • Esthétique : être doux pour les yeux. C'est assez subjectif. Cela se résume principalement au style. Une considération importante est d'avoir un style cohérent . Le code qui change, par exemple, le retrait du style à mi-chemin, est moche.

Igby Largeman
la source
11
une belle explication, +1
koenmetsu
2
Je retirerais "Efficacité". Bien qu'au sens strict, il soit positif, l'inclure dans la liste peut au mieux être trompeur. C'est normalement un sous-produit des autres et cela devrait être une préoccupation secondaire au moment du codage. La raison principale est que, pour la plupart, il ne se manifeste qu'après que le compilateur a opéré sa magie noire.
DPM
@Jubbat En effet - parfois la solution la plus efficace conduit en fait à du code très moche. (Par exemple la fonction classique Fast Inverse Square Root)
Darrel Hoffman
@DarrelHoffman Droite, bien que ce compromis soit également vrai par plus de variables qui définissent le bon code, non seulement l'efficacité et le reste (il y a une bonne explication détaillée de cela dans "Code complet" - malheureusement je ne me souviens pas dans quelle section du livre, vers le début probablement-)
DPM
@Jubbat: Je conviens que l'efficacité est généralement une préoccupation secondaire, mais je pense toujours qu'elle tient compte de l'équation de la beauté.
Igby Largeman
20

Ne laissez pas les gens vous faire croire que le beau code est le suivant:

  • algorithmes intelligents
  • fonctionnalités de langage sournois
  • résoudre un problème avec le moins de touches possibles

Parce que non. Un code comme celui-là est mignon , et ça vaut certainement le coup d'œil, mais ce n'est pas le type de code avec lequel vous voulez vous installer.

Et vous savez que le polymorphisme statique méta-modèle récursif de fantaisie qui hérite des lambdas variatiques - ou quoi que ce soit que vous avez lu en ligne? Vous pourriez être impatient de sauter sur des astuces innovantes et astucieuses sans une raison claire de les utiliser. Mais le code qui repousse les limites d'un langage n'est pas beau non plus.

Ils sont sexy .
Des tonnes de plaisir, mais demandez-vous ceci: est-ce que je veux vraiment passer du temps à explorer l'anatomie de cette langue, ou est-ce que je veux travailler avec une langue et construire quelque chose de beau? Après tout, un langage de programmation n'est que l'outil à créer.


Alors, quel est le beau code alors?

Beau code = code maintenable. C'EST ÇA!
C'EST LA FORMULE!

Si vous pouvez écrire quelque chose, y revenir quelques mois plus tard et continuer à progresser, alors c'est beau. Si un an plus tard, vous réalisez que vous souhaitez ajouter des fonctionnalités ainsi que modifier une fonctionnalité existante, et que vous parvenez à le faire avec une relative facilité, alors C'EST magnifique. Si d'autres personnes peuvent entrer dans votre base de code et comprendre rapidement ce qui se passe parce que les choses sont organisées, elles auront plus de cheveux et seront également belles.

Donc, la vraie question que vous voulez poser est: "Comment puis-je écrire du code plus maintenable?". Je crains que ce soit une question plus vaste et une discipline assez créative. Continuez simplement à écrire du code, mais cette fois ne vous demandez pas s'il peut être plus beau. Demandez-vous si vous pouvez le rendre plus maintenable.

Trevor Hickey
la source
4
pour lutter contre les problèmes que vous soulevez, il est également conseillé à c2.com/cgi/wiki?KillYourDarlings
jk.
4

Mon point de vue est que "Beautiful Code" n'est pas un terme objectif ou particulièrement utile. Et nous ne devons pas essayer de le définir.


Les définitions typiques du dictionnaire du mot anglais "beauty" vont comme ceci:

  • "1. la combinaison de toutes les qualités d'une personne ou d'une chose qui ravit les sens et ravit l'esprit"
  • "1. la qualité présente chez une personne ou une chose qui procure un plaisir esthétique intense ou une satisfaction profonde à l'esprit ou aux sens."
  • "1. La qualité qui procure du plaisir à l'esprit ou aux sens et est associée à des propriétés telles que l'harmonie des formes ou des couleurs, l'excellence artistique, la véracité et l'originalité."

(Source http://dictionary.com )

Le fil conducteur est que la «beauté» concerne ce qui est esthétiquement agréable. C'est nécessairement subjectif ... comme l'illustre le dicton "La beauté est dans l'œil du spectateur".


Nous pouvons appliquer le mot «beauté» au code, et le sens évident est que le code est «esthétiquement agréable».

Mais dire ensuite que le "beau code" a un certain ensemble d'attributs (comme le suggèrent d'autres réponses) est une contradiction avec le sens évident de l'esthétique. L'esthétique concerne la façon dont les gens ... les individus ... perçoivent les choses.

Ou, pour le dire autrement, il y a quelque chose de répugnant à ce que quelqu'un me dise que je devrais être beau, que ce soit chez les gens, les œuvres d'art ou ... le code.

En ce qui me concerne, le beau code est un code que je trouve beau, et c'est tout. Il est subjectif et individuel, et laisse-le en rester là.

Stephen C
la source
2

Voici mon conseil.

Parcourez les réponses à Comment pouvez-vous expliquer le "beau code" à un non-programmeur? et voir sur quelles caractéristiques ils disent se concentrer. Prenez ensuite un livre comme Code Complete et lisez-le pour apprendre comment écrire un meilleur code.

À un certain point, il vous frappera en regardant votre ancien code, "C'est moche." Ce sera une réaction esthétique directe. Et en le regardant, vous vous rendrez compte que vous visualisez votre code comme un programmeur, et vous pouvez voir la laideur parce que vous savez à quoi devrait ressembler un code plus beau.

btilly
la source
1

Ce n'est pas parce que vous lisez souvent sur du beau code que les gens qui écrivent à ce sujet ont la même définition. Malheureusement, à en juger par votre question, il ne semble pas qu'ils aient même pris la peine de la définir en premier lieu.

Pour moi, le beau code est:

  • Expressif
  • Concis

Le code concis qui n'est pas expressif peut être cryptique, et le code expressif qui n'est pas concis a tendance à être gonflé et fastidieux à lire, vous avez donc besoin des deux.

Je n'inclurais pas la maintenabilité dans ce qui rend le code beau, car la beauté est quelque chose que vous voyez / lisez, pas quelque chose sur lequel vous agissez. Mais là encore, c'est mon point de vue personnel.

guillaume31
la source
0

Le terme beau code est un terme très vague et abstrait. Il est facile de comprendre ce qu'il représente et ce que cela signifie, mais il ne devrait jamais être considéré comme plus qu'un objectif secondaire.

Cela me rappelle beaucoup la métrique de couverture du code. Lorsque vous obtenez le nombre suffisamment élevé, vous pouvez vous détendre et passer à autre chose. Avoir une base de code avec une couverture d'environ 80% est génial, pas à l'épreuve des balles, mais suffisant pour se détendre et faire d'autres choses. Avoir une couverture de 40% est assez effrayant et devrait vous encourager à augmenter ce nombre.

Le fait est que la couverture du code n'a de sens que si le nombre est faible. Alors ne le laissez pas être bas. Lorsque la couverture atteint un certain point, passez à autre chose.

De même, un beau code est génial. Si vous avez un joli code, tant mieux, passez à autre chose. N'insistez pas trop là-dessus. Vous n'atteindrez jamais ce seuil de 100%, et si vous le faites, vous constaterez que vous vous êtes trop concentré sur ce à quoi il ressemble, ou à quoi il ressemble, et pas assez sur ce qu'il fait ou comment il le fait. . Alors, atteignez une marque raisonnable et arrêtez-vous.

Mais si votre code est énormément, si c'est un gâchis alambiqué géant de code spaghetti, s'il vous fait physiquement peine d'ouvrir le fichier, si vous n'avez pas de commentaires ou de documentation, etc., etc., alors corrigez-le. Et faites-le dès que possible.

Au fil du temps, vous constaterez que votre base de code devient généralement plus propre, généralement plus brillante et généralement plus belle et, plus important encore, plus utilisable lorsque vous vous concentrez à la rendre moins fugace. Écrire un beau code n'est pas un processus en une seule étape.

Il n'y a pas de philosophie magique. Ses 1000 petites étapes, toutes réalisées ensemble, ont toutes un objectif concret qui n'a rien à voir avec la beauté du code. Mais, lorsque vous les servez tous ensemble, ils forment un beau code comme la somme de ses parties. Comme voltron. Ou capitaine planète.

astronaute
la source
0

Je suis vraiment d'accord avec les réponses ici, mais en adoptant une approche moins technique, je dirais que le beau code est une expression de la clarté de la pensée de ses auteurs sur le problème en question qui se manifeste à travers un langage bien formulé et précis mais simple.

Pour moi, regarder à travers un beau code, c'est un peu comme regarder une œuvre d'art, voir de nouveaux détails qui montrent l'intention du créateur, mais aussi comment les différentes parties ont été réalisées, chacune donnant une réponse à tant de questions, puis, enfin, comment son existence ressemble à une loi naturelle à laquelle tout s'aligne de telle sorte qu'elle ne peut être décrite qu'avec des mots d'admiration: magnifique, inspirant, beau.

Donc, dans cette perspective, dans votre carrière de programmeur, vous pourriez faire des découvertes de beau code que d'autres pourraient ne pas comprendre parce qu'ils manquent de connaissances ou pourraient ne plus être remarquables car ils ont été gâtés par trop de beauté;)

Le beau code a toutes les qualités pragmatiques comme mentionné autrement, je suis totalement d'accord.

Filou
la source
0

J'ai trois critères:

  • Simple: au moins, il doit être lisible par l'homme. Par exemple, vous pouvez écrire un code qui fonctionne à O (1) pour une solution avec des tonnes de lignes, mais je préfère un code qui fonctionne avec 0 (n) résout avec quelques lignes. Cela pourrait changer pour des situations extrêmes mais pour le début la simplicité est importante.
  • Réutilisable: le code doit être réutilisable, mais pas écrasé. Si vous avez besoin d'une opération, vous devez la définir de la manière dont vous pourrez l'utiliser des années plus tard.
  • Indentation: ce n'est peut-être pas un problème pour vous, mais pour le niveau débutant, c'est la première chose à résoudre.
user2674653
la source