Деградация организации заметок одного программиста
О ведении и организации заметок пишут книги, создают приложения и плагины, продают курсы. Кажется, все должно быть значительно проще. Я сознательно веду заметки более 15 лет, и хочу поделиться опытом.
Чего хочется получить от заметок?
Самое важное, чтобы заметки позволяли решать поставленные задачи, будь то:
ведение собственной системы знаний (пример: Zettelkasten, Smart Notes);
организация тайм-менеджмента (записи Любищева, книга «Эта странная жизнь»);
управление проектами (замена Jira/Trello);
календарь и планирование (org mode в Emacs позволяет);
написание книг и статей (пример: пишу эту статью в заметках);
хранение паролей (храню в памяти и зашифрованно в заметках);
финансовый учет и другие виды учета (веду виртуальные счета, например, счет для отпусков).
Всё из перечисленного можно решать в разных приложениях, используя разные системы ведения заметок. Кто-то будет утверждать, что одна система лучше другой или что одни приложения лучше других. Сторонники Zettelkasten приведут в пример невероятную продуктивность основоположника Никласа Лумана. Есть не менее продуктивный Александр Любищев, который вел заметки по-другому и вдохновил немало людей.
Что касается приложений и программ, важно не возводить инструмент в культ, как это часто происходит с Evernote или Obsidian. Выше перечисленные суперзвезды мира заметок использовали бумагу и карандаш.
Если инструменты и системы ведения не так важны и ценность их субъективна, чего же все-таки хочется от организации ведения заметок? Я для себя выделил три пункта:
Доступ к заметкам с нескольких устройств (телефон, ноутбук).
Контроль над данными и безопасность (сохранить доступ к данным, не потерять пароль).
Удобное редактирование, поиск, привычные горячие клавиши при работе с компьютера.
Описание системы через историю изменений
Из статей и книг складывается впечатление, что Любищев создал идеальную систему и пользовался ей до конца жизни без изменений. Цитирую случайную статью:
Начал вести Любищев свою систему с 26 лет и работал так до конца своих дней.
Система преподносится как готовая и в случае с Zettelkasten. Правда, при целенаправленном гуглении про изменения можно наткнуться на статью «Почему Луман был вынужден начать второй Zettelkasten».
Системы ведения заметок не открываются как математические теоремы, но приходят к стабильному состоянию через изменения. Если вы работаете в IT, то наверняка наблюдаете адаптацию гибких подходов разработки, взлеты и падения скрам-мастеров, обновления инструментов, версий библиотек и языков программирования — все постоянно меняется и развивается.
Системы ведения заметок … приходят к стабильному состоянию через изменения.
Понять причины изменений поможет история, которой и хочу поделиться.
Первый подход: папки и файлы
Когда-то ещё при поступлении в университет в 2009 году, я вели заметки, создавая папки по темам и датам. Внутри папок размещал doc-файлы. Нужна была таблица — создавал Excel, небольшой текст — txt. Данные были в другом формате — оставлял как есть. Поиск осуществлял по тексту внутри папок обычными средствами Windows.
Формат папок менялся в зависимости от требований, система была гибкая и подконтрольная. При смене компьютера перемещал данные, копируя всё на флешку, а затем появились Dropbox, Google Drive, Yandex.Disk — стал синхронизировать данные через них.
Все три пункта из раздела в начале статьи о том, чего хочется получить от заметок, соблюдались. Разве что с любого устройства редактировать не пытался , да и смартфона у меня не было.
Что касается безопасности хранения паролей — об этом будет отдельный раздел в конце статьи.
Подход второй: Evernote и Anki
Наступил 2014 год, я увлекся темой организации знаний и запоминания. Написанная статья Помнить всё: Evernote и Anki оказалась весьма популярной.
То, что обещал подход, вызывало восторг: предполагалось, что можно помнить действительно все, разделяя знания на те, что всегда должны быть под рукой, и те, что должны быть в голове.
Все, что требовалось в скорой доступности, загружалось в Evernote, где есть умный поиск, который и по тексту внутри фотографий мог искать.
Все, что должно быть в долговременной памяти, повторялось постоянно через Anki c использованием интервального повторения.
Невероятная череда событий убила Evernote и Anki
Система казалась безупречной, пользовался ей несколько лет, но материализовалось стечение обстоятельств, достойное «Пункта назначения».
Во-первых, я потерял телефон в чужой стране.
Во-вторых, не смог залогиниться в Evernote, потому что без телефона нельзя пройти двухфакторную аутентификацию, которую подключил месяцем ранее.
«Не беда, иди и восстанови симку», — скажете вы. Восстановить не смог, потому что, в-третьих, в прошлом году обновил паспорт, а в офисе tele2 меня послали на корень из девяти вместе с моим казахстанским паспортом, номер которого изменился.
«Не беда, восстанови локальные данные с компьютера», — скажете вы. Восстановить не смог, потому что, в-четвертых, по небрежности командой mv
удалил данные.
Да, физики суют головы в ускорители частиц, а разработчики теряют данные с mv.
В-пятых, написал в Evernote. В отличие от бюрократических инстанций, где посылают из кабинет в кабинет, Evernote послал в другое место. Оценивать службу поддержки приходилось по не произнесенному слову с «и кратким» на конце.
Мой случай, безусловно, уникальный, и практически никому не грозит, но есть и другие варианты потери доступа к сервису. Примеры:
Масса людей лишилась возможности ведения заметок в Notion, когда они ушли из России.
Карточки Anki я тоже потерял, потому что не пользовался сервисом какое-то время и попал под удаление.
Slack удалял workspace некоторых российских компаний. Я тогда работал в SberDevices, и пользовался историей по Slack как базой знаний.
Кроме того, уйти от сервиса может быть сложно, если данные хранятся в частном формате. При экспоте в более популярный формат (markdown, например), часть данных может потеряться.
Отказ от сервисов, глухие поиски
Искал альтернативу Evernote, но практически все приложения, которые находил, держали данные у себя на серверах в своих форматах. Не хотелось доверяться сервису после выше описанного опыта, поэтому вернулся к проверенному варианту: файлы, папки и синхронизация в нескольких местах (Yandex Disk, Dropbox, несколько устройств).
Встал вопрос: в чем вести заметки? Пробовал писать текст в Intellij IDEA
— редакторе кода, к горячим клавишам которого давно привык. Но отказался: IDEA
— слишком громоздкая программа, предназначенная для других целей.
Как пользователь Vim решил посмотреть имеющиеся решения. В разные периоды времени пробовал плагины: vimwiki, vim-notes, fmount/vim-notes, vnabla.nvim, mind.nvim — какие-то еще, уже не помню.
Ни один вариант не устраивал: где-то настройки не давали простора, где-то данные хранились в своих форматах — что неудобно, когда нужно работать с текстом, открытым на смартфоне. В итоге отказался от всего по принципу бритвы Оккама.
Кстати, не оставил без внимания и org mode в Emacs, пока изучал Clojure
, но в какой-то момент решил отказаться от Emacs
, чтобы не множить сущности: уже была IDEA
для работы с Java/Kotlin
-кодом и Vim
для всего остального.
Как веду заметки сейчас: инструменты
Использую файлы и папки, как оно было когда-то, только вместо doc
и txt
— markdown
. Последний имеет минималистичный синтаксис, поддерживается любым текстовым редактором, совместим (доступны import/export) практически со всеми современными сервисами заметок.
Синхронизацию настроил связкой Obsidian и Yandex Disk (инструкция), причем на компьютере Obsidian даже не установлен. Используется для удобства на телефона и для повторения.
На этом можно было бы заканчивать статью, но я решил все-таки оставить немного деталей (раскрываемый блок).
Работаю с файлами в neovim
Заметки открываю как полноценный проект, по которому могу навигироваться средствами Neovim — ничего специально для заметок не ставил.
В файлы иногда добавляю теги для связи между заметками. Есть главный, наиболее изменяемый, файл TODO.md
:
TODO.md со схлопнутыми заголовками
Пользуюсь схлопыванием (folding), чтобы работать только с нужными в данный момент фрагментами файла (видно на скриншоте выше).
Умные фичи, вроде автодополнения, работают через ИИ — Codeium.
Поиск, переходы по ссылкам, проверка грамматики осуществляются через базовые плагины Neovim
: Telescope
, LSP
(ltex сервер).
Как пользуюсь интервальным повторением
Интервальное повторение теперь в markdown
с Obsidian-плагином spaced repetition. Мне это удобнее, чем Anki, потому что могу использовать те же инструменты и горячие клавиши для навигации и редактирования, что использую для всего остального.
Плагин парсит файлы, в которых есть указанный в настройках тег. Синтаксис для описания карточек простой, вопросы формируются либо в одну строчку:
Вопрос :: Ответ
Size of empty struct{} :: 0
Либо в несколько:
# Programming languages
## Golang
What is the iteration order of maps
?
Unspecified. Random order.
Заголовки и имена файлов влияют на иерархию заметок в UI:
Чтобы сделать двухстороннюю карточку (вопрос — ответ, ответ — вопрос), нужно использовать не ::
и ?
, а :::
и ??
соответственно. Примеры:
1M transactions per day is X per second ::: 12 transactions per second is X per day
Set transaction isolation level for:
1. dirty read;
2. norepeatable read;
3. phantom read;
??
These isolation levels help fixing reads:
1. read commited;
2. repeatable read;
3. serializable;
После повторения карточек через похожий на Anki UI, плагин добавит метаданные текстом прямо под описанием карточки (формат):
1M transactions per day is X per second ::: 12 transactions per second is X per day
Мне спокойно от того, что всё — в тексте. Легко смогу написать скрипт, чтобы распарсить это и перевести в другую программу с интервальным повторением.
Какой системы придерживаюсь
Главное в системе — динамичность и адаптация. Появляются проблемы — меняю подход. Не хочется описывать детально, так как не считаю, что это представляет большую ценность, но несколько штрихов оставлю.
Для каждой рабочей задачи создаю папку с файлами. Если случается, что не могу найти какие-то данные или ответить на вопрос по предыдущей задаче, то начинаю такое записывать впредь. Например, если спросят, с кем и когда обсуждал решение, у меня теперь есть ответ в заметках со ссылкой на рабочий чат.
Веду папки по разделам знаний, вроде psychology
и philosophy
, где создаю другие папки, вроде psychology/accentuation
. Записываю идеи и наблюдения, гипотезы, иногда оставляю ссылки на прочитанные статьи и характерные события из жизни.
Статьи пишу в папках с заметками. Всегда есть несколько начатых статей, некоторые могут лежать недописанными по несколько лет, но обычно не более месяца. Когда попадается интересная идея, добавляю ее в папку со статьей.
Что касается интервального повторения, в какой-то момент решил, что вечно повторять составленные когда-то карточки не имеет смыла. Начал делать это по требованию. Например, при подготовке к собеседованию (*
) сбрасываю все интервалы по конкретному стеку (**
) в 0 и начинаю повторять, пока собеседование не закончится. В процессе повторения меняю, удаляю и добавляю карточки.
*
Не считаю, что разработчик должен помнить все, но подготовка нужна, чтобы максимизировать результат, а интервальное повторение — чтобы минимизировать усилия.
**
Менял стеки: работал в android-разработке, clojure fullstack, java/kotlin backend. Когда переключаешься между стеками, приходится вспоминать терминологию.
Что насчет безопасности?
Учитывая, что заметки синхронизируются в Yandex Disk, а автодополнения работают через Codeium — есть риск, что данные куда-то утекут, поэтому пароли хранить в заметках не очень комфортно.
Большую часть паролей составляю, применяя функцию к домену, и таким образом, ничего, кроме функции, помнить не надо. Важные сервисы подкреплены подтверждением по почте/телефону. Подробнее написал о подходе с примерами в TG.
Некоторые пароли имеют другой формат, запоминать их не хочется, но сохранить куда-то нужно. Их записываю в заметки в зашифрованном виде. Что за шифр? Со времен увлечения мнемотехниками у меня остались визуальные образы на числа, которые знаю только я. Когда сохраняю какие-то пароли в заметках, всегда заменяю числа на текст образов, и никто, кроме меня, не сможет это прочесть. Пароль может выглядеть как 123abc17#
, а у меня в заметках будет что-то вроде <бензоколонка><кирпич>abc<телепорт>#
.
Согласен, это не идеальная модель, но как дополнительный рубеж обороны имеет право на существование, если сервисами пользоваться не хочется.
Резюмируя
Получилась редуктивная эволюция: от «умных» приложений вернулся к файлам и папкам. Отказался от сервисов, вроде Evernote и Anki, потому что:
Сервис может уйти из страны (Notion) или вовсе удалить данные пользователей из неугодных стран (Slack).
Есть риск потерять доступ к данным (пример с Evernote из этой статьи).
Сервис может потерять (слить) данные или вообще удалить их (Anki удаляет через полгода).
Сервис хранит данные в своих форматах — при экспорте возможны потери форматирования и метаданных.
За сервис надо платить (Anki под IOS стоит 25$. Evernote — 10$ в месяц), цена может повыситься в любой момент, платежи из России могут перестать принимать.
Сервис может прекратить поддержку на платформе (предательство Evernote Linux).
Синхронизация через Yandex Disk и открытие файлов на телефоне через Obsidian не делают систему уязвимой. Что бы ни сделали обе платформы, я не потеряю свои файлы и папки, смогу работать с ними в любом текстовом редакторе, смогу заменить эти сервисы на конкурентов.