it-swarm-fr.com

Qu'est-ce que Alan Perlis entend sur les moyens d'écrire des programmes sans erreur?

Il y a une citation par Alan J. Perlis qui dit:

Il existe deux façons d'écrire des programmes sans erreur; seul le troisième fonctionne.

J'ai récemment entendu cette citation de mon ami et je n'ai pas incapable de comprendre le sens plus profond de cela.

Qu'est-ce que Perlis parle ici?

29
ykombinator

Cela signifie qu'il y a vraiment non programmes sans erreur. Une citation profonde sur les moyens d'éviter les erreurs avec une erreur elle-même est la parodie.

41
Jesse C. Slicer

Il n'y a pas de troisième voie.

Il n'y a aucun moyen d'écrire des programmes sans erreur

60
user2567

Je vais répondre avec une autre citation ...

Un jeu étrange. Le seul mouvement gagnant n'est pas de jouer.

;-)

37
Austin Salonen

Autant d'autres réponses ont déjà souligné, Il n'y a aucun moyen d'écrire un programme sans erreur.

Mais ce que j'aimerais souligner, c'est la nature potentielle de la citation. C'est essentiellement une erreur hors limites. Dans la première déclaration, il définit l'univers ou la "liste" ayant seulement deux possibilités ou éléments. Pourtant, dans la deuxième déclaration, il fait référence à un tiers. Qui est absurde! Illégal même! Un troisième élément donné qu'une limite de deux éléments est elle-même une erreur.

Vraiment profonde en ce que la citation est capable de démontrer l'essence même à laquelle elle se réfère.

14
Mark Canlas

Il est possible d'écrire des programmes sans erreur, même non triviaux et même leur prouver correctement. Considérez par exemple, des langues comme Coq, Epigram ou Agda où cela est fait.

Le Halte Problème stipule qu'il n'est pas possible de le faire pour le programme général .

5
Tony Morris

Cela signifie que tous les programmes non triviaux auront des bugs. C'est juste une façon amusante de dire qu'il n'y a aucun moyen d'écrire un programme sans erreur.

5
dsimcha

Cela me rappelle une chemise nerd que j'ai vue: il y a 10 types de personnes dans le monde. Ceux qui connaissent binaires et ceux qui ne le font pas.

Cela pourrait également être un jeu sur le fait que parfois les listes sont 0 indexées. $ var = tableau ("premier", "deuxième", "troisième"); Et vous pouvez accéder à cette liste comme telle: $ var [0] = 'premier' $ var [1] = 'Deuxième' $ var [2] = 'Troisième'

Ainsi, l'index de la matrice littérale 2 pointe vers le "troisième" index.

3
jsjoy

Ceci est déjà expliqué en d'autres termes, mais pas aussi clairement que je pense que cela devrait être. Cela signifie simplement que vous allez essayer les deux sens, ils auront des erreurs et enfin que vous réparerez vos bugs et d'avoir un programme sans erreur. Comparez avec une autre citation:

Le seul moyen des erreurs de se produire dans un programme est en train d'y mettre l'auteur. Aucun autre mécanisme n'est connu. Les programmes ne peuvent pas acquérir des bugs en siégeant avec d'autres programmes de buggy. --HARLAN MILLS

(Alternativement, vous pourriez lire ceci comme dit Pierre (que je pense est un étirement). (La troisième voie, qui n'existe pas dans le domaine, fonctionne.) Comme je l'ai dit, c'est un étirement, mais vrai.

2
Mark C

Je pense, techniquement parlant, que vous pourriez écrire un programme sans erreur sans erreur, mais en raison du problème d'arrêt, il est impossible de prouver que c'est sans erreur. Il faut donc travailler sous l'hypothèse que tous les programmes ont des bugs, car il est impossible de prouver le contraire.

http://fr.wikipedia.org/wiki/halting_problème

Mise à jour: Vous pouvez prouver qu'un algorithme particulier retournera les bonnes réponses, mais ce n'est pas la même chose que prouvant que c'est totalement correct. http://fr.wikipedia.org/wiki/correcness_ (ordinateur_science )

Cependant, mon point de vue était que la citation fait référence au fait qu'il faut assumer un programme a toujours des bugs et d'essayer d'expliquer pourquoi c'est le cas. http://fr.wikipedia.org/wiki/software_bug#bug_management

1
Booji Boy

C'est la même citation que mon père utilise pour me dire quand je fais des excuses. Le dicton a tendance à aller comme: "Il y a 3 côtés à une histoire. Leur côté, votre côté et le côté droit/vrai/correct".

Mettre cela dans le contexte avec le développement (et être un testeur de logiciel de professeur), je dirais que, car il y a tellement de façons de coder quelque chose qu'il aurait logique d'aller avec "il y a 3 côtés au codage. Votre code, leur code, et le code refactored. "

Je pense que c'est parce que les programmeurs/développeurs ont tendance à refroidir une fois que le produit devient stable, ce qui est principalement trop tard, mais la plupart du temps, le refacteur est fait pour améliorer quelque chose que vous et Buddy ne l'a pas bien fait en premier lieu.

J'espère que cela t'aides.

1
NJK