Есть неожиданно много людей, считающих, что писать код можно как угодно, а все эти правила и рекомендации просто занудство. Что же, у каждого каждого человека есть право на своё мнение.
Однако, код написаный таким образом читать, почему-то, большинство людей отказывается.
И на то есть причина. Вам никогда не доводилось сталкиваться с усталостью от чтения? Например, сложной технической литературы, канцелярита, другого языка? Уверен, что доводилось. И да, это именно усталость, пусть и не та же что и при физических нагрузках. Сложный для чтения текст значительно сильнее расходует ресурсы
Код это тоже текст. И написать его можно так, что чтение станет крайне неприятным и энергозатратным занятием. Если вам вдруг во время работы с особенно ужасными фрагментами корпоративного портала хочется закрыть редактор и посмотреть котиков, то дело, скорее всего, не в том, что вам лень или внезапно случилось то самое выгорание. Всё дело в том, что именно вы читаете.
Тема чтения сложна и обширна. Что хуже всего, каких-то серьёзных данных по ней, на уровне медицинских исследований и физиологии, в рунете практически нет. Я затрону лишь верхушку айсберга, по той простой причине, что для изучения всего айсберга требуется профильное образование(которого у меня нет) или аналогичное ему по масштабам изучение источников(к которому я пока не готов).
Начнём с того, что механизм чтения это вовсе не какое-то особенное умение, а самое обычное распознавание образов.
У
Для пытливого читателя
После распознавания образа
При чтении мы распознаем образы букв, соотносим их с движениями связок(мысленно проговариваем про себя), строим слово по этим движениям и полученное слово заносим в нашу модель содержимого текста. Это, конечно, только в самом начале обучения чтению, на самом деле механизмы чтения работают в разы эффективнее, фаза проговаривания с наработкой опыта вовсе пропадает.
Например, вы никогда не задумывались, почему скорость чтения оценивается по словам а не по буквам? Объяснение простое — после определённого уровня буквы человек не читает. Он читает слова. Чтение по буквам крайне затратно, например слово «секунда» в среднем читалось бы три с половиной секунды. Вместо этого
Как вообще распознаётся слово
Где-то у нас в памяти хранятся эталонные образы слов. Поскольку их невероятно много, хранятся они с высокой степенью сжатия, 10/10 шакалов. При чтении мы получаем образ слова и сжимаем его то того же состояния, затем начинаем искать соответствия.
Поиск ОЧЕНЬ оптимизирован. Достоверно можно утверждать, что ни о каком прямом переборе речи не идёт. Естественно, описать этот механизм в подробностях невозможно, однако попробуем составить грубую модель.
На первом шаге подбираются подходящие по длине слова. Напоминаю, что в
Затем из них выбираются наибольшие совпадения по внешнему виду. Условно говоря, сжатые изображения накладываются друг на друга и если цвета точек эталона и образа совпадают, то они идут в дальнейшую обработку. Поэтому, кстати,
Далее выполняется соотнесение с контекстом. Те слова, которые не могут находиться рядом или просто в тексте данной тематики откидываются. В итоге получается небольшая выборка, в правильности которой
Если по какой-то причине выборка слишком велика или нет явного перевеса одного слова
После того как образ распознан, на его основании генерируется соответствующий объект и заносится в виртуальное пространство текста.
А причём тут код?
По непонятной причине люди пишут код так, словно до этого они вообще ничего в жизни не писали и не читали. Ну или как будто планету захватили злые кровососущие инопланетяне и код пишется под дулами их протонных бластеров.
Даже в лихие девяностые в интернетах не встречалось таких странных сТиЛеЙ НаПиСаНиЯ kakiе mozhno встртть в кд опт разрбов по_дляКомпукторов.
Приведённые выше шаги распознания текста учитывают далеко не все особенности чтения, однако эти шаги достоверно подтверждены исследованиями и могут использоваться для объяснения, почему некоторые вещи при написании текста резко портят его читаемость.
Самый распространённый пример — транслит в названиях функций и переменных.
removeFromSklads(42);
В наборе эталонов нормального человека нет шаблона для слова sklads. Приходится читать его по английски, вокализировать, находить аналогию в русском языке. Это увеличивает время первого прочтения примерно в три раза.
Ещё более неприятный пример — бессмысленные сокращения.
cntr_nm_code = 38;
Вероятно автор хотел сказать country name code. Хм… Ну допустим. Помимо очевидной проблемы с чтением у нас возникает проблема с внесением этого объекта в наше виртуальное пространство кода. Если в тексте есть яблоко, но мы написали яблк и в дальнейшем укажем, что яблоко надо разрезать, то писать придётся «разрежьте яблк». Когда нам потребуется написать, что мы присваиваем стране какой-то код мы интуитивно начнём набирать country_name_code и тут же остановимся. У нас в голове не строки, помните?
После многократного применения
Тема «неуместных» слов достаточно хорошо изучена. Есть исследования, показывающие, что прочтение слов, не соответствующих контексту или нарушающих синтаксис даётся сильно хуже. Например, словосочетание «хвост кота» прочесть сильно проще и быстрее чем «кот хвоста» в силу его очевидной нелогичности.
Тем не менее, некоторым разработчикам свойственно забывать порядок слов в предложении да и вообще здравый смысл при написании кода.
website.userAdd();
read_from_cache_token();
wasBookReaded;
Разбирать все способы осложнения чтения долго и нудно. Вот небольшой перечень, в обобщённом виде, основных практик, которые помогут вам написать плохой код. Если примерить на них приведённую выше модель чтения то причины будут очевидны.
Незнакомые слова(транслит, выдуманные слова, неочевидные сокращения)
Нарушение привычного синтаксического порядка(activePageSet(42))
Несоответствие формы значению (activateTheme вместо themeIsActive)
Мимикрия слов ( Name, name, _name и _Name в одной функции)
Произвольный порядок стилей именования (стандартные функции PHP, например)
Почему всё это вызывает усталость
В данный момент не так уж много методов исследования процессов происходящих в
При любой деятельности
Вот иллюстрация из исследования реакции человека на настоящие и выдуманные слова
Аналогичные данные можно увидеть в исследовании по чтению предложений с нарушением смысла.
Как видно из графика, электрическая активность
Заключение и плохая метафора
Хоть я и и не люблю аналогии, однако есть прекрасное сравнение, которое позволяет понять, что именно мы испытываем при чтении текста со всеми этими несуразностями. Представьте себе, что у вас есть шуруповёрт. Он отлично крутит саморезы, вы за долгие годы подобрали к нему обширный набор бит для самых разных видов крепежа — прямой шлиц, обычный крест, крест со звёздочкой, торкс, шестигранник… Словом всё, что надо для нормальной работы.
И вот вам надо закрутить тысячу саморезов. Вы открываете коробку и видите там кривые ржавые саморезы. Вы берёте один и видите, что шлиц на нём выполнен в форме буквы Z. Тихонько матерясь вы закручиваете его обычной прямой битой, которая с трудом, но подошла.
Следующий саморез должен закручиваться шестигранником, но только под углом 15 градусов к шляпке самореза. Вы понимаете, что закруить его можно только ключем. Ладно, один раз можно думаете вы и закручиваете его руками.
У следующего самореза шлиц сорван. Матерясь уже громко вы закручиваете его плоскогубцами.
Следующий саморез имеет специальный магнитный замок и может быть закручен только намагниченой битой. Вы находите где-то магнит, намагничиваете биту и закручиваете его.
Следующий саморез тоже имеет магнитный замок но может быть закручен только НЕ намагниченой битой. Вы пинаете коробку с саморезами, и уходите в ближайший бар.
Механизмы чтения — отлаженый и настроеный инструмент, который работает фантастически эффективно. Когда вы сталкиваетесь с плохо написанным текстом вам приходится отказаться от его использования и возвращаться на тот уровень, с которого вы начинали в первом классе. Естественно, что вы при этом тратите намного больше усилий и испытываете злость от того, что выполняете бессмысленную работу.
Автор: Electrohedgehog