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


29

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

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

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

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


1
вы понимаете ошибку и в этой пародии, поскольку можно писать нетривиальные программы, которые не содержат ошибок, это просто требует дисциплины.


1
рекомендуемое чтение: Обсудите этот $ {blog}
— gnat

Ответы:


41

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


3
Алан Перлис определенно умел говорить.
— Фрэнк Шиарар

2
В этом значении цитат важна «пародия».
— Адам Харт

60

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

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



14

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

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

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


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

1
@ Thorbjørn Ravn Andersen, как указано, не означает, что он без ошибок.
— CaffGeek

5

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


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


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

-1

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

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

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


это не отвечает на заданный вопрос
— комнат

@gnat Я не вижу, как это не так - это прямо во втором параграфе. Возможно, формулировка была неясной, но когда я сказал «сказать то же самое», я имел в виду «сказать то же самое, что и Алан Перлис». То есть цитата Перлиса - скорее всего юмористическая пародия на слова Хоара.
— Довал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.