语言与计算机 语言不是计算机代码 Jul 31st 2012, 16:22 by R.L.G. | NEW YORK 7月20日,两家科技公司的拥有者凯尔·韦恩斯在《哈佛商业评论》上发表了一篇博客,题为“我不会雇佣那些语法很差的人。下面给出理由。”。这是文章中的一段摘要: “如果你觉得,单引号是耶稣十二门徒之一 [注1],那么你不会为我工作。如果你觉得,分号是有着自我认知危机[注2]的冒号,那么我也不会聘用你。如果在用逗号断句的时候,你只有散弹枪的准星,那在我们礼貌地送你离开大门口之前,还是请你早些回家,洗洗睡吧。” 一开始我没有看懂这个玩笑。(如果你觉得“单引号”应该用在James,Peter和John之间,那你的问题就远不止语法了。把“apostrophe”当成“apostle”实在是太蠢了,让我在第一遍读的时候都没看懂。)但作者想表达的观点很明确: “良好的语法是信誉的象征,在互联网上尤其如此。在博客里、Facebook状态里、在电子邮件以及公司网站里,你的文字就是你的全部。即使没有和你直接接触,你的种种都会在字里行间里显现出来。如果你连their,there和they're都弄不清楚,无论好坏,其他人总会对你有个评价。” 如果你没法区别分号和冒号,或是和结肠镜里的结肠混淆 [注3],那你也没法为《经济学人》工作。韦恩斯先生接着说:“同样,注重书面语言组织的程序员在编写程序的时候也会更花心思。”这是有道理的。“注重细节”也许是一项稳定的,整体性的人格特质:拥有这种性格的人既不会为写文章或者编写代码感到痛苦,也不会频繁地退订机票,出门忘带钥匙或者没做检查就支付餐厅账单。这样的人才深受许多行业的喜爱。 在自然语言和计算机代码之间也有着直接的类比。良好的代码编写能减轻计算机的内存负荷,使程序稳定运行;良好的 遣词造句能减轻读者的记忆负担,使文章更易阅读。糟糕的代码编写会使程序运行时出错;糟糕的遣词造句会给读者造成理解上的障碍。一些人永远也学不会作文。一些人永远也学不会编程。 但韦恩斯先生在一点上犯了错误。(虽然大多数职业编辑都会用"zero-tolerance"而不是"zero tolerance" [注4],但这里并不是指这个。)他说:“本质上看,编程就是作文。”不,显然不是。 他搬出了权威的观点作证:“斯坦福大学传奇编程大师高德纳 [注5] 曾说过[程序员]是‘有着传统审美及文学形式的作家。’”我没有资格去质疑高德纳先生程序员界的泰斗地位,但我可以说,他这句话看上去并不怎么诗意,同时,他也没有跳出他的圈子来讲。我倒很想看看用一堆代码写出来的悲剧,民间传说或者流浪汉小说会是怎样。 或者,让我也引用下权威的观点吧: “虽然形式语言和自然语言有很多共同点——符号,结构,句法和语义——但也有不少区别: 歧义性 :自然语言充满歧义,人们根据上下文的语境和其他信息来帮助理解。而形式语言的设计要求近乎或者完全明确,不容歧义,其中的每个语句都必须有唯一确切的含义,不受上下文的影响。 冗余性 :为了消除歧义,减少误解,自然语言引入了大量的冗余。因此也通常显得啰嗦。形式语言冗余较少,更加简洁。 同一性 :自然语言包含大量谚语和比喻。如果我说,”另一只鞋掉了,“可能根本没有鞋,也没有任何东西掉落。形式语言的字面意思就是真实意思。” 这是一个嬉皮士语言学家在抱怨顽固派和他们的“正确语法”吗?不,这段话援引于艾伦·唐尼、杰弗里·埃尔科纳和克里斯·梅耶共同编著的书籍《如何像计算机科学家一样思考》。 计算机代码和语言之间的对比和类比同等重要。一个小小字符或标点的缺失就会使程序出错;而在语言中,“punctuation”的拼写遗漏了c并不会带来太多问题,如果你真的有注意到,也只是理解上稍稍慢一点。计算机的同一性是人类噩梦的来源;如果计算机有一天意识到人类最好在这个世界上消失,那他们就会把我们彻底消灭干净,不掉一滴眼泪。现实世界的混乱和刺激往往使人际交往变得复杂,这也是和计算机代码的区别之一。我们付出了数十年时间努力研究,花费数亿的开支,最后也只是能让计算机对人类语言掌握到“残缺Siri”的程度。而一个完全没有接受过任何正式训练的5岁小孩,也能听懂那些Siri理解不能的语言。 之所以会造成“语言即代码”(或者“编程即作文”)的理解,要归咎于某些语言固执主义形式的错误引导。错用“its”而非“it's”会困扰到那些敏感读者。但这并不会让他们的大脑像计算机不能识别“whiel”和“while”时那样崩溃。需要相信,这样的错误是等价的。或许只是很小的错误,但却导致了“崩溃”,会强迫编程者更加重视形式和内容的规则,也许也会让他们过度关注无规则的地方(比如用"that"还是"which",或是分离不定式等等)。如果太着眼于“语言即代码”的字面意思,那么语言中的可选规则、正式程度、方言、口头禅、语言的演变、时间带来的自然转变、单纯的玩笑,这些就都没法用计算机来解读了。所有规则必须自始至终遵守。不同的程序员之间当然会有不同的编写风格(在计算机语言中也有那么一些“可选规则”),但风格并不是语法:程序员并不能像乔伊斯或福克纳那样玩转规则。 也有个别的写作类型——比如法律文书和技术文档——是需要像计算机代码一样剔除歧义,保持精确的。对于韦恩斯先生来说,雇佣那些写起文章来也像编程的人也许是对的。但大部分人都知道:电脑天才写不出很好的文章(他们太过忙于编程),而优秀的作家也编不出"Hello, world!"的程序(他们太过忙于在程序员编好的工具上写文章)。根本上讲,优秀的作家总是文风高雅,善于抒情且充满人情味。优秀的编程者总是高度统一,严谨且精于演算。坚持“编程即作文”的观点是对两者本质的误读。 译者注: 1. 这里作者开了个玩笑,嘲笑那些把"apostrophy"(单引号)和"apostle"(门徒)混淆起来的人。后文作者也有解释。 2. identitiy crisis: not sure of who he is or his place in society 心理学术语,自我认同危机。 3. colon: 既可以作冒号讲,也是医学里的结肠。 4. 这里作者对韦恩斯的博客进行了吐槽,说的是对语法错误零容忍,结果自己的文章还犯了语法错误。 5. Donald Ervin Knuth: 美国著名计算机科学家,斯坦福大学计算机系荣誉退休教授。高德纳教授被誉为现代计算机科学的鼻祖,在计算机科学及数学领域发表了多部具广泛影响的论文和著作。“高德纳”这个中文名字是1977年他访问中国之前所取的。 6. Joyce: 詹姆斯·乔伊斯,爱尔兰作家和诗人,20世纪最重要的作家之一。代表作包括短篇小说集《都柏林人》、长篇小说《一个青年艺术家的画像》、《尤利西斯》以及《芬尼根的苏醒》。 Faulkner: 威廉·福克纳,是美国最有影响力的作家之一,1949年诺贝尔文学奖获得者。他以长篇和中短篇小说见长,他同时也是一名出版诗人和编剧家。代表作:《声音与愤怒(喧哗与骚动)》、《我弥留之际》、《八月之光》、《不败者》、《押沙龙,押沙龙!》。 |
糟糕的文章书写会给读者造成理解上的障碍。一些人永远也学不会作文。一些人永远也学不会编程。
reader1 发表于 2012-8-2 20:37
斜排就是不大好读。
badly written prose can cause errors in interpretation. Some people will never ...
Fundamentally, good writers are empathetic, human and stylish. Good coders are literal, formal and algorithmic. To take the coding-as-prose analogy too far is to misunderstand the essence of both.
|小黑屋|手机版|网站地图|关于我们|ECO中文网 ( 京ICP备06039041号 )
GMT+8, 2024-11-21 22:35 , Processed in 0.079089 second(s), 27 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.