Систематизация личной базы знаний по программированию в Zim
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 26.07.23 02:46
Оценка: 35 (6)

Размышления по документированию


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

Программы для ведения документации
Новая эра личных баз знаний
Электронная тетрадь в клеточку

Хранение документации
Перевод и осмысление документации
Отличия документации, книг, журналов и комментариев

Преобразование формы текста
Словесный поток и чёткие структуры
Конспектирование на смартфоне

Документирование в программировании
Разработка через документирование
Технологические карты в программировании

Установка и настройка Zim


1. Скачиваем последнюю версию Zim для вашей операционной системы.
Скачать Zim. В GNU/Linux можно воспользоваться репозиторием.
2. Установка русского языка.
В Windows 10 выбрать Пуск > Панель управления > Система > Дополнительные параметры системы > Дополнительно > Переменные среды. В разделе "Переменные среды пользователя для ..." нажать кнопку "Создать" и ввести имя переменной LANG , значение переменной ru_RU.UTF-8 .
3. Установка другой темы оформления.
В GNU/Linux штатными средствами. В Windows 10 скачать тему и скопировать содержимое распакованной папки gtk-3.0 в %USERNAME%\AppData\Local\gtk-3.0 , путь можно открыть в проводнике. Можно так же использовать другие папки, а не только общий путь для тем gtk-3.0, например, ту же папку конфигурации. Пока поставил gnome-professional-40.1-dark.tar.xz. Изначальная инструкция.
4. Установка стилей текста.
Так же в проводнике открываем файл %USERNAME%\AppData\Roaming\zim\config\zim\style.conf и редактируем. Но простой текст настроить нельзя, он идёт из темы gtk-3.0 и это проблема. Потому я был вынужден искать тёмную тему с белым, а не чёрным текстом, а там оказалась светлая панель управления. Установил пока временные цвета вроде Aquamarine, Aqua и прочих и стили вроде PANGO_WEIGHT_BOLD.
[TextView]
bullet_icon_size=GTK_ICON_SIZE_MENU
indent=30
tabs=None
linespacing=3
wrapped-lines-linespacing=0
font=Sans 16
justify=

[Tag strong]
weight=PANGO_WEIGHT_BOLD

[Tag emphasis]
style=PANGO_STYLE_ITALIC

[Tag mark]
background=yellow

[Tag strike]
strikethrough=True
foreground=grey

[Tag code]
foreground=Aqua
family=monospace

[Tag pre]
foreground=LightYellow
family=monospace
wrap-mode=GTK_WRAP_NONE
indent=20

[Tag link]
foreground=#b3e5fc
underline=PANGO_UNDERLINE_SINGLE
weight=PANGO_WEIGHT_BOLD

[Tag tag]
foreground=#ce5c00

[Tag h1]
foreground=Aquamarine
weight=PANGO_WEIGHT_BOLD
scale=1.75

[Tag h2]
foreground=Aquamarine
weight=PANGO_WEIGHT_BOLD
scale=1.52

[Tag h3]
foreground=Aquamarine
style=None
weight=PANGO_WEIGHT_BOLD
scale=1.32

[Tag h4]
foreground=Aquamarine
weight=PANGO_WEIGHT_BOLD
scale=1.15

[Tag h5]
foreground=Aquamarine
weight=PANGO_WEIGHT_BOLD

[Tag h6]
foreground=Aquamarine

[Tag checked-checkbox]

[Tag xchecked-checkbox]

[Tag migrated-checkbox]

[Tag transmigrated-checkbox]

5. Установка свойств проекта.
Создав папку проекта zim по нужному мне пути я зашёл в Файл > Свойства и установил Домашнюю страницу :Программирование и включил галочку Использовать для ссылок на страницы краткие имена.
6. Установка своего шрифта.
В Правка > Параметры > Интерфейс установил Использовать свой шрифт и его размер 16. В принципе это видно в конфигурационном файле выше font=Sans 16 .
7. Включение дополнительных модулей.
В Правка > Параметры > Модули включил модули Оглавление, Редактор таблиц, Сортировщик строк.
В модуле Оглавления нажал кнопку Настроить.
выключил Показать оглавление в плавающем виджете (а не в боковой панели)
включил Показать заголовок страницы как заголовок в оглавлении.
выключил Включать горизонтальные линии в оглавлении.

Какие проблемы нужно решить


Для начала обозначу проблемы и только потом перейду к способу их решения с помощью систематизации личной базы знаний в Zim.

Адаптация источников знаний под себя


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

Что же в таком случае мог бы сделать абстрактный общечеловек.

1. Раздолбай может ничего не читать и думать, что и так прокатит. Сойдёт интуитивное восприятие или видео балабольство на ютубе. Может у кого и прокатит, у меня не прокатывает.

2. Новичок может подумать, что вдумчивое прочтение даст результат. Оно, конечно, даст небольшой эффект, но мозг забывает знания. Причём не обязательно окончательно, часто ему требуется активатор чтобы вспомнить. А это значит книгу придётся перечитывать, потому что активаторы тоже забываются.

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

