Co Alan Perlis miał na myśli, mówiąc o sposobach pisania programów bezbłędnych? [Zamknięte]

29

Jest cytat Alana J. Perlisa, który mówi:

Istnieją dwa sposoby pisania programów bezbłędnych; działa tylko trzeci.

Niedawno usłyszałem ten cytat od mojego przyjaciela i nie byłem w stanie zrozumieć głębszego znaczenia tego słowa.

O czym tutaj mówi Perlis?

ykombinator
źródło
1
zdajesz sobie również sprawę z błędności tej parodii, ponieważ możliwe jest pisanie nietrywialnych programów, które są wolne od błędów, po prostu wymaga dyscypliny.
1
Tego rodzaju pytania są obecnie omawiane na naszej stronie z meta-dyskusją .
1
zalecana lektura: Porozmawiaj o tym {blog}
gnat

Odpowiedzi:

41

Oznacza to, że tak naprawdę nie ma żadnych programów wolnych od błędów. Głębokim cytatem o sposobach uniknięcia błędów z samym błędem jest parodia.

Jesse C. Slicer
źródło
3
Alan Perlis z pewnością miał sposób na słowa.
Frank Shearar,
2
To „parodia” jest ważna w tym znaczeniu cytatów.
Adam Harte,
60

Nie ma trzeciej drogi.

Nie ma sposobu na pisanie programów bezbłędnych


źródło
37

Odpowiem innym cytatem ...

Dziwna gra. Jedynym zwycięskim ruchem jest nie grać.

;-)

Austin Salonen
źródło
5
+1 za odniesienie do gier wojennych!
Jason
Obowiązkowe łącze xkcd następujące: xkcd.com/601
Baelnorn,
14

Jak już wskazano wiele innych odpowiedzi, nie ma sposobu na napisanie programu bezbłędnego .

Chciałbym jednak zwrócić uwagę na potencjalną meta-naturę cytatu. Jest to zasadniczo błąd poza zakresem. W pierwszym stwierdzeniu definiuje wszechświat lub „listę” mającą tylko dwie możliwości lub elementy. Jednak w drugim oświadczeniu odwołuje się do trzeciego. Co jest absurdalne! Nawet nielegalne! Trzeci element mający granicę dwóch elementów sam w sobie jest błędem.

Prawdziwie głęboki w tym, że cytat jest w stanie pokazać samą istotę, do której się odnosi.

Mark Canlas
źródło
Istnieje sposób na udowodnienie, że program zachowuje się tak, jak określono. Jest to wykorzystywane np. Do obiektów jądrowych ...
1
@ Thorbjørn Ravn Andersen, jak podano, nie oznacza, że ​​jest wolny od błędów.
CaffGeek,
5

Oznacza to, że wszystkie nietrywialne programy będą miały błędy. To po prostu zabawny sposób powiedzenia, że ​​nie ma sposobu na napisanie programu bezbłędnego.

dsimcha
źródło
5

Możliwe jest pisanie programów bezbłędnych, nawet nietrywialnych, a nawet ich poprawność. Rozważmy na przykład takie języki, jak Coq, Epigram lub Agda.

Zatrzymanie problemem stwierdza, że nie jest możliwe, aby zrobić to dla ogólnego programu .

Tony Morris
źródło
Wróć dalej, do zespołu Dona Gooda w UT Austin i ich pracy w latach 70. i na początku 80. w Gypsy Verification Environment. Wykazali, że bezbłędny kod jest możliwy, dostarczając sprawdzony bezbłędny modulator przepływu komunikatów do marynarki wojennej. Zestaw testów akceptacyjnych został opracowany przez zupełnie inną grupę. Kiedy MFM zobaczył pakiet testów akceptacyjnych, po raz pierwszy podczas testu akceptacji, przeszedł bez żadnych odchyleń, zwolnień lub „tak, ale”.
John R. Strohm
3

To przypomina mi nerdowską koszulę, którą widziałem: na świecie jest 10 rodzajów ludzi. Ci, którzy znają binarny, a ci, którzy nie.

Może to być także gra polegająca na tym, że czasami listy są indeksowane 0. $ var = array („First”, „Second”, „Third”); I możesz uzyskać dostęp do tej listy jako takiej: $ var [0] = 'First' $ var [1] = 'Second' $ var [2] = 'Third'

