Как учить языки программирования и создавать базу знаний с помощью метода из прошлого века: опыт четырех инженеров

в 9:51, , рубрики: emacs, Memex, obsidian, org-mode, zettelkasten, база знаний, опыт разработчика, умные заметки, цеттелькастен

Недавно в комментариях к тексту про построение личной базы знаний на Хабре читатель отметил, что в таких статьях не хватает примеров работы с техническими данными. Давайте это исправим. Мы спросили у инженеров YADRO и технарей из сообщества «Цеттелькастен и Персональные базы знаний», как и для чего они ведут свои заметки.  Герои статьи используют Obsidian и Emacs, а также личные Telegram-каналы, чтобы изучать новые языки программирования, проходить технические собеседования и вести рабочие записи.

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

А вот и тот комментарий, благодаря которому мы решили опубликовать этот текст
А вот и тот комментарий, благодаря которому мы решили опубликовать этот текст

Как появился Цеттелькастен и в чем его суть

В середине XX века социолог Никлас Луман разработал метод организации информации Цеттелькастен (Zettelkasten). Занимаясь наукой, Луман создавал множество заметок, о значении которых вскоре забывал. Чтобы не терять полезные знания, он начал вести картотеку. Идея такого хранилища не была новой: начиная с XIV века ученые и исследователи по всему миру пытались систематизировать информацию единственным доступным способом — вели бумажную документацию. Но только Никласу Луману удалось превратить ящик с бумагами в рабочий инструмент. Он описал Цеттелькастен в эссе "Kommunikation mit Zettelkästen", вышедшем в исследовании теории систем, — так метод стал популярным.

Название метода состоит из двух немецких слов, которые переводятся как «карточка» и «чемодан» и дословно описывают способ хранения Лумана. Ученый заводил карточку под одну мысль и помещал ее в ящик, где находились другие связанные с ней карточки. Для записей он выбирал листы обычной бумаги формата А6 — они тоньше, чем специальные каталожные карты, и занимали меньше места. 

Картотека Никласа Лумана, хранится в Билефелдском университете, где преподавал ученый

Картотека Никласа Лумана, хранится в Билефелдском университете, где преподавал ученый

Карточки не работали бы без системы нумерации и ссылок, которая помогала быстрее в них ориентироваться. У каждой заметки был номер: первая цифра — номер темы, вторая — номер заметки. Если Луману нужно было дополнить заметку, он добавлял к названию новой карточки букву. В итоге получается уникальный код, который вы видите на картинке: 9 — номер темы, 8 — номер заметки, j — обозначение дополнительной карточки.

Одна из карточек Лумана

Одна из карточек Лумана

В начале каждой крупной темы — например, новой научной статьи — ученый писал карточку с важными подтемами и помечал их заглавными буквами. С них начинался код карточки внутри большой темы. Внутри такой системы номер карточки мог выглядеть так: А (подтема) / 1 (номер темы заметки) / а (дополнение). 

Так выстраивалась древовидная структура, похожая на устройство современных облачных инструментов для ведения заметок.

Карточка-содержание с буквами для подтем

Карточка-содержание с буквами для подтем

Онлайн-инструменты, использующие метод 

Логика, по которой Никлас Луман собирал и хранил информацию, легла в основу современных инструментов для организации данных: Obsidian, Notion, Org-mode (Emacs) и других. Сам инструмент — это шкаф, корневые папки — ящики, в который пользователь «складывает» страницы, заменившие карточки. Если бы ученый посмотрел на программы управления данными, он бы удивился, насколько их устройство похоже на устройство Цеттелькастена. Инструменты помогают распределить данные в древовидную систему с четкой иерархией и простым управлением. Пользователь может перемещать заметки, собирать их в группы и организовывать необходимую логику вложенности элементов.

Программы, вдохновленные методом, активно используют как в корпоративных, так и в личных целях — в компаниях ведут базы знаний, а рядовые пользователи составляют в них конспекты, когда читают книги или проходят обучающие курсы. В практическом применении Цеттелькастена много нюансов, поэтому мы попросили активных пользователей метода поделиться опытом. О поиске решения для хранения данных и задачах, в которых оно помогает, рассказали инженеры и программисты.

