Que considérez-vous comme le premier principe de programmation?

59

J'ai toujours aimé me demander "quel est le premier principe de ceci?" après avoir appris les bases de quelque chose (par exemple, la programmation). C'est une question inspirante, OMI, qui peut vous obliger à réfléchir aux principes les plus importants derrière quelque chose, en particulier une compétence telle que la programmation.

Alors, quel est selon vous le (s) premier (s) principe (s) de la programmation? Je donnerai ma réponse ci-dessous un peu plus tard.

Weipeng L
la source
Nous ne parlons pas de club de combat.
Job le

Réponses:

97
  1. KISS - Keep It Simple Stupid
  2. SEC - Ne te répète pas
  3. YAGNI - Vous n'en aurez pas besoin
Facture
la source
KISS devrait être Keep It Simple Smart. La première fois que vous devez réécrire une grande partie de votre code parce que vous n'avez pas conçu une conception intelligente et extensible, vous en conviendrez. :)
8
Je pense que KISS devrait être "Keep It Simple, Stupid!"
Dennis C
Je travaille actuellement sur un article de blog sur le fait que ces deux-là sont les deux êtres les plus chers et les plus chers des programmeurs et qu’ils sont en même temps un peu oxymorons car il est souvent nécessaire de choisir l’un contre l’autre
10
J'ajouterais aussi YAGNI.
3
@Programmin Tool - Je ne pense pas que "stupide" soit superflu. Je pense que cela montre que nous avons tendance à vouloir être "intelligents", ce qui se traduit par une complexité inutile. À mon avis, le «stupide» essaie de nous rappeler cette tendance en nous aidant à nous rappeler ce que nous pensons initialement «intelligent» ne l’est généralement pas.
codekaizen
37

Écrivez le code comme si c’était vous qui auriez à le conserver.

Patrick Desjardins
la source
C'est une heuristique très pratique, 3x :)
19
Ecrivez le code comme si un psycopath maniant la hache devait le maintenir. FTFY.
Point-virgule oublié
10
... et le psychopathe à la hache sait où vous habitez.
CAD bloke
2
.. et il vient d'aiguiser sa hache ...
Roalt
1
... et il travaille à vos côtés.
Broken_Window
29

Soyez aussi paresseux que possible.

Preston Guillot
la source
2
Encore une fois, trop général, IMO. Cela soulève la question suivante: "À quel point la paresse est-elle paresseuse, vraiment?", Car il est évident que vous ne voulez pas être "bâclé".
Ceci est une référence à perl "Laziness, Impatience, and Hubris"
Donc, nous parlons de différents types de paresse? Je pensais par "fainéant" que Bob
2
Trop général. Par cette analogie, toutes les variables et fonctions seraient 1 lettre parce que j'étais trop paresseux pour taper quelque chose de significatif. En supposant que je sois obligé de le maintenir aussi, alors vous avez peut-être raison, car je le rendrais aussi facilement maintenable que possible.
Kyle Ballard
3
@ Kyle: Oui, c'est le but. La "vraie paresse" vous simplifie la vie, autant maintenant que dans le futur. Ce qui revient à faire les choses correctement. Si vous faites moins de travail maintenant, mais plus de travail plus tard, vous n'êtes pas "aussi fainéant que possible" :)
23

Zen, partie I: La programmation n'est que la route, pas le chemin.

La programmation n’est que la technique pour enseigner à un ordinateur ce qu’il doit faire. Pour réussir à créer un logiciel rapide et fiable, vous devez connaître vos algorithmes, vos meilleures pratiques et tous les autres éléments qui ne sont pas nécessairement liés à votre programmation (langage).

Zen, partie II: Si vous êtes pressé, marchez lentement. Si vous êtes vraiment pressé, faites un détour.

Cela semble idiot, mais ne vous laissez pas aller à des compromis qui pourraient vraiment vous déranger par la suite. J'ai une règle: si vous êtes au cœur d'un programme, essayez d'être aussi précis et précis que possible. Si vous utilisez des méthodes profondément ancrées dans votre logiciel, essayez d’être plus rapide dans le codage. Si vous codez au-dessus de ces deux là, vous pouvez même obtenir un peu plus de travail.

Les erreurs de conception sont les plus difficiles à trouver et / ou à corriger, la prochaine étape consiste en des erreurs de programmation dans des pièces sur lesquelles tout le monde se fonde, puis dans les "véritables pièces de logiciel montrant". Si vous devez corriger une erreur de conception à la fin d'un projet, hum, ce n'est pas bien ... ;-)

Zen, partie III: Connais ton chemin, Neo.

