Posts tagged with english

各位读者老大中有不少都是大学生, 相信不少都参加过形形色色的英语写作培训班. 如果当年您参加培训班的时候, 老师没有介绍一本叫做 <The Elements of Style> (TEoS) 的书, 建议您现在立即冲过去找他们退钱. 为啥呢, 因为这本书是讲解英语写作绕不开的经典圣经(即使这本书已经被说烂了, 批评也不少, 但还是经典). 假如培训机构或者老师上课没推荐到这本书, 这个培训机构要不是太牛逼了, 要不是水货. 而大家都知道, 水货和牛逼的比例总是 1:epsilon.  

作为Amazon 上 297 个5星的书, 书评我就不狗尾续貂了. Knuth 爷爷也是很喜欢这本书滴, 因此在 Stanford 开课的时候让学生人手一本 (我们系今年新生也强制人手一本). 这本书不光勾勒了英语的基本写作要素, 也刻画了一个时代: 从此, 任何需要”艺术和技艺”的领域, 都会时不时跳出一些牛人, 模仿这本书的题材和哲学, 用简洁的文笔勾勒出这个领域的基本要素. 以我熟悉的计算机领域为例, 就有 “The Elements of Programming Style”, “The Element of Programming Style with Perl”. “C Elements of Style”, “The Elements of Java Style”, “The Elements of UML Style” 等等书, 都是希望继承 TEoS 的衣钵, 勾勒出编程的一些风格要素. 今天我要说的比<代码大全>好的书的第二本, 就是叫做 <The Elements of Programming Style>的. 我以前在计算机科学必读经典中, 也提到了这本书. 

这本书作者和上一本 Software Tools 一样, 属于一个家族哲学下的两本不同角度的书. 关于它的书评也很多, 我就不一一废话了. 只说几个体会较深的. 

第一是写程序和写作一样, 要写的清楚. 这本书翻开第一条就是 Write clearly – don’t be too clever. 看上去说的和没说一样, 其实实践起来乃是金科玉律. 我曾自己写过三层嵌套的 “? :” 表达式, 写的时候自己被自己的聪明都感动了, 回来改的时候自己被自己当时的聪明给打击了: 死活看不懂当时啥意思, 只好写一个 printf 在后面测输出. 假如当时多花几分钟写的清楚一点明白一点, 就犯不着回头修改的时候花半小时破译了. 现实中的情况没这么极端, 但是也比比皆是. 相信任何正常的程序员, 每天都要为了理解以前写的不大清楚了程序浪费不少时间 (反正我是记不住一年前写的代码的每个小细节). 因此, 写的时候写的清楚比什么都重要. 

在写得清楚上, Knuth 爷爷是榜样. 他提出的 Literate Programming 的思想虽然太学术, 使得实践的人不多, 但是的确使得程序更加好读. Knuth 爷爷把他的用C语言作为基本语言的 Literate Programming 系统叫做 CWEB. 大名鼎鼎的 TeX 就是 CWEB 写成. 如果对 Knuth 爷爷比较粉的粉丝们恰好要做图算法,  Stanford Graphbase 是一本非常好的书, 里面贴得全是程序, 但是因为 Knuth 爷爷用 CWEB 写成, 文档和程序浑然一体, 读起来丝毫不觉得思维在程序和自然语言间做切换. Java 下有名的 XDoclet 和 Javadoc, 事实上也是 Literate Programming 的一种体现. 据 Knuth 爷爷讲他写 CWEB 程序能笑出来, 这种境界不是一般人能有的. 而且 Knuth 爷爷在提出 Literate Programming 的时候, 就野心勃勃的说: 写文章也是写, 写程序也是写, 我们 Literature Programming 的口号就是: 没有蛀牙 程序员也能拿普利策. (“I’m hoping someday that the Pulitzer Prize committee will agree.” Prizes would be handed out for “best-written program”.)

又八卦走题了. 言归正传, 我的第二个深刻的体会是”让计算机干脏活”. 什么叫脏活呢? 让你不爽的活叫脏活. 比如 Debug, 比如无穷多的复制粘帖, 比如替换一个大小写, 数数几个单词, 做做单元测试等等. 用眼睛瞄肯定会死人. 我以前在 “高效能编程的七个好习惯”  这篇文章中也说了, 就不多废话了. 

当然, 现实的问题是, 理论是理论, 实践是实践. 事实上, 我们要不然就是不用或者想不起来用工具(理由是不习惯), 要不然就是成为工具的奴隶. 李笑来老师也观察到了第一点, 比如这篇. 为什么明明别人告诉我有高效率工具和习惯存在的情况下, 我们还不去用不去改, 或者如何不成为工具的奴隶这两个话题都太大了, 我也写不好, 就不废话了. 然而, 不管最后实践用还是不用, 读一些被别人实践检验过的经验之谈还是很有用的. 这也是我推荐这本书的原因. 不知道大家有没有发现, 潜意识中如果有个正确的小声音不时在原则上提醒自己, 实践的时候潜移默化的就会越做越好. 

