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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

8 голосов
/ 01 ноября 2011

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

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

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

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

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

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

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

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

7 голосов
/ 26 ноября 2011

Это очень субъективная тема, но вы можете взять некоторые подсказки из 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 и т. Д.). В коде у нас есть один размер шрифта, поэтому мы должны работать с пробелами и любой брекет-концепцией, которую использует язык (если есть). Как и горизонтальный интервал, больше лучше, чем меньше. Сведения о том, что именно это означает, субъективны, но в большинстве языков программисты соглашаются с тем языком, который использует большинство людей. Если вы определяете свой собственный язык (или стандарт кодирования), вы можете установить соглашение.

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

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

...