Was meinte Alan Perlis mit der Möglichkeit, fehlerfreie Programme zu schreiben? [geschlossen]

29

Es gibt ein Zitat von Alan J. Perlis , das besagt:

Es gibt zwei Möglichkeiten, fehlerfreie Programme zu schreiben. nur der dritte funktioniert.

Ich habe dieses Zitat kürzlich von meinem Freund gehört und konnte die tiefere Bedeutung dahinter nicht verstehen.

Worüber spricht Perlis hier?

ykombinator
quelle
1
Sie erkennen den Irrtum auch in dieser Parodie, da es möglich ist, nicht-triviale Programme zu schreiben, die fehlerfrei sind. Es erfordert nur Disziplin.
1
Diese Art von Frage wird jetzt auf unserer Metadiskussionsseite diskutiert .
1
Empfohlene Lektüre: Diskutiere diesen $ {blog}
Mücke

Antworten:

41

Es gibt also wirklich keine fehlerfreien Programme. Ein tiefgreifendes Zitat über Möglichkeiten, Fehler mit einem Fehler selbst zu vermeiden, ist Parodie.

Jesse C. Slicer
quelle
3
Alan Perlis hatte sicherlich ein Gespür für Worte.
Frank Shearar
2
Es ist die "Parodie", die in dieser zitierten Bedeutung wichtig ist.
Adam Harte
60

Es gibt keinen dritten Weg.

Es gibt keine Möglichkeit, fehlerfreie Programme zu schreiben


quelle
37

Ich werde mit einem anderen Zitat antworten ...

Ein komisches Spiel. Der einzige Gewinnzug ist, nicht zu spielen.

;-)

Austin Salonen
quelle
5
+1 für Kriegsspiele Referenz!
Jason
Obligatorischer xkcd-Link folgt: xkcd.com/601
Baelnorn
14

Wie viele andere Antworten bereits gezeigt haben, gibt es keine Möglichkeit, ein fehlerfreies Programm zu schreiben .

Was ich jedoch hervorheben möchte, ist die potenzielle Metanatur des Zitats. Es ist im Wesentlichen ein Fehler außerhalb der Grenzen. In der ersten Aussage definiert er das Universum oder die "Liste" mit nur zwei Möglichkeiten oder Elementen. In der zweiten Aussage verweist er jedoch auf eine dritte. Welches ist absurd! Sogar illegal! Ein drittes Element mit einer Grenze von zwei Elementen ist selbst ein Fehler.

Wirklich tiefgreifend, dass das Zitat das Wesentliche, auf das es sich bezieht, demonstrieren kann.

Mark Canlas
quelle
Es gibt eine Möglichkeit zu beweisen, dass sich ein Programm wie angegeben verhält. Das wird zB für kerntechnische Anlagen genutzt ...
1
@ Thorbjørn Ravn Andersen, wie angegeben, bedeutet nicht, dass es fehlerfrei ist.
CaffGeek
5

Dies bedeutet, dass alle nicht trivialen Programme Fehler aufweisen. Es ist nur eine lustige Art zu sagen, dass es keine Möglichkeit gibt, ein fehlerfreies Programm zu schreiben.

dsimcha
quelle
5

Es ist möglich, fehlerfreie Programme zu schreiben, auch nicht triviale, und diese sogar als richtig zu beweisen. Betrachten Sie zum Beispiel Sprachen wie Coq, Epigram oder Agda, in denen dies geschieht.

Das Problem des Anhaltens besagt, dass dies für das allgemeine Programm nicht möglich ist .

Tony Morris
quelle
Gehen Sie weiter zurück zu Don Good's Team an der UT Austin und ihrer Arbeit in den 1970er und frühen 1980er Jahren mit der Gypsy Verification Environment. Sie zeigten, dass fehlerfreier Code möglich ist, indem ein bewährter fehlerfreier Nachrichtenfluss-Modulator an die Marine geliefert wurde. Die Abnahmetestsuite wurde von einer völlig anderen Gruppe entwickelt. Als die MFM die Abnahmetestsuite zum ersten Mal beim Abnahmetest sah, bestand sie ohne Abweichungen, Verzichtserklärungen oder "Ja, aber".
John R. Strohm
3

Das erinnert mich an ein Nerd-Shirt, das ich gesehen habe: Es gibt 10 Arten von Menschen auf der Welt. Diejenigen, die binär wissen und diejenigen, die nicht.

Es könnte auch ein Spiel auf die Tatsache sein, dass Listen manchmal mit 0 indiziert sind. $ var = array ('Erste', 'Zweite', 'Dritte'); Und Sie können auf diese Liste als solche zugreifen: $ var [0] = 'Erste' $ var [1] = 'Zweite' $ var [2] = 'Dritte'

