为什么80个字符是代码宽度的“标准”限制?


573

为什么80个字符是代码宽度的“标准”限制?为什么是80,而不是79、81或100?此特定值的来源是什么?



14
啊!您可以等一个星期再问吗?这本可以是竞赛中获胜的问题
扬尼斯,2012年

12
在任何人考虑为该问题添加其他答案之前,阅读已接受的答案和Mark Booth的答案。这些全面回答了问题。打孔卡排在第一位。
克里斯·夫(ChrisF)

4
为什么这个边缘琐事有139个投票,这超出了我的范围。同时,首页上几乎所有其他问题(好还是坏)的投票方式都更少。我们的集体投票标准是如此违反吗?:((@fredley,这不是对您的批评,而是对我们的社区的批评)
Andres F.

6
@AndresF。这篇文章做得不错的原因是,好标题背后的很多人都会对此感兴趣。它花了一天的时间在超级对撞机的顶部,并进入了Hacker News等网站。它可能只是边际琐事,但它是很好的内容!
弗雷德利

Answers:


735

您可以感谢IBM 打孔卡的这一限制-它有80列:

IBM打孔卡


64
在早期的电传打字机之后,后来的视频终端使用80列(然后是132列)作为标准宽度。
LapTop006

262
现在的问题是:为什么IBM打孔卡有80列?
神秘主义者

139
@FactorMystic-打孔卡的大小基于1880年代末Hollerith设计用于协助1890年人口普查的货币的大小。

56
卡片的大小之所以如此,是因为1890年,CTR希望重新使用货币载体(当时美元更大)来携带人口普查数据卡。
Al Biglan

89
@AlBiglan为什么货币那么大?
弗雷德里(Fredley)2012年

249

作为俄德提到的,这个通用编码标准是IBM公司1928年的结果80列打孔卡的格式,因为许多编码标准可以追溯到当程序在同一时间写在打孔卡,一卡/线时间,甚至过渡到更宽的屏幕并不能改变这样的事实,即代码变得越难阅读,就越难以理解。

穿孔卡上的Wikipedia页面:

文化影响

  • 80列打孔卡格式的传统是,每行显示80个字符是基于字符的终端设计中的常见选择。截至2011年11月,某些字符界面默认设置(例如Microsoft Windows中命令提示符窗口的宽度)设置为80列,某些文件格式(例如FITS)仍使用80个字符的卡图像。

现在的问题是,当赫尔曼·霍勒里斯(Herman Hollerith)以前使用24和45列卡时,IBM为什么在1928年选择80 列卡

尽管我找不到确切的答案,但我怀疑该选择是基于当时每行打字机的典型字符数

我见过的大多数历史打字机台板宽度约为9英寸,这对应于纸张尺寸的标准宽度为8“ -8.5”左右(请参阅为什么美国的标准纸张尺寸为8½“ x 11 “?ISO216 A系列纸质标准历史)。

添加典型的打字机间距(每英寸10-12个字符),这将导致文档宽度在72到90个字符之间,具体取决于页边距的大小。

这样,每行80个字符将代表孔间距(小矩形孔与较大的圆形孔)和线长之间的良好折衷,同时保持相同的卡尺寸。


顺便说一下,并不是每个地方都在其编码标准中指定80个字符的行宽。在我工作的地方,字符限制为132个字符,这与yore 的典型 行打印机的宽度,12pt的横向A4打印输出以及Package Explorer和大纲视图被考虑在内。

即便如此,我仍然更喜欢80个字符宽的代码,因为它可以更轻松地并排比较文件的三个修订版本,而无需横向滚动(总是很糟糕)或换行(这会破坏代码格式)。使用80个字符宽的代码,您只需要一个240个字符的宽屏幕(1920个像素,每个字符8个像素),就可以在一个屏幕上舒适地看到完整的三向合并(公共祖先,本地分支和远程分支)。


2
并不是要开始另一个炒作大事,而是Hollerith的卡片有圆孔,而不是IBM 5081 等人的矩形 IBM后来进军System / 3格式的卡,在3个水平列带中有96个圆形孔。
罗斯·帕特森

9
即使在较大的屏幕上也要继续使用80个字符的一个很好的理由是,许多程序员更喜欢使用较小的终端(甚至IDE)窗口,而不是始终保持全屏状态。
rkulla

4
@rkulla那么我们应该继续施加80个字符限制多少年?当然,对于某些带有短标识符的语言(如C)来说,这很好,但是对于诸如带有长标识符的C#之类的语言,则可能会很麻烦。幸运的是,我们现在限制在132个字符的限制,但我以前对80感到非常恼火,尤其是在Python中
Basic

5
@Basic有一个论点,即如果您不能在80个字符的行数限制内工作,则标识符可能过于冗长,或者您试图在一行上做太多事情。大多数人更喜欢宽行而不是长行的窄列,因为我们的眼睛和大脑已经通过书籍,报纸和列宽受限的网页(像这样的页面)进行了多年的训练,这意味着我们很难扫描并理解长的行。
Mark Booth

5
@MarkBooth我不会将其拖出太多,因为这是一个宗教问题,但是被PEP8标记为太长的是...`(8个空格)return HttpResponse(JsonLib()。encode(Ret) ,content_type =“ application / json”)`是的,它可以分成多行,但分散在各个控制器中,除了满足80个字符的“标准”外,似乎不值得拆分。
基本的

59

我说这也是因为旧终端的大小(主要是80x24个字符):回到80x24终端的时代...

编辑:

为了更精确,更彻底地回答该问题,编辑器内部当前对代码宽度的“通用”限制是80个字符,因为80x24和80x25格式是早期I / O终端和个人计算机中最常见的屏幕模式(VT52-感谢到Sandman4)。

该限制仍然有效,并且在某种程度上很重要,恕我直言,这有两个主要原因:许多Linux发行版分配给新生成的终端窗口的默认几何形状仍然是80x24,并且许多人按原样使用它们,而没有调整大小。而且,内核,实时和嵌入式程序员经常在没有任何窗口管理器的“无头”环境中工作。同样,默认屏幕分辨率通常为80x24(或80x25),在这种情况下,甚至可能很难更改此默认设置。

因此,如果您是内核,实时或嵌入式程序员,则应强迫自己遵守这一限制,只是对应该读取代码的任何程序员都更加“友好”。



9
-1表示不阅读先前的答案,并且没有用的链接仅表示“在80x24终端的年代,流行的unix游戏的原始作者之一经常对他的代码被评论的程度表示赞赏。他说他必须这样做是因为他在编码时总是抽烟,而在屏幕滚动时会失去思路。
gna

7
抱歉,欢迎Avio,您刚好跳进了一个受欢迎的帖子中!我们做的事情与这里其他地方的互联网有些不同。我们最讨厌重复。阅读常见问题以开始使用,希望再次与您见面!
弗雷德里(Fredley)2012年

6
+1表示赞成。另一个+1(如果可以的话),因为代码的80个字符的限制是由于80列的终端,因此可能与打孔卡无关。
Sandman4

4
+1以抵消@RossPatterson的不满意。在任何维基百科参考上都没有引用将80CPR归于打孔卡;这可能是完全巧合的,而且通常接受的“真相”实际上并不是真的。让我看一下采访VT52的原始工程师之一,他说他们遵循IBM打孔卡标准。
杰里米·霍洛瓦奇

52

尽管可能不是80个字符限制的最初原因,但被广泛接受的原因仅仅是阅读人体工程学

  • 如果行太短,则文本将变得难以阅读,因为您在阅读时必须不断地从一行跳到另一行。
  • 如果行太长,则行跳转会变得太困难,因为您在返回下一行的开始时“丢失了行”(可以通过增加行间距来缓解此问题,但这也浪费了空间)。

这在印刷术中是众所周知的并被接受。标准建议(用于书籍中的文本等)是每行使用40-90个字符左右的字符理想情况下使用大约60个字符(例如,参见WikipediaMarkus Itkonen:印刷术和可读性)。

如果目标是每行60个字符,则上限显然必须更高一些,以适应偶尔的长表达式(以及边距标记和行号之类的东西),因此将上限设为70-80是合理的。

这可能可以解释为什么80个字符的限制被许多其他系统接管的原因。


1
我喜欢这个答案,因为它超越了特定技术,并且避免了追求“真正的”原始技术。
kakyo

26

一个相关的问题是“为什么80列仍然存在”。即使在此页面上的响应也大约等于该宽度。我同意80根色谱柱的历史原因,但问题是为什么该标准仍然存在。我要求可读性-散文和代码。我们的思想只能吸收这么多信息。当语句变得太长且晦涩时,我仍然在代码编辑器中使用80列标记来提醒我。这也给我留了很多浏览器的屏幕空间,以及支持IDE的窗口。80列万岁-不能作为指导。


4
我看过版式讨论中提到的最大80个字符(大约)的宽度-显然,它确实有助于提高可读性,是否支持等宽字体。
2012年

12

在固定间距字体时代,另一个常见的行长限制是72个字符。示例:Fortran代码,邮件,新闻。

一个原因是打孔卡的第73-80列通常保留用于序列号。为什么要序列号?如果您放下了卡片组,则可以按任意顺序拾起卡片,将左上角(总是有对角线)对齐,然后使用卡片分拣机将它们放回原处。

限制72个字符的另一个原因是常见字体高10点,宽6点(1/12英寸)。A4或8.5英寸宽的页面可以在6英寸宽的列中容纳72个字符,但仍有边距一英寸以上。


7

我个人坚持在行尾使用“大约80列”,因为在打印时,这会导致换行或代码丢失。

也有打孔卡的遗留问题,但我认为激光打印机或8.5x11英寸纸张的设置不符合打孔卡的限制。


正如我在@CMike的答案中所建议的那样,我确实认为打孔卡的宽度可能与打字机压纸盘的尺寸以及纸张尺寸有关(反之亦然)。
2014年

4

滚动打印机中的纸张为Letter尺寸或15英寸宽。

它是80 cps的行式打印机,用于硬拷贝代码或报告,后来在Epson上支持132 cps的精简打印(用于精简打印的转义码\ 015)。


特别是在此页面上写过(几次!)时!
弗雷德利

12
@Ross:您不应该对不知道问答网站上任何内容的人投以反对票!
abatishchev 2012年

6
@abatishchev-但是答案在此页上
克里斯·

10
@abatishchev实际上,这正是StackExchange网站的想法。应评选“好”答案,而应评选“差”答案,以确保将来可能无法自行判断的读者了解社区对答案的看法。
罗斯·帕特森

2
@abatishchev不是要投票拒绝您不喜欢的答案,而是要投票拒绝没有用的答案。请参阅投票按钮的鼠标悬停文字。
2014年

0

使用80列卡片的原因之一可能与电子打孔机之前可能使用的“手动打孔器”有关。这是我在70年代初期在ICL System 4-50大型计算机站点上使用的计算机。一个人必须打三个部分?同时在刀架上打孔刀。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.