Очень много букв… Или кейс по специфической настройке рабочего окружения

от автора

Прежде чем начать — несколько вопросов

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

  • При продолжительном чтении документации чувствуете усталость или спутанность?

  • Перед тем как решать задачу — представляете или рисуете схемы?

  • Воспринимаете информацию на слух или визуально лучше, чем при прочтении?

  • Иногда не можете увидеть опечатки в знакомых словах?

  • Сложно постоянно следить за кодстайлом? Хотите ускорить ревью своего кода?

  • Часто читаете документацию и через секунду не помните, к какому определению относилось то или иное описание?

Хоть на один ответили «да»? Тогда эта статья может быть вам полезна.


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

Я системный программист и по совместительству дислектик.

Что такое дислексия

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

Дислексия не связана с интеллектуальными нарушениями или патологией зрения.

Эта статья написана для того, чтобы показать обходные или более эффективные пути работы с большим объёмом текста или кода — от человека, для которого способ получения информации критичен.


Немного повседневности

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

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

Поэтому немного повседневности …

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

  • включаю озвучку на длинные сообщения и посты;

  • иногда пользуюсь считыванием содержимого всего экрана.

Спасает в моменты перегруза.

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

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

Чтение

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

При чтении часто получаю «франкенштейнов» из разных слогов, разных слов из двух или трёх последовательных строчек.

На помощь при чтении книг приходят «детские» средства:

  • линейка и ведение пальцем по тексту — чтобы не путать строки;

  • проговаривание вслух или визуальное выделение важной информации;

  • ассоциативные зарисовки на полях, схемы.

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

Чтение интернет статей я превращаю в прослушивание.

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

Так в день я поглощаю от 2 до 5 статей.

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

Мои конспекты и записи

Всегда делала конспекты и записи как фильтр от лишнего — оставляла только структуру и ключевые точки.

Их вид еще в школе начал отходить от стандартного:

  • не переношу слова частями на следующую строку: проще не терять контекст, даже если пропустил строку;

  • большие отступы между строками и словами: строки не сливаются, не теряю место в тексте;

  • важную информацию выделяю !важно! или ?вопрос? с двух сторон, использую цвета, подчёркивания: сокращает время поиска критически важной информации;

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

Когда всё ушло в цифру — принципы остались, изменились только инструменты.

Оформление

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

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

Гораздо легче, когда текст — это не единое полотно, а структура.

С русской грамматикой LaTeX особо не дружит, но тут на помощь приходит Главред — делает замечания по структуре предложений, общей читаемости, лексики. А Типограф помогает при проверке структуры текста, выделения лишних пробелов и тд.

Оформление LaTeX и Markdown хорошо проверяет ИИ, дополняет акцентами, но о нем позже.


Работа, работа, работа…

Рабочий день — это сотни строк кода, множество страниц документации, корпоративная почта, куча чатов. Как не потеряться?

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

Но лажала я по-страшному. Множество пропущенных сообщений на почте, реализация фичи по неверно прочитанным требованиям, PR`s на 50+ правок. Ошибки мои были часто не логические и не по синтаксису — они получили у руководителя свой термин: «чудачества».

Через несколько месяцев я поняла: если что-то недоступно человеку сделать голыми руками — он использует инструменты. Почему не сделать так же с мозгом?

Некоторые приведенные инструменты и примеры будут специфичны для C++, но суть неизменна для любого ЯП.


Рефакторинг

Тема большая и популярная, но не упомянуть было бы непростительно.

Писать надо так, чтобы и через месяцы в этом можно было быстро разобраться.

В дополнение к общим правилам можно:

  • использовать дополнительные разделительные строки для логических блоков (например, отделить объявления переменных от начала ветвления), сплошной текст читать всегда тяжелее;

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

    Лучше так?

auto it = std::find_if(tasks.begin(), tasks.end(), [](const Task& t) {    return t.priority >= CRITICAL && !t.is_archived && t.deadline < Clock::now();});auto cnt = std::count_if(tasks.begin(), tasks.end(), [](const Task& t) {    return t.priority >= CRITICAL && !t.is_archived && t.deadline < Clock::now();});

Или так?

auto is_critical_overdue = [](const Task& t) {    return t.priority >= CRITICAL && !t.is_archived && t.deadline < Clock::now();};auto it = std::find_if(tasks.begin(), tasks.end(), is_critical_overdue);auto cnt = std::count_if(tasks.begin(), tasks.end(), is_critical_overdue);
  • не делать слишком много строк в одном файле;

    Есть разница, искать что-то в файле на 200-300 строк или на > 500

  • делать названия функций такими, чтобы они сильно отличались визуально, без необходимости вчитываться;

    Тяжеловато

bool CheckNumIsCorrect(int num); // проверка числового значенияbool CheckNameIsCorrect(const std::string& some_str); // проверка, является ли строка именем

А так получше

bool NumIsCorrect(int num); // проверка числового значенияbool CheckNameFormat(const std::string& some_str); // проверка, является ли строка именем
  • располагать вспомогательные функции — либо укладываю в отдельный файл, либо декларирую их в начале, а реализую ниже;

Важно: В центре внимания должна быть основная логика

  • делаю отладочный вывод (если корректно о нем тут говорить) выделяющимся. В полотне текста сложно найти какой-то определенный текст, а вот строку символов — легко

    Искать это среди таких же:

    [DEBUG]: Failed to find some logs for post analyse, a lot of symbols

    Или это, среди таких, как выше:

    [DEBUG]: ============ Success to find this log message ============


clang-format + clang-tidy

Хорошо настроенные clang-format и clang-tidy помогают исправить большую часть недочётов по code style и синтаксису ещё до PR. Установка и использование простые, а файл настроек по вашим требованиям качественно напишет любая бесплатная нейронка.

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

clang-format

BasedOnStyle: LLVM # Фигурные скобки на новой строке. Чётко отделяет начало/конец блока, проще отслеживать вложенностьBreakBeforeBraces: Allman # Не даёт строкам уходить в горизонтальный скроллColumnLimit: 100# Запрещает if (x) { do(); }. Логика всегда развёрнута, меньше риск пропустить действиеAllowShortBlocksOnASingleLine: Never# Убирает скрытые ветвленияAllowShortIfStatementsOnASingleLine: Never# Циклы всегда с явным теломAllowShortLoopsOnASingleLine: Never# Выравнивает = в соседних строках. Визуально группирует связанные переменныеAlignConsecutiveAssignments: true# Выравнивает объявления функций/переменныхAlignConsecutiveDeclarations: true# Разрешает только одну пустую строку, остальные убирает. Меньше визуального «шума»MaxEmptyLinesToKeep: 1#  int* ptr вместо `int *ptr. Поддерживает единообразный стильPointerAlignment: Left# Разбивает длинные выражения по операторам. Проще читать цепочки условий/вычисленийBreakBeforeBinaryOperators: All# Остальные базовыеIndentWidth: 4TabWidth: 4UseTab: NeverSpaceBeforeParens: ControlStatementsCpp11BracedListStyle: trueSortIncludes: CaseInsensitive