最后依然附送两个八卦. 第一个是关于 TEoS 这本书的. 这本书列了很多的原则和规则, 都是具体的对某个词某个句型的建议, 因此英语写作的时候可以直接应用这些规则. 不过对着书查规则显然属于脏活的范围, 所以呢, 我们的”让计算机做脏活”的哲学就发挥作用了: 在 Linux 下有一个程序叫diction, 用他可以检查英语写作的文章符不符合 TEoS 的标准, 我以前也专门介绍过. diction 会挑出那些不符合 TEoS 的句子, 告诉你让你修改. Knuth 爷爷也说, 虽然这个程序很笨, 但是至少可以强迫你重新审视你的文章, 挑出弱智的错误. 其实 GNU/Linux 下帮助英文写作的工具很多, 虽然不完美, 也称得上完整了. 我以前的文章可供大家参考 . 和 diction 一起的另一个工具叫做 style, 可以做像长句分析, 被动语态分析, 平均单词和词汇量估计等统计, 以及语言学水平上的英语水平估计(等价于美国几年级学生水平的估计). 这些估计都是语言学家研究数年的标准指标. 大家都知道, GRE 作文是计算机批阅的, 虽然我们不知道算法, 但是可以想象, ETS 那么笨, 肯定是请语言学家帮忙设计的程序, 所以必然或多或少的用到很多标准的语言学指标. 所以呢, 你不用计算机程序分析分析自己的文章, 光听培训机构的一些老师忽悠, 怎么知道自己文章水平呐? 相比较一些培训机构的老师, 指不定 style 这个程序更像 ETS 的评价标准. 

第二个八卦是关于写清晰的程序的. 或许大家都听说过史上最牛逼的注释的故事. 虽然各人有个人认为的最牛注释, 我个人喜欢的叫做 /* You are not supposed to understand this. */ (我不指望你懂这是啥意思). 这句话其实本来不该这么出名的, 恰好是因为出现在开源的第六版UNIX中, 恰好写的人是 Dennis M. Ritchie, 恰好澳大利亚出了一个叫 Lion 的人把 UNIX 源代码扒出来搞了个源码解析, 又恰好当年这本源码解析几乎每个黑客都人手一本. 所以, 这个极其挑战其他黑客智力的注释就变得流行起来鸟. DMR 同学对此有技术上的详细解释,  不再废话. 就是友情含泪劝告读者: 您要是在你的程序里面搞这么一句然后又被你同事和老板看到鸟, 你就完蛋鸟. 世上只有一个牛逼的 DMR 敢这么写.  

PS: 想要看看The Elements of Style 书的内容的老大们, 可以猛点这个链接

想要看 The Elements of Programming Style 说了哪些的老大们, 可以猛点这个链接

-EOF-

5 comments

美国普通话

国人都知道, 各地方言都不一样, 所以中央电视台总是用普通话来广播, 这样一来, 连我90岁的外婆也能听懂党的政策. 而在美国, 有没有普通话的说法呢? 其实看美剧的同学都知道, 美国压根就没有中国如此差异巨大的方言, 要有不同, 就是把 coke 说成 pop, 把 this 说成 dis 罢了, 也不会严重到各地人民听不懂的地步. 因此, 我一直相信: 美国英语到处都差不多, 大家都能听懂, 没所谓的普通话和方言的说法. 

