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.


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

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.


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.


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.


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.


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


Que ce soit dans la mise en œuvre ou la conception.

16

Ne réinventez pas la roue.


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!


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.


12

Savoir quand ne pas programmer.


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.


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é.


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


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)


5

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


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é.

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.


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!


4

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


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.


3

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


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

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 .



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


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.



2

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


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é.


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.