Целительная сила JavaScript
Чуть меньше года назад, когда по всему миру начали распространяться локдауны в связи с Covid-19, большинство людей начало запасаться туалетной бумагой и консервами. Но лично я стремился получить нечто другое: реализовать функцию поиска.
Цель функции поиска была не особо важна, мне просто нужно было кодить. Код успокаивает, потому что позволяет ощутить контроль в те моменты, когда мир, казалось бы, погружается в хаос. По сути, программирование состоит из небольших головоломок, которые нужно решить. Не просто из пазлов, пассивно лежащих на столе, но из головоломок, в которых можно вдохнуть таинственную жизненную силу. Головоломок, способных выполнять задачи, что-то создавать, автоматизировать рутину или публиковать тексты, доступные всему миру.
Как и множество других писателей и художников, я держу личный веб-сайт, работающий уже в течение почти 20 лет. Решив заняться кодом, я смахнул пыль с моих заржавевших знаний JavaScript, и начал искать библиотеки нечёткого поиска, которые можно подключить к веб-сайту для упрощения поиска эссе из моей коллекции.
Разбиваем задачу на части. Записываем их в to-do-приложение (я люблю пользоваться Things). И так создаётся творческая вселенная. Каждый день я отстраняюсь всемирного коллапса общества, который разворачивается за рамками моей жизни, и погружаюсь в исследовательскую работу, один за другим вычёркивая пункты to-do. Covid был масштабным; мой список to-do был приличной длины.
Истинное удовольствие от этого проекта заключалось не только в том, чтобы реализовать поиск, но и в совершенствовании, полировке, устранении шероховатостей. В том, чтобы затеряться в мире, созданном мной самим. Пусть я не могу контролировать грозную пандемию, зато способен управлять этой небольшой горсткой битов.
Весь процесс работы стал побегом, но побегом с импульсом для роста. Настраиваем идеальный стиль навигации с клавиатуры, сдвигаем момент передачи полезной нагрузки поиска, находим баланс между размером индекса и полезностью поиска. И самое важное — сохраняем восхитительную лёгкость кода. Завершаем, превращаем код в крошечный «gist» на GitHub, делимся им с сообществом. Это похоже на пас мяча другим людям: вперёд, теперь вы можете использовать это на своём веб-сайте. Сверхбыстрый и оптимизированный для клавиатуры клиентский поиск на Hugo.
Он неидеален, но чертовски хорош.
Суть в том, что обычай стремления кодить не только целителен сам по себе, но и является хитростью для превращения чувства ужаса в нечто конструктивное: в функцию, которая добавляет пусть небольшой, но всё-таки ценный вклад в целое.
Я начал кодить, когда мне было десять лет, и с тех пор не бросал этого занятия. В основном учился всему сам. Среди других людей я ощущаю необычайную неловкость, а машина успокаивала меня своей буквальностью, и обещала впустить в мир, который не могли постичь даже окружающие меня взрослые. В этом смысле код стал мне другом, приятелем, который никогда не осудит.
Паттерн сложился: когда меня в детстве утомляли сложности социальных ситуаций, я обращался к коду, становясь затворником. Эллен Ульман в своей книге Life in Code: A Personal History of Technology пишет: «Пока я не стала программистом, я не понимала во всей полноте полезность такой изоляции: тишина, сведение жизни к мысли и форме; например, уход в тёмную комнату для работы над программой, когда отношения с людьми усложняются».
Чтение книг по ассемблеру в средней школе или программирование ПО для BBS в старшей школе ещё не осознавалось мной как спасение. Моё первое осознанное признание целительной силы кода появилось несколько лет назад, когда я рефакторил свой веб-сайт с одной системы управления контентом на другую. Кажется невообразимым, но это правда: меня исцелила CMS.
В то время я долго страдал от личной и профессиональной депрессии. Я был совершенно выбит из колеи. Когда я начал переосмысливать своё состояние, то понял, что нахожусь не там, где хотел и ожидал бы находиться.
Такое иногда случается со мной; с некоторыми людьми такое происходит часто. Когда я ощущаю тяжесть сходящей на меня депрессии, то часто вспоминаю эпиграф к «Зримой тьме» Уильяма Стайрона: «Ибо ужасное, чего я ужасался, то и постигло меня...» Обычно это означает, что я недостаточно отдыхал. Я имею в виду не в течение дней, а, скорее, месяцев или лет. Я постепенно накреняюсь, как корабль, в который через течь поступает вода. Через какое-то время он обязательно потонет. Мой мозг постепенно тонул и я ощущал, что ему как спасение нужны были серверы. Оказалось, что серверы — это одно из безопасных мест для меня.
Я хотел поддерживать свой хлипкий и дорогой сервер Rackspace долгие годы, но оказался слишком ленивым для этого. Это объёмная и неблагодарная задача, требующая постоянной концентрации.
Практически всё, что связано с серверами, происходит в командной строке «терминала» — мире, избавленном от изображений и графических интерфейсов. Только текст. Каждое действие отточено до нажатия и буквально. Опечатка в единственном символе может уничтожить систему. На самом деле, при переключении в режим администратора или «суперпользователя» серверы десятки лет демонстрировали такое сообщение:
Мы верим, что вы выслушали привычную лекцию вашего системного администратора. Обычно она сводится к следующим трём пунктам:
1: Уважайте конфиденциальность других людей.
2: Думайте, прежде чем нажимать на клавиши.
3: С большой силой приходит большая ответственность.
Можно ощутить слабость в коленях, осознав, насколько сильно работа механизма мира зависит от точности клавиатурного ввода. Но это именно так, и когда вы изучаете внутренности своего любимого дистрибутива Linux, то с открытым ртом наблюдаете за абсурдностью и красотой пересечений потоков, поддерживающих функционирование веба и большинства нашей цифровой инфраструктуры (а опосредованно и физической).
Частично этим и вызвана привлекательность систем: движение сквозь этот хаос, со всей его извращённой поэзией grep, vi, git, apache и *.ini—*, при помощи молниеносных движений пальцев по клавиатуре, изумляет. Ты ощущаешь себя алхимиком. Да и являешься им. Ты вводишь загадочные слова, почти абракадабру, в построчный текстовый интерфейс, и вот готово простое приложение, доступ к которому мгновенно появляется у огромного количества людей по всему свету.
Любимые люди часто испытывали смущение или даже подозрительность, случайно узнав, что я хорошо владею bash (разновидность терминальной оболочки для ввода команд). Как будто я скрывал от них какую-то неприятную тайну. Однажды, войдя мир текста, я несколькими быстрыми нажатиями клавиш помог сыну-подростку друга установить моды для Minecraft. По его взгляду я понял, что мгновенно стал для него кем-то вроде рок-звезды. Благодаря двум сотням нажатий появился мостик между двумя поколениями.
Я нахожу умиротворение в тёмном хаосе этого мира. Код и серверы являются для меня домом, и это чувство сложно объяснить тем, для кого они домом не стали.
Поэтому в моём накренённом, слегка депрессивном состоянии я занялся переносом веб-сайтов со старого на новый сервер. Мои задачи были записаны в моём надёжном списке to-do. Адреса URL старых сайтов знаменовали уникальные эпохи моей жизни, через объективы которых я когда-то видел себя.
Мои старые веб-сайты — это призраки. Никто не будет их просматривать или атаковать их. Я перенёс их, потому что ощущал ответственность за них, чувствовал, что они имеют право продолжить жизнь в битах.
Основная часть работы с серверами была связана с тем, чтобы сделать сложные сайты менее сложными. То есть превратить динамическое в статическое. Вырвать эти сайты из их PHP-ядер, вернуть их обратно к спокойным HTML и CSS, сделать так, чтобы на их обслуживание требовалось мало времени и они были готовы к будущему. Забавно, что даже нечто простое вроде базы данных MYSQL требует обрезки и подкормки, подобно растениям. Что кажущийся безобидным PHP-скрипт становится спустя десяток лет устаревшим из-за эволюции ментальных моделей языков. Но если взять страницу на HTML из ранних 90-х, то она отрендерится почти на любом устройстве с экраном.
В этом спринте при переносе своей домашней страницы я также преобразовал её в так называемый статичный сайт. В более простую версию, которая продолжит работать и ещё через несколько сотен лет. Она выглядит почти так же, как выглядела раньше. Придя к статичным сайтам, мы совершили полный круг, как измученные поэты, путешествовавшие по свету и попробовавшие каждую поэтическую форму, а в конце осознавшие: чтобы увидеть нас сквозь наши трагедии, достаточно простого хайку.
Как и в большинстве случаев работы с инфраструктурой, такие монотонные закулисные задачи часто игнорируются, высмеиваются как малозначительные и недофинансируются. Так происходит, пока что-то не сломается или пока не начнётся пандемия. Тогда мы понимаем, что инфраструктура — это всё, и без неё наш мир вернётся к пещерному троглодитскому состоянию, а то и хуже.
В конце 1990-х у нас практически не было выбора, каждому приходилось быть владельцем, уборщиком и системным инженером своей домашней страницы. Сегодня можно спихнуть эту ответственность на третьих лиц. Tumblr, Ghost, Facebook, Blogger, Wordpress — возникло множество платформ, на которых можно сосредоточиться исключительно на контенте, взамен этого понизив свой уровень контроля.
Можно поднять уровень ответственности слишком высоко. Вероятно, это случилось со мной. Сколько бы усилий ты не вложил в систему, эффект от этого не может превысить некой величины. Но меня это не волнует.
Эта работа, построчное решение проблем, иногда становится именно тем, что заставляет меня вставать с кровати. Вам знакомо это чувство? «Не хочу выбираться из-под одеяла»? Каждое утро последнего года для всего человечества, наверное, самым большим желанием было остаться в постели, настолько разбалансированным оказался этот мир. Но потом под этим одеялом я начинаю думать Ага! Я знаю, как решить проблему X сервера, или как разобраться со странным поведением Y. Я знаю, как исправить этот код поиска. И благодаря этому я могу встать и стать человеком (или хотя бы частично человеком), войти в этот мир строк, где тебя никто не осудит. В нём только ты и механика систем; систем, которые становятся всё более красивыми, чем больше времени ты на них тратишь. Для меня такая ответственность — это терапия.
И поэтому я уничтожаю систему — систему, которую любил и которая верно служила мне многие годы, чтобы придумать более качественный и устойчивый каркас для кода, а может быть, отчасти и для мира.