4. Однако лично я считаю для становления специалистом лучше полностью поглотить источники знаний записав их в Zim адаптируя оформление.

Запись большого количества знаний без систематизации


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

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

Быстрый доступ к источникам знаний


Для мозга обрабатывающего знания так же важен быстрый переход. Желательно мгновенный по всем связанным источникам знаний. А не так, что давай мы мучительно начнём вспоминать, а где это было упоминание такого понятия, а как решали ту задачу.

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

Система каталогов в Zim


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

За несколько последних дней я пришёл к следующим каталогам.

Программирование
 Библиотеки
 Википедия
 Задачи
 Игры
 Книги
 Мусор
 Понятия
 Практика
 Программы
 Проекты
 Статьи
 Языки

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



Папка Понятия


Основная идея крутится вокруг папки Понятия. Внутри она имеет следующую структуру.

Понятия
 А-Я

Понятия
 А
 Б
 В
 Г
 Д
 Е
 Ё
 Ж
 З
 И
 Й
 К
 Л
 М
 Н
 О
 П
 Р
 С
 Т
 У
 Ф
 Х
 Ц
 Ч
 Ш
 Щ
 Ы
 Э
 Ю
 Я

Буквы с которых не могут начинаться слова такие как Ъ Ь исключены, а так это обычный русский алфавит. В теории здесь мог бы быть и английский алфавит.

Опытным путём обнаружено, что.
1. Zim хорошо открывает 100 папок, но когда их 1000, то происходит небольшая задержка. И очевидно задержка будет расти по мере накопления папок. Она не то, что критична, но есть разница между почти мгновенным действием и малой задержкой. Конечно, это при условии, что Zim сворачивает и разворачивает списки при переходе.
2. Вручную искать из 1000 и более папок замедляет работу. Я проводил опыт с Qt из более 1600 классов с английским алфавитом и это оказалось не так удобно, как мне почему-то подумалось. Изначально я создал папки по алфавиту, а потом дай думаю попробую без него. Так вот кликнуть на букву, а потом на название из открывшегося списка гораздо быстрее, чем мотать туда сюда список.

Если кто не знает, ознакомьтесь с тем, что такое Библиотечный каталог.

По сути я собираюсь использовать.
1. Предметный каталог.
2. Систематический каталог.

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

Если мне нужно добавить понятие Абстрактная фабрика, я создам страницу в папке А. Если нужно будет создать понятие Шаблоны проектирования, то соответственно они пойдут в папку Ш. А если мне нужна будет систематизация, то внутри страниц будут добавлены ссылки для перехода страниц друг на друга или на якоря внутри страниц. По поводу гиперссылок в Zim можно почитать здесь.

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

Папка Задачи


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

Потому она должна собрать Задачи и ссылки на их решения, но при этом не смешиваться с обычными Понятиями. Беру пример чисто из головы, создать кнопку в Html и создать кнопку в Qt должны находиться в папке Задачи:С:Создать кнопку.

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

Возьмём класс QPushButton. Сам по себе он похож на понятие Кнопка элемента графического интерфейса, но способен решать разнообразные задачи, такие как реакция на разные события или оформление, что требует дополнительных подстраниц. Причём не факт, что разные типы кнопок из разных систем могут одно и тоже, потому важно различать конкретные решения и их общий сбор в папке Задач.
Программирование
 Библиотеки
  Qt5
   Классы
    P
     QPushButton
      Задачи
       ...
      Файлы
       ...
   Модули

Прочие папки


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

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

Общая структура папок


Программирование

 Библиотеки
  Qt5
   Классы
    A-Z
   Модули
  ...

 Википедия
  A-Z,А-Я

 Задачи
  А-Я

 Игры
  Arsenal Extended Power
  ...
  Tera Online

 Книги
  Страуструп_Бьерн
   Дизайн и эволюция C++
   Язык программирования C++. Специальное издание
  ...

 Мусор
  ...

 Понятия
  А-Я

 Практика
  Codewars
   A-Z
  HackerRank
   A-Z
  LeetCode
   A-Z
  RosettaCode
   A-Z
  Topcoder
   A-Z

 Программы
  Blender
  Geany
  Git
  ...
  Zim

 Проекты
  ...

 Статьи
  А-Я

 Языки
  Assembler
   A-Z,А-Я
  C
   A-Z,А-Я
  C++
   A-Z,А-Я
  CSS
   A-Z,А-Я
  Html
   A-Z,А-Я
  Lua
   A-Z,А-Я
  Structured text
   A-Z,А-Я

Итоги


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

А на практике всё это требует долговременной проверки. Zim мне знаком давно, но систематизация раньше дико хромала. Всё это больше напоминало свалку мусора. Но посмотрим, что будет дальше.
Отредактировано 26.07.2023 18:19 velkin . Предыдущая версия . Еще …
Отредактировано 26.07.2023 17:56 velkin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.