TL;DR: Я изучил записные книжки шести писателей-классиков и обнаружил, что ни один из них не вёл «систему управления знаниями». Их тетради были хаотичны, а сам подход не навязывал структуру. В результате исследования я сделал свою полноценную «тетрадь писателя» на Go в 3253 строки с нулём фреймворков и минимумом зависимостей. Это пространное эссе о том, почему «удобно» и «просто» — разные вещи.
В черновиках Достоевского нет порядка, и это первое, что бросается в глаза, когда листаешь его девятнадцать рабочих тетрадей и записных книжек. Внутри: рисунки мужских лиц и готические окна прямо между строками (Лихачёв посвятил этим окнам отдельную статью, он считал, что вертикаль готики отражает вертикаль самого Достоевского, его верх и низ, Бога и дьявола), каллиграфические упражнения, которые переходят в подсчёт расходов, наброски сцен под одним углом и варианты диалогов под другим, зачёркивания, вставки, обильные маргиналии. Иногда Достоевский перелистывал тетрадь вверх ногами и начинал писать с конца, а стрелки и пометки «см. выше» заменяли ему то, что мы сегодня назвали бы навигацией. Дат почти нет. Литературовед Розенблюм назвала эти тетради «творческими дневниками», пространством диалога автора с его собственным романом, и только здесь, говорила она, мы видим Достоевского, который спорит с самим собой.
Я знаю всё это потому, что несколько месяцев назад, вместо того чтобы работать над собственным романом, читал чужие записные книжки и создавал свою систему писательского «дневника».
Надо, наверное, объяснить, каким образом литературный редактор оказался на Хабре с постом о программировании (и не в первый раз!), но объяснение потребует отступления, а «отступления, бесспорно, подобны солнечному свету», как заметил Стерн. У меня есть роман, который существует только в заметках. Он там давно, не потому что я не решаюсь начать, а потому что я знаю достаточно о чужом тексте, чтобы понимать, каким должен быть свой, и это знание не парализует, но заставляет исследовать. И вместо чириканья в тетрадках я занялся тем, что умею: исследованием. Как работали те, у кого получилось, как они начинали, и начинал ли Достоевский с порядка или порядок приходил потом.
Исследование — благородное название для прокрастинации, и книг о чужих книгах больше, чем книг о чём бы то ни было (Монтень заметил это в шестнадцатом веке, и с тех пор положение только ухудшилось), но иногда прокрастинация куда-то приводит — Борхес, который за всю жизнь не написал ни одного романа и предпочитал, по собственному признанию, «сделать вид, что эти толстые книги уже написаны, и предложить читателю их резюме, какой-то комментарий к этим текстам», сделал из этого отказа метод, а из метода — литературу, которой хватило на всё, кроме Нобелевской.
Карточки, карандаши, синие чернила
Вот что я выяснил: ни один из тех, чьи тетради я читал, не вёл «систему».
Набоков писал на линованных карточках четыре на шесть дюймов: “линованные бристольские карточки и хорошо заточенные, не слишком твёрдые карандаши с ластиками”, как он описал свои инструменты в интервью Paris Review. Писал он стоя за конторкой, потом в кресле, “когда тяжесть начинала грызть икры”, потом на кушетке, когда она “забиралась по позвоночнику”… Каждая карточка была одной сценой или фрагментом, от почти готового до совсем незаметного, без жёсткой картотеки: карточки стягивались резинкой или складывались в коробки, и главной операцией была ежедневная перетасовка, когда он раскладывал их в разном порядке, чтобы увидеть пути героев через историю, а пронумеровать — только когда весь набор был готов. Он не учился печатать. Вера часто набирала рукопись со стопок карточек. «Я не начинаю роман с начала, я не добираюсь до третьей главы до четвёртой… каждая карточка переписывается множество раз» — так он описал процесс в интервью журналу «Плейбой».
Вирджиния Вульф вела дневник и черновики романов в одних и тех же тетрадях: это были большие форматы в обложках из цветной итальянской бумаги (Леонард Вульф описал их как «large post quarto»), суммарно двадцать шесть томов за жизнь. Она писала перьевыми ручками Waterman дешёвыми фиолетовыми чернилами (в одном из писем она шутила, что это звучит как реклама), и внутри всё шло вперемешку: личный дневник, подсчёты написанных слов, стилистические эксперименты, наблюдения для будущей прозы, размышления о текущей работе. “The habit of writing thus for my own eye only is good practice. It loosens the ligaments” («Привычка писать вот так, только для собственного глаза — хорошая практика. Она расслабляет связки»), записала она в 1919 году. Расслабить связки. Этот образ преследовал меня потом пару месяцев.
Чехов вёл четыре записные книжки и множество вспомогательных с 1891 года до смерти. На титуле надпись: «Сия книга принадлежит А. П. Чехову». Внутри: темы рассказов в две-четыре строки, портретные наброски (вроде знаменитого «он брюнет с бачками, одет франтом… выводит клопов, о землетрясении, о Китае»), обрывки диалогов, анекдоты, афоризмы; неиспользованные записи из одних тетрадей он переписывал в другие, причём сам акт переписывания был, по-видимому, формой оценки: то, что стоило переписать, стоило сохранить.
Барт вёл картотеку: около двенадцати тысяч двухсот пятидесяти карточек за сорок лет (подсчёт архива IMEC), с одной идеей на карточке и ключевым словом наверху. Барт использовал перьевую ручку с синими чернилами, ведь шариковых ручек он терпеть не мог, и раскладывал карточки в тематические группы внутри коробок без жёсткой иерархии: их можно было перетасовывать, переставлять, читать вслух, раскладывать в новом порядке, и из этого порядка рождалась рукопись. «Фрагменты речи влюблённого», по существу, перебранные карточки, и если кто-нибудь когда-нибудь думал, что в этой книге есть скрытая логика расположения глав, то, возможно, этот человек прав: это логика последнего расклада.
Кафка писал простым карандашом в маленьких тетрадках примерно восемнадцать на одиннадцать сантиметров с синими обложками без линовки. Размер позволял носить их во внутреннем кармане пиджака. Внутри: анекдоты, афоризмы, дневник, списки дел, черновики писем, адреса. У Кафки всё было вперемешку, почти без дат, страницы зачёркивались и вырывались. Саму прозу писал он по ночам, в ту знаменитую ночь «Приговора», 22-23 сентября 1912 года, рассказ был написан за один присест с десяти вечера до шести утра.
Шесть писателей, шесть совершенно разных форматов — и ни одной «системы управления знаниями».
Я искал систему, а нашёл привычку
Здесь мне нужно остановиться и признать кое-что, в чём я не сразу признался даже себе: я не случайно читал эти тетради.
Как я и говорил, у меня нет готового романа, но есть записная книжка, цифровая, в которой я уже несколько месяцев собираю мысли, цитаты, обрывки идей, а до того — годы опыта внутри всего, что предлагает индустрия: Notion, Obsidian, Logseq, Zim, Vim Wiki, Org-mode. Годы жизни внутри того, что называют PKMS. И вот что я хотел обнаружить в чужих тетрадях: что великие работали так же, что у них тоже была «система», что записная книжка — это прежде всего про организацию, и что если я найду правильный инструмент, правильную структуру, правильный воркфлоу, то и роман как-то…
Но великие работали не так, и тетради их — не системы организации знаний, а места, где мысль происходит, что, впрочем, совсем не одно и то же. Достоевский не раскладывал по папкам «Философия / Проза / Личное»: он думал стрелками и зачёркиваниями прямо на странице. Набоков не тегировал карточки: он перетасовывал их, как колоду, в поисках порядка, которого и сам не знал. Вульф писала дневник, чтобы «расслабить связки», а не чтобы потом удобно искать записи по тегам. А Кафка просто носил свою синюю книжицу в кармашке потёртого пиджачка, и да нет-нет, да и притрагивался к ней своим карандашом.
Из опыта шести писателей, чьи записные книжки я подробно изучил, я вывел семь общих свойств. Не правил (правила предполагают намеренность, а у Кафки с намеренностью было всё плохо), а именно свойств:
-
Смешение жанров в одном месте: никто не разделял дневники, идеи и цитаты.
-
Поток как основа: первая запись за день — естественная точка входа, внутри дня могло быть что угодно.
-
Метки, а не жёсткие папки: Барт писал ключевые слова наверху карточек, Достоевский ставил стрелки и пометки «см. выше».
-
Атомарные записи: одна мысль, одна единица, будь то карточка Набокова, афоризм Кафки или двухстрочный набросок Чехова.
-
Возможность перекомпоновки: Барт перетасовывал карточки, Набоков раскладывал в разном порядке, Достоевский рисовал стрелки на полях.
-
Минимум трения при записи: Кафка писал карандашом в тетрадке, которая помещалась в карман, и никто не выбирал «тип записи» перед тем, как начать.
-
Связи между записями, обнаруживаемые самим же автором, не навязанные: не иерархия, не сеть, идея из января только потому могла связаться с идеей из сентября, что автор сам помнил, как это записал — и память его придавала идее важность.
Но был ещё один признак, который я не включил в список, потому что он касался не тетради, а тела. Ни у одного из шести не было метода ведения заметок, зато у каждого был ритуал подхода к их записи. Набоков после утренней работы принимал горячую ванну с губкой на голове ради «словесной заботы» для ума. Диккенс был невероятный педант, работать он мог только на идеально убранном столе, писал только гусиными перьями синими чернилами. Если он был нужен семье, трубили в рог. Фолкнер вынимал дверную ручку кабинета и уносил с собой. Торнтон Уайлдер вспоминал: «моя стартовая площадка — долгие прогулки». Ни один из них не организовывал заметки, каждый организовывал себя. PKMS-индустрия продаёт обратное: якобы важна структура внутри, якобы правильный воркфлоу освободит мысль… но ни одна из тетрадей, которые я читал, этого не подтверждала.
И этот список, когда я его записал, выглядел подозрительно похожим на техническое задание. Как выяснилось, это не было совпадением.
Полтора гига для текста
Когда я, ещё до тетрадей, пытался понять, почему Obsidian, в котором я вёл записи, занимает в памяти больше, чем операционные системы, на которых я вырос, я наткнулся на традицию в программировании, которая утверждала, что это не случайность, а системная болезнь. Никлаус Вирт, создатель Паскаля, в 1995 году привёл в статье “A Plea for Lean Software” наблюдение: «Софт замедляется быстрее, чем ускоряется железо», и за тридцать лет оно только стало вернее. Он же написал вещь, которая зацепила меня не как программиста (напомню, я не программист), а как филолога: “A programmer’s competence should be judged by the ability to find simple solutions, certainly not by productivity measured in number of lines of code produced per day. Prolific programmers contribute to certain disaster” («Компетентность программиста следует оценивать по способности находить простые решения, а не по продуктивности, измеренной в строках кода за день. Плодовитые программисты создают катастрофу»).
Плодовитые программисты создают катастрофу. Я остановился на этой фразе. Потому что редактор Максвелл Перкинс вырезал из Вулфа шестьдесят тысяч слов, и без этого хода его книга была бы потоком слов, а не романом, и Вирт говорил, по существу, то же самое, только про код. Я тогда не думал о записных книжках, ещё не дошёл до них, ещё не заподозрил, что между тетрадью Кафки и текстовым редактором за триста мегабайт лежит не разница технологий, а разница понимания.
Я стал изучать вопрос дальше. Есть 100 Rabbits — художники, которые живут на паруснике и делают весь свой софт для работы без стабильного интернета на маломощном железе. Есть Джон Кармак, который написал твит: “Sometimes, the elegant implementation is just a function. Not a method. Not a class. Not a framework. Just a function” («Иногда элегантная реализация — просто функция. Не метод. Не класс. Не фреймворк. Просто функция»).
Я читал это и узнавал не код, который я, честно говоря, пишу из рук вон плохо, а логику, которую знаю уже много лет. Когда Кафка писал карандашом в тетрадке размером с ладонь и не выбирал «тип записи» перед тем, как начать, это и было <form>, <input>, <button> и ноль JavaScript. Когда Набоков стягивал карточки резинкой и складывал в коробку — это были текстовые файлы в директории. Я соглашался с этой философией и продолжал пользоваться Obsidian. Потому что одно дело — красивая философия, и совсем другое — изменить то, как ты работаешь.
Я курил и знал, что курить вредно.
Друг-программист (настоящий, из тех, кто пишет на крестах) однажды посмотрел на мой экран с открытым Obsidian и сказал: «У тебя текстовый редактор жрёт полтора гига». Не «попробуй другой инструмент», не «есть получше», он просто констатировал факт, что простая база знаний жрёт полтора гига, полтора гига для текста.
А потом тетради Достоевского показали мне, почему старое было правильным и почему я не мог это принять, пока не увидел теми же глазами, которыми привык смотреть.
Тысячи тонн словесной руды
Здесь мне придётся сказать то, ради чего, возможно, и написан этот текст, хотя я не был в этом уверен, когда начинал: простота — не эстетика и не идеология, а результат понимания, и это верно одновременно и для прозы, и для кода, и связь между ними глубже, чем метафора.
Маяковский написал однажды:
Поэзия —
та же добыча радия.
В грамм добыча,
в год труды.
Изводишь
единого слова ради
тысячи тонн
словесной руды.
Тысячи тонн руды ради одного слова! И это у Маяковского, который позиционировал себя стахановцем стиха. Даже у него суть ремесла не в производстве, а извлечении: как радий выходит из породы, как замысел выходит из мраморного избытка (Микеланджело в сонете 60, написанном около 1540 года для Виттории Колонна, сказал точнее всех: лучший скульптор не имеет замысла, которого мрамор не содержал бы в себе, нужно просто убрать лишний камень).
Вышеупомянутый Перкинс вырезал из рукописи Томаса Вулфа «Взгляни на дом свой, Ангел» около шестидесяти тысяч слов (машинопись была 1100 страниц) и Вулф без Перкинса был бы потоком, который заливал читателя. Перкинс знал не что добавить, а что убрать, и именно в этом состоит мастерство редактора.
Гордон Лиш сократил рассказы Карвера в сборнике «О чём мы говорим, когда говорим о любви» в среднем наполовину, а некоторые до 78%: рассказ «Ванна» — то, что осталось после удаления 78% текста. Лиш переименовал больше половины рассказов, переписал десять из тринадцати концовок, удалил все пассажи, в которых Карвер, по его мнению, был слишком нежен и слишком надеялся. Карвер в отчаянии писал ему: «Я не могу вынести такой хирургической ампутации и пересадки», но опубликовал, и стал Карвером, тем самым минималистом, которого знает весь мир и который, строго говоря, был не столько написан, сколько вырезан.
Маршак, топая ногой, повторяя “Думай! Думай!” заставлял авторов переписывать и переписывать, пока не оставалось только нужное. Он сам говорил о рукописях, которые проходили через его редакцию: «Здесь и заварка, и кипяток, и сахар с лимоном — все от редакции, авторская — только вода».
А теперь откройте манифест suckless.org: «The more code lines you have removed, the more progress you have made».
Одна и та же мысль — у Маяковского, который добывал радий из словесной руды, у Перкинса, который вырезал шестьдесят тысяч слов, у Лиша, который удалял семьдесят восемь процентов рассказа, у Маршака, который топал ногой и кричал «Думай!», у программистов, которые считают удалённые строки мерой прогресса, и у Сент-Экзюпери, который в Terre des hommes описывал, как конструкторы самолётов шлифуют и сглаживают, облегчают соединение, уравновешивают крыло, пока оно не перестанет быть крылом на фюзеляже и не станет формой, высвобожденной из оболочки, «того же качества, что и поэма»: это предчувствие единого закона, который никто из них не формулировал, но каждый исполнял, и есть, быть может, то, ради чего стоит писать это эссе.
Код, который легко удалить
Я долго думал, что это совпадение, что сходство между вырезанием лишнего в прозе и вырезанием лишнего в коде не больше, чем сходство метафор, ведь редактору положено знать разницу между аналогией и аргументом. Но потом я вспомнил кое-что из собственного опыта, не из чужих книг.
Когда ты сдаёшь экзамен по билету, который не выучил, ты начинаешь много говорить. Каждый, кто учился, знает этот приём: обложить незнание словами, создать иллюзию содержания. Преподаватель, если он хороший, видит это мгновенно, потому что многословие не ошибка, а симптом непонимания. И когда я впервые попросил нейросеть написать мне “веб-утилиту для ведения заметок”, она сделала ровно то же самое: она наговорила лишнего. Она подключила фреймворк, который я не просил. Она использовала какую-то библиотеку, которая генерировала нечитабельные SQL запросы в непонятно откуда взявшийся PostgreSQL. Напоследок, она выстроила абстракцию поверх абстракции поверх спагетти-кода, как студент, который не знает билет и надеется, что объём сказанного принесёт ему хотя бы “четвёрку”.
В ответ на это я написал: «Начни заново, пиши на Go, используй modernc sqlite и net/http».
И в этот момент я понял, что связь между прозой и кодом не метафорическая — она когнитивная, и она старше обоих ремёсел: избыточность была симптомом непонимания задолго до того, как появились программисты или редакторы. В обоих случаях избыточность — симптом того, что ты не понимаешь, что делаешь. Фреймворк — это «много слов»: он позволяет не думать о том, что именно происходит, потому что кто-то уже за тебя решил. И это удобно. React удобен. Electron удобен: ты ставишь одну команду, и через пять минут что-то работает.
Но «удобно» — не то же, что «просто», и путаница между ними — может быть, главная ошибка десятилетия. Удобное — это знакомое, быстро запускаемое. Простое — то, в чём одна забота не переплетена с другой, и судить о нём нужно не по первому впечатлению, а по артефакту, который оно оставляет. Я понял это только здесь, хотя мог бы понять раньше: Trillium Notes удобный, но внутри него — целый браузер Chrome, запущенный ради текстового поля, а граф ссылок, плагины, синхронизация и рендеринг переплетены так, что нельзя потянуть за одно, не задев другое. Карточка Набокова неудобная (попробуй напиши роман на карточках четыре на шесть!), но простая: одна мысль и ничего лишнего. Чехов с его двумя строками набросков неудобен, но прост, и простота была не ленью, а доказательством того, что мысль состоялась. Чехов переписывал неиспользованные заметки из тетради в тетрадь вручную — это чистейшая дупликация, и любая система управления знаниями назвала бы это неэффективностью… но через руку проходил отбор, и то, что стоило переписать, стоило сохранить впоследствии. Бэклинк не требует усилия. Переписывание — требует, и в этом усилии содержится суждение.
Удобное соблазняет первые тридцать минут. Простое выживает тридцать лет, а иногда, если верить Витгенштейну, который в конце Трактата потребовал от читателя отбросить саму книгу, как лестницу, по которой уже поднялся (метафора, дошедшая до него от Секста Эмпирика через Шопенгауэра, то есть пережившая восемнадцать столетий именно потому, что в ней нечему сломаться), простое переживает и собственного создателя.
Есть ещё одна вещь, которую я обнаружил, когда стал вырезать лишнее из нейросетевого кода: хороший код — это код, который легко удалить, а не код, который легко расширить. Когда я убирал фреймворк и оставлял три строки SQL, удаление было чистым: одна операция. Когда я пытался убрать абстракцию, которую нейросеть намотала поверх другой абстракции, приходилось развязывать десять файлов. Плохая архитектура как плохая проза: всё переплетено, и нельзя убрать одно, не сломав другое. Перкинс мог вырезать из Вулфа шестьдесят тысяч слов, потому что лишнее у Вулфа было лишним, оно не держало на себе конструкцию. Лиш мог удалить 78% «Ванны» Карвера, потому что ядро было самодостаточным. Тот же принцип: код, который легко удалить, это честный код. Проза, которую легко вырезать, это честная проза. Лишнее — то, что стоит между замыслом и результатом.
Лес, древесина, необработанный материал
Но я так и не рассказал, что я сделал с тем списком из семи свойств.
Я сделал программу silvae. На латыни это множественное число от silva: лес, древесина, необработанный материал. Стаций назвал так свой сборник разрозненных стихотворений в 92 году нашей эры, а Квинтилиан использовал silva как термин для черновика, избыточного, хаотичного первого наброска, из которого потом вырезается готовый текст. И здесь наступает момент стыда, без которого этот текст был бы нечестным.
Было два часа ночи. Я сидел за кухонным столом в свете монитора своего старенького Hewlett-Packard’а, и смотрел на Opencode, в котором белые буквы на чёрном фоне танцевали фокстрот для будущей программы, которую я не мог написать сам. Чай давно остыл. Нейросеть только что выдала мне пятьсот строк кода, из которых я понимал, может быть, тридцать, но эти тридцать были те самые, а остальные сто семьдесят я мог попросить переписать, убрать, заменить.
Я не программист. Я филолог, который может прочитать чужой код и примерно, с прищуром, как врач читает почерк другого врача, понять, что он делает, но написать свой не способен: я могу рассказать вам про то, как работал Достоевский, но не могу написать for цикл без подсказки. Зато я умею разговаривать с нейросетью, и это, как выяснилось, оказалось достаточным. Я уже знал к тому моменту, что лишнее — симптом непонимания. Оставалось применить это к собственному коду.
(Хотя, если быть до конца честным, а этот текст не имеет смысла без честности, я не уверен, что выбрал простоту потому, что это добродетель. Может быть, я выбрал простоту потому, что у «вайбкодера» нет выбора. Микросервисы, распределённые базы я бы просто не смог отредактировать, потому что не понял бы, что в них лишнее, а что несущее. Может быть, мой «принципиальный минимализм» — рационализация программистской некомпетентности. Я не знаю. Но иногда ограничение, которое ты не выбирал, оказывается формой, которая тебе нужна).
Три тысячи двести пятьдесят три строки
Всё, что мне важно в silvae, можно, как ни странно, сказать несколькими числами, и, как ни странно, сами эти числа, в которых нет ни одного большого, оказываются аргументом убедительнее любого манифеста.
Три тысячи двести пятьдесят три строки Go, одиннадцать файлов, один пакет package main, никаких подпакетов. Программу можно прочитать за одно утро, как рассказ средней длины. Шестнадцать мегабайт бинарника, в который вкомпилированы шаблоны, стили, иконка, даже браузерное расширение для быстрой вставки веб-ссылок и цитат. Один файл базы данных, SQLite (программа и её данные — это ./silvae плюс silvae.db, и больше ничего: можно скопировать оба на флешку, и у тебя в кармане вся записная книжка, как тетрадка Кафки в кармане пиджака).
Пять зависимостей. Но каждая с обоснованием того, почему её бессмысленно писать самому: modernc sqlite без CGO зависимостей, рендерер Markdown, парсер TOML, декодер Opus, парсер WebM. Ноль фреймворков. Прямой SQL: db.Query, db.Exec, rows.Scan — я знаю, что делает каждый запрос.
Шестьдесят девять строк JavaScript на всё приложение, и каждая деградирует до `form method=POST` с перезагрузкой страницы, если скрипт не загрузится.
Один CSS файл на девятьсот семьдесят пять строк, ни одного препроцессора, длина строки 65 символов, высота строки — полтора: это книжная типографика, а не интерфейс приложения, потому что silvae — не приложение, а тетрадь. Собирается простым make. Запускается без внешних сервисов.
Голосовой ввод работает так: браузер записывает звук в WebM, сервер разбирает контейнер, декодирует Opus в самом себе без ffmpeg и внешних утилит, собирает WAV-заголовок вручную, сорок четыре байта по спецификации RIFF, а потом отдаёт файл whisper.cpp. Если whisper.cpp не установлен, кнопка микрофона исчезает и ничего не ломается.
Семантический поиск устроен ещё проще: фоновая горутина раз в тридцать секунд проверяет, нет ли записей без эмбеддингов, отправляет их в Ollama, получает векторы и складывает в SQLite как блобы. При поиске загружает все векторы в память и считает косинус в цикле. Никакого векторного индекса, только прямой перебор, потому что это личная тетрадь, а не продакшн-база с миллионом записей, и прямой перебор тут будет работать прекрасно. Если Ollama нет — остаётся полнотекстовый FTS5, и всё работает как положено.
Когда я перечитываю эти характеристики, я вижу в них те же семь свойств, которые я вывел из чужих тетрадей, только переведённые на другой язык. Всё то же самое: хочешь — пиши мысль, хочешь — вставь цитату, хочешь — надиктуй. внутри одного дня что угодно, как у Вульф с её дневниками, где личное перемешано с рабочим. Хронологический поток как основа, хештеги вместо папок, Барт с его ключевыми словами наверху карточек. Атомарные записи. Календарь, в котором дни с записями подсвечиваются без строчки JavaScript. Режим ревью, где программа показывает непомеченные записи по одной, как стопку карточек, и ты ставишь метку: 💎 или 💩.
Никакого облака, никакого, чёрт побери, «войдите, чтобы продолжить». Тетрадь Чехова была самодостаточна: не нужен был сервер Яндекса, чтобы открыть собственные мысли. Карандаш и бумага не требуют инноваций, они скучны, и в этой скуке есть их сила, потому что всё внимание достаётся тексту, а не инструменту. Моя программа пытается быть тем же — технологией настолько скучной, что на неё не тратишь внимание. Silvae — не ритуал, но, может быть, она может стать его частью, как конторка Набокова была не литературой, а мебелью, на которой литература случалась.
Может ли программа быть тетрадью
Но вот что меня не отпускает, и это, возможно, тот вопрос, ради которого я всё это написал, хотя заметил его только сейчас: между записной книжкой Достоевского и silvae лежит пропасть, которую никакой код не перепрыгнет.
Достоевский мог рисовать готические окна между строками, переворачивать тетрадь вверх ногами и писать с конца, заполнять поля мужскими профилями, которые, возможно, были портретами персонажей, а возможно, просто каракулями от скуки. У него не было <input type="text"> и кнопки «сохранить», у него был бесконечный лист, который не диктовал форму. Любая программа, даже самая минимальная, навязывает структуру. Текстовое поле рождает ограничение так же, как и хронологический список. Кнопка «сохранить» разрывает строгую связь мысли и записи, которая есть в бумажной тетради. И я не знаю, честно не знаю, может ли программа по-настоящему быть инструментом мышления, а не инструментом хранения. Может быть, Obsidian с его графом и Notion с его блоками не стали и не станут тетрадями великих не потому, что они слишком сложные, а потому, что программа вообще не может быть тетрадью; потому что экран, клавиатура, кнопка превращают мысль в данные… Данные живут дольше кода: тетради Достоевского пролежали в жестяном ящике полтора века и остались в порядке — им не нужен был рантайм или подписка. Если формат привязан к программе, данные умирают вместе с ней; поэтому silvae хранит всё в одном файле SQLite, который можно открыть любым инструментом через сто лет, если за сто лет не забудут SQL, а SQL, кажется, забыть труднее, чем латынь.
Но потом я вспоминаю, что Барт тоже работал с ограничениями, и жёсткими: карточка четыре на шесть — это не бесконечный лист, это ровно одна мысль, и ограничение формата создавало ту самую атомарность, которая позволяла перетасовку. Набоков мог начать роман с середины именно поэтому: карточка не может знать порядка, она не первая и не последняя, она просто есть, и только автор решает, куда она ляжет. И может быть (я не уверен, но хочу быть уверен, а это разные вещи) текстовое поле и кнопка «сохранить» — не ограничение, а формат, как карточка, как синяя обложка маленькой тетрадки Франца Кафки, в которую входит ровно столько листов, сколько входит: не бесконечность, но рамка, внутри которой мысль может работать.
Может быть.
За выходные
У Девин Лю Линвега из 100 Rabbits в докладе “Weathering Software Winter” было: “I want my future self to be able to reimplement my entire system at most in a weekend” («Я хочу, чтобы моё будущее я могло заново пересобрать всю мою систему максимум за выходные»).
Не за квартал и не за «спринт», а за выходные. То есть, если ты можешь переписать свою систему за выходные, значит, ты понимаешь её целиком, если не можешь, значит, в ней есть части, которые ты не понимаешь, и эти непонятые части, они и есть лишние, как лишние слова в черновике Вулфа, как лишний код в нейросетевом черновике, из которого я вырезал silvae.
Роман по-прежнему в моей голове; я пишу в silvae каждый день, расслабляю связки. Может быть, он появится, когда связки разомнутся, а может быть, он уже существует в виде этих карточек. Набоков ведь тоже начинал не с начала: “There comes a moment when I am informed from within that the entire structure is finished. All I have to do now is take it down in pencil or pen” («Наступает момент, когда мне сообщают изнутри, что вся структура завершена; остаётся только записать её карандашом или ручкой»).
Я жду. А тетрадь уже есть.
А может быть, я просто удобно прокрастинирую, подменяя написание прозы написанием программы, а написание программы — написанием эссе о написании программы, тетрадь в тетради в тетради.
Иногда я вспоминаю готические окна Достоевского, те, которые он рисовал между строками, вместо текста, вместо работы. Лихачёв считал, что вертикаль готики — это верх и низ самого Достоевского, Бог и дьявол. Но, может быть, и не готика отражала Достоевского, а Достоевский, рисуя окна, искал форму для того, чему слова ещё не нашлись. А может быть, он рисовал окна, потому что окно — это рамка, через которую видно, но которая сама не есть небо. Тетрадка — рамка. Карточка — рамка. Текстовое поле и кнопка «сохранить» — рамка. Готическое окно между строками, нарисованное вместо того, чтобы писать, может быть, это и была запись.
Я начал этот текст с того, что в тетрадях Достоевского нет порядка. Я ошибался. Порядок есть, но это не наш порядок, не тот, которого ждёт человек, привыкший к папкам и дашбордам. Это порядок руки, которая думает, пока движется. Стрелки, перевёрнутая тетрадь, готическое окно между строками, вырванные страницы — всё это не беспорядок, а навигация, непохожая на нашу. Как в истории про палимпсест, с которого монах в аббатстве Боббио в VII веке соскоблил Цицерона, чтобы написать поверх комментарии к Псалмам, а тысячу лет спустя стёртый текст оказался ценнее написанного, — так и в тетрадях Достоевского то, что кажется хаосом, хранит порядок, который мы просто не умеем читать. Девятнадцать тетрадей всё же образуют систему, которая просто не нуждается в том, чтобы выглядеть как система.
Ссылки на Гитхаб не будет. Silvae — личная вещь, сделанная на мой вкус, как тетрадка Кафки была сделана под его карман. Но три тысячи строк на Go может написать любой, кто умеет кодить, или как минимум может объяснить нейросети, что есть «лишнее» по сути своей.
ссылка на оригинал статьи https://habr.com/ru/articles/1050008/