инженерная культура
обучение
797
0
18 апреля 2025
инженерная культура
обучение

Это путь воина: как я выучил Python и Go с помощью Цеттелькастена и кому точно не рекомендую метод

Изображение создано
с помощью нейросети
Изображение создано с помощью нейросети
797
0
18 апреля 2025

Дмитрий Зверев прошел большой путь в самостоятельном изучении языков программирования: от SQL до Go. Сначала он вообще не документировал процесс обучения, затем стал вести заметки по «академическому» принципу — писал конспекты, как в университете. Пока не открыл древовидную систему хранения данных, которая лежит в основе метода Цеттелькастен.

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

Из статьи вы узнаете
  • как Дмитрий изучал языки программирования до того, как начал вести заметки
  • что побудило инженера вести личную базу знаний
  • каким инструментом для хранения данных он пользуется
  • почему не рекомендует метод Цеттелькастен новичкам

Практика лучше теории: учил SQL и Java без конспектов

Первый язык, который я попытался изучить самостоятельно — это SQL для работы с базами данных. Я освоил пару команд и разобрался, как их применять. Но глубоко погрузиться в язык не удалось. Затем прошел 10 бесплатных уроков по Java на JavaRush и начал писать автотесты. На следующей работе для автотестов потребовался Python — начал читать книгу Марка Лутца «Изучаем Python».

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

На Python я выучил набор команд, которые позволили мне писать более гибко, ведь у меня уже был опыт изучения языков и я знал, на что обратить внимание. Более того, моя практика была относительно несложной — автотесты на UI. Нашел элемент, выполнил действие, сделал проверку. Похоже на механическую работу.

А потом я стал разработчиком.

В новой профессии я столкнулся с тем, что моих знаний и навыков уже недостаточно (хотя был уверен в обратном). Посмотрел на других инженеров и понял: у меня все очень плохо. Конечно, я знал несколько «паттернов» написания кода и синтаксис языка, меня было не удивить конструкцией на Python…

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

Однажды услышал, как коллеги дискутируют о структуре данных множество (set) в Python: объекты, которые хранятся в множестве, должны быть неизменяемыми или хешируемыми? И ничего не понял. Я расстроился: вроде и автотесты пишу, и с языком работаю, а все равно плохо разбираюсь, о чем говорят другие инженеры. Более того, даже не понимаю, зачем вообще нужно знать эти вещи.

Как появился Notion

Для начала мне посоветовали книгу Лучано Рамальо «Python: к вершинам мастерства». Я все еще не вел заметки, поэтому содержание книги выветрилось из головы через неделю. Но эта книга дала мне важное знание: я стал понимать, из чего на самом деле состоит язык, и что изучение синтаксиса, а также навыки решения прикладных задач — это еще не все. Хорошему инженеру важно понимать, как язык устроен, как он работает.

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

«Академический» подход

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

Сначала вел конспекты на бумаге — из-за этого пришлось пропускать блоки кода, чтобы не переписывать их от руки в тетрадку. Позже я понял, что вообще не писать код — еще хуже, чем писать его на бумаге. Поэтому стал искать варианты электронных хранилищ, наткнулся на Notion и решил сохранять заметки там.

Я читал главу и конспектировал ее в Notion на английском, но потом понял, что это не очень удобно перечитывать. Поэтому перевел конспекты на кривой русский с помощью переводчика. Постепенно стал понимать, почему разработчики не любят переводные книжки: например, понятие map в книгах часто переводят как «карта», хотя это вообще не карта. Вот и в моих заметках возник «языковой барьер».

Как его преодолеть? Написать собственную статью.

Что делал я:

  1. Читал документацию и выписывал понятия, которые следует изучить глубже.
  2. Искал несколько дополнительных источников по теме и собирал нужную информацию,
  3. Оформлял все в заметку с простым названием — например, «Списки».

В итоге получился большой документ, эквивалентный документации Python за 2019 год. Но, в отличие от документации, в моей базе знаний я разбирался от и до. Какие-то вещи забывались, и вместо того, чтобы бежать в гугл, я заглядывал свои в заметки — там все под рукой.

Базу знаний я пополнял разными способами:

  • Продолжал читать статьи и дополнять свои заметки.
  • Записывал случаи из личной практики.
  • Сохранял нетипичные, редкие ситуации применения языка.

Вот так я учил Python, а дальше стал учить Go. С Go было чуть иначе, потому что этому языку есть Go Tour, где собрана информация по основным концепциям языка.

Тянул прямо отсюда

Я брал заголовки статей из Go Tour, переносил в Notion и дополнял заметки из других источников.

Notion не справился

Я стал подозревать, что что-то делаю не так, когда страницы со статьями в Notion перестали загружаться. Мои заметки по одной теме стали настолько огромными, что занимали несколько экранов и грузилась по много минут.

