语言不是计算机代码!
i黑马 i黑马

语言不是计算机代码!

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年诺贝尔文学奖获得者。他以长篇和中短篇小说见长,他同时也是一名出版诗人和编剧家。代表作:《声音与愤怒(喧哗与骚动)》、《我弥留之际》、《八月之光》、《不败者》、《押沙龙,押沙龙!》。

Via i黑马 By 经济学人 翻译:skcheer

赞(...)
文章评论
匿名用户
发布