Как инженеры применяют Цеттелькастен на практике

«Уровень подготовки должен быть ненулевым» 

Как учить языки программирования и создавать базу знаний с помощью метода из прошлого века: опыт четырех инженеров - 5

Дмитрий Зверев

Go-разработчик в департаменте объектных хранилищ, пишет API для TATLIN.OBJECT и ведет заметки в Obsidian

Я использую Obsidian — самый близкий к Цеттелькастену инструмент — для изучения новых языков программирования уже год. До Obsidian пользовался Notion, но у этой программы есть значительный минус: когда сущностей становится слишком много, инструмент загружается медленно и с трудом открывает новые страницы. Когда мои заметки перестали влезать в Notion, я начал искать новый метод хранения данных и наткнулся на обсуждение программы Obsidian в чате Gopher Club. Заинтересовался методом, по которому работает сервис, прочитал несколько статей на Хабре про Цеттелькастен и решил переносить данные из Notion в новое пространство. За год в моей коллекции накопились заметки по двум языкам: Go и Python. 

С каждой большой темой я работаю по одному и тому же сценарию. В первую очередь читаю входную документацию по языку, например, A Tour of Go. Для каждого языка завожу отдельную папку, внутри которой собираю информацию в группы-фонемы — они формируют верхнеуровневую структуру файлов внутри папки для языка. Набор групп необязательно соответствует оглавлению в источниках — составляю его так, как удобно мне.

Верхнеуровневая структура заметок для языка Go 

Верхнеуровневая структура заметок для языка Go 

Внутри верхнеуровневой группы я пишу большой конспект, а потом делю его на отдельные документы. Один документ — одна подгруппа. На примере видно, что в группе Data structures я завел подгруппы Array, Map и Slice. По каждой из них ищу информацию и в процессе чтения записываю в соответствующий документ.  

Подгруппы

Подгруппы

У каждого из объектов в языках программирования есть специфическое поведение, о котором нужно знать. Например, структура данных Map в Go содержит понятие «эвакуация данных». Каждое из таких понятий — отличный кандидат на микрозаметку, как в Цеттелькастене. 

Микрозаметка о Map evacuation в системе Дмитрия

Микрозаметка о Map evacuation в системе Дмитрия

Помимо ключевой мысли, у каждого документа есть теги, которые связывает его с другими заметками. При помощи тегов Obsidian позволяет строить граф, на котором стрелками показано, что с чем связано. Это довольно неплохо визуализирует связи и выстраивает систему в голове.

Все заметки Дмитрия в виде графа

Все заметки Дмитрия в виде графа

На этом графе видно, что функция range в языке Go работает для 4 объектов (slice, map, channel, array), а применить ее можно только с циклом for. Для меня эта связь была неочевидной, пока я не визуализировал информацию в программе.

Когда я сформировал крепкую техническую базу по языку, я иду на собеседование. В моем случае интервью — инструмент для верификации знаний. На собеседовании я сопоставляю вопросы интервьюера с моими записями: могу ли я ответить на вопрос, руководствуясь информацией в заметке? Если не могу, значит, нужно реструктурировать существующие данные или добавить новые.

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

Думаю, Obsidian подойдет любому, кто хочет изучить новую дисциплину при одном условии: уровень подготовки должен быть ненулевым. Если вы совсем не знакомы с темой, есть риск неправильно разделить информацию на группы и запутаться еще больше. Перед тем, как начать вести заметки, советую пройти базовый курс или позаниматься с ментором по интересующей теме. Кому точно могу посоветовать инструмент:

  • тем, кто привык работать на десктопе и не нуждается в постоянном доступе к заметкам — у Obsidian неудобное мобильное приложение,

  • тем, кто устал от проблем с Notion и хочет пользоваться более быстрым сервисом,

  • тем, кому нужен инструмент с поддержкой офлайн-режима,

  • тем, кто готов кропотливо собирать заметки и обновлять данные.

