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?
bug
quotations
ykombinator
fonte
fonte
Respostas:
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.
fonte
Não há terceira via.
fonte
Vou responder com outra citação ...
;-)
fonte
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.
fonte
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.
fonte
É 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 .
fonte
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
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:
(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.
fonte
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
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
fonte
Como insight adicional, as "duas maneiras" podem ser uma referência a esta citação de Tony Hoare :
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 ).
fonte