Экспериментальные исследования на белом пространстве (для языкового дизайна и руководства по стилю)?

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

Предположим, вы разрабатываете новый компьютерный язык и должны принимать некоторые решения, которые влияют на внешний вид исходного кода. Или вы просто пишете руководство по стилю для нового языка и хотели бы дать рекомендации. Соответствующими темами могут быть стиль идентификатора (snake_cased_identifiers vs. camelCaseIdentifiers/PascalCaseIdentifiers), горизонтальный отступ, стили документации или вертикальный интервал.

Я намеренно задаю этот вопрос таким образом, чтобы избежать рекомендаций, таких как:

  • "это не имеет значения (без обоснования претензии)"
  • "делать то, что сообщество уже рекомендует для языка X."

Мне не нужна пламенная война между людьми, которые поддерживают разные подходы; скорее, я хотел бы знать, что экспериментальное исследование говорит об этом. (И я не ожидаю, что какое-либо конкретное исследование обязательно будет полностью "объективным" или "нейтральным".)

Чтобы дать "squishier" мотивацию для этого вопроса: люди ценят пробелы в коде, при чтении документов и в искусстве (например, при прослушивании музыки). В этих полях все акцентируются на важности пространства.

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

В заключение, если вы можете, коснитесь одного или нескольких из следующих элементов:

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

Ответы

Ответ 1

Ежегодная конференция IEEE под названием Международная конференция по пониманию программ (ICPC), в которой часто проводятся экспериментальные исследования по пониманию программ. Самое актуальное, что я нашел за последние три года:

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

  • На camelcase или under_score" Результаты показывают, что корпус верблюда приводит к большей точности среди всех предметов независимо от обучения, а тех, кто обучен верблюжий корпус способен распознавать идентификаторы в стиле верблюда быстрее, чем идентификаторы в стиле подчеркивания.

В дополнение к специфической когнитивной литературе, посвященной компьютерной науке, есть исследования по онлайн-и гипертекстовому чтению:

  • [Chaparro, 2005] Чтение онлайн-текста с плохим макетом: хуже ли производительность? Барбара С. Чапарро, А. Дон Шайх и Дж. Райан Бейкер, "Юзабилити", том 7, выпуск 1, февраль 2005 г.

  • [Lin, 2004] Оценка удержания пожилых людей при анализе гипертекста: влияние презентационных медиа как функции текстовой топологии Дии-Йиха Майкла Лина на "Компьютеры в человеческом поведении", том 20, выпуск 4, Июль 2004 г., стр. 491-503. Доступно из ScienceDirect

  • Когнитивная нагрузка в гипертекстовом чтении: обзор Дианы ДеСтефано и Джо-Анн Лефевр.

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

Ответ 2

Это очень субъективная тема, но вы можете взять некоторые подсказки из 1000-летней типографской истории.

Исследования проводились по пробелам в типографике, но меньше по коду. Но вы можете предположить, что многие основные выводы в удобочитаемости и понимании применимы и к коду. Это исследование, Чтение онлайн-текста: сравнение четырех макетов белого пространства, показывает, что правильный вертикальный интервал с большими полями увеличивает понимание, но замедляет скорость. Для кода можно с уверенностью предположить, что понимание важнее скорости. Таким образом, вы можете объективно сказать, что больше места для кода лучше. Но когда вы входите в специфику размера вкладок и позиционирования, это становится очень субъективным. В коде полями являются отступы, абзацы - это функции и кодовые блоки, а периоды - разрывы строк, фигурные скобки, парсеры и т.д.

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

Например:

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

Я думаю, что большинство программистов согласятся с этими утверждениями.

Пример (псевдокод):

thisismore(difficult<toread)because,itsall-smushed{together}
this-is-less ( difficult < to-read ) because, it's-not-all - smushed { together }

Чтобы коснуться последних четырех точек:

Переменные имена:

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

Это труднее прочитать (для большинства людей):

  • mylongvariablename

Чем они:

  • -давно переменное имя моего
  • myLongVariableName
  • my_long_variable_name
  • MY_LONG_VARIABLE_NAME

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

Горизонтальное отступы:

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

Горизонтальное выравнивание:

Опять же, типография на помощь. Списки элементов, выровненные по столбцам, легче читать. Для данных элемента списка, длина которых превышает один или два слова или цифры (например, предложения), используются маркированные списки. Для текстовых данных используются столбцы с левым выравниванием. Для числовых данных используются столбцы с выравниванием по правому краю. Вы можете применить эти принципы для кодирования. Маркированные списки можно рассматривать как кодовые блоки, все они совпадают с одним и тем же уровнем отступов. Переменные - это текстовые данные, поэтому левое выравнивание было бы проще всего читать. Если значения, которые вы назначали, были числовыми, правильное выравнивание было бы лучше.

Это труднее прочитать (для большинства людей):

var oneVariable = 10023, a = 370,
p = 4,
answerToLife = 42,
openThePodBayDoorHal = false;

Чем это:

var oneVariable = 10023, 
    a = 370,
    p = 4,
    answerToLife = 42,
    openThePodBayDoorHal = false;

И это, наверное, проще всего:

var oneVariable          = 10023, 
    a                    =   370,
    p                    =     4,
    answerToLife         =    42,
    openThePodBayDoorHal = false;

Вертикальный интервал:

Представьте себе весь этот пост без интервала между абзацами. Почти каждый может согласиться с тем, что было бы труднее читать и понимать. Теперь многие могут утверждать, что больше места между разделами будет еще лучше. В типографии разделы разделены заголовками, которые имеют больший размер шрифта и больше вертикального пространства (как вы видите в HTML с H1 и т.д.). В коде у нас есть один размер шрифта, поэтому мы должны работать с пробелами и любыми концепциями, которые использует язык (если есть). Как и горизонтальный интервал, больше лучше, чем меньше. Специфические сведения о том, что это значит, являются субъективными, но с большинством языков программисты соглашаются на соглашение для этого языка, который используется большинством людей. Если вы определяете свой собственный язык (или стандарт кодирования), вы можете установить соглашение.

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

Найдите исследования читаемости типографий для получения дополнительной информации.