Сейчас в Notion улучшили производительность, но несколько лет назад ни одна страница не загружалась за вменяемое время — я регулярно получал таймауты.

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

  • Неудобный поиск внутри материала.
  • Монструозное оглавление на два с половиной экрана.

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

После такого анализа я решил тщательнее выбирать информацию для статей и дробить их на более маленькие заметки.

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

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

Цеттелькастен и инструменты для реализации метода

Про метод ведения «умных» заметок Цеттелькастен я узнал от Николая Тузова, инженера, спикера и блогера. Наткнулся на описание метода в канале и понял: да это же картотека! Прямо как в публичной библиотеке. А у меня высшее образование по специальности издательское дело и редактирование. Поэтому картотека мне очень близка.

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

Что такое Цеттелькастен

В середине XX века социолог Никлас Луман разработал метод организации информации Цеттелькастен (Zettelkasten). Он создавал множество заметок и, чтобы не терять знания, начал вести картотеку. Хотя идея не была новой, Луман превратил ее в рабочий инструмент, описав метод в эссе «Kommunikation mit Zettelkästen».

Название метода переводится как «карточка» и «чемодан». Ученый заводил карточки под одну мысль и хранил их в ящике с другими связанными записями. Для этого использовались листы формата А6.

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

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

Для своей работы я выбрал Obsidian, потому что программа казалась самой понятной. Сейчас в моей системе много заметок.

Когда я перенес данные из Notion в Obsidian, у меня образовалось несколько деревьев: по Go, хешированию и базам данных. В моей базе знаний все концепции в Go пересеклись в двух точках — интерфейсе и горутинах. Есть еще слайсы, но в основном все «лучи» сходятся именно в эти две точки.

Граф по Go-разработке

Наглядность — неоспоримое преимущество Цеттелькастена. Я могу посмотреть на граф и увидеть связи, которые недоступны, когда читаешь несколько статей подряд. К тому же метод позволяет вести базу так, как хочется пользователю. Вероятно, мой подход не относится к «чистому» Цеттелькастену, зато я хорошо ориентируюсь в заметках и создаю базу, удобную в первую очередь для меня.

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

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

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

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

Допустим, я хочу разобраться с объявлением переменных в языке программирования N. Я изучаю документацию, книги, статьи на эту тему. Если встречаю незнакомое понятие — например, вывод типов — сразу же углубляюсь в него. Конечно, это может затянуть меня в бесконечную кроличью нору, ведь за одной темой скрывается множество других. Поэтому в какой-то момент важно вовремя остановиться и сказать себе: «Хватит, на этом все. Дальше идет слишком сложная теория, настоящее программистское колдунство, к которому я пока не готов. Отложу это на потом».

Но суть в том, что ты должен в общих чертах хотя бы понимать материал. Вот ты изучил переменные, ты знаешь, как объявлять переменные, и ты знаешь, какие концепции хотя бы приблизительно за этим стоят. Вот это очень важно в самообразовании. А то, в какой форме ты решишь это представить, зависит от тебя. Я выбрал древовидный метод, но кому-то он покажется слишком сложным.

И почему Цеттелькастен и подобные подходы — не для всех

Метод не подойдет тем, кто ничего не знает по теме

Если ты совсем новичок, метод может завести тебя не в ту степь. Ты откроешь учебник по программированию и спустя 10 страниц столкнешься с незнакомыми терминами и концепциями. Если знаний в данной области нет, вероятно, освоить материал будет сложно.

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

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

Метод подойдет тем, кто хочет сохранить знания

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

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

Далее можно отдельно рассмотреть таких мастеров, как да Винчи и Микеланджело, задавая себе вопросы: кто они, откуда пришли и какое влияние на их творчество оказали исторические события. Например, можно изучить, как Караваджо и его техники кьяроскуро и тенебризм повлияли на других художников.

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

Какой инструмент я выберу и при чем тут создание собственной ОС

Договоримся на берегу: и Notion, и Obsidian, и любой другой сервис можно подстроить под себя. В создании личной базы знаний я пришел к высокой степени атомарности заметок — и мне кажется, что с таким подходом неудобно изучать новое, зато удобно не забывать старое.

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

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

Какие еще преимущества есть у Obsidian:

  • Это не open source-решение, но его можно скачать и использовать на компьютере даже без подключения к интернету. Вся документация, которую я показал в этой статье, была у меня в GitHub. Затем я просто ее скачал и положил в Obsidian. Notion лежит в облаке, и он заблокирован в РФ. Поэтому в текущей ситуации предпочтительнее использовать Obsidian.
  • В Obsidian можно выбрать способ отображения: граф или просто оглавление. Иногда информацию удобнее воспринимать через списки, а иногда — в виде связанных точек. Как я писал выше, это помогает строить связи.

Недавно я начал собирать материалы о создании собственной операционной системы.

Это черновик, который я буду дополнять и дорабатывать

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

Наверх
Будь первым, кто оставит комментарий