Шрифт:
Алгоритм же подсказывает, что этот баланс и есть 37 %.
Существует определенный набор проблем, с которыми сталкиваются все, – проблем, которые обусловлены непосредственно тем фактом, что наша жизнь ограничена определенным пространством и временным отрезком. Что мы должны сделать, а за что лучше не браться сегодня или через 10 лет? До какой степени стоит пустить все на самотек и как понять, что упорядоченность становится чрезмерной? Где находится баланс между привнесением в жизнь нового опыта и следованием излюбленным привычкам, который поможет взять от жизни все?
Каждому из нас может казаться, что его проблемы особенные, однако это не так. Более полувека назад программисты бились над решением задач, эквивалентных этим повседневным проблемам (и в большинстве случаев успешно их решали).
Как должен процессор распределить свое «внимание» таким образом, чтобы выполнить все запросы пользователя с минимальными затратами своих ресурсов и при этом максимально быстро? В какой момент процессор должен переключаться с одной задачи на другую и как много задач должны быть приоритетными? Как максимально эффективно использовать ограниченные ресурсы памяти? Стоит ли продолжить собирать данные или необходимо действовать, используя уже имеющуюся информацию? Не каждому человеку под силу использовать по максимуму те возможности, которые он имеет в течение дня, тогда как компьютеры вокруг нас с легкостью решают многочисленные задачи за долю секунды. И здесь нам есть чему у них поучиться.
У многих слово «алгоритм» вызывает ассоциации с непостижимыми для ума операциями с большими данными, мировой политикой и большим бизнесом. Понятие «алгоритм» все чаще воспринимается как часть инфраструктуры современного мира и едва ли – в качестве источника практической мудрости в повседневной жизни.
Тем не менее алгоритм – это всего лишь ограниченная последовательность шагов, которая используется для решения какой-либо задачи. Задолго до того, как алгоритмы стали задействоваться в программировании, их начали применять люди.
Само слово «алгоритм» произошло от имени математика персидского происхождения аль-Хорезми – автора пособия по решению математических задач, написанного им в IX веке. Его книга называлась «Китаб аль-джебр ва-ль-мукабала». Известно, что современное слово «алгебра» произошло как раз от части названия книги – «аль-джебр».
Однако появление самых первых математических алгоритмов предшествует даже трудам аль-Хорезми. На глиняной табличке, найденной недалеко от Багдада, шумеры четыре тысячи лет назад описали схему деления столбиком.
Но область действия алгоритмов не сводится исключительно к математике. Когда вы печете хлеб, вы используете рецепт и, значит, следуете алгоритму. Когда вы вяжете свитер по рисунку, вы следуете алгоритму. Алгоритмы были неотъемлемой частью жизни человека со времен каменного века.
В этой книге мы рассмотрим идею разработки алгоритмов для нашей жизни и найдем лучшие решения для задач, с которыми все мы сталкиваемся ежедневно.
Взгляд на нашу повседневную жизнь через призму компьютерной науки может повлиять на вашу жизнь на различных уровнях. В первую очередь, это дает нам четкие практические рекомендации для решения определенных задач. Правило оптимальной остановки подсказывает нам, сколько раз стоит отмерить, прежде чем наконец отрезать.
Принцип соотношения между поиском новой информации и применением имеющейся помогает нам обрести баланс между стремлением к новым впечатлениям и умением наслаждаться привычными вещами. Теория сортировки подскажет, как организовать рабочее место. Основные принципы технологии кеширования помогут, если необходимо правильно разложить вещи в шкафу или ящиках. Планирование поможет нам правильно распределить время.
На следующем уровне мы сможем воспользоваться терминологией программирования для понимания глубинных принципов работы каждой из этих областей науки. Как сказал Карл Саган, «наука – это скорее определенный образ мышления, нежели просто совокупность знаний».
Даже в тех случаях, когда жизнь слишком хаотична и в ней нет места для четкого численного анализа или готового ответа, использование определенных примеров и моделей, отработанных на более упрощенных вариантах тех же задач, позволит нам постичь суть вещей и двигаться дальше.
Проще говоря, взгляд через призму компьютерной науки может раскрыть нам природу человеческого разума, значение понятия рациональности и ответить на извечный вопрос – «как жить?». Изучение мыслительных процессов человека как средства решения фундаментальных вычислительных задач, которые ставит перед нами жизнь, может в корне изменить наше представление о человеческой рациональности.
Сам факт того, что изучение основ работы компьютера может открыть нам глаза на то, как следует жить и принимать решения, во что верить и как поступать, может показаться многим не просто крайне примитивным, но и, по сути, бессмысленным. Даже если в этом есть рациональное зерно, захотим ли мы получить ответы на все эти вопросы?
Образ жизни роботов из научной фантастики – явно не тот, которому хочется следовать. Отчасти это так, поскольку компьютеры в первую очередь ассоциируются у нас с бездушными механическими запрограммированными системами, которые строго придерживаются дедуктивной логики и принимают решения, всегда выбирая единственно верный вариант из ряда ранее заложенных опций. И при этом не важно, как долго и тяжело они размышляют.