Деградация организации заметок одного программиста

О ведении и организации заметок пишут книги, создают приложения и плагины, продают курсы. Кажется, все должно быть значительно проще. Я сознательно веду заметки более 15 лет, и хочу поделиться опытом.

45e8c217263eb8805ffe9fddde229382.png

Чего хочется получить от заметок?

Самое важное, чтобы заметки позволяли решать поставленные задачи, будь то:

  • ведение собственной системы знаний (пример: Zettelkasten, Smart Notes);

  • организация тайм-менеджмента (записи Любищева, книга «Эта странная жизнь»);

  • управление проектами (замена Jira/Trello);

  • календарь и планирование (org mode в Emacs позволяет);

  • написание книг и статей (пример: пишу эту статью в заметках);

  • хранение паролей (храню в памяти и зашифрованно в заметках);

  • финансовый учет и другие виды учета (веду виртуальные счета, например, счет для отпусков).

Всё из перечисленного можно решать в разных приложениях, используя разные системы ведения заметок. Кто-то будет утверждать, что одна система лучше другой или что одни приложения лучше других. Сторонники Zettelkasten приведут в пример невероятную продуктивность основоположника Никласа Лумана. Есть не менее продуктивный Александр Любищев, который вел заметки по-другому и вдохновил немало людей.

Что касается приложений и программ, важно не возводить инструмент в культ, как это часто происходит с Evernote или Obsidian. Выше перечисленные суперзвезды мира заметок использовали бумагу и карандаш.

Если инструменты и системы ведения не так важны и ценность их субъективна, чего же все-таки хочется от организации ведения заметок? Я для себя выделил три пункта:

  1. Доступ к заметкам с нескольких устройств (телефон, ноутбук).

  2. Контроль над данными и безопасность (сохранить доступ к данным, не потерять пароль).

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

Описание системы через историю изменений

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

Начал вести Любищев свою систему с 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.

Анатолий Бугорский — советский учёный в области физики элементарных частиц, голова которого оказалась в ускорителе У-70.
Анатолий Бугорский — советский учёный в области физики элементарных частиц, голова которого оказалась в ускорителе У-70.

В-пятых, написал в 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 со схлопнутыми заголовками

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:

2058aff93523c0f3cee3602e8c6b2f25.png

Чтобы сделать двухстороннюю карточку (вопрос — ответ, ответ — вопрос), нужно использовать не :: и ?, а ::: и ?? соответственно. Примеры:

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, потому что:

  1. Сервис может уйти из страны (Notion) или вовсе удалить данные пользователей из неугодных стран (Slack).

  2. Есть риск потерять доступ к данным (пример с Evernote из этой статьи).

  3. Сервис может потерять (слить) данные или вообще удалить их (Anki удаляет через полгода).

  4. Сервис хранит данные в своих форматах — при экспорте возможны потери форматирования и метаданных.

  5. За сервис надо платить (Anki под IOS стоит 25$. Evernote — 10$ в месяц), цена может повыситься в любой момент, платежи из России могут перестать принимать.

  6. Сервис может прекратить поддержку на платформе (предательство Evernote Linux).

Синхронизация через Yandex Disk и открытие файлов на телефоне через Obsidian не делают систему уязвимой. Что бы ни сделали обе платформы, я не потеряю свои файлы и папки, смогу работать с ними в любом текстовом редакторе, смогу заменить эти сервисы на конкурентов.

© Habrahabr.ru