Comment écrire moins de code [fermé]


12

Une qualité que j'aimerais développer est d'écrire du code plus concis. Avec une écriture plus concise, du moins à mon avis, la possibilité d'ajouter des bogues au code est plus petite. Il est plus facile de lire le code pour les autres.

Ma question est de savoir si c'est quelque chose qui vient juste avec l'expérience ou est-ce quelque chose que vous pouvez faire explicitement pour développer cette qualité?


6
Tracez la tendance et voyez quand vous traversez l'axe des x ...

1
Pointeur obligatoire vers les macros, macros, macros: paulgraham.com/avg.html
vemv

Vous pouvez générer du code très concis et lisible en adoptant le style de programmation inutile. La programmation inutile est la programmation uniquement en appliquant des fonctions. Vous pouvez le reconnaître par son utilisation extensive de fonctions d'ordre supérieur comme map, filter, concat, fold / réduire / injecter / [insérer d'autres noms pour une liste de catamorphisme] etc.
dan_waterworth

2
-1: Cela ressemble à des auto-félicitations déguisées.
Jim G.

Je n'ai pas encore vu de code libre lisible. pas dans une bibliothèque importante.
Simon Bergot

Réponses:


12

Je dirais que dans l'ensemble, c'est quelque chose qui vient avec le temps et l'expérience, mais vous constaterez peut-être que si vous travaillez avec des langues plus laconiques, vous ramenez cette qualité à vos langues de travail habituelles.

Certes, après un an ou deux de travail avec Ruby, j'ai trouvé que mon C # était beaucoup plus tendu. Je pense que si je devais mieux comprendre la programmation fonctionnelle (une ambition permanente), j'en prendrais probablement plus.

Il existe également quelques directives qui peuvent vous aider, par exemple si vous écrivez les deux mêmes lignes plus d'une fois en les divisant en leur propre méthode. C'est une ligne directrice simple, mais qui réduit rapidement les lignes de code et la programmation couper-coller, dont la plupart d'entre nous sont coupables de temps en temps.

Si vous comprenez l'héritage, vous pouvez souvent économiser sur la répétition du même code à différents endroits en donnant des fonctionnalités communes aux classes parentes. C'est évident en principe mais quelque chose que les gens manquent souvent dans la pratique.

Il peut y avoir une différence entre écrire moins de code et avoir moins de code dans votre application - parfois, vous pouvez utiliser la génération de code pour éviter d'avoir à vous répéter, vous n'écrivez que quelques lignes de code, mais celles-ci génèrent alors beaucoup d'autres codes pour vous - cela peut vous donner beaucoup de poids. Regardez ce qu'un outil comme Rails ou Entity Framework fait à cet égard pour comprendre à quel point il peut être utile. Soyez clair quant à la nécessité de cela et réfléchissez à deux fois, trois fois puis quatre fois à la génération de votre propre code - cela peut vous faire tomber dans l'enfer YAGNI.

Comprenez votre langage, votre API et vos outils. Encore une fois, cela semble évident, mais au fil des années, j'ai écrit tellement de code que j'ai réalisé plus tard que je reproduisais des fonctionnalités que j'aurais pu hériter de l'API ou utiliser une fonctionnalité de langage pour simplifier, ce qui m'a permis de réaliser que quelques heures de lecture sur la documentation de l'API avec laquelle je travaille me fera gagner de nombreuses heures de codage ou de débogage plus tard. De même, la plupart des plates-formes avec lesquelles vous travaillez ont un grain - apprenez à travailler comme elles l'attendent et votre vie sera beaucoup plus facile. Passez un peu de temps à trouver la direction de la moindre résistance pour la plate-forme avec laquelle vous travaillez et vous obtiendrez des résultats bien meilleurs.

Si vous vous demandez s'il existe une meilleure façon de faire quelque chose, il y en a probablement et cela vaut toujours la peine de découvrir comment mieux faire les choses.


