Алгоритм. С алгоритмами мы имеем дело с самого раннего детства. В какой-то момент мама или старший брат посылают вас в магазин, например, за кефиром или хлебом.

Как выглядит алгоритм? — Выйти из дома, дойти до магазина, найти в магазине кефир/хлеб, пройти на кассу, отдать нужную сумму, дождаться сдачи (если сумма больше требуемой), дойти до дома, поставить кефир в холодильник, положить хлеб в хлебницу.

Что мы видим в этом алгоритме? — набор инструкций, условие (если сумма больше требуемой, то дождаться сдачи), признак успешности.

Программа действий может завершиться неуспешно:

  • можно застрять в лифте;

  • можно потерять по пути деньги;

  • магазин может быть закрыт по техническим причинам;

  • кефира/хлеба может уже не быть в магазине: раскупили, еще не привезли, истек срок годности

Что еще можно отметить? — алгоритм содержит высокоуровневые инструкции.

Выйти из дома — это не тривиальное (не простое) действие. Чтобы выйти из дома, нужно выполнить другой алгоритм:

  • найти ключи от квартиры;

  • открыть дверь;

  • выйти за порог;

  • закрыть за собой дверь;

  • нажать кнопку вызова лифта;

  • если лифт не едет, то пойти пешком вниз;

  • если лифт приехал, то нажать кнопку первого этажа;

  • дождаться пока лифт приедет на первый этаж и откроются двери;

  • выйти из лифта;

  • выйти из дома.

Какие могут быть крайние случаи (corner/edge cases)?

Например, исполнитель алгоритма может жить на первом этаже, тогда всё, что связано с лифтом, нужно пропустить.

Или исполнитель может жить в пятиэтажном здании без лифта, тогда тоже всё, что связано с лифтом, нужно пропустить.

Квартира может быть с тамбуром, у которого может быть своя дверь, тогда в алгоритме будет 2 инструкции про «открыть дверь» и «закрыть дверь».

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

Какие ключевые единицы смысла можно извлечь из сказанного:

  • программирование — это проектирование алгоритма действий;

  • сложный алгоритм опирается на сложные действия, каждое из которых может представлять из себя другой алгоритм;

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

  • алгоритм выполняется в определенном контексте (в нашем примере, это наличие лифта, этаж, на котором проживает исполнитель итп), и от этого контекста зависит какие действия надо выполнять, а какие нет; всё, что выбивается из некоторого типового контекста называется краевыми случаями (corner/edge cases); умение программировать подразумевает в том числе умение видеть такие краевые случаи и предусматривать поведение алгоритма для них;

  • штатное выполнение алгоритма, когда все складывается удачно: лифт работает, магазин открыт, кефир/хлеб есть, — называется happy path (счастливый путь).

На подумать

Подумайте, что ещё не учтено в исходном алгоритме?

Ответ

Вопрос про сдачу может быть неактуальным, если оплата производится через карту, но может оказаться так, что на карте недостаточно средств, или не работает интернет и нет связи с банком.

Словарь

  • алгоритм

  • инструкция / высокоуровневая инструкция / низкоуровневая инструкция

  • условие

  • программирование

  • штатное выполнение (happy path)