Что имел в виду Алан Перлис относительно способов написания безошибочных программ? [закрыто]

29

Есть цитата Алана Дж. Перлиса, которая говорит:

Есть два способа написания безошибочных программ; только третий работает.

Я недавно услышал эту цитату от моего друга, и не смог понять более глубокое значение этого.

О чем здесь говорит Перлис?

ykombinator
источник
1
вы понимаете ошибку и в этой пародии, поскольку можно писать нетривиальные программы, которые не содержат ошибок, это просто требует дисциплины.
1
рекомендуемое чтение: Обсудите этот $ {blog}
gnat

Ответы:

41

Это означает, что действительно нет безошибочных программ. Глубокая цитата о способах избежать ошибок с самой ошибкой является пародией.

Джесси С. Слайсер
источник
3
Алан Перлис определенно умел говорить.
Фрэнк Шиарар
2
В этом значении цитат важна «пародия».
Адам Харт
60

Третьего пути нет.

Нет возможности писать безошибочные программы


источник
37

Я отвечу с другой цитатой ...

Странная игра. Единственный выигрышный ход - не играть.

;-)

Остин Салонен
источник
5
+1 для ссылки на военные игры!
Джейсон
Обязательная ссылка xkcd следующая: xkcd.com/601
Baelnorn
14

Как уже указывалось во многих других ответах, невозможно написать безошибочную программу .

Но я хотел бы отметить потенциальную мета-природу цитаты. По сути, это ошибка за пределами границ. В первом утверждении он определяет вселенную или «список», имеющий только две возможности или элементы. И все же во втором заявлении он ссылается на третье. Что абсурдно! Незаконно даже! Третий элемент, имеющий двухэлементную границу, сам по себе является ошибкой.

Действительно глубоко в том, что цитата способна продемонстрировать ту самую суть, на которую она ссылается.

Марк Канлас
источник
Есть способ доказать, что программа ведет себя так, как указано. Это используется, например, для ядерных установок ...
1
@ Thorbjørn Ravn Andersen, как указано, не означает, что он без ошибок.
CaffGeek
5

Это означает, что все нетривиальные программы будут иметь ошибки. Это просто забавный способ сказать, что нет способа написать безошибочную программу.

dsimcha
источник
5

Можно писать безошибочные программы, даже нетривиальные, и даже доказать их правильность. Рассмотрим, например, такие языки, как Coq, Epigram или Agda, где это делается.

Проблема остановки говорит о том, что это невозможно сделать для общей программы .

Тони Моррис
источник
Вернитесь дальше, к команде Дона Гуда в UT Austin, и к их работе в 1970-х и начале 1980-х годов в среде Gypsy Verification. Они продемонстрировали, что безошибочный код возможен, поставив проверенный безошибочный модулятор потока сообщений военно-морскому флоту. Набор приемочных испытаний был разработан совершенно другой группой. Когда MFM впервые увидел набор приемочных испытаний на приемочном тесте, он прошел без отклонений, отклонений или «да, но».
Джон Р. Штром
3

Это напоминает мне ботаническую рубашку, которую я видел: в мире есть 10 типов людей. Те, кто знает двоичный код, и те, кто не знает.

Это также может быть игрой на том факте, что иногда списки индексируются 0. $ var = array ('First', 'Second', 'Third'); И вы можете получить доступ к этому списку следующим образом: $ var [0] = 'First' $ var [1] = 'Second' $ var [2] = 'Third'

Таким образом, буквенный индекс массива 2 указывает на «третий» индекс.


источник
... и те, кто начинает индексирование с нуля
2

Это уже объясняется другими словами, но не так ясно, как мне кажется. Это просто означает, что вы попробуете оба пути, они будут иметь ошибки, и, наконец, вы исправите свои ошибки и получите безошибочную программу. Сравните с другой цитатой:

Единственный способ возникновения ошибок в программе - это поместить их туда автором. Другие механизмы не известны. Программы не могут обнаруживать ошибки, сидя рядом с другими ошибочными программами. - Харлан Миллс

(В качестве альтернативы вы могли бы прочитать это, как сказал Пьер (что, я думаю, натянуто). (Третий способ, которого нет в домене, работает.) Как я уже сказал, это растяжка, но это правда.

Марк С
источник
1

Это та же самая цитата, которую мой отец использует, чтобы сказать мне, когда я оправдываюсь. Поговорка имеет тенденцию звучать так: «В истории есть 3 стороны. Их сторона, Ваша сторона и правая / верная / правильная сторона».

Подводя это к контексту с разработкой (и будучи тестером программного обеспечения проф.), Я бы сказал, поскольку существует так много способов кодирования чего-либо, что имело бы смысл использовать «Есть 3 стороны кодирования. Ваш код, их код и Рефакторированный код. "

Я думаю, это потому, что программисты / разработчики склонны проводить рефакторинг после того, как продукт становится стабильным, что в основном слишком поздно, но в большинстве случаев рефакторинг проводится для того, чтобы улучшить то, что вы и ваш собеседник не так хорошо сделали в первую очередь.

Надеюсь это поможет.


источник
1

Технически говоря, я думаю, что вы могли бы написать нетривиальную программу без ошибок, но из-за проблемы остановки невозможно доказать, что она не содержит ошибок. Таким образом, нужно работать в предположении, что во всех программах есть ошибки, поскольку невозможно доказать обратное.

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

Обновление: вы можете доказать, что конкретный алгоритм будет возвращать правильные ответы, но это не то же самое, что доказывать, что он полностью правильный. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Тем не менее, моя точка зрения заключалась в том, что цитата относится к тому факту, что нужно предположить, что в программе всегда есть ошибки, и пытается объяснить, почему это так. http://en.wikipedia.org/wiki/Software_bug#Bug_management

Booji Boy
источник
1
Как сказал Тони Моррис, можно доказать, что конкретная программа верна. Невозможно написать программу, которая может вообще доказать, что любая программа, которая является правильной, является правильной.
Макс Стрини
-1

В качестве дополнительного понимания, «два пути» могут быть ссылкой на эту цитату Тони Хоара :

Существует два способа конструирования программного обеспечения: один из них заключается в том, чтобы сделать его настолько простым, чтобы в нем явно не было недостатков, а другой способ - сделать его настолько сложным, чтобы в нем не было явных недостатков. Первый способ гораздо сложнее. Это требует тех же навыков, преданности, проницательности и даже вдохновения, что и открытие простых физических законов, лежащих в основе сложных явлений природы.

Немного подумайте над этим, и вы увидите, что он говорит то же самое: если ваша часть программного обеспечения нетривиальна, в ней есть ошибки (но достаточно усложняют ее, и они не будут очевидными ошибками).

Doval
источник
это не отвечает на заданный вопрос
комнат
@gnat Я не вижу, как это не так - это прямо во втором параграфе. Возможно, формулировка была неясной, но когда я сказал «сказать то же самое», я имел в виду «сказать то же самое, что и Алан Перлис». То есть цитата Перлиса - скорее всего юмористическая пародия на слова Хоара.
Довал