Верблюжья нотация или нижние подчёркивания: научный подход

camel copy

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

Какой стиль предпочитаете?

или посмотреть результаты

Загрузка ... Загрузка ...

Проголосовали? Отлично! Теперь моя очередь провести некоторую работу и попытаться дать вам полу-научное обоснование того, какой стиль форматирования лучше всего подходит для программирования.

Честно говоря, такой код проще читать.

Я бы не написал этот пост, если бы не прочитал статью Коена «Tao of Coding». Как мой бывший коллега, он переманил меня на сторону нижнего подчёркивания. Толчком к финальному решению послужил ответ в одном из споров по поводу соглашений об именовании. Он дан в цитате слева. Так что же, это просто мнение или действительно факт?

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

Раунд 1: Мнения

За нижние подчёркивания:

  • Нижние подчёркивания больше всего похожи на естественное письмо. Пробелы просто заменяются подчёркиваниями. Яркий пример: isIllicitIgloo и is_illicit_igloo.
  • Использование в константах. Нижние подчёркивания до сих пор незаменимы в именовании констант в верхнем регистре. Пример: THIS_IS_CONSTANT.
  • Аббревиатуры так же можно легко именовать в верхнем регистре. Пример: TCP_IP_connection и tcpIpConnection.
  • Классы можно продолжать обозначать через верблюжий регистр, чтобы явно различать классы и идентификаторы/функции.

Спасибо тебе, Йосси Крейнин, за 2 последних пункта, обсуждённых в IHateCamelCase.

За верблюжий регистр

  • Верблюжий регистр проще набирать, чем нижние подчёркивания.
  • С верблюжьим регистром проще читать параграфы.

my_first_variable = my_second_variable - my_third_variable

сравните с

myFirstVariable = mySecondVariable - myThirdVariable

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

Раунд 2: Опровержения

Против нижнего подчёркивания

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

Против верблюжьего регистра

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

Раунд 3: Факты

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

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

Существующие исследования

Исследования естественных языков в психологии показывают, что замена пробелов на другие символы или цифры негативно влияет на чтение. Однако затемнённые квадратики (похожи на подчёркивания) не оказывают существенного влияния на скорость чтения или точность распознавания отдельных слов. Удаление же всех пробелов замедляет чтение приблизительно на 10-20%.

Подготовка эксперимента

Эмпирическое исследование 135 программистов и не-программистов. Испытуемым нужно было корректно определить соответствующую фразу (не более трёх слов) из четырёх схожих вариантов. Измерялись следующие показатели:

  • Точность: правильно ли выбрана фраза.
  • Время нахождения ответа.
  • Подготовленность: будут ли программисты выполнять задания лучше/хуже.

Результаты

  1. Верблюжья нотация имеет большие показатели по точности (шансы верного распознавания на 51.5% выше).
  2. В среднем на верблюжий регистр уходит на 0.42 секунды больше, что на 13.5% дольше, чем на подчёркивания.
  3. Подготовленность не оказала какого-либо статистически значимого влияния на то, как стиль влияет на точность.
  4. Те, кто был лучше подготовлен, быстрее определяли идентификаторы в верблюжьем стиле.
  5. Тренировки на каком-либо одном стиле негативно влияют на скорость нахождения соответствующих фраз в других стилях.

Заключение

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

Обсуждение

Лично я считаю вывод ошибочным по нескольким причинам.

Точность не настолько важна в программировании. Под точностью имеется в виду способность различать похожие идентификаторы. Например, startTime и startMime. Это не типичный случай для программирования. Вдобавок, в современных IDE есть автодополнение и подсветка написанного идентификатора. Поэтому я считаю, что результаты (1) и (3) нерелевантны. Для заметки, мне верится, что корректность в верблюжьем регистре связана с медленным чтением. Когда тебе нужно больше времени, чтобы прочитать что-то, ты читаешь это аккуратнее.

Обсуждая возможные угрозы для точности, они упоминают следующее: «В сущности, весь тренинг проходил с верблюжьим регистром, было бы интересно изучить людей, натренированных использовать нижние подчёркивания.» С учётом этого результаты (4) и (5) выглядят необъективными. Разве не очевидно, что люди, привыкшие к верблюжьей нотации, будут хорошо в ней ориентироваться? И это точно имеет негативное влияние на «скорость поиска» в случае подчёркиваний.

Таким образом, остаётся только низкая скорость чтения в верблюжьем регистре (2). В среднем, чтение идентификатора в верблюжьем регистре занимает на 13,5% больше времени, чем с нижними подчёркиваниями. Умножьте это на весь объём кода, и вы узнаете моё мнение в войне между верблюжьей нотацией и подчёркиваниями!

Итак, каково ваше мнение сейчас? Снова постарайтесь выбрать независимо от соглашений, привычек или типа идентификатора.

Удалось вас убедить?

или посмотреть результаты

Загрузка ... Загрузка ...

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

Перевод статьи «CamelCase vs underscores: Scientific showdown»