[Перевод] Как же приятно писать программы, которые не предназначены ни для чего серьезного

Рисовать каракули, делать скетчи и всячески возиться с компьютером — это очень странное, но одновременно и великое удовольствие.

101350a45b5b4d738bbc1d0e18caf00d.png

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

Конечно же, я написал все эти важные и нужные прикладные программы! Было приятно разрабатывать приложения, которые решали настоящие, практические проблемы.

Но со временем я обнаружил, что наибольшее удовлетворение мне приносят куда более странные проекты, не имеющие никакого практического смысла.

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

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

В чем же для меня заключается очарование этих необычных поделок? Что за удовольствие создавать совершенно несерьёзное, бессмысленное приложение — код, который существует не для решения какой-нибудь реальной проблемы, а для того, чтобы получилось что-то вычурное, или глупое, или красивое?

Частично получение удовольствия зависит от самого факта использования компьютера для творческих задач. Я намеренно говорю «творчество», а не «искусство», отчасти потому, что не уверен в том, что создаваемые мной штуковины достаточно объемны и цельны, чтобы называться громким словом «искусство».

Впрочем, на свете определенно существуют выдающиеся творцы от мира вычислительной техники, и возясь со своими крохотными кодерскими поделками, я испытываю удовольствие, близкое к тому, что чувствуют программисты-маэстро, когда заставляют высокопроизводительные кремниевые процессоры, предназначенные для обработки сухих цифр, составления электронных таблиц или решения военно-промышленных задач, создать что-то красивое в визуальном плане. В этом есть что-то бунтарское!

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

Вдобавок ко всему, компьютеры также хороши в выполнении задач, завязанных на использование случайных чисел! Разумеется, речь идет только о псевдослучайных числах, но и этого вполне хватает, если от компьютера требуется сгенерировать что-то симпатичное или необычное. Мы, люди, очень плохо справляемся с задачами по рандому, поэтому иметь машину, которая может непрестанно удивлять вас своими странными решениями (разумеется, если это вы попросили у нее немного рандома), — это просто восхитительно.

Конечно же, люди развлекаются подобным образом далеко не первое десятилетие. Вера Молнар еще в ламповые 60-е годы прошлого века стала первопроходцем в использовании компьютеров для создания произведений искусства. В 70-х годах начинающие хакеры Массачусетского технологического института были очарованы так называемыми клеточными автоматами — вроде «Игры жизни» Конвея — поскольку казалось, что они объединяют компьютерную логику с невероятно органичной, непредсказуемой эволюцией цифровых форм жизни. А в наши дни существует огромное сообщество цифровых художников и даже специальные языки и фреймворки наподобие небезызвестного P5, предназначенные для создания всевозможных интерактивных и зачастую непрактичных штуковин.

Это подводит меня к моему очередному, последнему на данный момент вкладу в мир бесполезного программного обеспечения: знакомьтесь, это «Садовник».

На прошлой неделе, во время отпуска, мне в голову пришла отличная идея — генерировать случайные пиксельные цветы. Поначалу я собирался написать небольшой инструмент, который позволил бы расставлять цветы по сетке, а при каждом клике генерировался бы случайный вариант внешнего вида цветка. Предполагалось, что алгоритм будет выбирать одну из четырёх возможных форм внутренней части цветка, одну из семи возможных форм лепестков и один из нескольких десятков возможных сочетаний для каждого из них. Проведя нехитрые подсчеты в уме, я определил, что всего будет примерно 26 000 вариантов цветков.

Код для генерации цветов заработал достаточно быстро, и первые цветочки выглядели вот так…

4b42898d957076cd4428ebc2a8a07d0e.png

Безусловно, самым интересным моментом оказалась псевдослучайность каждой генерации: невозможно знать наверняка, что именно получится при каждом нажатии на кнопку «посадить».

Однако затем я решил еще сильнее повысить градус случайности и понял, что хочу, чтобы программа сама сажала цветы. Поэтому я написал программу маленького «садовника» — это одинокий синий пиксель, который бродит по сетке и раз в 10 секунд или около того высаживает цветок. При этом он произвольно меняет направление движения, чтобы в посадке не было никакой особой закономерности.

В каком-то смысле я стремился сделать нечто настолько самостоятельное и неинтерактивное, чтобы оно напоминало дальнего родственника программы-скринсейвера. Смотреть на исполнение программы должно быть приятно (в идеале), но при этом сам наблюдатель никаких действий не предпринимает. Достаточно просто … смотреть.

После целого вечера, проведенного за работой, я наконец-то заставил садовника функционировать. Кроме того, я сочинил коротенькую музыкальную композицию, которая постоянно проигрывается, пока садовник занимается своим делом.

Когда я только-только запустил программу, сад выглядел довольно скудно. А вот что с ним стало буквально через пять минут…

b1186ea83c775a441815c0d2f7e4c7a4.png

…спустя еще пять минут он стал выглядеть гораздо более оживленным…

e12fff5debc6aa8fb01f88c75126e0db.png

… Мы посидели еще немного …

84d8c172534e67516e49eb30e6c3a67a.png

… и еще немного …

33e7e33bd6308787147d82813b3ad7c0.png

… Спустя приблизительно 45 минут весь экран превратился в яркое, непонятное цветочное месиво, которое выглядело примерно так:

5cda198b18410dddfbd7737b39afe9c3.png

На этом этапе картинка как бы немного распадается; первоначальная концепция «сада» выдерживается лишь частично, потому что цветы накладываются друг на друга слишком часто — результат беспорядочной деятельности садовника, — и в них не остается ни капли их прежней «цветочности». Только несколько штук все еще стоят особняком настолько, что производят впечатление настоящих цветов. Остальные похожи на… пестрый цифровой шум?

514e11f7df3bf5ae5b9080bccda11836.png

Я до сих пор не могу сказать, зачем я это сделал. Я считаю, что наблюдение за садом странным образом успокаивает; я часто запускаю сад в отдельном окне браузера, затем занимаюсь своей обычной работой или переписываюсь с коллегами в других окошках, а сад в это время подглядывает за мной из-за угла. (На самом деле нужно, чтобы он был хотя бы частично виден; если его не видно вовсе, приложение как бы останавливается — музыка продолжает играть, но садовник уже ничего не сажает). Забавно было переключать каждые несколько минут окно и наблюдать за развитием сада, слыша при этом похожий на Minecraft’овский «хруст» высаживаемых цветов раз в десять секунд. Иногда я просто садился и смотрел, как садовник работает, по пять-десять минут. Это по-своему медитативно. Я думал о чём-то своем — о работе, об идеях для статей, — глядя на эту странную пиксельную форму жизни.

Правда, я также подозреваю, что многие люди сочтут садовника суперскучным. Он умеет делать совсем мало вещей. И сажает цветы он, правду говоря, очень медленно.

Но если проект вас заинтересовал, смотрите на здоровье! Он всегда доступен в сети.

Зачем я его куда-то выложил? Понятия не имею.

(О, точно! Проект размещен на Glitch, так что если вам захочется посмотреть код или сделать свой ремикс, действуйте — вот он, прямо перед вами!).

© Habrahabr.ru