clang-tidy

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

Настройка

Что находит

bugprone-suspicious-semicolon

if (cond); { ... } частая опечатка, которую легко пропустить визуально

bugprone-branch-clone

copy-paste ошибки в ветках

bugprone-easily-swappable-parameters

перепутанные аргументы одного типа func(width, height) vs func(height, width)

readability-identifier-length

слишком короткие/непонятные имена

readability-magic-numbers

требует constexpr/enum, убирает догадки «что такое 0x1F»

readability-simplify-boolean-expr

сложные/избыточные логические условия и выражения

modernize-use-override

забытый override у виртуальных функций

readability-else-after-return

убирает лишнюю вложенность

performance-unnecessary-value-param

передача больших объектов по значению

modernize-use-auto

требование использования auto

cppcoreguidelines

набор базовых практик от Страуструпа

Так выглядит готовый конфиг:

Checks: >  bugprone-suspicious-semicolon,   bugprone-branch-clone,   bugprone-easily-swappable-parameters,  readability-identifier-length,  readability-magic-numbers,  readability-simplify-boolean-expr,  modernize-use-override,  readability-else-after-return,  performance-unnecessary-value-param,  -modernize-use-auto,  -cppcoreguidelines-*CheckOptions:  - key: readability-identifier-length.MinimumVariableNameLength    value: 2  - key: readability-identifier-length.MinimumParameterNameLength    value: 2  - key: readability-magic-numbers.IgnoreAllFloatingPointValues    value: 'true'WarningsAsErrors: ''HeaderFilterRegex: ''AnalyzeTemporaryDtors: false

В VSCode можно настроить автоматическое форматирование в момент сохранения.

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


ПО для озвучки

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

Но у меня отличная память на аудио и диалоги.

NVDA — приложение, изначально созданное для слепых и слабовидящих.

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

Использую:

  • как диктора при долгом написании текста;

  • при чтении информации частями из буфера, когда полноценное чтение страницы не доступно или не нужно.

Read Aloud — просто приложение-читалка текста с подсветкой текущего слова. Хорошо читает содержимое сайтов, хуже справляется с документами и форматированным текстом.

Позволяет также сохранять содержимое сайта и сразу редактировать его. Бесплатно в Microsoft Store.

Read Aloud: Text to Speech — расширение для браузера, которое:

  • зачитывает текст со страницы вслух на большинстве языков;

  • выделяет блок, который читает — меньше теряешься в тексте;

  • удобно для документации и одностраничников.

Совет 1: в настройках отключите прочтение большинства знаков препинания — иначе в .md-файлах будет слишком часто звучать что-то вроде «звёздочка-звёздочка».

Совет 2: не используйте на сайтах с большим количеством интерфейса или нетипичным форматированием


Мини-конспекты

