Есть цитата Алана Дж. Перлиса, которая говорит:
Есть два способа написания безошибочных программ; только третий работает.
Я недавно услышал эту цитату от моего друга, и не смог понять более глубокое значение этого.
О чем здесь говорит Перлис?
Есть цитата Алана Дж. Перлиса, которая говорит:
Есть два способа написания безошибочных программ; только третий работает.
Я недавно услышал эту цитату от моего друга, и не смог понять более глубокое значение этого.
О чем здесь говорит Перлис?
Ответы:
Это означает, что действительно нет безошибочных программ. Глубокая цитата о способах избежать ошибок с самой ошибкой является пародией.
Третьего пути нет.
Нет возможности писать безошибочные программы
Я отвечу с другой цитатой ...
Странная игра. Единственный выигрышный ход - не играть.
;-)
Как уже указывалось во многих других ответах, невозможно написать безошибочную программу .
Но я хотел бы отметить потенциальную мета-природу цитаты. По сути, это ошибка за пределами границ. В первом утверждении он определяет вселенную или «список», имеющий только две возможности или элементы. И все же во втором заявлении он ссылается на третье. Что абсурдно! Незаконно даже! Третий элемент, имеющий двухэлементную границу, сам по себе является ошибкой.
Действительно глубоко в том, что цитата способна продемонстрировать ту самую суть, на которую она ссылается.
Можно писать безошибочные программы, даже нетривиальные, и даже доказать их правильность. Рассмотрим, например, такие языки, как Coq, Epigram или Agda, где это делается.
Проблема остановки говорит о том, что это невозможно сделать для общей программы .
Это напоминает мне ботаническую рубашку, которую я видел: в мире есть 10 типов людей. Те, кто знает двоичный код, и те, кто не знает.
Это также может быть игрой на том факте, что иногда списки индексируются 0. $ var = array ('First', 'Second', 'Third'); И вы можете получить доступ к этому списку следующим образом: $ var [0] = 'First' $ var [1] = 'Second' $ var [2] = 'Third'
Таким образом, буквенный индекс массива 2 указывает на «третий» индекс.
Это уже объясняется другими словами, но не так ясно, как мне кажется. Это просто означает, что вы попробуете оба пути, они будут иметь ошибки, и, наконец, вы исправите свои ошибки и получите безошибочную программу. Сравните с другой цитатой:
Единственный способ возникновения ошибок в программе - это поместить их туда автором. Другие механизмы не известны. Программы не могут обнаруживать ошибки, сидя рядом с другими ошибочными программами. - Харлан Миллс
(В качестве альтернативы вы могли бы прочитать это, как сказал Пьер (что, я думаю, натянуто). (Третий способ, которого нет в домене, работает.) Как я уже сказал, это растяжка, но это правда.
Это та же самая цитата, которую мой отец использует, чтобы сказать мне, когда я оправдываюсь. Поговорка имеет тенденцию звучать так: «В истории есть 3 стороны. Их сторона, Ваша сторона и правая / верная / правильная сторона».
Подводя это к контексту с разработкой (и будучи тестером программного обеспечения проф.), Я бы сказал, поскольку существует так много способов кодирования чего-либо, что имело бы смысл использовать «Есть 3 стороны кодирования. Ваш код, их код и Рефакторированный код. "
Я думаю, это потому, что программисты / разработчики склонны проводить рефакторинг после того, как продукт становится стабильным, что в основном слишком поздно, но в большинстве случаев рефакторинг проводится для того, чтобы улучшить то, что вы и ваш собеседник не так хорошо сделали в первую очередь.
Надеюсь это поможет.
Технически говоря, я думаю, что вы могли бы написать нетривиальную программу без ошибок, но из-за проблемы остановки невозможно доказать, что она не содержит ошибок. Таким образом, нужно работать в предположении, что во всех программах есть ошибки, поскольку невозможно доказать обратное.
http://en.wikipedia.org/wiki/Halting_problem
Обновление: вы можете доказать, что конкретный алгоритм будет возвращать правильные ответы, но это не то же самое, что доказывать, что он полностью правильный. http://en.wikipedia.org/wiki/Correctness_(computer_science )
Тем не менее, моя точка зрения заключалась в том, что цитата относится к тому факту, что нужно предположить, что в программе всегда есть ошибки, и пытается объяснить, почему это так. http://en.wikipedia.org/wiki/Software_bug#Bug_management
В качестве дополнительного понимания, «два пути» могут быть ссылкой на эту цитату Тони Хоара :
Существует два способа конструирования программного обеспечения: один из них заключается в том, чтобы сделать его настолько простым, чтобы в нем явно не было недостатков, а другой способ - сделать его настолько сложным, чтобы в нем не было явных недостатков. Первый способ гораздо сложнее. Это требует тех же навыков, преданности, проницательности и даже вдохновения, что и открытие простых физических законов, лежащих в основе сложных явлений природы.
Немного подумайте над этим, и вы увидите, что он говорит то же самое: если ваша часть программного обеспечения нетривиальна, в ней есть ошибки (но достаточно усложняют ее, и они не будут очевидными ошибками).