
Полная версия
Экономический субъект. Том III. Цифровая экономика
Что же такое откат? Откат — это сброс. Обнуление. Чистый лист. Но тот же самый лист, а не новый. Не подмена, не бегство, не трусливое начало с нуля на другой заготовке. Нет. Это возвращение к тому же самому материалу, к той же самой судьбе — но очищенному от ложного шага.
Как же выглядит откат в суровом материальном мире — мире станка, бочки, детали, упрямой заготовки? Вот его три священных шага.
Первый. Снять бракованную деталь — ту, что родилась не в лад, ту, что несёт на себе печать ошибки.
Второй. Вернуть заготовку в исходное состояние — то самое, первозданное, нетронутое, полное обещаний.
Третий. Начать заново — с тем же материалом, но с иным знанием.
И здесь кроется суровейшее из требований. Заготовка должна — слышите, должна! — сохранять свои свойства при возврате. Если после первой попытки, после первой неудачной пробы заготовка испорчена необратимо — отката нет. Точка. Конец надежды. Тебе остаётся только одно: выбросить. Взять новую. Но новая — как горько это осознавать, — это не откат. Это повторение с нуля. Другой экземпляр. Другая история. Другая судьба. Ты не исправил ошибку — ты сбежал от неё, оставив за спиной труп заготовки.
Вот почему истинный мастер бережёт материал. Вот почему он учится откатываться, не разрушая. Вот почему отладка — это искусство не только действия, но и возвращения. Искусство, где каждый шаг вперёд подкреплён умением сделать шаг назад. Ибо только так, только через священный откат, хаос превращается в порядок, а ошибка — в опыт.
Откат, о великое искусство возвращения, возможен только при одном условии — условии, которое звучит как заклинание, как пароль для посвящённых. Материал после неудачной операции должен быть способен — способен! — быть приведён к состоянию, неотличимому от состояния до операции. Не похожему, не приблизительному, не условно-приемлемому — а неотличимому. Чтобы взгляд мастера, самый придирчивый взгляд, самый чувствительный инструмент не нашли различий. Чтобы время, этот безжалостный судья, не обнаружило следа.
Вот как это выглядит в чистом виде, в той первозданной ясности, которую дарует строгая терминология. В моей терминологии, позвольте мне быть точным, ибо точность — сестра лада, это называется цикл переработки универсального полуфабриката.
И что же есть универсальный полуфабрикат? О, слушайте же, ибо здесь — ключ ко всему.
Универсальным полуфабрикатом называется запас, из которого можно за одну операцию переработки сделать другие различные запасы.
Не один-единственный унылый исход, не предопределённый путь раба, а веер возможностей. Сегодня — деталь для станка, завтра — заготовка для бочки, послезавтра — возвращение в исходный X, чтобы начать всё заново, но уже с иной песней.
Это свойство и есть то, что делает отладку возможной. Именно оно позволяет мастеру пробовать, ошибаться, откатываться и пробовать снова — не расходуя материал, не плодя горы брака, не проклиная судьбу за каждую неудачу. Универсальный полуфабрикат — это материализованная надежда. Это запас, который не мстит за ошибки, а прощает их. Это плоть, способная перерождаться, как феникс из пепла, но без потери себя.
И вот почему пятая экономика процветает именно там, где царит универсальный полуфабрикат. Где материал не держит зла на мастера. Где каждая ошибка — всего лишь шаг в танце, а не смертный приговор заготовке. Где откат — не поражение, а метод. Где лад возвращается снова и снова, ибо материал помнит свою первозданную форму и готов вернуться к ней по первому зову умелых рук.
Если материал, с которым работает мастер, не обладает священным свойством обратной переработки одной операцией — откат, увы, невозможен. А без отката, как мы уже уяснили, невозможна и сама отладка. Из этого железного силлогизма следует вывод, не терпящий возражений: для отладки необходим материал, который по определению есть универсальный полуфабрикат.
Заметьте, даже отладка в малом — на одном-единственном материале, на одной несчастной детали — уже требует этого божественного свойства отката. Но экономически значимой, истинно значимой отладка становится лишь тогда, когда отлаженный, выстраданный, выверенный метод переносится на другие материалы, на другие детали, на совершенно иные контексты. Ибо иначе, клянусь, каждое новое применение — это изобретение велосипеда, мучительное, нелепое, бесконечное. А это, позвольте мне сказать прямо, уже не отладка. Это шаманство. Пляска с бубном. Гадание на кофейной гуще. Всё, что угодно, но не систематическое, рациональное, прекрасное искусство возвращения лада.
И вот он, предел отладки, её великая цель, её сияющий горизонт. Метод, который работает на любом материале, удовлетворяющем условию универсальности. Только и всего. Материал требует от метода лишь одного, но зато какого! — способности к прямому и обратному превращению одной операцией. Материал, который этим свойством обладает, и есть, по определению, универсальный полуфабрикат.
В пределе, в своём безграничном стремлении к совершенству, отладка требует, чтобы любой материал в экономике — любой, слышите? — был универсальным полуфабрикатом. Чтобы не было бесповоротно испорченных заготовок, чтобы каждая ошибка становилась лишь шагом на пути, а не могильным камнем. Чтобы мир стал податлив, как глина в руках гончара.
И здесь мы подходим к самому прекрасному, самому дерзновенному примеру. Код. Да, код. Ибо код — это идеальный универсальный полуфабрикат. Совершенный. Не знающий износа. Не помнящий обид.
Представьте же: вы написали функцию. Она прекрасна, как стихотворение. Но, увы, она не работает. И что вы можете сделать, владея магией отладки? Вот что.
Первое. Откатиться к предыдущей версии. Одна операция — и вы там, где всё было чисто, невинно, полно обещаний. Git revert — и время потекло вспять.
Второе. Исправить. Внести правку, подобно тому, как хирург вносит скальпель в живую плоть, но без боли и без риска.
Третье. Проверить. Сурово, беспристрастно, всевидяще.
Четвёртое. Снова откатиться, если проверка выявила новую ошибку. И так — сколько угодно. Десять раз, даже сто! Одна и та же функция, словно река, текущая по одним и тем же берегам. Один и тот же файл, но каждый раз — чуть иной, чуть лучше, чуть ближе к ладу. Одна и та же история, где каждый эпизод учит, а не калечит.
И когда отладка завершена, когда баги разбежались, как тараканы от света, — функция работает на любых входных данных. Универсальность, запечатлённая в коде! Вы можете переписать эту функцию обратно в исходный замысел — обратная переработка — одной операцией. Refactor, этот священный глагол программистского пантеона. Исходный замысел — это та самая форма X, к которой можно вернуться в любой момент, чтобы начать всё заново, но уже с новым знанием.
Вот почему код — царь универсальных полуфабрикатов. Вот почему программист — жрец пятой экономики. И вот почему отладка, начавшая свой путь с камня и дерева, обрела своё подлинное величие в мире, где каждая строка может быть откатана, исправлена и возвращена к жизни. Бесконечно. Без потери сути. Без платы за ошибку, кроме времени и внимания.
О, какое счастье — работать с таким материалом! Какое блаженство — знать, что за каждой неудачей следует не отчаяние, а всего лишь git revert.
Кодэтика
Вспомним же аристотелевский идеал человека — тот лучезарный образ, что вот уже два с половиной тысячелетия манит и мучает умы. Совершенство! Прекрасен телом, словно изваяние бога. Благороден душой, словно герой эпоса. Внешняя форма и внутренние добродетели — в полном, нерасторжимом ладу. Калокагатия, греческое чудо, где красота и добро сплетены в единый узел, который не развязать, не разрубить.
Красиво, до чего же красиво! Но — увы и ах — с тех самых пор мировая мысль, вся эта вереница гениев и эпигонов, так и не решила проблему единства этики и эстетики. Как его достичь, этот проклятый лад? Аристотель не объяснил. Он просто постулировал — как аксиому, как данность, как явление, не требующее доказательств. Калокагатия — это не рецепт. Не метод. Не технология, которую можно повторить в своей мастерской. Это портрет. Созерцай и восхищайся. А повторить — нельзя. Идеал сей — статуя.
Кант, этот честный кёнигсбергский мудрец, поступил, как подобает человеку, не терпящему лжи. Этикет, сказал он, — царство долга. Категорический императив, суровый, как горная вершина. Всеобщий закон, пред которым равны все, от цесаря до последнего бедняка. Эстетика же — царство незаинтересованного удовольствия. Игра способностей, танец воображения и рассудка. Целесообразность без цели — прекрасное, которое не служит ничему, кроме самого себя.
Между ними пропасть. Бездна. Мост перекинуть нельзя. Кант пробовал и честно признал своё бессилие. Прекрасное может быть безнравственным — соблазнитель с ангельским лицом и дьявольской душой. Нравственное может быть безобразным — старая праведница в лохмотьях, чьё сердце чисто, но облик отвращает взор. Канта, надо отдать ему должное, это устраивало. Правда жизни, сказал он, горькая и непричёсанная. Но это, позвольте мне заметить, капитуляция. Кант не решил проблему. Он объявил её неразрешимой. Честно, но — чего стоит честность, если за ней не следует победа?
А вот Гегель, как обычно, попытался всё съесть за один присест. Красота, изрёк он, есть истина, облечённая в чувственную форму. Искусство — ступень самопознания абсолютного духа, где дух глядит на себя, как в зеркало, и впервые себя узнаёт. Хорошее искусство — истинно. Истинное искусство — нравственно. Злое искусство — просто плохое искусство, ошибка, заблуждение, недоразвитие.
В теории — о, как величественно! Панцирь из чистого умозрения. На практике? Ни одного убедительного примера. Гегель так и не объяснил, почему «Преступление и наказание» — роман о мерзости, об убийстве, о мучительной совести, — великое произведение. Почему «Мёртвые души» — поэма о жуликах, о плутах, о торгашах душами, — прекрасна до слёз. Почему Босх, этот кошмарный визионер, чья греховная фантасмагория кишит чудовищами и муками, — нетленен, вечен.
Гегель, осмелюсь сказать, перепутал предмет — который может быть безобразен, мерзок, ничтожен, греховен — и форму — которая обязана быть прекрасна, стройна, гармонична. Разные вещи, совершенно разные! А он склеил их в одно целое, как неумелый ремесленник склеивает то, что должно быть соединено иначе. И склейка эта, увы и ах, развалилась. При первом же прикосновении живой, дышащей, грубой реальности.
А вот Ницше — о, этот взбесился! Вся ваша мораль, закричал он, сотрясая устои, — предрассудок слабых, цепь, которую стадо наложило на себя добровольно, чтобы защититься от сильных! Вся ваша красота — самообман сильных, услада, под которую они усыпляют свою волю! Подлинный человек — сверхчеловек, молния, прорвавшая серое небо обывательского существования, — творит ценности сам. Он сам, своими руками и своей волей, решает, что хорошо. Он сам, своим вкусом и своей мощью, решает, что красиво.
Этика и эстетика, провозгласил Ницше, слиты в воле к власти — в этом едином, всеобъемлющем, дионисическом начале. Блестящий жест! Удар молотом по статуе Канта! Но, спрашивается, что же сверхчеловек делает? Что есть его творчество, кроме афоризмов и танцев? Ницше не сказал. Он ушёл в туман своих афоризмов, в соль своих парадоксов. Заратустра пляшет, говорит загадками, опускается в пропасть и восходит на гору, но ни разу не берёт в руки резец или скрипку. Сверхчеловек, по Ницше, может написать гениальную музыку — и в тот же день зарезать другого человека. И то и другое будет прекрасно и этично — потому что такова его воля, потому что он сверхчеловек, потому что критериев выше него нет.
И вот с таким критерием можно оправдать всё. Абсолютно всё. Даже Освенцим — если архитектор печей искренне чувствовал свою волю к власти, если эсэсовец, расстреливающий ребёнка, переживал при этом возвышенный подъём духа. Ницше не решил проблему, о нет. Он её взорвал. После этого взрыва не осталось ничего — ни этики, ни эстетики, ни их единства, ни даже самих этих слов, наполненных смыслом.
Модернизм, этот холодный и гордый век, пошёл другим путём — путём отрицания содержания. Модернизм утверждает, что красота — исключительно в форме. Форма совершенна — значит, содержание не важно, вторично, подсобно. Беспредметная живопись, где краски текут по хосту сами по себе. Додекафония, где звуки подчинены лишь следованию. Чёрный квадрат — пустота, объявленная вершиной. Этично ли это? Вопрос снят, объявлен некорректным. Искусство для искусства. Этика для проповедников. Проблема не решена — она вынесена за скобки, как дурной сон, как старый хлам, как нечто, недостойное внимания истинного творца.
Постмодернизм, этот весёлый могильщик великих нарративов, пошёл ещё дальше — в ничто. Никакого единства нет и быть не может, заявляет он, усмехаясь. Есть игры. Цитаты, вырванные из контекста и склеенные в коллаж. Симулякры, копии без оригинала. Добро и зло — всего лишь риторические фигуры, удобные для манипуляции. Красота и уродство — социальные конструкты, которые можно менять как перчатки. Можно выставить писсуар и назвать это искусством — и это будет искусством, потому что так сказал автор. Можно надеть нацистскую форму, выйти на площадь и назвать это перформансом — и это будет перформансом, потому что ирония снимает все обвинения. Всё разрешено, ибо ничто ничего не значит.
Проблема единства этики и эстетики при таком подходе... исчезла. Как бессмысленная. Как вопрос о том, сколько ангелов может уместиться на кончике иглы. Но исчезновение проблемы — это вам не решение! Это капитуляция второго порядка — ещё более позорная, чем кантианская. Кант хотя бы честно сказал: не могу, признаю своё бессилие. А постмодернизм делает вид, что ему просто неинтересно, что он выше этого.
Искали, искали, искали... Но искали не там.
Аристотель искал в добродетельном человеке — но оставил нам лишь портрет, не дав метода. Кант искал в трансцендентальной способности суждения — но развёл этику и эстетику по разным комнатам, запретив им встречаться. Гегель искал в абсолютном духе — но склеил то, что не склеивается, и склейка развалилась. Ницше искал в сверхчеловеке — но взорвал всё, включая самого сверхчеловека. Модернисты искали в гении-творце — но вынесли этику за скобки, оставив форму без содержания. Постмодернисты искали в ироническом наблюдателе — но растворили всё в игре, где нет ни добра, ни зла, ни красоты, ни уродства, ни даже самого наблюдателя.
И мы остались с вопросом. С тысячелетним, изъезженным, проклятым вопросом: как соединить добро и красоту? Как сделать так, чтобы правильное было прекрасным, а прекрасное — правильным? Где тот метод, тот алгоритм, та отладка, которая способна привести в лад этику и эстетику?
Может быть, ответ спрятан там, где мы его не ждали? Может быть, он не в душе, не в трансценденции, не в абсолютном духе, не в сверхчеловеке, а в чем-то куда более прозаичном и куда более удивительном? Может быть, он — в универсальном полуфабрикате? Может быть, в коде? Может быть, в той самой пятой экономике, где материал прощает ошибки, где отладка возвращает лад, а мастер отвечает за каждое своё действие, потому что не может спрятаться ни за бога, ни за императив, ни за иронию?
Мы на пороге. Зайдём ли?
Никто не искал в отладке. Никто из великих — ни Аристотель с его калокагатией, ни Кант с его пропастью, ни Гегель с его склейкой, ни Ницше с его взрывом, ни модернисты, ни постмодернисты. Ни один из них, осмелюсь утверждать, никогда не брал в руки бракованную деталь и не возвращал её к жизни. Ни один не стоял у станка, вслушиваясь в ритм, чтобы уловить момент, когда железо запоёт в лад. Ни один не отлаживал код до тех пор, пока компилятор не останавливался с уважением.
А ведь ответ — вот он. Прямо перед нами. В пыли мастерской. В свечении экрана. В терпеливом движении рук, которые пробуют, ошибаются, откатываются и пробуют снова.
Единство этики и эстетики — это не свойство человека. И не свойство объекта. Не добродетель души и не качество вещи. Это свойство процесса. Процесса отладки.
Что такое этика, если снять с неё тысячелетние напластования проповедей, запретов и императивов? Этика — это действие, возвращающее лад. Не наказание, ибо наказание не возвращает, а карает. Не поощрение, ибо поощрение не восстанавливает, а стимулирует. Не долг, который давит на плечи тяжестью невыполненного обещания. Не императив, который командует, не спрашивая согласия. Этика — это восстановление порядка в ситуации, где порядок нарушен. То есть, позвольте мне сказать прямо, — отладка.
Что такое эстетика, если снять с неё налёт таинственности и музейной пыли? Эстетика — это восприятие лада. Когда механизм работает без сбоев — слух улавливает ровное, успокаивающее гудение. Когда форма и функция совпадают до неразличимости — взгляд находит покой в этой полноте. Когда материал и метод находятся в согласии, когда инструмент понимает заготовку, а заготовка не сопротивляется инструменту, — тело чувствует гармонию. Когда ничего не скрипит, не заедает, не выпадает, не хрустит под пальцами. То есть — отлаженное состояние.
И вот главное, то, что не могли увидеть философы, потому что слишком высоко парили над землёй. Отладка соединяет этику и эстетику в одном действии. В одном-единственном, конкретном, рукотворном действии. Потому что отсюда следует утверждение, которое для непосвящённого звучит странно, почти еретически. Но вы, слушающие, уже не непосвящённые. Вы прошли путь от станка до кода, от лада до отладки.
Красивый код — этичен.
Да, именно так. Утверждение, которое режет слух тем, кто привык отделять этику от эстетики, а программирование — от жизни, а технику — от человечности. Только странно, спешу вас уверить. Не ложно. Странно — как странно выглядит истина, когда она впервые входит в комнату, где все привыкли к полумраку лжи.
Что же такое красивый код? Поясню, ибо это важно.
Красивый код — понятен. Во всяком случае, он понятнее кода некрасивого. В этом, и только в этом, заключена его красота. Не в отступах, хотя и в них тоже. Не в том, нравится ли он глазу программиста-эстета. В том, что его можно легко прочитать. Войти в его логику, как входят в хорошо освещённую комнату. Проследить за ходом мысли, как прослеживают русло реки от истока до устья. Увидеть, что происходит от первой строки до последней, — без чёрной магии, без сюрпризов, без стыдливо спрятанных костылей.
А понятный код — этичен. Потому что код пишут не для себя. Или не только для себя. Код пишут для других. Для того неведомого путника, который будет его читать — через день, через месяц, через год. Для того бедного отладчика, который будет в нём копаться в три часа ночи, пытаясь понять, почему упал сервер. Для того, кто придёт после — и скажет либо «спасибо, всё ясно», либо, скрежеща зубами, «кто же это написал?». Или для себя, но через полгода — а это, позвольте вам напомнить, уже совсем другой человек. Который не помнит, почему здесь написано именно так, а не иначе. Который смотрит на свой собственный код, как на древний папирус, и шепчет: «Что за бред?»
Понятный код не прячет ошибок в тёмных углах. Не заставляет читателя гадать на кофейной гуще. Он обнажает замысел автора — без стеснения, без защиты, без лукавства. И в этом обнажении, в этой честности, в этом служении тому, кто придёт следом, — и заключается его этика. Красота, ставшая добродетелью. Добродетель, ставшая красотой. Лад, наконец.
Что же говорит о нас красивый код? О, он говорит многое, и первое, самое главное — признание. Красивый код торжественно признаёт: я не один. Читатель есть. Этот незримый, но неизбежный спутник, который придёт после меня — или даже вместо меня. Читатель будет мучиться с моим кодом, как путник, бредущий через бурелом. Читатель будет тратить своё время — время, которое он мог бы провести с семьёй, или за чашкой кофе, или просто в блаженном ничегонеделании. Читатель может возненавидеть меня, о, как легко и праведно возненавидеть, если я сделаю его жизнь хотя бы на йоту сложнее, чем она могла бы быть.
Поэтому я, автор, приму на себя эту ответственность. Я сделаю код понятным. Размеренным, как дыхание. Регулярным, как биение пульса. Красивым — не для самолюбования, а для облегчения чужого пути.
Но не обольщайтесь, слушающие. Красивый код — это не всегда лёгкий код. Не всегда тот, который написался в полчаса под весёлую музыку. Бывает, как часто бывает, что сама по себе задача сложна, как гордиев узел. Алгоритм запутан, словно лесная чаща. Данные приходят неизвестно откуда — из трёх разных систем, ни одна из которых не документирована. Требования противоречивы, как показания свидетелей на допросе.
Но красивый код, и в этом его величие, не добавляет к этой уже существующей сложности свою — лишнюю, ненужную, паразитическую. Он не множит сущности без необходимости — запомните это, ибо это золотое правило. Не плодит лишних переменных, которые будут путаться под ногами. Не строит лабиринтов из вложенных условий, где теряется и сам автор. Он — регулярен. Если есть правило — оно соблюдается везде, от первой строки до последней, без капризов и исключений ради исключений. Если есть паттерн — он повторяется с аккуратной предсказуемостью, как рефрен в песне. Если есть исключение — а они бывают, куда без них — оно явно отмечено, подсвечено, снабжено объяснением, чтобы читатель не гадал: это ошибка или замысел?
А теперь, перевернув медаль, взгляните на обратную сторону. Некрасивый код. О, что это за чудовище! И я утверждаю, торжественно и без колебаний: некрасивый код — этически порочен, хотя работает правильно, без ошибок. Нет, порочность его корнями уходит в самый фундамент человеческого общежития. Некрасивый код порочен потому, что он — закрыт для другого.
Другой, доведись ему разбирать этот код, не может в него погрузиться. Другой тратит часы — драгоценные, невозвратные часы! — на то, чтобы понять, что автор мог бы объяснить одной строчкой комментария или одним осмысленным именем переменной. Другой проклинает автора, сидя в тёмной комнате, потому что переменная названа просто «x», а функция разрослась до трёхсот строк, как борода до пояса, а логика перепрыгивает с места на место, как блоха на собаке, не давая ухватить нить.
И знаете, что говорит этот некрасивый код, этот немой свидетель чужого равнодушия? Он говорит, и слова его леденят душу: «Мне плевать на тебя. Я сделал так, как мне удобно, в ту минуту, когда мне было лень думать. Разбирайся сам. Твоя боль — не моя проблема. Твоё время — не моя забота. Ты сам как-нибудь... выкручивайся».
Вдумайтесь, прошу вас. Это не техническая проблема. Это не вопрос выбора языка программирования, редактора или операционной системы. Это этический выбор. Выбор между уважением и эгоизмом, между заботой и безразличием, между ладом и хаосом.
Выбор в пользу эгоизма против уважения — каждый раз, когда ты называешь переменную «а» вместо «ИдентификаторПокупателя». Выбор в пользу хаоса против порядка — каждый раз, когда ты вставляешь очередной костыль, вместо того чтобы переписать кривое место. Выбор в пользу одиночества против сообщества — каждый раз, когда ты думаешь «моя работа — написать, а читать и отлаживать будут другие, и это уже их проблемы».
И вот что получается. Код становится зеркалом души пишущего. Если душа стремится к ладу, если она помнит о том, кто придёт следом, если она уважает время и силы другого — код выходит красивым, понятным, этичным. Если же душа глуха к другому, если она занята только собой и своим сиюминутным удобством — код выходит безобразным, запутанным, порочным.
Аристотель с его калокагатией, Кант с его императивом, Гегель с его абсолютным духом — все они искали этику и эстетику где-то высоко, в небесах, в трансценденции. А они — вот они. В отступе. В имени переменной. В решении не полениться и переписать функцию. В скромном комментарии, который спасёт чей-то час. В красивом коде, который говорит: «Ты не один. Я думал о тебе. Я сделал так, чтобы тебе было легче».
Это и есть лад. В действии. В отношении. В выборе, который каждый из нас делает — не раз в жизни, а каждый день, каждый час, каждую строчку. Выбор между хаосом и порядком. Между одиночеством и сообществом. Между злом и добром, которое на поверку оказывается просто — красотой.
Сообщество программистов — это экономика. Не та, первая, где собиратель приносит добычу, и не третья, где крестьянин возделывает землю. Не четвертая, где ремесленник точит деталь. Нет. Сообщество программистов — это пятая экономика. Та самая, где отладка стала ведущей деятельностью, где алгоритмы — основной и самый драгоценный запас, где код не пишут для галочки, а читают, отлаживают, передают из рук в руки, как скрижали завета.