Tak więc dosłowny indeks tablicy 2 wskazuje na indeks „Trzeci”.


źródło
... a ci, którzy zaczynają indeksować od zera
2

Jest to już wyjaśnione innymi słowy, ale nie tak jasno, jak myślę, że powinno być. Oznacza to po prostu, że spróbujesz w obie strony, będą miały błędy, a na koniec naprawisz błędy i będziesz mieć program bezbłędny. Porównaj z innym cytatem:

Jedynym sposobem na wystąpienie błędów w programie jest umieszczenie ich przez autora. Żadne inne mechanizmy nie są znane. Programy nie mogą uzyskać błędów, siedząc z innymi błędnymi programami. - Harlan Mills

(Ewentualnie możesz to przeczytać, jak powiedział Pierre (co uważam za odcinek). (Trzeci sposób, który nie istnieje w domenie, działa.) Tak jak powiedziałem, jest to odcinek, ale prawda.

Mark C.
źródło
1

To ten sam cytat, za pomocą którego mój tata mówi mi, kiedy robię wymówki. Powiedzenie zwykle brzmi: „Historia ma 3 strony. Ich strona, Twoja strona i prawa / prawdziwa / poprawna strona”.

Umieszczając to w kontekście rozwoju (i będąc testerem oprogramowania przez prof.), Powiedziałbym, ponieważ istnieje tak wiele sposobów na kodowanie czegoś, co miałoby sens, mówiąc: „Istnieją trzy strony kodowania. Twój kod, ich kod i Refaktoryzowany kod ”.

Myślę, że dzieje się tak, ponieważ programiści / programiści mają tendencję do refaktoryzacji, gdy produkt staje się stabilny, co jest w większości za późno, ale przez większość czasu refaktor jest robiony w celu poprawy czegoś, czego ty i kolega nie zrobili tak dobrze w pierwszej kolejności.

Mam nadzieję że to pomoże.


źródło
1

Myślę, technicznie rzecz biorąc, że można napisać bezbłędny nietrywialny program, ale z powodu problemu zatrzymania nie można udowodnić, że jest wolny od błędów. Tak więc należy pracować przy założeniu, że wszystkie programy zawierają błędy, ponieważ nie można udowodnić inaczej.

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

Aktualizacja: możesz udowodnić, że określony algorytm zwróci prawidłowe odpowiedzi, ale to nie to samo, co udowodnienie, że jest całkowicie poprawny. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Chodzi mi jednak o to, że cytat odnosi się do faktu, że należy założyć, że program zawsze zawiera błędy i próbuje wyjaśnić, dlaczego tak jest. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Booji Boy
źródło
1
jak powiedział Tony Morris, można udowodnić, że dany program jest poprawny. Nie jest możliwe napisanie programu, który ogólnie może udowodnić, że każdy poprawny program jest poprawny.
Max Strini,
-1

Jako dodatkowy wgląd, „dwa sposoby” mogą odnosić się do cytatu Tony'ego Hoare'a :

Istnieją dwa sposoby konstruowania projektu oprogramowania: Jednym ze sposobów jest uczynienie go tak prostym, aby oczywiście brakowało braków, a drugim sposobem jest uczynienie go tak skomplikowanym, aby nie było oczywistych braków. Pierwsza metoda jest znacznie trudniejsza. Wymaga takich samych umiejętności, poświęcenia, wglądu, a nawet inspiracji, jak odkrycie prostych praw fizycznych, które leżą u podstaw złożonych zjawisk natury.

Zastanów się nad tym trochę, a zobaczysz, że mówi to samo: jeśli twoje oprogramowanie nie jest trywialne, zawiera błędy (ale komplikuj je wystarczająco i nie będą to oczywiste błędy).

Doval
źródło
to nie odpowiada na zadane pytanie
komara
@gnat Nie rozumiem, jak to się nie dzieje - znajduje się właśnie w drugim akapicie. Być może sformułowanie nie było jasne, ale kiedy powiedziałem „mówiąc to samo”, miałem na myśli „mówiąc to samo co Alan Perlis”. To znaczy, cytat Perlisa jest prawdopodobnie humorystyczną parodią Hoare'a.
Doval