O que Alan Perlis quis dizer com relação às maneiras de escrever programas sem erros? [fechadas]

29

Há uma citação de Alan J. Perlis que diz:

Existem duas maneiras de escrever programas sem erros; apenas o terceiro funciona.

Recentemente, ouvi essa citação do meu amigo e não consegui entender o significado mais profundo por trás dela.

Sobre o que Perlis está falando aqui?

ykombinator
fonte
11
você também percebe a falácia dessa paródia, pois é possível escrever programas não triviais que são livres de erros, isso requer disciplina.
11
Esse tipo de pergunta está sendo discutido em nosso site de meta-discussão .
11
leitura recomendada: discuta este $ {blog}
gnat

Respostas:

41

Isso significa que realmente não há programas sem erros. Uma citação profunda sobre maneiras de evitar erros com um erro em si é paródia.

Jesse C. Slicer
fonte
3
Alan Perlis certamente tinha jeito com as palavras.
precisa saber é o seguinte
2
É a "paródia" que é importante no significado desta citação.
Adam Harte
60

Não há terceira via.

Não há como gravar programas sem erros


fonte
37

Vou responder com outra citação ...

Um jogo estranho. O único movimento vencedor é não jogar.

;-)

Austin Salonen
fonte
5
+1 para referência de jogos de guerra!
5133 Jason
Link obrigatório xkcd obrigatório a seguir: xkcd.com/601
Baelnorn
14

Como muitas outras respostas já apontaram, não há como escrever um programa sem erros .

Mas o que eu gostaria de salientar é a meta natureza potencial da citação. É essencialmente um erro fora dos limites. Na primeira afirmação, ele define o universo ou "lista" tendo apenas duas possibilidades ou elementos. No entanto, na segunda declaração, ele faz referência a uma terceira. O que é absurdo! Ilegal mesmo! Um terceiro elemento, dado um limite de dois elementos, é um erro.

Verdadeiramente profundo, pois a citação é capaz de demonstrar a própria essência a que se refere.

Mark Canlas
fonte
Existe uma maneira de provar que um programa se comporta conforme especificado. Isso é por exemplo utilizada para instalações nucleares ...
11
@ Thorbjørn Ravn Andersen, conforme especificado, não significa que está livre de erros.
CaffGeek
5

Isso significa que todos os programas não triviais terão bugs. É apenas uma maneira engraçada de dizer que não há como escrever um programa sem erros.

dsimcha
fonte
5

É possível escrever programas sem erros, mesmo que não sejam triviais, e até provar que estão corretos. Considere, por exemplo, idiomas como Coq, Epigram ou Agda, onde isso é feito.

O problema da parada afirma que não é possível fazer isso no programa geral .

Tony Morris
fonte
Volte mais longe, para a equipe de Don Good na UT Austin, e seu trabalho nos anos 1970 e início dos anos 1980 com o Gypsy Verification Environment. Eles demonstraram que o código sem erros era possível, entregando um modulador de fluxo de mensagens comprovado e sem erros à Marinha. O conjunto de testes de aceitação foi desenvolvido por um grupo completamente diferente. Quando o MFM viu o conjunto de testes de aceitação, pela primeira vez, no Teste de Aceitação, ele passou, sem desvios, isenções ou "sim, mas" s.
John R. Strohm
3

Isso me lembra uma camisa nerd que eu vi: existem 10 tipos de pessoas no mundo. Aqueles que sabem binário e aqueles que não.

Também pode ser uma brincadeira com o fato de que às vezes as listas são 0 indexadas. $ var = array ('Primeiro', 'Segundo', 'Terceiro'); E você pode acessar esta lista da seguinte forma: $ var [0] = 'Primeiro' $ var [1] = 'Segundo' $ var [2] = 'Terceiro'

Portanto, o índice literal 2 da matriz aponta para o índice "Terceiro".


fonte
... e aqueles que começam a indexação em zero
2

Isso já é explicado em outras palavras, mas não tão claramente quanto eu acho que deveria ser. Simplesmente significa que você tentará nos dois sentidos, eles terão erros e, finalmente, você corrigirá seus erros e terá um programa sem erros. Compare com outra citação:

A única maneira de os erros ocorrerem em um programa é ser colocado lá pelo autor. Nenhum outro mecanismo é conhecido. Os programas não podem adquirir bugs sentados com outros programas de bugs. --Harlan Mills

(Como alternativa, você pode ler isso como Pierre disse (o que eu acho que é exagero). (A terceira maneira, que não existe no domínio, funciona.) Como eu disse, é exagero, mas é verdade.

Mark C
fonte
1

Esta é a mesma citação que meu pai usa para me dizer quando dou desculpas. O ditado tende a dizer assim: "Existem três lados de uma história. O lado deles, o seu lado e o lado certo / verdadeiro / correto".

Colocando isso em contexto com o desenvolvimento (e sendo um testador de software pelo prof.), Eu diria que, como existem muitas maneiras de codificar algo, faria sentido incluir "Há três lados na codificação. Seu código, o código deles e o código refatorado ".

Acho que isso ocorre porque os programadores / desenvolvedores tendem a refatorar uma vez que o produto está ficando estável, o que é muito tarde, mas na maioria das vezes o refator é feito para melhorar algo que você e seu amigo não fizeram tão bem em primeiro lugar.

Espero que isto ajude.


fonte
1

Eu acho que, tecnicamente falando, você pode escrever um programa não trivial e sem erros, mas devido ao Problema da Interrupção, é impossível provar que é livre de erros. Portanto, é preciso trabalhar com o pressuposto de que todos os programas possuem erros, pois é impossível provar o contrário.

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

Atualização: Você pode provar que um algoritmo específico retornará as respostas certas, mas isso não é a mesma coisa que provar que está totalmente correto. http://en.wikipedia.org/wiki/Correctness_(computer_science )

No entanto, meu argumento foi que a citação está se referindo ao fato de que é preciso assumir que um programa sempre possui bugs e tentar explicar por que esse é o caso. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Booji Boy
fonte
11
como Tony Morris disse, é possível provar que um determinado programa está correto. Não é possível escrever um programa que, em geral, possa provar que qualquer programa correto esteja correto.
Max Strini
-1

Como insight adicional, as "duas maneiras" podem ser uma referência a esta citação de Tony Hoare :

Existem duas maneiras de construir um design de software: uma maneira é tornar tão simples que obviamente não há deficiências, e a outra maneira é torná-lo tão complicado que não há deficiências óbvias. O primeiro método é muito mais difícil. Exige a mesma habilidade, devoção, discernimento e até inspiração que a descoberta das leis físicas simples subjacentes aos fenômenos complexos da natureza.

Medite um pouco e verá que ele está dizendo a mesma coisa: se o seu software não é trivial, ele possui bugs (mas complique o suficiente e eles não serão óbvios ).

Doval
fonte
isso não responde à pergunta feita
gnat
@gnat Eu não vejo como isso não acontece - está ali no segundo parágrafo. Talvez o texto não estivesse claro, mas quando eu disse "dizendo a mesma coisa", quis dizer "dizendo a mesma coisa que Alan Perlis". Ou seja, a citação de Perlis é provavelmente uma paródia humorística da de Hoare.
Doval