ti-enxame.com

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

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?

29
ykombinator

Significa que existem realmente no programas sem erros. Uma citação profunda sobre maneiras de evitar erros com um erro em si é paródia.

41
Jesse C. Slicer

Não existe uma terceira via.

Não há como gravar programas sem erros

60
user2567

Vou responder com outra citação ...

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

;-)

37
Austin Salonen

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

Mas o que eu gostaria de destacar é 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 é um 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.

14
Mark Canlas

É 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 de parada afirma que não é possível fazer isso no programa geral .

5
Tony Morris

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.

5
dsimcha

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

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 como tal: $ var [0] = 'Primeiro' $ var [1] = 'Segundo' $ var [2] = 'Terceiro'

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

3
jsjoy

Isso já é explicado em outras palavras, mas não tão claramente quanto eu acho que deveria ser. Significa simplesmente 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 é exagerado). (A terceira maneira, que não existe no domínio, funciona.) Como eu disse, é exagerado, mas é verdade.

2
Mark C

Penso que, tecnicamente falando, você pode escrever um programa não trivial e sem erros, mas devido ao Problema da Parada é impossível provar que é livre de erros. Portanto, é preciso trabalhar com o pressuposto de que todos os programas possuem bugs, 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 corretas, mas isso não é o mesmo 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 tem bugs e tentar explicar por que esse é o caso. http://en.wikipedia.org/wiki/Software_bug#Bug_management

1
Booji Boy

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 "Existem três lados da codificação. Seu código, o código deles e o código refatorado ".

Eu acho que isso ocorre porque os programadores/desenvolvedores tendem a refatorar quando 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.

1
NJK