Хорошее определение из курса информатики.
Алгоритм - это однозначная конечная последовательность понятных и посильных исполнителю действий, приводящая к нужному результату или к сообщению о невозможности его достижения при имеюхся входных данных.
Разберём.
Однозначная. Единственное слово, которое я не помню дословно
![:)](http://static.diary.ru/picture/3.gif)
Конечная. Как бы ни повернулось дело - обязательно нужен маркер того, что всё, инструкция выполнена. Даже если что-то пошло не так. Для инструкций, предлагаемых живым разумным, этот пункт требует оговорить штуки уровня "если попробовала три раза и всё равно не получилось - бросай это дело, что-то пошло не так", "если уже два часа возишься, а воз и ныне там - бросай это дело, что-то пошло не так". Опять же, "самому подумать" или "посмотреть и принять решение" не нужно, нужно сверить наблюдаемую ситуацию с заранее (автором инструкции а не исполнителем!) описанными условиями.
Последовательность - ну, тут понятно
![:)](http://static.diary.ru/picture/3.gif)
![:)](http://static.diary.ru/picture/3.gif)
Понятных. Исполнитель должен понимать, что конкретно от него хотят, что конкретно нужно сделать в каждом пункте. В этом месте больше всего косяков встречается:
- вместо конкретных штук (которые "можно положить в тележку в супермаркете") пишут про абстрактные (подружись с Машей, подольстись к Васе, наведи порядок);
- вместо конкретных действий описывают желаемый результат ("расскажи анекдот" - ок, "рассмеши Васю" - не ок);
- беда, если исполнитель не знает значения каких-то слов, и вдвойне беда, если исполнитель и автор инструкции знают разное значение одного и того же слова, использованного в инструкции (приготовить картошку - это её почистить, или это её сварить?).
Иногда это прокатывает за счёт свёртки и общего контекста (опытная хозяйка знает, что такое "приготовить такой обед, чтоб мужу понравилось"). Но вообще хорошая инструкция будет работать при минимальной опоре на общий контекст и в руках полного идиота, неспособного не то, что догадаться, но и даже заметить, что в этой точке нужно о чём-то догадываться.
Посильных исполнителю. На смысловом уровне здесь всё понятно - нужно, чтобы исполнитель был в состоянии выполнить то, что написано. Желательно ещё и не убиться об это. А если инструкция для живых разумных, то ещё и потратить на это не слишком много ресурса (потому что вряд ли вся его жизнь ограничивается выполнением данной инструкции).
Здесь частый ляп типа сепульки. Пишем инструкцию "как получить то-то" - но в неё включаем пункты, подразумевающие, что "то-то" у исполнителя уже есть. Неважно, что это - навык, вещь, деньги. Но ведь скорей всего задачей выполнить эту инструкцию задастся как раз тот, у кого этой штуки нет. Так что инструкция "как заработать многаденег" не должна включать пункты, требующие купить дорогую штуку, а инструкция "как понравиться мужчине" не должна предполагать наличие положительного опыта общения с мужчинами. Сюда же все высокие материи про "соответствовать". Годная инструкция как раз и помогает получить то, чему ты _не_ соответствуешь, что ты _не_ заслужил.
Что такое действие, надеюсь, тоже понятно
![:)](http://static.diary.ru/picture/3.gif)
Приводящая к нужному результату или к сообщению о невозможности его достижения при имеющихся входных данных. Если исполнитель всё сделал как написано, то он должен получить либо заявленный пряник, либо знание, что на этой яблоне пряники не растут. В инструкции для живых разумных ещё хорошо бы добавлять что-то для контроля того, что то, что фактически делает исполнитель - действительно соответствует тому, что имел в виду автор инструкции. Хорошие примеры иногда можно в кулинарных рецептах видеть: если вы всё правильно сделали, то варево загустело, пошло пузырьками и пахнет мокрой землёй
![:)](http://static.diary.ru/picture/3.gif)
Важно, что если пряники на данной яблоне таки растут, то результат должен быть не вероятностно-гадательным, а надёжным, гарантированным. Если я скажу правильное заклинание водителю маршрутки и это правильный водитель маршрутки - он меня гарантированно из маршрутки выпустит и мне не нужен запасной план на случай, если нет.
Ещё один кусок, важный для инструкций, применяемых для живых разумных, и не очень важный для инструкций, исполнять которые будет комп.
Цена вопроса, в том числе и риск, должны быть названы на берегу.
Если мы пишем инструкцию "как приготовить пирог", то список оборудования, компонентов, времени, скользких мест типа "здесь нужно четыре руки, в одно рыло никак не выйдет" нужно писать в явном виде, в идеале в начале инструкции.
Если мы пишем инструкцию "как самостоятельно запаять фигню в айфоне", то риск необратимо повредить дорогой гаджет нужно выписать в явном виде.
Ну и если автор инструкции чего-то не знает - то честнее и правильнее будет написать в этом месте "я не знаю", а не оставлять его умолчанием. Да, может быть это уже будет не совсем инструкция, но по крайней мере будет видно, как имеющийся текст доработать напильником, чтобы инструкцию таки получить.