Прежде чем мы рассмотрим, как компьютеры могут быть использованы для решения задач, давайте вначале рассмотрим, как мы обычно решаем задачи в реальной жизни.
Процесс решения задачи, которому мы обычно следуем, не ограничивается использованием только компьютера.
1-й шаг должен определить и проанализировать задачу, которую вы пытаетесь решить, чтобы мы могли получить хорошее понимание задачи.
На этом этапе, в основном, вы пытаетесь придумать спецификацию задачи. Это особенно важно, когда вы решаете задачу с помощью компьютера.
Компьютер не может читать ваши мысли, вы должны дать компьютеру точные инструкции о шагах выполнения.
Так что этот шаг очень важен, потому что вы должны сначала дать себе четкое понимание задачи, прежде чем вы можете сказать компьютеру, что вы от него хотите.
После того как вы получили спецификацию задачи, следующим шагом будет разработать решение.
Во многих задачах может быть несколько решений.
Итак, вы хотите разработать решение, которое наилучшим образом соответствует текущей ситуации или ограничениям.
Например, при попытке решить задачу добраться из одного места в другое, ограничения могут быть в том, что вы должны попасть в определенное время и с определенным бюджетом.
После того как вы определились с решением, вы должны разработать детали реализации, в том числе шаг за шагом реализацию решения.
После того как вы закончили разработку реализации решения, вы должны выполнить некоторые тесты и оценки, чтобы убедиться, что ваша реализация правильно решает проблему.
Это очень важно, потому что ваше решение может оказаться не в состоянии обработать все проблемные случаи.
Этот шаг часто является повторяющимся процессом, и возможно, придется пересмотреть решение или улучшить его, чтобы удовлетворить всем ограничениям и условиям.
И последнее, но не менее важное, вы должны задокументировать решение так, что, если вы или другие люди захотят вновь обратиться к проблеме в более позднее время, вы все равно сможете легко понять это решение.
Документация также помогает поддерживать решение в случае, если оно нуждается в пересмотре или обновлении для возможных будущих изменений.
Используем пример поиска способа путешествовать из Москвы в Лондон.
Предположим, что вы турагент, и определение задачи может быть что-то вроде "Найти лучший способ для вашего клиента, чтобы проехать из центра Москвы в Лондон в Великобритании".
Анализируя эту задачу, вам придется узнать у клиента, что он или она имеет в виду под самым лучшим способом, это кратчайшее расстояние или лучшее время или дешевая стоимость.
Эскизный проект может начаться с рассмотрения всех возможных маршрутов и видов транспорта, возможно, с помощью Google Maps или других сайтов туристических услуг.
И чтобы уточнить решение, нужно оценить различные маршруты и виды транспорта, а затем выбрать маршрут, который наилучшим образом соответствует вашей цели, например, самый короткий маршрут или самый дешевый по стоимости.
Как только вы создали решение, тестирование может быть трудным для этой конкретной задачи, если вы не можете фактически проделать это путешествие.
Если вы не можете выполнить эту поездку, тогда вы можете оценить решение, проверив записи определенных рейсов, чтобы убедиться, что есть достаточно времени для соединения рейсов, если это необходимо.
Или опросить кого-нибудь с предыдущим опытом создания подобной поездки.
Затем вам нужно будет задокументировать свое решение, предоставляя простые инструкции вашему клиенту, чтобы он не упустил соединение рейсов или чтобы было достаточно местной валюты для использования общественного транспорта.
После того как ваш клиент завершил поездку, вы сможете получить обратную связь от него, чтобы можно было вести учет того, был ли положительным опыт или пересмотреть решение, если ваш клиент не был доволен.
И это эквивалентные шаги при попытке запрограммировать компьютер как процесс решения задач.
При определении задачи для компьютера, мы должны придумать очень точные спецификации задачи.
И одним из распространенных подходов, является придумать спецификацию для начального состояния или входную спецификацию и итоговую спецификацию для конечного состояния или выходную спецификацию для задачи.
Это полезно, потому что путь пользователя для взаимодействия с компьютером часто лежит через устройства ввода/вывода.
Вам также необходимо определить, какая дополнительная информация нужна для решения задачи.
Используя предыдущую задачу в качестве примера, вам, возможно, придется узнать, во сколько вы должны прибыть в пункт назначения и сколько денег вы готовы потратить.
Когда мы разрабатываем решения для реальных жизненных задач, мы часто записываем шаги на определенном языке, таком как русский или английский.
При решении задач с помощью компьютера, мы также хотим перечислить шаги на языке, который могут легко понять все те, кто участвует в решении проблемы, это особенно важно, если вы работаете в команде. Такую последовательность шагов часто называют алгоритмом.