Я актуализирую информацию после собеседований или когда выходит новая версия языка. За год использования Obsidian я не успел перенести все заметки из Notion — это долгая работа, но результат того стоит: возвращаюсь к записям каждый раз, когда хочу освежить знания, а в голове уже выстроилась система, которая помогает запомнить сложную информацию.

«IDE созданы для кода, для всего остального есть Obsidian»

Как учить языки программирования и создавать базу знаний с помощью метода из прошлого века: опыт четырех инженеров - 10

Наталья Сагель

Инженер-программист и участник Zettelkasten-сообщества. Разрабатывает модули телефонии для Asterisk, Maxim Technology. Пишет на Scala и Java. Изучает Kotlin с помощью системы заметок

Полностью повторить базу Лумана невозможно и отчасти даже вредно. В наш цифровой век достаточно различных инструментов для структуризации информации, помимо реальных бумажных карточек. В ходе долгих обсуждений в нашем чате мы пришли к тому, что система Лумана может стать хорошей опорой, на основных принципах которой можно создать что-то уникальное. Именно поэтому я не пытаюсь называть свою систему Цеттелькастеном.

Все заметки Натальи в виде графа

Все заметки Натальи в виде графа

Я активно пользуюсь методом 3 года, а если считать первые попытки — почти 7 лет. Свою базу знаний я веду в Obsidian, эта программа работает поверх обычных markdown-файлов. У системы огромное сообщество, которое пишет плагины. Можно создать из Obsidian инструмент «для всего», а можно просто вести заметки. Главные плюсы Obsidian:

  • Все файлы лежат локально. Нет привязки к сети и принудительной синхронизации на чужих серверах.

  • Удобный полнотекстовый поиск.

  • Возможность кастомизации (чем практически не пользуюсь).

  • При добавлении плагина Excallidraw можно рисовать прямо внутри Obsidian. Удобно делать наброски в ходе обсуждения задачи.

  • Мелкие преимущества: граф, обратные ссылки, подсветка кода, ссылки внутри страниц, отображение картинок и таблиц.

С появлением системы заметок моя жизнь стала интереснее и в то же время проще. На ведение собственной базы поначалу тратится много времени, но затем оно возвращается удобным поиском и отсутствием необходимости лишний раз залезать в поисковик. Стало проще работать. Искать источники проблем в коде, исследовать новые библиотеки, фреймворки и языки, описывать саму систему. Я стала чаще писать и делиться своими знаниями с другими. Различные идеи пет-проектов не потерялись, а превратились в заметки и реальный код.

«Каноничный» Цеттелькастен использует специальные индексы, я же немного приспособила систему под себя. Стараюсь писать осмысленные названия заметок с различными ключевыми словами. Все заметки у меня разделены на папки-сферы:

  • Inbox — сюда попадают все новые заметки.

  • Simple — различные заметки о жизни. Вырезки из книг, рецепты и тому подобное.

  • Work — рабочие записи и схемы.

  • Edu — конспекты, а также планы обучения. Сюда же попадает вся выделенная информация из профессиональной литературы.

  • Knowledge — небольшие короткие заметки, похожие на Цеттелькастен. 

Заметка из категории Knowledge 

Заметка из категории Knowledge 

В моей базе собрана вся моя жизнь. Здесь информация о прочитанном и просмотренном, рабочие заметки, ежедневные заметки и различные конспекты, которые я пишу в ходе самообучения. Здесь же я размышляю обо всем, что меня волнует.

Небольшой совет для всех инженеров: ведите заметки, и вам станет намного проще передавать информацию другим.

Раз в неделю я разбираю инбокс и распределяю заметки по их назначению. Какие-то выкидываю, какие-то дополняю. Иногда попадается новая информация для старых заметок, которые получают апдейт.

Программа запущена всегда. Все длинные сообщения, все полезные мысли, возникшие в ходе митингов, полезные ссылки, размышления, все сразу улетает в базу. Каждый раз, когда я что-то ищу, то начинаю поиск с нее и лишь затем иду в Google.

«Человеческий мозг ненадежен» 

Как учить языки программирования и создавать базу знаний с помощью метода из прошлого века: опыт четырех инженеров - 13