Oui, à mon avis, la seule raison des fonctions privées à une ligne est le principe DRY

Depuis que j'ai eu plus de ces fonctions, le nombre de lignes de code dans mes classes a considérablement diminué et cela semble beaucoup plus net et plus clair.
glenatron

Cela ressemble à un peu de contradiction, plus de fonctions mais moins de lignes, mais peut-être que je peux voir la même tendance dans mon code aussi .. Je dois y penser ....

Avez-vous d'autres directives à suivre? On dirait qu'ils pourraient être utiles à un jeune développeur comme moi.
stuartmclark

@stuartmclark - J'en ai ajouté quelques autres, bien que je soupçonne qu'il n'y en a pas trop que vous n'auriez pas entendu ailleurs.
glenatron

16

Une excellente façon d'écrire moins de code consiste à éviter de réinventer la roue et à utiliser les composants logiciels existants lorsqu'ils sont disponibles.

Une réponse commune que j'obtiens quand je demande pourquoi les gens ont fait leur propre ORM, ou leur propre moteur de journalisation, ou leurs propres composants d'interface utilisateur, ou leur propre tout:

Mais notre c'est mieux

Je crois que cette déclaration est correcte dans la plupart des cas, mais l'impact négatif sur le retour sur investissement est très élevé dans la plupart des cas. Ta maman fait les meilleurs plats non? Mais vous ne pouvez pas demander à maman de rentrer à la maison et de les préparer tous les jours.

C'est pourquoi je pense que les développeurs devraient s'intéresser à l'impact financier de leurs choix. Certains d'entre eux sont:

  • Travail supplémentaire requis pour construire le composant
  • Travail supplémentaire pour les nouveaux venus pour l'apprendre
  • Un énorme travail supplémentaire pour le maintenir

J'aime à penser que ces fournisseurs de composants sont votre équipe étendue qui travaille pour vous pour une infime fraction de ce que vous auriez payé pour le construire, le maintenir et l'améliorer vous-même.

Il est préférable pour toute l'entreprise de maximiser le retour sur investissement plutôt que de travailler à maximiser notre satisfaction de l'ego;) Plus votre entreprise reçoit d'argent, plus vos conditions de travail et votre salaire augmenteront.


1
J'en suis aussi coupable, il y a quelques années, j'ai écrit que ma propre classe de chemin de fichier pouvait convertir le chemin de fichier entre les formats Win, Unix et Apples. Nous n'avons utilisé que des fenêtres. Peut-être que c'est aussi une règle, ne jamais rendre les choses

Parfois, cela est dû à votre manque de connaissance d'un cadre donné. J'ai également écrit ma propre classe de chemin lorsque j'ai commencé à travailler avec .NET, puis j'ai découvert la classe System.IO.Path quelques jours après :-)

Je préférais les spaghettis de ma mère, mais le contenu du pot était assez bon. Cela se résume vraiment à ceux qui sont en charge des exigences. S'ils ne se contentent pas de la solution à 85%, vous n'avez pas le choix.
JeffO

Ma maman fait beaucoup mieux les spaghettis que les tiens.

1
+ les internets pour "éviter de réinventer la roue". L'une des compétences les plus cruciales que j'ai développées est d'être capable d'identifier des problèmes que quelqu'un a probablement déjà résolus. Non seulement cela me donne presque toujours une meilleure solution que ce que j'aurais produit moi-même en manipulant un tas de cas marginaux que j'aurais probablement ignoré, mais cela me libère pour travailler sur les problèmes que je suis réellement payé pour résoudre .
BlairHippo

5

