1.一个人的常量就是另一个人的变量。
2.函数延迟绑定;数据结构诱导绑定。寓意:在编程过程的后期对数据进行结构化。
3.句法糖会导致分号癌。
4.每个程序都是其他程序的一部分,很少有合适的程序。
5.如果一个程序要处理大量数据,它只能通过少量的方式来完成。
6.对称是一个降低复杂性的概念(共同程序包括子程序);到处都要寻求对称。
7.编写一个错误的程序比理解一个正确的程序更容易。
8.当一种编程语言的程序需要注意无关紧要的问题时,它就是低级的。
9.让 100 个函数在一个数据结构上运行,比让 10 个函数在 10 个数据结构上运行要好。
10.尽早形成习惯:用同样的方法做同样的事情。积累习语。标准化。莎士比亚和你的唯一区别(!)是他的成语列表的大小,而不是他的词汇量的大小。
11.如果一个存储过程有十个参数,你可能会漏掉一些。
12.递归是计算的根源,因为它用描述换取时间。
13.如果两个人编写了完全相同的程序,那么应该把每个程序都放入微码中,这样它们肯定就不一样了。
14.从长远来看,每项计划都会变成洛可可风格,然后变成废墟。
15.一切都应该自上而下地进行,除了第一次。
16.每个程序(至少)都有两个目的:一个是编写它的目的,另一个则不是。
17.如果听众在你讲解节目时点头,请叫醒他。
18.没有循环和结构变量的程序不值得写。
19.不影响你编程思维方式的语言不值得了解。
20.哪里有模块化,哪里就可能有误解:隐藏信息意味着需要检查通信。
21.优化会阻碍进化。
22.好的系统不可能有弱的指令语言。
23.要理解一个程序,你必须同时成为机器和程序。
24.如果我们从小就编写程序,也许成年后我们就能读懂它们了。
25.人只能在头脑中显示复杂的信息。就像看东西一样,运动、流动或视角的改变比静止的画面更重要,无论画面多么可爱。
26.在我们的程序中,总会有一些我们想说的话,用所有已知的语言都只能说不好。
27.一旦你明白了如何编写程序,就可以让别人来编写。
28.在计算机领域,很难找到正确的时间单位来衡量进度。有些大教堂需要一个世纪才能完成。你能想象耗时如此之久的程序有多么宏伟壮观吗?
29.对于系统而言,"改头换面 "的类似方法是在控制图中添加一条能形成循环的边,而不仅仅是增加一个节点。
30.在编程过程中,我们所做的一切都是更普遍的事情的一个特例,而我们往往对此了解得太快。
31.简单并不在复杂之前,而是在复杂之后。
32.衡量程序员的标准不是他们的聪明才智和逻辑思维,而是他们案例分析的完整性。
33.第十一诫是 "汝应计算 "还是 "汝不应计算"--我忘了是哪一诫。
34.字符串是一种赤裸裸的数据结构,在它传递的任何地方都有许多重复的过程。它是隐藏信息的完美载体。
35.每个人都可以学会雕刻:米开朗基罗就必须被教导不要雕刻。伟大的程序员也是如此。
36.用程序来证明四色定理并不会改变数学--它只是表明,这个挑战了一个世纪的定理对数学来说可能并不重要。
37.最重要的计算机是在我们头颅中肆虐的计算机,它一直在寻找令人满意的外部模拟器。真实计算机的标准化将是一场灾难--因此它可能不会发生。
38.结构化程序支持排除中间定律。
39.关于图形:一张图片胜过一万个单词--但仅限于描述图片的单词。几乎没有任何一组 10K 字可以用图片充分描述。
40.编写无错程序有两种方法,只有第三种有效。
41.有些程序设计语言能够吸收变化,但却抵挡不住进步。
42.你可以通过注意程序员对 FORTRAN 是否仍有生命力的态度来衡量他的观点。
43.在软件系统中,往往是早起的鸟儿有虫吃。
44.有时,我认为计算机领域唯一的普遍规律就是获取-执行周期。
45.计算的目标是模拟我们的合成能力,而不是理解我们的分析能力。
46.与双关语一样,编程也是一种文字游戏。
47.正如威尔-罗杰斯所说:"没有免费的变量"。
48.对于外行人来说,最好的编程书籍是《爱丽丝漫游奇境记》;但那是因为对于外行人来说,它是最好的任何书籍。
49.放弃汇编语言是我们伊甸园里的苹果:使用会浪费机器周期的语言是有罪的。LISP 机器现在允许 LISP 程序员放弃胸罩和无花果叶。
50.当我们理解了基于知识的系统后,一切都将和以前一样--只不过我们的指尖会被灼伤。
51.把电脑带入家庭不会改变任何一个人,但可能会振兴街角的沙龙。
52.系统有子系统,子系统有子系统,如此循环往复,无穷无尽--这就是为什么我们总是要重新开始。
53.许多好想法一旦踏上语义鸿沟的航程,就再也没有了下文。
54.当心图灵焦油坑,在那里一切皆有可能,但没有什么是容易的。
55.一个 LISP 程序员知道所有东西的价值,却不知道任何东西的成本。
56.软件始终处于紧张状态。作为一种符号,它可以任意完善,但也可以任意改变。
57.修改规范以适应程序比反之更容易。
58.傻瓜忽视复杂性。实用主义者承受复杂性。有些人可以避免。天才则能消除复杂性。
59.在英语中,每个单词都可以被动词化。但愿我们的编程语言也能如此。
60.在追求遥不可及的东西时,简单只会成为阻碍。
61.在编程领域,就像在其他领域一样,犯错就是重生。
62.在计算中,不变式是短暂的。
63.当我们编写能够 "学习 "的程序时,事实证明我们会,而它们不会。
64.手段往往能证明目的的正确性:目标推动技术的发展,而技术则在目标结构崩溃时依然存在。
65.不要搞错了:计算机处理的是数字,而不是符号。我们衡量自己的理解力(和控制力)的标准是,我们能在多大程度上将一项活动算术化。
66.制造变量很容易。控制不变的持续时间才是诀窍。
67.想想为寻求 "算法 "与 "程序 "之间的根本区别而耗费的所有精力吧。
68.如果我们相信数据结构,我们就必须相信独立(因此是同步)处理。否则,我们为什么要在一个结构中收集项目?我们为什么要容忍只给我们一个而不给我们另一个的语言?
69.在 5 年的时间里,我们得到了一种极好的编程语言。只是我们无法控制 5 年的时间。
70.几个世纪以来,印第安人发展出了手语,用于交流感兴趣的现象。来自不同部落的程序员(FORTRAN、LISP、ALGOL、SNOBOL 等)可以使用一种不需要他们骑着小马驮着黑板的语言。
71.文档就像定期保险:它之所以令人满意,是因为几乎没有人会依赖它的好处。
72.充分的引导是自相矛盾的。
73.控制语言变化梯度的不是语言的弱点,而是它的优势:唉,语言永远逃不出它的胚胎囊。
74.难道软件与其他任何东西都不一样,软件就是用来丢弃的:软件的全部意义就在于把它看成一个肥皂泡?
75.由于计算机领域充满活力,它总是急需新的陈词滥调:平庸能舒缓我们的神经。
76.应由用户而非程序创建者来设定程序参数。
77.人、计算机和算法之间的控制论交流就像一场音乐椅游戏:在疯狂地寻求平衡的过程中,三者中总有一方站立不稳。
78.如果你的电脑会说英语,那么它很可能是日本制造的。
79.一年的人工智能研究足以让人相信上帝。
80.长期接触计算机会让数学家变成文员,反之亦然。
81.在计算机领域,化腐朽为神奇是 "挫折 "一词的生动定义。
82.我们即将成功:今天,我们的程序证明了费马次定理。
83.图灵机和现代计算机有什么区别?就像希拉里登上珠穆朗玛峰与在峰顶建立希尔顿酒店之间的区别一样。
84.研究实验室的座右铭:我们今天研究什么,别人明天就会首先想到什么。
85.虽然中国人应该崇拜 APL,但他们把钱都花在了 FORTRAN 上。
86.如果我们认为在一个活动的数据库系统中,程序与数据的比例可以任意缩小,甚至保持很小,那我们就是在自欺欺人。
87.我们有微型和小型计算机。微型计算机在语义上属于哪一种?
88.麦克斯韦方程不足以设计电动机,这不是计算机的错。
89.使用手动计算器并不能学会计算,但可以忘记算术。
90.计算让树开花。
91.计算机让人想起朗-切尼--它是千面机器。
92.电脑是终极污染者:它的粪便与它生产的食物毫无区别。
93.当有人说 "我想要一种编程语言,在这种语言中,我只需说出我希望做什么 "时,给他一根棒棒糖。
94.接口能保持整洁,但不能加速发展:函数可以。
95.如果你不愿意对自己的想法负责,就不要有好的想法。
96.计算机在任何地方都不会引入秩序,因为它暴露了机会。
97.当一位教授坚持计算机科学是X而不是Y时,请同情他的研究生。
98.在计算机领域,平均失败时间越来越短。
99.在人机共生中,必须由人来调整:机器不能。
100.只要有一个程序存在,我们就永远不会没有可编程的东西。
101.应对失败很简单:努力工作,不断进步。成功也很容易处理:你解决了错误的问题。努力改进。
102.不能用正式的方法从非正式走向正式。
103.纯应用性语言的应用性很差。
104.系统价值的证明就是它的存在。
105.你无法传达复杂性,只能意识到复杂性。
106.很难从字符串中提取意义,但它们是我们唯一可以依赖的交流工具。
107.争论不休:PL/I 是巴赫特里亚语还是单峰驼语?
108.每当两个程序员见面批评自己的程序时,双方都会沉默不语。
109.想想看!利用超大规模集成电路,我们可以在 1 平方厘米内安装 100 台 ENIACS。
110.编辑是一种改写活动。
111.罗马帝国为何崩溃?办公自动化的拉丁文是什么?
112.计算机科学因计算机而尴尬。
113.连接神经科学和心理学的唯一建设性理论将产生于软件研究。
114.在计算机中,自然语言是不自然的。
115.大多数人认为编程的概念显而易见,但实际操作却不可能。
116.你认为你知道什么时候可以学习,什么时候可以写作,甚至什么时候可以教学,但你肯定什么时候可以编程。
117.教孩子们编程是违背现代教育规律的。制定计划、掌握组织思想的纪律、关注细节并学会自我批评,这有什么乐趣可言?
118.如果你能想象一个电脑机器人是唯一的男仆的社会,你就能想象任何事情。
119.编程是一种不自然的行为。
120.改造旧程序以适应新机器通常意味着改造新机器,使其行为与旧机器相似。
摘自 ACM 的 SIGPLAN 出版物(1982 年 9 月),文章 "编程中的寓言",作者是耶鲁大学的 Alan J. Perlis。