Станислав Богатырёв

Эксперт по разработке ПО в YADRO. Много лет собирает базу знаний по методу Лумана

Я веду заметки больше 12 лет: сначала моя база знаний была лишь похожа на Цеттелькастен, затем я изучил вопрос по блогу SachaChua и стал менять систему в сторону метода Лумана. База знаний развивалась вместе с инструментами в программе Emacs. 

Изначальное требование держать все данные в простом текстовом формате или чем-то стандартном, избегая закрытого проприетарного ПО, доказало свою правильность уже в первые несколько лет. Я понемногу адаптирую процесс под меняющиеся обстоятельства: могу по своему усмотрению выкидывать какие-то части метода или внедрять свои улучшения.

Стало проще в разговорах с другими людьми объяснять, как я работаю с личным хранилищем информации. Моя система еще далека от завершения. В итоге хочется добиться пригодной для практического каждодневного применения реализации концепции Memex.

Я советую вести базу знаний всем, кто хоть как-то работает с информацией. Человеческий мозг ненадежен, и без внешнего носителя сложно анализировать накопившиеся знания, находить дефекты и ошибки восприятия, усиливать мыслительные возможности.

«Нужно представить, как я в будущем пользуюсь заметкой» 

Как учить языки программирования и создавать базу знаний с помощью метода из прошлого века: опыт четырех инженеров - 14

Сергей Васильев

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

Я использую подходы, описанные Никласом Луманом, около года. Соглашусь с коллегами: почти никто не реализует Цеттелькастен в чистом виде, но многие, как и я, ведут заметки в специальных программах. Раньше собирал заметки в Evernote, но у этого инструмента гораздо меньше опций, чем в Obsidian. 

В Obsidian встроена отслеживаемая самой программой система связей между заметками. Но главное, что там можно представить эту систему связи в виде графа. А сам граф связей можно динамически настраивать для отображения разными способами (цветами, направлением и глубиной связей).

Свою базу знаний я использую для самообразования и ведения протоколов испытаний на работе. Мое главное правило в ведении карточек — полный отказ от нумерации. В цифровой базе знаний название карточки должно быть осмысленным, чтобы проще было искать нужный материал. 

Технически это обеспечивается ссылками, хештегами, тремя шаблонами, двумя плагинами (форматирование текста, контекстное меню изображений). В самой системе надо определиться с видами структур заметок (то есть в каком случае заметка — это продолжение предыдущей, в каком — отдельная самостоятельная заметка). 

Моя система содержит кучи цепочек, в которых я неплохо ориентируюсь. Но создание карточки занимает 90% времени от освоения материала. Нужно представить, как в будущем я воспользуюсь информацией, какие связи сделать с другими карточками.

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

  1. Обычный повседневный стиль для ведения проектов и завала из последовательностей заметок. Здесь я допускаю атомарность мышления и «зоопарк тематик» в одном общем хранилище, содержащем не связанные между собой заметки.

Вот так выглядит главная страница первого хранилища 

Вот так выглядит главная страница первого хранилища 
  1. Выверенный стиль для систематизации свойств технического средства или тематики с отсутствием привязки к проектам и одновременно с принципиальным отсутствием несвязанных заметок. В таком стиле одна тема должна соответствовать одному хранилищу, тем самым не загрязняя развернутую информацию.

А это главная страница второго хранилища

А это главная страница второго хранилища

За время работы с базой знаний я понял: когда в твоих руках есть разработанная система ведения заметок, процесс адаптации к разным ситуациям облегчается. Так как требуется сосредоточить усилия только в одном направлении — определить концепцию архитектуры. Самое главное при этом осознавать, что универсального решения, скорее всего, не найти. И следить за тем, чтобы совершенствование архитектуры не было бесконечным процессом. Лучше сделать новую адаптацию для следующей подобной ситуации, чем пытаться исправить ошибки существующей архитектуры.

Ведете ли вы личную базу знаний? Если да, расскажите в комментариях, в какой программе вы это делаете и  какие заметки хранятся в вашем «ящике». 

Автор: yadro_team

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js