À mon avis, écrire moins de code peut se faire de plusieurs manières:

  • Tu n'en auras pas besoin . Ne codez pas quelque chose dont vous n'avez pas encore besoin. Codez uniquement les exigences. De cette façon, nous réduirons le code nécessaire à l'écriture.

  • Ne vous répétez pas . Je pense que l'utilisation d'un CMS, d'un framework ou d'une bibliothèque tierce est une façon d'appliquer le principe DRY.

  • Abstraction . Enfin et surtout, la programmation d'abstraction peut également réduire considérablement le code. En faisant abstraction du code, la chance de réutiliser le code ira plus haut car cela réduit la duplication.


3

Au-delà de la compréhension d'un langage de programmation, je pense que la compréhension d'un problème et la recherche d'une bonne solution ont beaucoup à voir avec cela. Il existe de nombreuses solutions à la plupart des problèmes, mais elles ne sont pas toutes optimales. Vous pouvez conduire de la ville A à la ville B par différentes routes - l'une peut prendre deux heures, l'autre peut prendre le double. C'est la même idée en programmation. Vous connaissez peut-être très bien une langue, mais vous pouvez trouver une solution qui prend, disons, deux pages de code, tandis que quelqu'un d'autre trouvera une solution qui peut être implémentée dans un quart de la moitié de la taille du code. Je l'ai vu beaucoup au fil des ans.

Assurez-vous d'avoir une bonne compréhension du problème. Analysez-le, trouvez des solutions, pesez le pour et le contre (bien sûr, les «solutions avec un '» varieront considérablement d'un problème à l'autre - de manière générale ici). Ensuite, il y a la mise en œuvre de la solution choisie, qui est l'endroit où votre compréhension du langage (et du cadre, le cas échéant) entrera en jeu.


Combien de temps passez-vous à préparer la solution par rapport à la programmation de la solution?

Bien sûr, cela varie en fonction du problème. Je ne parle pas de jours ici. Passer un peu de temps à réfléchir avant de coder est généralement payant. Il ne s'agit pas vraiment du temps passé à le faire, car il s'agit de trouver une bonne solution - et idéalement maintenable à long terme -. Je peux bien produire du code merdique pour des solutions merdiques - n'importe qui peut le faire.
MetalMikester

1

On peut dire que tout l'art de la programmation se résume à cela.

Vous pouvez étudier des langues qui mettent l'accent sur la clarté et la concision (par exemple Haskell, Scheme, Python), ou même des paradigmes tersers comme Factor et d'autres langues concaténatives, mais en fin de compte, tout ce que vous pourriez choisir d'étudier devrait finalement contribuer à vous aider à écrire plus court , code moins redondant.


1

Comme toutes les autres afflictions, si vous n'admettez pas avoir un problème, vous n'allez pas chercher de solution. L'expérience commence à être un facteur lorsque vous avez appris à quoi ressemble moins de code. Lorsque vous revisitez votre code, c'est le moment idéal pour déterminer si vous pouvez réutiliser le code ou refactoriser pour réduire le code. Microsoft a pu améliorer la vitesse d'impression avec Windows 2000 en ne le spoulant PAS deux fois (citation d'un employé de Microsoft lors d'une de leurs démos gratuites).


Je devrais donc revoir mon code et le refactoriser pour comprendre comment écrire moins de code ou comme Piet le dit, terser le code?

2
@Gorgen - vous pourriez le faire si vous avez le temps ou simplement regarder n'importe quel code que vous avez écrit il y a une heure. Parfois, repérer un exemple sur SO peut vous inviter à revenir en arrière et à apporter des modifications dans votre propre code.
JeffO

0
  1. Revenez à votre ancien code à long terme,
  2. le mettre sous contrôle de version,
  3. écrire des tests pour avoir un espoir raisonnable de ne pas introduire de nouveaux bugs,
  4. récrire.

Répétez ad libitum. Et bienvenue en enfer.


-2

Le développement piloté par les tests peut être utile. En utilisant cela, vous écrivez uniquement le code minimum requis pour réussir ce test.


Dans ce contexte, le minimum est défini en termes de fonctionnalités et non de longueur.
vemv
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.