Der Literal-Array-Index 2 zeigt also auf den "Dritten" -Index.


quelle
... und diejenigen, die mit der Indizierung bei Null beginnen
2

Dies wird bereits mit anderen Worten erklärt, aber nicht so klar, wie ich es für richtig halte. Es bedeutet einfach, dass Sie beide Möglichkeiten ausprobieren werden, sie werden Fehler haben, und schließlich werden Sie Ihre Fehler beheben und ein fehlerfreies Programm haben. Vergleichen Sie mit einem anderen Zitat:

Die einzige Möglichkeit, dass Fehler in einem Programm auftreten, besteht darin, dass sie vom Autor dort abgelegt werden. Andere Mechanismen sind nicht bekannt. Programme können keine Bugs bekommen, wenn sie mit anderen Buggy-Programmen zusammen sitzen. - Harlan Mills

(Alternativ können Sie dies lesen, wie Pierre sagte (was ich für eine Strecke halte). (Der dritte Weg, der in der Domäne nicht existiert, funktioniert.) Wie ich sagte, es ist eine Strecke, aber wahr.

Mark C
quelle
1

Dies ist das gleiche Zitat, das mein Vater verwendet, um mir zu sagen, wenn ich Ausreden mache. Das Sprichwort lautet: "Eine Geschichte hat drei Seiten. Ihre Seite, Ihre Seite und die richtige / wahre / richtige Seite."

Wenn ich dies mit der Entwicklung in Zusammenhang bringe (und ein Software-Tester von Prof. Bin), würde ich sagen, da es so viele Möglichkeiten gibt, etwas zu codieren, wäre es sinnvoll, mit "Das Codieren hat drei Seiten. Ihr Code, ihr Code und der überarbeitete Code. "

Ich denke, das liegt daran, dass Programmierer / Entwickler dazu neigen, das Produkt umzugestalten, sobald es stabil ist, was meistens zu spät ist. Meistens wird der Umzug jedoch durchgeführt, um etwas zu verbessern, was Sie und Ihr Kumpel anfangs nicht so gut gemacht haben.

Hoffe das hilft.


quelle
1

Ich denke, technisch gesehen könnte man ein fehlerfreies, nicht triviales Programm schreiben, aber aufgrund des Halteproblems ist es unmöglich zu beweisen, dass es fehlerfrei ist. Man muss also davon ausgehen, dass alle Programme Fehler aufweisen, da es unmöglich ist, das Gegenteil zu beweisen.

http://en.wikipedia.org/wiki/Halting_problem

Update: Sie können nachweisen, dass ein bestimmter Algorithmus die richtigen Antworten liefert. Dies ist jedoch nicht das Gleiche wie der Nachweis, dass er vollständig korrekt ist. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Mein Punkt war jedoch, dass sich das Zitat auf die Tatsache bezieht, dass man davon ausgehen muss, dass ein Programm immer Fehler aufweist und zu erklären versucht, warum dies der Fall ist. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Booji-Junge
quelle
1
Wie Tony Morris sagte, ist es möglich zu beweisen, dass ein bestimmtes Programm korrekt ist. Es ist nicht möglich, ein Programm zu schreiben, das im Allgemeinen beweisen kann , dass ein korrektes Programm korrekt ist.
Max Strini
-1

Als zusätzliche Einsicht könnten die "zwei Wege" ein Hinweis auf dieses Zitat von Tony Hoare sein :

Es gibt zwei Möglichkeiten, ein Software-Design zu erstellen: Eine Möglichkeit besteht darin, es so einfach zu gestalten, dass es offensichtlich keine Mängel gibt, und die andere darin, es so kompliziert zu gestalten, dass es keine offensichtlichen Mängel gibt. Die erste Methode ist weitaus schwieriger. Es erfordert die gleiche Fähigkeit, Hingabe, Einsicht und sogar Inspiration wie die Entdeckung der einfachen physikalischen Gesetze, die den komplexen Phänomenen der Natur zugrunde liegen.

Meditiere ein wenig darüber und du wirst sehen, dass er dasselbe sagt: Wenn deine Software nicht trivial ist, hat sie Fehler (aber kompliziere sie genug und sie werden keine offensichtlichen Fehler sein).

Doval
quelle
Dies beantwortet nicht die gestellte Frage
Mücke
@gnat Ich verstehe nicht, wie es nicht funktioniert - es steht genau dort im zweiten Absatz. Vielleicht war der Wortlaut nicht klar, aber als ich "dasselbe sagen" sagte, meinte ich "dasselbe sagen wie Alan Perlis". Das heißt, Perlis 'Zitat ist wahrscheinlich eine humorvolle Parodie auf Hoares.
Doval