Linux 适用于西装革履的人士 - 实用性范例
我不编写代码,但我写作散文。两者不同,但也有相似之处和重叠之处。代码编写者也为我提供了一个有用的隐喻宝库。例如,我可以将我的写作方法解释为调试和修补过程——不仅仅是因为这些是编辑的隐喻。相反,这是因为我将我的大部分写作视为有用的信息,而不是成品,这些信息总是可以改进的。我来这里不仅仅是为了表达。我是来帮忙的。(好吧,有时候我只是开玩笑,但这不一样。)
我的榜样是我读过的最有用的书,《风格的要素》,作者是小威廉·斯特伦克和 E. B. 怀特。这本书更广为人知的名字是“斯特伦克和怀特”,其 1.0 版本(en.wikisource.org/wiki/The_Elements_of_Style)由斯特伦克于 1918 年独自撰写,当时他是康奈尔大学的英语教授。它是私下出版的,只有 43 页长。它的开头是
本书旨在用于英语课程,其中写作实践与文学研究相结合。它旨在在简短的篇幅内给出简明英语风格的主要要求。它旨在通过将注意力集中在(第二章和第三章)一些要点上,即最常违反的用法规则和写作原则,来减轻教师和学生的任务。章节编号可以用作更正手稿时的参考。
这本书是简洁明了的典范。上面的段落是第一章的五个段落中的第一个,仅占一页。以下是斯特伦克第二章和第三章的纲要
二、基本用法规则
1. 用 's 构成名词的所有格单数。
2. 在包含单个连词的三个或更多术语的系列中,除了最后一个术语外,在每个术语后使用逗号。
3. 用逗号括住插入语。
4. 在引导独立分句的 and 或 but 之前放置逗号。
5. 不要用逗号连接独立分句。
6. 不要将句子断成两半。
7. 句子开头的分词短语必须指代语法主语。
8. 根据单词的构成和发音在行尾断字。
三、基本写作原则
9. 将段落作为写作单位:每个主题一个段落。
10. 通常,每段都以主题句开头;结尾要与开头一致。
11. 使用主动语态。
12. 用肯定形式陈述。
13. 省略不必要的词语。
14. 避免连续使用松散的句子。
15. 用相似的形式表达并列的想法。
16. 将相关的词语放在一起。
17. 在摘要中,保持一种时态。
18. 将句子的重点词放在结尾。
仅仅阅读这个纲要就能让你成为更好的作家。深入挖掘也有同样的效果。以第三章中的第 13 条为例:“省略不必要的词语。”它的开头是
有力的写作是简洁的。一个句子不应包含不必要的词语,一个段落不应包含不必要的句子,原因与图画不应有多余的线条,机器不应有多余的零件相同。这并不要求作者将所有句子都写得很短,或者避免所有细节,只在轮廓中处理他的主题,而是要求每个词语都表达意义。
熟悉吗?在我看来,同样的原则也适用于编写代码。一个区别是,散文作家通常需要接受关于简洁价值的指导,而代码作家则不需要。这可能看起来是一个苛刻或不准确的说法,但我之所以这样说,是因为代码的目的性是散文不必具备的。事实上,空谈有时正是散文的目的。加里森·基勒曾经称英语为“牧师的语言”,因为“它允许你一直说下去,直到你想出要说什么。”
我想你也可以在代码中空谈。回到 1990 年代后期,我坐在 Linux Journal 的创始人兼出版商 Phil Hughes 的办公室里。他刚刚与另一间房间里的一群极客进行了一场激烈的讨论。他以为我会知道他在说什么,就将一堆代码打印稿扔到他的桌子上。“看看那个!”,他说。“六页 Perl!我可以用一页 awk 做同样的事情!”
顺便说一句,我并不是说 Perl 是空谈(尽管 Phil 可能会这样认为)。我只是说,省略不必要的词语是一种代码编写价值,散文作家需要像威廉·斯特伦克这样的人的帮助。
斯特伦克和怀特的 1.5 版本带有爱德华·A·肯尼在 1935 年的修订版,标题为 写作的要素和实践。斯特伦克于 1946 年去世。据我所知,他的书在 1957 年之前没有变化,当时作家 E. B. 怀特,曾经是斯特伦克的学生,再次看到了“小书”,并着手通过两个简短的附加章节和恢复原标题来改进它。这个后来被称为“斯特伦克和怀特”的第一版,是斯特伦克独自创作的 2.0 版本。在 86 页的 1979 年版中,怀特解释说
本书的第二版于 1972 年出版。我现在已经完成了第三次修订。第四章用最新的词语和表达方式进行了翻新;第一章增加了四条用法规则。在一些规则和原则中添加了新的例子,在文本的几个地方,我认为可以成功地攻击其简洁的堡垒,扩充了内容,总的来说,这本书已经进行了彻底的修改——以纠正错误,删除过时的条目,并使论证更有活力。
怀特于 1985 年去世。1999 年第四版这本书有怀特的继子罗杰·安吉尔的前言,加上索引、查尔斯·奥斯古德的简短后记和罗伯特·迪亚尼的词汇表。维基百科目前的条目指出,“一位匿名编辑修改了 1999 年版的文本。在其他更改中,他或她删除了怀特对用 'he' 代表包含两种性别的名词的热情辩护。请参阅第四章中的 'they' 条目以及性别特定的代词。”在他的前言中,安吉尔更温和地表达了这一点,“这个版本已经适度更新……对性别进行了轻微的重新分配,以允许女性代词或女农民在曾经天真地为他服务的男性中占据一席之地。西尔维娅·普拉斯已经将济慈赶出了局,我注意到在示例文本中,'美国' 变成了 '这个国家',以避免在同一段落中出现随后的,可能带有贬义的 'she'。”
斯特伦克、怀特和 Linux Journal 的精明读者会注意到,我们违反了前一对夫妇的原始命令之一,即将标点符号放在右引号之外,除非它是引文的一部分。这符合 Linux Journal 在 1994 年由 Phil Hughes 建立的文案编辑政策,符合当时已经成为极客口语的习惯。我与 Phil 的第一次争论就是关于这种做法。我输了。
今天,如果你在 Amazon.com 上搜索 风格的要素,你会找到三本不同的书:1999 年第四版、斯特伦克的原始版和 风格的要素插图版,(维基百科告诉我们)它是第四版,加上玛拉·卡尔曼的插图。不知何故,我忍不住将这三本书视为斯特伦克修补内核的“发行版”,每种发行版都有其自身的用途。
阅读和比较维基百科 风格的要素 条目背后的讨论和历史页面也很有趣。前者让人想起 Linux 内核邮件列表 (LKML),而后者则充当代码存储库。这些类比远非精确,但实用性有一个共同的目的。
让我对实用性产生这种新认识的是艾伦·米切尔的一篇博文,标题为“超越说服范例”(rightsideup.blogs.com/my_weblog/2007/08/beyond-the-pers.html)。他写道
我们现代的商业设置是围绕说服范例组织的,其中商业的驱动力是公司及其试图说服个人(所谓的消费者)购买他们的产品或服务(而不是竞争对手的产品或服务)。
然而,我们正在摸索着走向个人决策范例,其重心是帮助个人以更低的成本做出和实施更好的决策(其中“成本”包括时间和麻烦成本,以及金钱成本)。信息时代使这成为可能:我们越来越有能力搜索、收集、存储、过滤、编辑、切片和切块、分析、共享我们决策所需的信息。
更好的个人决策(和实施)是划时代的转变,原因很简单:它将价值创造的重点从公司及其目标转移到个人及其目标,并且它涵盖了生产、分销和交换的所有方面(以及更多……)。
其中包含个人独立的宣言,即需要为人类配备更好的学习、做出选择和行使自主权的方式。不清楚且需要明确的是,程序员在帮助每个人摆脱旧的说服范例以及买家完全依赖卖家的价值体系中所起的作用。
自由和开源代码不仅表达了其作者的自由选择,而且它还提供了实用的方法来扩展那些使用和依赖该代码的人的自由。在我阅读艾伦的文章之前,我没有看到专有代码与以说服为基础的更大范例之间的联系。在许多情况下,专有代码的问题始于动机。这不仅仅是制造秘密位并通过使其稀缺来提高销售价值。而是关于控制客户。说服范例将俘虏的、依赖的客户放在首位。更糟糕的是,它将产品的实用性限制为仅对卖方有效的东西。这通常涉及限制客户的选择。
艾伦称之为个人决策范例,从自由和开源开发世界的第一天起就得到了支持。我认为,我们这里有一个实用性范例——一个对它所支持的一切都产生了安静而变革性影响的范例。今天,这包括 Linux、互联网和无数其他有用的商品,所有这些都比我们以往从说服范例中享受到的经济活力和增长要多得多。(感谢它在其时代所取得的一切成就。)
我分享这个观察的目的是希望它能证明有用。如果没用,我们将修补它、丢弃它或重写它。如果它有用,我们任何人仍然可以自由地改进它。
Doc Searls 是 Linux Journal 的高级编辑。他还是加州大学圣巴巴拉分校的访问学者,以及哈佛大学伯克曼互联网与社会中心的研究员。