Рисовать каракули, делать скетчи и всячески возиться с компьютером — это очень странное, но одновременно и великое удовольствие.
Когда семь лет назад я только-только начал постигать основы программирования, мне казалось, что все приобретенные навыки я буду использовать только для того, чтобы создавать разные полезные штуки: анализаторы данных, которые пригодятся мне на моем журналистском поприще или, например, веб-парсеры для автоматического сбора нужной мне информации.
Конечно же, я написал все эти важные и нужные прикладные программы! Было приятно разрабатывать приложения, которые решали настоящие, практические проблемы.
Но со временем я обнаружил, что наибольшее удовлетворение мне приносят куда более странные проекты, не имеющие никакого практического смысла.
Мне понравилось мастерить чат-ботов, которые сочиняют стихи в стиле хайку, симулировать физику тысяч прыгающих мячей или даже делать простенькие рисовалки для своих угловатых набросков.
И когда во мне просыпается зуд к созданию чего-то подобного, я становлюсь совершенно помешан на этой идее. Часами я буду корпеть над созданием очередной веселой бессмыслицы, зачастую даже забывая о своей настоящей работе за деньги (вообще-то я журналист!).
В чем же для меня заключается очарование этих необычных поделок? Что за удовольствие создавать совершенно несерьёзное, бессмысленное приложение — код, который существует не для решения какой-нибудь реальной проблемы, а для того, чтобы получилось что-то вычурное, или глупое, или красивое?
Частично получение удовольствия зависит от самого факта использования компьютера для творческих задач. Я намеренно говорю «творчество», а не «искусство», отчасти потому, что не уверен в том, что создаваемые мной штуковины достаточно объемны и цельны, чтобы называться громким словом «искусство».
Впрочем, на свете определенно существуют выдающиеся творцы от мира вычислительной техники, и возясь со своими крохотными кодерскими поделками, я испытываю удовольствие, близкое к тому, что чувствуют программисты-маэстро, когда заставляют высокопроизводительные кремниевые процессоры, предназначенные для обработки сухих цифр, составления электронных таблиц или решения военно-промышленных задач, создать что-то красивое в визуальном плане. В этом есть что-то бунтарское!
Кроме того, в компьютерах есть своя эстетика, которую просто приятно ощущать и использовать. Компьютеры замечательно подходят для выполнения однотипных операций с филигранной точностью, чего не скажешь о людях. Возможность использовать эту фантастическую силу для художественных целей — это очень круто, почти как использовать спирограф — диковинный предмет, который помогает рисовать красивые узоры с нечеловеческой точностью, находясь при этом в руках ребенка.
Вдобавок ко всему, компьютеры также хороши в выполнении задач, завязанных на использование случайных чисел! Разумеется, речь идет только о псевдослучайных числах, но и этого вполне хватает, если от компьютера требуется сгенерировать что-то симпатичное или необычное. Мы, люди, очень плохо справляемся с задачами по рандому, поэтому иметь машину, которая может непрестанно удивлять вас своими странными решениями (разумеется, если это вы попросили у нее немного рандома), — это просто восхитительно.
Конечно же, люди развлекаются подобным образом далеко не первое десятилетие. Вера Молнар еще в ламповые 60-е годы прошлого века стала первопроходцем в использовании компьютеров для создания произведений искусства. В 70-х годах начинающие хакеры Массачусетского технологического института были очарованы так называемыми клеточными автоматами — вроде «Игры жизни» Конвея — поскольку казалось, что они объединяют компьютерную логику с невероятно органичной, непредсказуемой эволюцией цифровых форм жизни. А в наши дни существует огромное сообщество цифровых художников и даже специальные языки и фреймворки наподобие небезызвестного P5, предназначенные для создания всевозможных интерактивных и зачастую непрактичных штуковин.
Это подводит меня к моему очередному, последнему на данный момент вкладу в мир бесполезного программного обеспечения: знакомьтесь, это «Садовник».
На прошлой неделе, во время отпуска, мне в голову пришла отличная идея — генерировать случайные пиксельные цветы. Поначалу я собирался написать небольшой инструмент, который позволил бы расставлять цветы по сетке, а при каждом клике генерировался бы случайный вариант внешнего вида цветка. Предполагалось, что алгоритм будет выбирать одну из четырёх возможных форм внутренней части цветка, одну из семи возможных форм лепестков и один из нескольких десятков возможных сочетаний для каждого из них. Проведя нехитрые подсчеты в уме, я определил, что всего будет примерно 26 000 вариантов цветков.
Код для генерации цветов заработал достаточно быстро, и первые цветочки выглядели вот так …
Безусловно, самым интересным моментом оказалась псевдослучайность каждой генерации: невозможно знать наверняка, что именно получится при каждом нажатии на кнопку «посадить».
Однако затем я решил еще сильнее повысить градус случайности и понял, что хочу, чтобы программа сама сажала цветы. Поэтому я написал программу маленького «садовника» — это одинокий синий пиксель, который бродит по сетке и раз в 10 секунд или около того высаживает цветок. При этом он произвольно меняет направление движения, чтобы в посадке не было никакой особой закономерности.
В каком-то смысле я стремился сделать нечто настолько самостоятельное и неинтерактивное, чтобы оно напоминало дальнего родственника программы-скринсейвера. Смотреть на исполнение программы должно быть приятно (в идеале), но при этом сам наблюдатель никаких действий не предпринимает. Достаточно просто ... смотреть.
После целого вечера, проведенного за работой, я наконец-то заставил садовника функционировать. Кроме того, я сочинил коротенькую музыкальную композицию, которая постоянно проигрывается, пока садовник занимается своим делом.
Когда я только-только запустил программу, сад выглядел довольно скудно. А вот что с ним стало буквально через пять минут…
...спустя еще пять минут он стал выглядеть гораздо более оживленным…
.... Мы посидели еще немного …
... и еще немного …
... Спустя приблизительно 45 минут весь экран превратился в яркое, непонятное цветочное месиво, которое выглядело примерно так:
На этом этапе картинка как бы немного распадается; первоначальная концепция «сада» выдерживается лишь частично, потому что цветы накладываются друг на друга слишком часто — результат беспорядочной деятельности садовника, — и в них не остается ни капли их прежней «цветочности». Только несколько штук все еще стоят особняком настолько, что производят впечатление настоящих цветов. Остальные похожи на... пестрый цифровой шум?
Я до сих пор не могу сказать, зачем я это сделал. Я считаю, что наблюдение за садом странным образом успокаивает; я часто запускаю сад в отдельном окне браузера, затем занимаюсь своей обычной работой или переписываюсь с коллегами в других окошках, а сад в это время подглядывает за мной из-за угла. (На самом деле нужно, чтобы он был хотя бы частично виден; если его не видно вовсе, приложение как бы останавливается — музыка продолжает играть, но садовник уже ничего не сажает). Забавно было переключать каждые несколько минут окно и наблюдать за развитием сада, слыша при этом похожий на Minecraft'овский «хруст» высаживаемых цветов раз в десять секунд. Иногда я просто садился и смотрел, как садовник работает, по пять-десять минут. Это по-своему медитативно. Я думал о чём-то своем — о работе, об идеях для статей, — глядя на эту странную пиксельную форму жизни.
Правда, я также подозреваю, что многие люди сочтут садовника суперскучным. Он умеет делать совсем мало вещей. И сажает цветы он, правду говоря, очень медленно.
Но если проект вас заинтересовал, смотрите на здоровье! Он всегда доступен в сети.
Зачем я его куда-то выложил? Понятия не имею.
(О, точно! Проект размещен на Glitch, так что если вам захочется посмотреть код или сделать свой ремикс, действуйте — вот он, прямо перед вами!).