Методы Кристобаля Хунты: различия между версиями

==Первый способ: заранее сделать все правильно==
Допустим, что вам ставится задача построить программу, которая будет проверять,
 
зациклятся ли
программы, создаваемые при помощи новой системы программирования для каких-то
 
частных приложений (например,
нового языка скриптов для собачьих ошейников).
Тогда нужно прежде всего понять, какого же сорта программы будут писать на данной
 
системе, поскольку,
как говорилось в прошлой статье, поставленная задача в общем случае неразрешима.
 
Если программы не слишком сложные, достаточно всего-навсего выбросить из
 
создаваемого мини-языка программирования
циклы <b><tt>while</tt></b> и рекурсивные процедуры (которые, если явно не
 
протестовать, системные программисты
ради общности и крутизны обязательно вставят, поскольку «иначе система не будет
 
универсальной»).
Тогда всякая программа будет заканчивать работу (просто по построению не даём мы
 
ей возможности
зациклиться!). Если системщики вопят, а начальство смотрит на них как на
 
полубогов, то заставьте их хотя
бы выдавать для программистов длинные предупреждения типа:
 
<tt>Использование цикла <b><tt>while</tt></b> может привести программу к зацикливанию. Уверены ли вы в том, что нужно использовать цикл <b><tt>while</tt></b>?</tt> (ответ <tt>No</tt> по умолчанию)
 
зацикливанию. Уверены ли вы в
том, что нужно использовать цикл <b><tt>while</tt></b>?</tt> (ответ <tt>No</tt> по
 
умолчанию)
 
 
А после ответа <tt>Yes</tt> вдобавок ещё (в лучших традициях игр, из которых Вам
 
хочется выйти побыстрее,
чтобы шеф, либо мама, либо преподаватель не застукали, а вам задают кучу
 
вопросов):
 
<tt>В большинстве случаев то, что может сделать цикл <b><tt>while</tt></b>, может
том,сделать чтои нужноцикл <b><tt>for</tt></b>. Не хотите ли Вы использовать цикл <b><tt>whilefor</tt></b>?</tt> (ответ <tt>NoYes</tt> по умолчанию)
 
сделать и цикл
<b><tt>for</tt></b>. Не хотите ли Вы использовать цикл
 
\textbf{\textsf{for}}?</tt> (ответ
<tt>Yes</tt> по умолчанию)
 
И как финальный аккорд нечто типа:
 
<tt>ОК. Ваша программа помечена как не сертифицируемая на корректность.<br>Желаем успехов.</tt>
Желаем успехов.</tt>
 
Приведённое решение является частным случаем трёх общих принципов.
Если нельзя решить задачу в полном объёме,
разберитесь, что же на самом деле нужно, и решите частную задачу.
Если задачу можно решить в полном объёме, тем не менее подумайте, какого частного
 
случая на самом
деле достаточно, и тогда Ваше решение станет намного лучше.\footnote{Данный
принцип <b> нельзя применять на практике традиционных олимпиад по программированию</b>. Там задачу обязательно нужно решать в полном объёме,
 
принцип <b> нельзя применять
на практике традиционных олимпиад по программированию</b>. Там задачу обязательно
 
нужно решать в полном объёме,
так, чтобы она работала при всех значениях допустимых параметров. Это лишь один из
многих случаев,когда практика олимпиад приводит к развитию навыков, которые не просто бесполезны, а прямо вредны для
 
многих случаев,
когда практика олимпиад приводит к развитию навыков, которые не просто бесполезны,
 
а прямо вредны для
последующей практической деятельности специалиста.}
 
 
Если нечто нужно гарантировать для решения, лучший способ &mdash; обеспечить это с
самого начала, ещё в ходе построения программы. Потом даже проверить будет трудно, а если ещё вдобавок выяснится, что требование нарушено, то переделывать будет ещё труднее, чем писать хорошо сразу.\footnote{Это на
 
самого
начала, ещё в ходе построения программы. Потом даже проверить будет трудно, а если
 
ещё вдобавок
выяснится, что требование нарушено, то переделывать будет ещё труднее, чем писать
 
хорошо сразу.\footnote{Это на
самом деле общий принцип, применимый отнюдь не только в программировании. Так же
стоит поступать и в жизни. Стоит помнить, что «умный человек &mdash; тот, кто с честью выходит из такой ситуации,в которую мудрый не попадает».}
 
стоит поступать и в
жизни. Стоит помнить, что «умный человек &mdash; тот, кто с честью выходит из
 
такой ситуации,
в которую мудрый не попадает».}
 
 
Если вам не удаётся заблокировать неразумное решение,
при помощи технических и бюрократических частностей сделайте так, чтобы
пользоваться им было как можно более противно.\footnote{Последний принцип
 
пользоваться
им было как можно более противно.\footnote{Последний принцип
(с заменой «неразумное» на «ненужное мне, любимому») успешно используют бюрократы
в борьбе против всего лучшего; иногда нужно перенимать их методы, поскольку лезть
в лобовую атаку &mdash;почти всегда худшее решение.}
 
в лобовую атаку &mdash;
почти всегда худшее решение.}
 
Этот способ решения неразрешимых задач можно проиллюстрировать следующим рисунком.
 
То, что за забором &mdash; наши культурные растения, а снаружи все считается сорняками и там мы просто не сажаем.
То, что за забором
&mdash; наши культурные растения, а снаружи все считается сорняками и там мы
 
просто не сажаем.
 
 
 
==Второй способ: ограничить задачу==
Анонимный участник