最近美国大选, 美国人民很娱乐的, 拿到候选人的一点小玩意就发挥搞笑. 比如共和党候选人Palin, 来自与俄罗斯隔了一个小海沟的阿拉斯加, 根据我女朋友的说法, 拥有极其乡巴佬的明尼苏达农民口音, 因此大家都嘲笑她. 你如果Google 一下 Palin + You betcha 或者 Palin + Darn Right, 就会得到很多有趣的结果. 当然还有土到掉渣的 Joe Six-pack (我女友说任何受过教育的人都不会这么说的, 类比一下就是在中文中胡锦涛说“我们代表广大泥腿子利益”一样的粗俗. 她的方言和口音最近被美国人民搞笑, 引起了我极大的好奇: 有没有标准的美国英语? 美国英语又没有普通话?

研究了一圈发现, 美国还真有普通话(放心, 我们以前学的都是美国普通话). 美国普通话大致是以美国中部, 即 Nebraska 东部地区, Iowa 中部和南部地区, Illinois 西部地区等很小的一个区域的方言为基础产生的. 美国所有的媒体都使用标准的美国普通话广播. ( http://en.wikipedia.org/wiki/General_American ) 这样保证全国人民都能听懂标准的美国普通话.

和中国一样, 美国也有主流的语音标准, 说穷地方的方言是容易被鄙视的. 尤其是南方口音, 因为传统上经济不发达, 饶舌又把这个语言发挥到极致, 所以听上去就比较土气. 据我女友说, 南方口音的小朋友到东北部常春藤上学, 因为开口闭口基本都是鼻音, 会严重的被嘲笑. 不过四年的训练会改变掉很多口音, 所以华盛顿的律师出生的政客们个个”普通话”都很标准. 除去南方口音, 加拿大口音和伦敦口音也是常常被用来搞笑的口音(不见得是鄙视). 著名的The Daily Show 就找了一个满口伦敦腔的哥们做外派记者, 每次访问别人的时候就可以摆出傲慢的高高在上的采访姿态. 其它非英语的口音倒是没人拿来搞笑, 估计大家都习惯了.

我们中国学生开口闭口都是中国口音, 也挺有特色的. 在意”标准英语”发音的各位, 我觉得在学习英语的时候可以从CNN等电台的发音开始模仿, 而不应该过多的卷入当地口音. 要不然整了半天其实学的是个不标准的当地口音.

我是南方人. 不怕大家笑, 我上大学之前, 一直分不清前鼻音后鼻音. 老师教的也模模糊糊, 反正全是模模糊糊. 后来在大学里, 某天突然听到一个东北人鼻音很重的说了一个”行”. 我一下子开窍了, 原来后鼻音是这么搞的啊. 我花了10年认识到: 原来我也会发后鼻音的, 虽然我的方言里面不带后鼻音. 我以前一直发不出来后鼻音, 是因为我平时说的方言里面就不带后鼻音, 无论怎么发音, 都想不出来怎么发后鼻音. 此为故事一.

我的母语是中文, 在我来美国前, 我一直没有意识到 “think” 这样一个简单的词我一直发错音. 我会读成 sink. 我一直以为我英语发音还可以, 而且觉得 th 和 s 的区别很微小, 说快了压根没办法区分的. 所以, thank you 我一直认为是 三克油. 直到我踏上美国, 某天, 某同学慢慢的对我说, thanks. 我才认识到, 原来 th 和 s 距离十万八千里, 我以前的发音全错了. 以前觉得形象贴切的”三克丝”(thanks) 现在听来, 觉得错误得不能忍受了. 此为故事二.

说了两个故事, 按照我行文惯例, 要说我得到的人生启发了. 其实我没什么启发, 就是觉得学语言应该要融入环境才学得好. 套用原来的发音, 思维等习惯, 不会真的学好语言. 承着这个思路来看, 我觉得学习英语过程中, 中英夹杂的行文, 对英文的学习是一个极大的妨碍. 因为中英夹杂正是中式英语产生的温床, 是正确使用英语的障碍.

试举一二例 (网上随便找的语料):

凡是在MANHATTAN 的200 以下的都SHARE卫生间。 似乎在 FLUSHING 有 一些 国人 开 的 小 旅社。价格 在 60-70, 这里 是否 有人 住 这样 的旅馆? 关键 是 CLEAN。 一个 叫 金枫 旅店 的 怎么样?当然, 著 FLUSHING 吃 太方便了。

如果这段话改成英文, 关键是clean, 就会变成 The key is clean. 实际上这句英语和中文意思一点也不一样了. “关键是干净” 之中的干净二字, 是名词, 中英混用的情况下当成形容词, 这样的用法必然导致以后在全部用英语的时候说出”The key is clean” 这样的怪话来. 中文一词多性的情况很多, 英语则很少. 夹杂形容词很容易出问题. 同词不同词性问题是汉语和英语的一个很大的不同. 同样的例子还有. “她穿的好fashion哦”, 此处应该为形容词 “fashionable”, 尽管中文是同样的词”时髦”. 中国人使用英语的很多错误, 都是来自这些中英夹杂的语言和思维方式.

此外, 动词和介词也是大问题, 如: “周日, 我在家听摇滚 music” 汉语中听是及物的, 英语对应的 listen 是不及物的. 如果直接按照习惯全部使用英文的话, 极可能说成: I listen rock music. 一个介词 to 就省掉了. 语感好的人会意识到并加上这个 to, 但是长期使用这样的夹杂会损害语感, 使得使用英语的时候出洋相.

当然, 无法准确翻译或者暂时没有翻译的英语专有名词夹杂, 是可以接受的. 我反对的是常规名次, 动词, 形容词, 介词的夹杂, 因为英语和汉语本来就是不同的语言和使用方法, 如果硬是要通过汉语来”贴近”英语, 制造出三克油和中英夹杂的文章, 会彻底败坏掉英语语感的. 失去了英语的良好语感, 说出来任何句子, 都会是错的.

嘴上说顺了, 感觉失去了, 这就是三克油的致命之处.