Как делать заметки как программист

Jupyter

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

Потом, когда я открыл для себя MOOC видео курсы, продолжил использовать те же антипаттерны, что и в школьные времена, но уже не так безобразно: с помощью VimWiki и позже — с Jupyter.

Записи всё еще были плохо структурированы. Посмотрите на это: у меня даже мотивации не хватает на то, чтобы просто открыть и посмотреть на то, что там внутри:

image

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

Основная идея заключается в том, чтобы спроецировать нашу память в записи (а не память лектора), используя принципы разработки программ.

Необходимые условия

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

Также предполагаю что вы знакомы с техникой «чанкинга» из курса «Учимся учиться» или из книги «Думай как математик».

Сделайте так, чтобы хорошо читалось

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

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

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

Сырой черновик

Запишите заголовок и источники (книги, статьи, научные работы, видеозаписи, что бы вы не использовали) в конкретный блок информации. Начните анализировать первый источник. Пока анализируете — добавляйте некоторые ключевые детали.

Рефакторинг

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

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

Когда запись становится большой — делите ее на файлы или вовсе структурируйте с помощью папок.

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

Добавьте подсказки себе на будущее

Надоело учиться и хочется уже начать что-то делать? Быть прагматичным — это хорошо. Добавьте предположения, которые возможно захотите исследовать в будущем, с помощью TODO-комментария.

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

TODO-комментарии считаются антипаттерном некоторыми разработчиками. Тем не менее, я всё же считаю их полезными для личных проектов и заметок.

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

Пересмотр и улучшение

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

Попробуйте поискать в файлах:

Не нашли ничего? Возможные причины:

  • опечатка при вводе поискового запроса — проверьте сначала это
  • неверное ключевое слово — та же идея в прошлом была описана синонимом
  • опечатка в самой записи

Пришло время улучшать. Найдите запись вручную и почините проблему с помощью

  • исправления опечатки
  • добавления ключевого слова

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

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

Не нашлось. Написал неправильно?

 

Неа. Я нагуглил что-то, но что за… ерунду я нашел?

Так как я не носитель английского у меня заняло еще немного времени на осознание того, что всё-таки это была опечатка при вводе.

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

Другой вариант — использовать какой-нибудь хитрый поисковик с поддержкой нечеткого поиска.

UPDATE: Оказывается в данном конкретном случае это всё-таки был вредный совет. Вместо того, чтобы торопиться записать ключевое слово с опечаткой, стоило сначала нормально разобраться во всех этих запутанных для меня терминах и дописать «quantile» в качестве валидного ключевого слова.

Обновите структуру заметок в соответствии с вашей памятью

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

  • запись находится не на своем месте
  • правильное место трудно определить
    • куда бы вы положили записи про нотацию «большая О»: в математический анализ или алгоритмы?

Как это исправить?

  • переместите блок или файл в правильное место
  • добавьте ссылку с одной заметки на другую

 

Отрефакторьте еще раз

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

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

Найдите баланс

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

Если чувствуете что это тяжело или отнимает много времени — используйте что-то вроде «правила трёх»: если вы искали эту запись два раза не в том месте — оставьте как есть. На третий раз — отрефаторьте.

И в чем смысл?

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

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

Так как в сети найти это нельзя — вы используете свои заметки. И тут решающий момент: если вы можете быстро найти эти заметки — тогда вы не потеряете фокуса на работе. А если нет — прервётесь и всё равно потеряете время на поиск. Технически это тоже самое что и быть прерванным кем-то.

А потом нужно возвратиться в свое креативное состояние сознания и продолжить работу. Только представьте сколько энергии это отнимает у вас.

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

В любом случае это лишь стратегия: в каких-то случаях возможно она и неприменима, так что используйте с умом.

Чеклист

  • Напишите сырой черновик с источниками и плохой структурой
  • Периодически рефакторьте свои записи:
    • Выделяйте ключевые слова
    • Разбивайте длинные предложения
    • Улучшайте иерархию маркированных списков
    • Используйте подзаголовки
    • Упрощайте текст, уменьшайте его
    • Слишком длинные документы? — Делите их на файлы
    • Слишком много файлов? — Улучшайте структуру каталогов
  • Добавляйте TODO-комментарии
  • Наслаждайтесь своей креативной работой без потери фокуса! «Хватайте» заметки когда они вам нужны:
    • Не получается найти заметку быстро?
      • Исправьте опечатки
      • Добавьте ключевые слова (иногда неверно написанные ключевые слова)
      • Заметка не на своем месте? — Переместите блок/файл в правильное место
      • Место двусмысленно? — Добавьте ссылки из других мест
    • Не можете понять что написали? — Отрефакторьте еще раз
    • Нашли дубликаты/фрагменты одной и той же заметки в разных местах? — Объедините их

Не так уж и сложно, правда?

Данная публикация является переводом собственной статьи.

UPDATE: вместо git grep + копипасты + поиска по странице, теперь использую ngp + скрипт (+ изменение в ngprc) который открывает файлы Jupyter в браузере и даже переходит к соответствующему якорю на странице. К сожалению, этот проект не поддерживает Юникод, но уже есть временное решение.

Специально для сайта ITWORLD.UZ. Новость взята с сайта NOP::Nuances of programming