Connaissez votre environnement, vos outils et les éléments sur lesquels vous comptez au quotidien, et faites le tri pour qu'il fonctionne pour vous. Idéal si vous utilisez votre "environnement" de programmation si naturel que vous n’aurez même pas à y penser. Si vous devez faire un travail, n'introduisez pas de "nouveautés fantaisistes" mais faites votre travail. Ces éléments peuvent être introduits dans un nouveau projet, notamment lorsque vous avez le temps de les préparer et de les utiliser.

Georgi
la source
Euh, et puis encore une fois: j'ai atterri sur la terre zen tout en parlant de programmation :)
@partie III - n'ajoutez pas de "nouveautés fantaisistes" à moins que vous ne soyez payé pour le faire!
Jason le
+1 pour la référence matricielle. Je suis un con pour un bon (ça et le Zen. Ça me fait penser à Python)
19

KISS (restez simple, stupide).

Cela pose en effet la question "Comment définissez-vous simple?" Et aussi "Quand quelque chose est trop simple pour la tâche à accomplir?" C'est pourquoi vous ne pouvez pas devenir un bon programmeur simplement en connaissant le premier principe de la programmation.

Dima
la source
Je pense que c'est une règle trop générale. Cela pose la question "comment définissez-vous le terme" simple ", en réalité".
3
et si vous êtes stupide, comment sauriez-vous si c'était simple?
Steven A. Lowe
C'est un bon, Steven :)
1
"C’est la raison pour laquelle vous ne pouvez pas devenir un bon programmeur simplement en connaissant le premier principe de la programmation", adorez-le.
1
@ Dima: vous avez raison, je veux dire que qualité et simplicité (du moins dans ce cas) sont indéfinissables, mais nous le savons quand nous le voyons, si nos yeux sont bien formés.
Adriano Varoli Piazza
18

L'optimisation prématurée est la racine de tout Mal. - Donald Knuth

Ryszard Szopa
la source
Que ce soit dans la mise en œuvre ou la conception.
16

Ne réinventez pas la roue.

Patrick Desjardins
la source
La bonne réponse à la question de savoir s'il faut ou non réinventer la roue est toujours "ça dépend". Donc, "ne pas réinventer la roue" ne va que très loin. Cela peut servir de bonne heuristique la plupart du temps, mais pas à chaque fois.
5
Certaines "roues" doivent être réinventées.
Dis ça à Dunlop. Il a inventé le pneu pneumatique. Si ce n'était pas pour lui, réinventer la roue, nous aurions une belle course cahoteuse.
Kibbee
3
Que diriez-vous: Ne réinventez la roue que si les avantages en valent la peine
e.James
16

Comprenez d'abord le problème!

OscarRyz
la source
Ah, enfin quelqu'un avec celui-ci. Tu peux embrasser, Yagni, essuie tout ce que tu veux. C'est inutile si vous programmez quelque chose pour rien.
@ e-satis: Oui, c'est ce que je pensais quand je répondais à cela pour la première fois. Je fais défiler pour toute la réponse et étonnamment personne n'a posté avant.
OscarRyz
Bonne réponse. Des heures et des heures sont perdues lorsque les programmeurs ne comprennent pas correctement toutes les exigences d'un problème.
Steve Wortham
Le problème est: comment savez-vous que vous comprenez le problème?
CamelCamelCamel
13

YAGNI - Vous n'en aurez pas besoin . L’idée de YAGNI est de programmer en fonction de vos besoins et non des caractéristiques potentielles. Le principe est qu’en vous limitant à ce que vous avez besoin de programmer, vous réduirez entre autres le fardeau du code, réduirez la complexité, éviterez les déformations des fonctionnalités et réduirez les restrictions sur ce qui peut être fait (et comment cela peut être fait) futur.

Je suppose que cela fonctionne en tandem avec la conception modulaire: les fonctionnalités futures peuvent être améliorées sans modifier le code existant.

Brian M. Hunt
la source
12

Savoir quand ne pas programmer.

ctrlShiftBryan
la source
Qu'est-ce que c'est censé vouloir dire?
Et c'est quand?
Parfois, vous devez aborder un problème d’utilisateur différemment - ne vous contentez pas de coder une solution.
Le jugement humain et la prise de décision font partie de tout; Parfois, il est inutile d'essayer d'automatiser le jugement.
S.Lott
1
Ce qu'il veut dire, c'est que de nombreux problèmes de programmation peuvent être résolus à moindre coût et plus rapidement en achetant des applications, des composants ou des bibliothèques standard.
Gordon Bell
11

Entrée de café, codage.

utilisateur9282
la source
3
+1 hmm plus comme "Coffee In, Code + beaucoup de pauses toilettes?" :) J'aime le café et le thé, je balance dans les deux sens ...
Darknight le
10