Информация по инструменту или текущей задаче часто находится в разных местах и кусками. Задача мини-конспектов — зафиксировать выдержку полезной информации по теме:

  • текущие вопросы и ответы;

  • источники;

  • основные тезисы;

  • неочевидные, труднозапоминаемые, но важные факты;

  • свои схемы.

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


Настройка VSCode

Я часто сбиваюсь по ходу чтения поэтому, на помощь пошло всё: темы, расширения, настройки, шрифты.

Шрифты: 'OpenDyslexicMono', 'Consolas', 'Courier New', 'monospace'

OpenDyslexicMono — сделан специально для дислексиков: большое расстояние между буквами, утяжелённый низ символов (чтобы не скакали), нет засечек. Может снизить нагрузку, но не панацея.

Остальные — обычные моноширинные.

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

Размер шрифта: 16

Тема: очень контрастные и тёмные — сейчас Dark+ или Dainty

Расширения для чтения:

Расширение

С чем помогает

Error Lens

Подсветка ошибок по всей ширине строки — стандартные подчёркивания я часто не замечала

Highlight Line

«Линейка» для кода — подчёркивает текущую строку

При перегрузке теряю контекст происходящего, место в файле, путаница при чтении усиливается. Для этого тоже нашла «помощников».

Расширения для навигации:

Расширение

Что это

Bookmarks

закладки в коде — поиск по новой это лишняя когнитивная нагрузка

Git Graph

отображение структуры веток репозитория на интерактивной разноцветной картинке

TODO Tree

список TODO-комментариев в структуре проекта

Самое полезное — settings.json:

"editor.fontSize": 16,"editor.cursorStyle": "block","editor.fontFamily": "OpenDyslexicMono, Cascadia Code, Consolas, monospace","editor.lineHeight": 1.8,"editor.letterSpacing": 0.7,"editor.guides.bracketPairs": "active","terminal.integrated.lineHeight": 1.8,"editor.cursorSurroundingLines": 5,"editor.renderLineHighlight": "all"

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

Самое интересное у меня в файле настроек:

  • bracketPairs — соединяет открывающую и закрывающую скобки при наведении. Не нужно считать, где что закрылось или нет.

  • cursorStyle: "block" — блочный курсор, который я не теряю в тексте (тонкую палочку часто не вижу).


ИИ (куда же без него)

До того как всё настроила, приходилось много читать. Голова болела, многое не усваивалось.

Вот для чего я стала использовать ИИ:

  • создание конспектов с аналогиями, со схемами, визуальными акцентами;

  • составление тестов по теме, содержанию статьи;

  • правки по оформлению LaTeX и Markdown;

  • автоматизация понятной рутины. Генерирую регулярные выражения, некоторые тесты, конфигурационные файлы и шаблоны для них;

  • помощь в декомпозировании задач или проверка моего плана.

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

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

Кстати, сейчас в ИИ-инструментах начал появляться встроенный режим зачитывания ответов голосом (давно есть в Qwen).


draw.io и Obsidian

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

Поэтому выбор следующего инструмента закономерен.

draw.io: — это бесплатная рисовалка схем в Microsoft Store.

В ней я:

  • рисую структуры файлов в проекте, классов;

  • повторяю связи между компонентами продукта;

  • прорабатываю архитектурные решения для фичи;

  • переношу план в схему, закрашиваю все что готово, в процессе, под вопросом и тд.

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

Кстати, код схем можно загрузить на Git

Думаю, что следующее знакомо многим. Отдельные факты, запоминаются гораздо лучше через связь с тем, что уже знакомо.

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

Так можно эту смысловую картину фиксировать.

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

Оформляется в Markdown. Хранит локально. Выглядит красиво.

В Obsidian у меня есть граф-конспект по паттернам проектирования, организации ОС и разницы между Windows и Linux архитектурой.

Мой конспект по паттернам проектирования

Мой конспект по паттернам проектирования

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

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

Ссылка на скачивание Obsidian будет ниже.

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


Коммуникация

Базовая вещь, но максимально важная.

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

Не обязательно говорить про нейроотличия, но можно:

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

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

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

Пока мне ни разу не отказали.


Заключение

Да, мой VSCode выглядит как новогодняя ёлка, и многим даже сложно на него смотреть от количества ярких и контрастных элементов.

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

Зато — работаю.

Время, которое я трачу, зачастую не отличается от времени остальных. Просто я трачу его иначе.

Ошибки со временем всё чаще стали зависеть только от моего понимания темы и задачи — а не от качества прочтения. Значит, мои подходы работают.

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

Люди с особенностями восприятия не должны бояться показаться профнепригодными.

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


Полезные ссылки

  1. VSCode: Базовые туториалы по настройке

  2. clang-format: Официальная документация

  3. clang-tidy: Список всех доступных проверок

  4. NVDA: Русскоязычное сообщество

  5. Read AloudСкачать расширение для Microsoft Edge

  6. OpenDyslexic шрифт на GitHub

  7. Практики оформления кода от Страуструпа для сlang-format

  8. Главред

  9. Типограф

ссылка на оригинал статьи https://habr.com/ru/articles/1038372/