LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Жаль. Мне просто интересна точка зрения.

Я могу коротко повторить. Бросай читать с первого пункта, с которым не согласен.

Текст, разбитый на абзацы, читать легче, чем текст без абзацев. Раскрашенный код читать легче, чем не раскрашенный.

Почему? Потому что «глазу есть за что зацепиться». В tcl есть разные скобки, есть ключевое слово else. За него глаз и цепляется. В лиспе всё круглое, одинаковое, зацепиться не за что, читать труднее. Это может быть не осозноваемо, но это наверняка можно замерить. Я не замерял, мне и так это очевидно.

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

Далее, идиотские длинные названия для сущностей, типа multiple-value-bind, реально снижают популярность полезных возможностей, потому что человек подсознательно стремится излагать мысли более коротко, чтобы меньше печатать. И избегает длинных конструкций. Во всяком случае, ленивый человек, а программист должен быть ленив.

Далее, пробел, точка с запятой или скобка. Меньше всего усилий нужно для чтения пробела. Труднее прочитать одну точку с запятой. Скобка требует больше всего усилий. Глаз постоянно спотыкается, читая скобку за скобкой. Поэтому синтаксис tcl хорош - в нём полно пробелов и нет даже точек с запятой. Синтаксис питона тем же хорош.

Далее, про отступы и скобки. Этот пример я здесь раза три приводил, но лиспер не способен воткнуть в него.

{
let a 1
let b 2
a+b
}
можно заключить соглашение о том, что это всегда читается так:
(let ((a 1))
  (let ((b 2))
    (+ a b)))
Нужно быть совершенно упоротым лиспером, чтобы не заметить, что первый синтаксис гораздо легче читается. И ничуть не менее понятен: область действия переменной - от момента объявления до ближайшей закрывающей скобки вниз. Это правило несложно проверяется с помощью мысленных геометрических построений, оно не сложнее, чем лисповое. И оно подходит почти всегда. Редко бывает
(progn
  (let ((a 1))
    (something a))
  (something else))
Потому что в 99% случаев вместо этого просто пишется:
(progn
  (let ((a 1))
    (something a)
    (something else)))
Это значит, что отдельная лексическая область видимости в let не требует текстуального выделения. И так понятно, что переменная определена _вниз_ от места определения, не нужно ещё и _вправо_ сдвигать текст. Но лисперы это никогда не понимают, и я не рассчитываю и сейчас, что меня поймут.

Пишу только потому, что ты попросил.

Исходная версия den73, :

Жаль. Мне просто интересна точка зрения.

Я могу коротко повторить. Бросай читать с первого пункта, с которым не согласен.

Текст, разбитый на абзацы, читать легче, чем текст без абзацев. Раскрашенный код читать легче, чем не раскрашенный.

Почему? Потому что «глазу есть за что зацепиться». В tcl есть разные скобки, есть ключевое слово else. За него глаз и цепляется. В лиспе всё круглое, одинаковое, зацепиться не за что, читать труднее. Это может быть не осозноваемо, но это наверняка можно замерить. Я не замерял, мне и так это очевидно.

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

Далее, идиотские длинные названия для сущностей, типа multiple-value-bind, реально снижают популярность полезных возможностей, потому что человек подсознательно стремится излагать мысли более коротко, чтобы меньше печатать. И избегает длинных конструкций. Во всяком случае, ленивый человек, а программист должен быть ленив.

Далее, пробел, точка с запятой или скобка. Меньше всего усилий нужно для чтения пробела. Труднее прочитать одну точку с запятой. Скобка требует больше всего усилий. Глаз постоянно спотыкается, читая скобку за скобкой. Поэтому синтаксис tcl хорош - в нём полно пробелов и нет даже точек с запятой. Синтаксис питона тем же хорош.

Далее, про отступы и скобки. Этот пример я здесь раза три приводил, но лиспер не способен воткнуть в него.

{
let a 1
let b 2
a+b
}
можно заключить соглашение о том, что это всегда читается так:
(let ((a 1))
  (let ((b 2))
    (+ a b)))
Нужно быть совершенно упоротым лиспером, чтобы не заметить, что первый синтаксис гораздо легче читается. И ничуть не менее понятен: область действия переменной - от момента объявления до ближайшей закрывающей скобки вниз. Это правило несложно проверяется с помощью мысленных геометрических построений, оно не сложнее, чем лисповое. И оно подходит почти всегда. Редко бывает
(progn
  (let ((a 1))
    (something a))
  (something else))
Потому что в 99% случаев вместо этого просто пишется:
(progn
  (let ((a 1))
    (something a))
    (something else)))
Это значит, что отдельная лексическая область видимости в let не требует текстуального выделения. И так понятно, что переменная определена _вниз_ от места определения, не нужно ещё и _вправо_ сдвигать текст. Но лисперы это никогда не понимают, и я не рассчитываю и сейчас, что меня поймут.

Пишу только потому, что ты попросил.