image

Есть неожиданно много людей, считающих, что писать код можно как угодно, а все эти правила и рекомендации просто занудство. Что же, у каждого каждого человека есть право на своё мнение.

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

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

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

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

Начнём с того, что механизм чтения это вовсе не какое-то особенное умение, а самое обычное распознавание образов.

У мозга есть физиологическое ограничение: время распознавания образа практически константа, от появления перед глазами объекта до осознания мозгом что этот объект из себя представляет проходит около 500 мс. Это не какая-то физическая постоянная, а число полученное на основе экспериментальных данных. Понятно, что все люди разные, кто-то реагирует немного быстрее, кто-то медленнее, даже один и тот же человек в зависимости от состояния будет реагировать по разному. Однако, в среднем эта цифра примерно одинакова для всех. Интересно так же отметить, что время распознавание образа не особо различается для разных по сложности объектов, например собака и буква С будут распознаны почти с одинаковой эффективностью.

Для пытливого читателя

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

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

Например, вы никогда не задумывались, почему скорость чтения оценивается по словам а не по буквам? Объяснение простое — после определённого уровня буквы человек не читает. Он читает слова. Чтение по буквам крайне затратно, например слово «секунда» в среднем читалось бы три с половиной секунды. Вместо этого мозг постоянно учится и после определённого количество встреч с написанием какого-то слова начинает распознавать его целиком, минуя стадию сборки слова из букв.

Как вообще распознаётся слово


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

Поиск ОЧЕНЬ оптимизирован. Достоверно можно утверждать, что ни о каком прямом переборе речи не идёт. Естественно, описать этот механизм в подробностях невозможно, однако попробуем составить грубую модель.

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

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

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

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

После того как образ распознан, на его основании генерируется соответствующий объект и заносится в виртуальное пространство текста.

А причём тут код?


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

Даже в лихие девяностые в интернетах не встречалось таких странных сТиЛеЙ НаПиСаНиЯ kakiе mozhno встртть в кд опт разрбов по_дляКомпукторов.

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

Самый распространённый пример — транслит в названиях функций и переменных.

removeFromSklads(42);

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

Ещё более неприятный пример — бессмысленные сокращения.

cntr_nm_code = 38;

Вероятно автор хотел сказать country name code. Хм… Ну допустим. Помимо очевидной проблемы с чтением у нас возникает проблема с внесением этого объекта в наше виртуальное пространство кода. Если в тексте есть яблоко, но мы написали яблк и в дальнейшем укажем, что яблоко надо разрезать, то писать придётся «разрежьте яблк». Когда нам потребуется написать, что мы присваиваем стране какой-то код мы интуитивно начнём набирать country_name_code и тут же остановимся. У нас в голове не строки, помните?

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

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

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

website.userAdd();
read_from_cache_token();
wasBookReaded;

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

Незнакомые слова(транслит, выдуманные слова, неочевидные сокращения)
Нарушение привычного синтаксического порядка(activePageSet(42))
Несоответствие формы значению (activateTheme вместо themeIsActive)
Мимикрия слов ( Name, name, _name и _Name в одной функции)
Произвольный порядок стилей именования (стандартные функции PHP, например)

Почему всё это вызывает усталость


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

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

Вот иллюстрация из исследования реакции человека на настоящие и выдуманные слова

image

Аналогичные данные можно увидеть в исследовании по чтению предложений с нарушением смысла.

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

Заключение и плохая метафора


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

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

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

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

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

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

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