Почему 80 символов являются «стандартным» пределом для ширины кода?

572

Почему 80 символов являются «стандартным» ограничением для ширины кода? Почему 80, а не 79, 81 или 100? Каково происхождение этой конкретной ценности?

fredley
источник
14
Argh! Не могли бы вы подождать неделю, прежде чем спросить? Это могло бы быть вопросом победы в конкурсе .
Яннис
12
Прежде чем кто -то думает о добавлении еще один ответ на этот вопрос , пожалуйста , прочитайте принятый ответ и ответ Марк Бут . Они отвечают на вопрос всесторонне. Перфокарта пришла первой.
ChrisF
4
Почему эта часть маргинальных пустяков имеет 139 голосов, мне не понятно. В то же время, почти каждый второй вопрос (хорошо или плохо) на первой странице есть путь меньше голосов. Наши критерии коллективного голосования настолько нарушены? :( (@fredley Это не критика тебя, а нашего сообщества)
Андрес Ф.
6
@AndresF. Причина, по которой этот пост хорошо зарекомендовал себя, в том, что многие люди заинтересуются хорошим заголовком. Он провел день на вершине суперколлайдера, и попал в Hacker News и т. Д. Это может быть незначительные мелочи, но это хороший контент!
Фредли

Ответы:

734

Вы можете поблагодарить перфокарту IBM за этот предел - в ней было 80 столбцов:

Перфокарта IBM

Одед
источник
64
После этого ранние телетайпы, а затем видео-терминалы использовали 80 столбцов (а затем 132 столбца) в качестве стандартной ширины.
LapTop006
262
Теперь вопрос: почему перфокарта IBM имела 80 столбцов?
Фактор Мистик
139
@FactorMystic - размер перфокарты был основан на размерах валюты в конце 1880-х годов, когда Холлерит разработал их для помощи в переписи 1890-х годов .
56
Карты такого размера, потому что в 1890 году CTR хотел повторно использовать валютные курьеры (в то время доллар был больше) для переноса карт данных переписи.
Аль Биглан
89
@AlBiglan Почему валюта была такого размера?
Фредли
249

Как уже упоминалось выше, этот общий стандарт кодирования является результатом формата перфокарт в столбце IBM с 80 столбцами 1928 года , поскольку многие стандарты кодирования относятся ко времени, когда программы были написаны на перфокартах, по одной карточке / строке за раз, и даже переходу чтобы более широкие экраны не изменили тот факт, что код становится труднее читать, чем шире становится.

Со страницы википедии о перфокартах :

Культурное Воздействие

  • Унаследованный формат перфокарты с 80 столбцами состоит в том, что отображение 80 символов в строке было обычным выбором при проектировании символьных терминалов. По состоянию на ноябрь 2011 года некоторые значения по умолчанию для символьного интерфейса, такие как ширина окна командной строки в Microsoft Windows, остаются равными 80 столбцам, а некоторые форматы файлов, такие как FITS, по-прежнему используют 80-символьные изображения карточек.

Теперь возникает вопрос: почему IBM выбрала 80 карт с колонками в 1928 году, когда Герман Холлерит ранее использовал карты с 24 и 45 колонками ?

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

Большинство исторических печатных машинок, которые я видел, имели ширину валика около 9 дюймов, что соответствует стандартизации размеров бумаги до ширины около 8-8,5 дюйма (см. Почему стандартный размер бумаги в США составляет 8½ дюйма x 11 «? и история стандарта ISO216 A серии бумаги ).

Добавьте типичный шаг пишущей машинки 10-12 символов на дюйм, и это приведет к документам шириной от 72 до 90 символов, в зависимости от размера полей.

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


Кстати, не везде в их стандартах кодирования указывается ширина строки в 80 символов. Где я работаю, имеет ограничение в 132 символа, что соответствует ширине типичных широкоформатных принтеров прошлого, распечатке формата A4 в 12pt и типичной ширине линии, остающейся в окне редактора Eclipse (развернуто на экране 1920x1200) после Package Explorer и Контурные виды принимаются во внимание.

Несмотря на это, я все еще предпочитаю 80-символьный код, так как он облегчает сравнение трех ревизий файла бок о бок без прокрутки вбок (всегда плохо) или переноса строк (что разрушает форматирование кода). При коде шириной 80 символов вам нужен только экран шириной 240 символов (1920 пикселей при 8 пикселях на символ), чтобы удобно видеть полное трехстороннее слияние (общий предок, локальная ветвь и удаленная ветвь) на одном экране.

Марк Бут
источник
2
Не для того, чтобы начать очередной фестиваль спекуляций, но у карт Холлерита были круглые отверстия, а не прямоугольники из IBM 5081 et al. И более поздний набег IBM на карты, формат System / 3, имел 96 круглых отверстий в 3 горизонтальных полосах столбцов.
Росс Паттерсон
9
Хорошая причина, чтобы попытаться продолжить использовать 80 символов даже на больших экранах, состоит в том, что многие программисты предпочитают использовать меньшие окна терминала (или даже IDE), вместо того, чтобы постоянно держать их в полноэкранном режиме.
rkulla
4
@rkulla Итак, сколько еще десятилетий мы будем продолжать вводить ограничение в 80 символов? Конечно, для некоторых языков, таких как C с короткими идентификаторами, это хорошо, но для других, таких как C # с длинными идентификаторами, это может быть проблемой. К счастью, мы установили ограничение в 132 символа, где я сейчас нахожусь, но я очень раздражался на 80, особенно в Python
Basic
5
@Basic есть аргумент, что если вы не можете работать в пределах 80-символьной строки, то либо ваши идентификаторы слишком многословны, либо вы пытаетесь сделать слишком много в одной строке. Большинству людей удобнее использовать более узкие столбцы с большим количеством строк, чем с очень длинными, поскольку наши глаза и мозг в течение многих лет обучались с помощью книг, газет и веб-страниц с ограничением ширины столбца (например, этого), что означает, что нам трудно сканировать и постигать очень длинные строки.
Марк Бут
5
@MarkBooth Я не буду перетаскивать его слишком сильно, поскольку это немного религиозная проблема, но PEP8 помечает ее как слишком длинную ... `(8 пробелов) возвращает HttpResponse (JsonLib (). Encode (Ret) , content_type = "application / json") `и да, его можно разбить на несколько строк, но он разбросан по разным контроллерам и, похоже, его не стоит разделять, за исключением того, что он соответствует" стандарту "из 80 символов.
Основное
59

Я бы сказал, что это также потому, что старые терминалы были (в основном) размером 80x24: назад во времена терминалов 80x24 ...

РЕДАКТИРОВАТЬ:

Чтобы точнее и точнее ответить на вопрос, 80 символов - это текущее «общепринятое» ограничение ширины кода внутри редакторов, поскольку форматы 80x24 и 80x25 были наиболее распространенными режимами экрана в ранних терминалах ввода-вывода и персональных компьютерах ( VT52 - спасибо Песчаному4).

Этот лимит все еще действителен и почему-то важен для IMHO по двум основным причинам: геометрия по умолчанию, которую многие дистрибутивы Linux назначают для недавно появившихся окон терминала, по-прежнему составляет 80x24, и многие люди используют их как есть , без изменения размера. Более того, программисты ядра, реального времени и встраиваемых систем часто работают в «безглавой» среде без какого-либо оконного менеджера. Опять же, разрешение экрана по умолчанию часто составляет 80x24 (или 80x25), и в этих ситуациях может даже быть трудно изменить эту настройку по умолчанию.

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

Avio
источник
8
Но старые терминалы были 80 символов в ширину из-за programmers.stackexchange.com/a/148678/4767
Одед
9
-1 за то, что не читал предыдущий ответ и за бесполезную ссылку, которая говорит просто: «Во времена терминалов 80x24 один из авторов оригинальной популярной игры для Unix часто хвалился за то, как хорошо его код был прокомментирован. Он сказал, что должен был делайте это, потому что он всегда курил травку, когда кодировал, и терял ход мыслей, когда прокручивал экран. "
комнат
7
Извините за привет Avio, вы случайно оказались на пост, который стал чрезвычайно популярным! Мы делаем вещи немного иначе, чем остальная часть интернета. Мы ненавидим дублирование, между прочим. Прочитайте часто задаваемые вопросы, чтобы начать, надеюсь увидеть вас снова!
Фредли
6
+1, чтобы оправдать понижение. Еще один +1 (если бы я мог), потому что ограничение в 80 символов для кода связано с терминалом из 80 столбцов, что, в свою очередь, может или не может быть связано с перфокартами.
Sandman4
4
+1, чтобы противодействовать снижению рейтинга @ RossPatterson. Нет никаких ссылок на ссылки в Википедии, чтобы приписать 80CPR перфокартам; это может быть совершенно случайным, и общепринятой «правдой», которая на самом деле не является истинной. Покажите мне интервью с одним из оригинальных инженеров, которые рассказали о VT52, где он говорит, что они следовали стандарту перфокарт IBM.
Джереми Холовач
52

Хотя, вероятно, это не первоначальная причина ограничения в 80 символов, причина, по которой он был широко принят, - просто чтение эргономики :

  • Если строки слишком короткие, текст становится трудночитаемым, потому что вы должны постоянно переходить с одной строки на другую во время чтения.
  • Если строки слишком длинные, переход по линии становится слишком сложным, потому что вы «теряете линию», возвращаясь к началу следующей строки (это можно уменьшить, увеличив межстрочный интервал, но это также приводит к потере места).

Это широко известно и принято в типографии. Стандартная рекомендация (для текста в книгах и т. Д.) - использовать что-то в области 40-90 символов на строку , а в идеале около 60 (см., Например, Википедия , Маркус Итконен: Типография и читаемость ).

Если вы стремитесь к 60 символам в строке, ваш верхний предел должен быть немного выше, чтобы вместить случайное длинное выражение (и такие вещи, как маркеры полей и номера строк), поэтому имеет смысл иметь верхний предел 70-80.

Это, вероятно, объясняет, почему ограничение в 80 символов было принято многими другими системами.

sleske
источник
1
Мне нравится этот ответ, потому что он выходит за рамки конкретной технологии и избегает поиска «истинных» оригинальных технологий.
Каке
26

Смежный вопрос «почему сохранился 80 столбец». Даже ответы на этой странице примерно такой же ширины. Я согласен с историческими причинами для 80 колонок, но вопрос в том, почему стандарт сохранился. Я бы потребовал удобочитаемости - для прозы и кода. Наш разум может поглощать только столько информации в одной части. Я все еще использую маркер 80 столбцов в своем редакторе кода, чтобы напомнить мне, когда утверждение становится слишком длинным и неясным. Это также оставляет мне много экранного пространства для браузера и поддерживающих окон IDE. Да здравствует 80 колонка - как гид не правило.

Пол Маррингтон
источник
4
Я видел 80-символьную (приблизительно) максимальную ширину, упомянутую в типографских дискуссиях - очевидно, она действительно помогает читабельности, моноширинной или нет.
nkorth
12

Другое общее ограничение длины строки в дни шрифтов с фиксированным шагом составляло 72 символа. Примеры: код Фортрана, почта, новости.

Одной из причин было то, что столбцы 73-80 перфокарты часто были зарезервированы для серийного номера. Почему серийный номер? Если вы уронили колоду карт, вы можете собрать карты в любом порядке, выровнять верхний левый угол (который всегда имел диагональный разрез) и использовать машину для сортировки карт, чтобы вернуть их в порядок.

Другая причина ограничения в 72 символа заключалась в том, что обычные шрифты имели высоту 10 пунктов и ширину 6 пунктов (1/12 "). Страница шириной A4 или 8,5" могла содержать 72 символа в столбце шириной 6 "и при этом иметь место для полей. более дюйма

Ларри Теслер
источник
7

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

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

CMike
источник
Как я предполагаю в своем ответе @CMike, я думаю, что вполне возможно, что ширина перфокарты связана с размером валиков пишущей машинки и, следовательно, с размерами бумаги (или наоборот).
Марк Бут
4

Прокрутка в бумагах для принтеров была размером букв или шириной 15 дюймов.

Это были линейные принтеры со скоростью 80 с / с для точного копирования кодов или отчетов, а позже Epson поддерживает сжатую печать со скоростью 132 с / с (escape-код \ 015 для сгущенной печати).

Rony
источник
Особенно, когда это написано (несколько раз!) На этой странице!
Фредли
12
@Ross: вы не должны никого понижать голосом за то, что ничего не знаете на сайте вопросов и ответов !
абатищев
6
@abatishchev - но упомянутый ответ находится на этой странице .
ChrisF
10
@abatishchev На самом деле, именно в этом и заключается идея сайтов StackExchange. «Хорошие» ответы должны быть одобрены, а «плохие» ответы должны быть понижены, чтобы гарантировать, что будущие читатели, которые не смогут судить сами, смогут узнать мнение сообщества об ответах.
Росс Паттерсон
2
@abatishchev Речь идет не о том, чтобы отклонять ответы, которые вам не нравятся, а о том, чтобы отбрасывать ответы, которые бесполезны . См. Текст при наведении мыши на кнопки голосования.
Марк Бут
0

Одна из причин использования 80-карточных карточек может быть связана с «ручным перфоратором», который, вероятно, использовался до использования электронных перфораторов. Это тот, который я использовал в начале 70-х годов на компьютерном сайте основного блока ICL System 4-50. Нужно было пробить секцию из трех? врезать ножи в каретку одновременно.

Рэй Дентон
источник