S'il n'a pas été testé, il est cassé.

Raz
la source
Je suis d'accord sur celui-là
7

Il existe deux manières de concevoir un logiciel: l’une est de simplifier les choses de manière évidente, mais l’autre est de compliquer les choses au point de compliquer les choses. La première méthode est bien plus difficile.

- Charles Antony Richard Hoare

Chris Vest
la source
6
  1. Distinguer cause à effet (travailler avec des ordinateurs)

  2. Distinguer les faits et les opinions (travailler avec des personnes)

  3. Aussi simple que possible, mais pas plus simple (design)

Michael Easter
la source
5

La programmation est un moyen et non une fin. Ou peut-être, "peut ne signifie pas devrait."

CrashCodes
la source
5
  1. Comprenez pourquoi le programme rendra quelqu'un heureux (sinon, pourquoi ne jouez-vous pas à l'extérieur avec tous les autres enfants?). (Cette personne peut être vous.)
  2. Développez un modèle conceptuel du domaine métier qui capture toute la complexité nécessaire, sans plus.
  3. Développez un modèle conceptuel de l' architecture logicielle qui capture toute la complexité nécessaire, sans plus.
  4. Gardez impitoyablement toute autre complexité.
Dov Wasserman
la source
bien dit! ne pouvait pas être plus d'accord
Antony
5

À mon avis, le principe le plus important est la réduction de la complexité par la création de bonnes abstractions .

Ceci comprend

  • comprendre le problème à résoudre,
  • concevoir une solution appropriée pour cela et
  • la mise en œuvre,
  • de préférence de manière à ce que le code soit compréhensible et maintenable,

mais aussi la détermination du point où il faut arrêter de créer des abstractions et se pencher sur les propriétés fondamentales des technologies de mise en œuvre (par exemple, système de base de données, langage de programmation) afin d’empêcher la création d’une complexité supplémentaire évitable.

mh
la source
4

Programme avec un public en tête. Par là, ne supposez pas que tout ce que vous écrivez ne sera pas lu et maintenu par vous ou par quelqu'un d'autre.

Un corollaire à cela: Prouvez que vous comprenez le problème que vous essayez de résoudre en nommant bien vos variables, fonctions et classes!

torial
la source
4

ça ne marche pas avant de l'avoir montré dans un test

Audun
la source
6
Ce n'est pas vrai, j'ai écrit des tonnes de code qui fonctionne et qui n'est pas testé! : D
1
"Je ne l'ai pas testé, j'ai seulement prouvé qu'il était correct" :)
Daniel Daranas
4

Pensez d'abord, codez plus tard.

Vous êtes loin d'être aussi intelligent que vous le pensez. Poser des questions. Apprenez à valoriser vos pairs.

Lors du débogage, la première réponse sera presque toujours fausse.

Le code que vous écrivez dans le but de le jeter tend à devenir la pierre angulaire de processus beaucoup plus vastes. Ne laissez jamais rien écrit au hasard.

Mike Hofer
la source
3

Tout problème peut être résolu avec une autre couche d'indirection.

Josué
la source
En fait, avoir trop de liens indirects est en soi un problème qui doit être identifié et résolu. Alors ..
résolu ... par une autre couche d'indirection! =)
Erik Forbes
Curieusement, c'est vrai. Regarde le printemps ...
3

Connaissez vos outils.

dmckee
la source
3

Principe: le logiciel est la capture de connaissances .

Conséquences: De nombreuses techniques de représentation des connaissances, toutes fondées sur l’ abstraction . Nous donne des couches, des niveaux, une encapsulation, une séparation des préoccupations.

De nombreuses techniques de représentation de procédure, toutes fondées sur Séquence , Choix , Répétition .

S.Lott
la source
3

Écrivez le code pour le prochain gars.

Gabriel Isenberg
la source
3

Écrivez toujours le code comme si la personne qui le conservera est un tueur en série psychotique qui sait où vous habitez

Aussi, ne pensez jamais que vous savez tout sur la programmation, continuez à apprendre

Amy
la source
2

Je me suis initié à la programmation en étudiant l’électronique numérique. J’imagine donc que les bases logiques de base (non, et, ou, xor, implique) étaient les premiers principes de la programmation.

Bill le lézard
la source
2

Tout est à propos de l'utilisateur.

Bryan Oakley
la source
2

Garbage in - Garbage Out Peu importe la qualité de l'interface utilisateur, si les données sont mauvaises.

HLGEM
la source
2

DRY, à peu près tout le reste en résulte. KISS est l’autre côté de l’équilibre: vous assurer de ne pas poursuivre l’élégance logicielle à un niveau insensé.

Quibblesome
la source
2

Commencez par la sortie et avancez.

mea
la source