August 2008


  1. 如果去北京西站接人,要仔细听英语报站。我接站的时候,英语报站比中文报站及显示屏快5分钟以上,早得到消息,就能早行动。
  2. 家长如果送孩子上学,最好不要扎堆住在学校招待所或者很近的地方,一般来说开学时这些地方房间特别难订,价钱又贵;不妨在五公里范围内寻找合适的旅馆或者经济型酒店,它们一般不会离学校太近,房间很好订,价钱也便宜,每天加上来回打车费,还是比学校周围便宜一半以上。

“语法糖”与“有机方法”?别奇怪,这两个词虽然不容易理解,翻译文章中却很常见。

语法糖,直译自“syntactic sugar”,原指“语法中的糖分”。Beginning Regular Expression的译者李松峰先生有专文讨论:

含糖语法,是由Peter J. Landin创造的一个术语,指的是为一门计算机语言的语法中添加的附加物或附加成分,它不会影响语言的功能,但却能使人类使用起该语言来”更甜美”一些。含糖语法为编程人员(对计算机规范语言来说,是设计人员)提供了一种编写程序(编写规范)的替代方式,这种方式更具有实用性、更有助于形成较好的程序设计风格,或者使代码读起来更自然。但是,它不会影响形式上的可表达性,也不会让语言拥有某种新功能。

Syntactic sugar is a term coined by Peter J. Landin for additions to the syntax of a computer language that do not affect its functionality but make it “sweeter” for humans to use. Syntactic sugar gives the programmer (designer, in the case of specification computer languages) an alternative way of coding (specifying) that is often more practical, more conducive to a better programming style, or more natural to read. However, it does not typically affect the expressiveness of the formalism or permit the language to do something new.

仁兄的认真精神,我非常钦佩,不过“Syntactic sugar”是否要翻译为“语法”,我却有不同看法。

在我看来,sugar固然可以翻译为“糖”,但英文语境中的sugar和中文语境的“糖”是否能对等,恐怕值得商榷——“糖”在英语世界是种普遍讨人喜爱的东西,甚至饭后都喜欢用甜点,而大多数中国人好像没有这种习惯。在中文语境中,让人喜欢的“糖”,更多是与小孩联系在一起的,在成人世界,倒是有一个类似的说法,叫“甜头”。所以,如果直译,不妨翻译为“语法甜头”,比“语法”,更容易理解,更自然。

既然把握了原文要传达的意义,我们甚至可以再进一步,突破形式的樊篱,直抵问题的核心——Syntactic sugar翻译为“语法诀窍(窍门、捷径)”,虽然与“糖”相差十万八千里,却更贴近原文的意思。有人或许会问,那“sweeter”怎么翻译呢?将计就计,直接翻译为“更顺手”就好了嘛——当然,一般情况下能这么用,如果是专文讨论“糖”,加上什么desugar, sugar-righ之类的概念,或许还得老老实实地“糖”来“糖”去。

“有机方法”则是今天早上看到的标题——成为领导的有机方法。这翻译,真让人没脾气,organic approach,不就是“有机方法”嘛。横竖想想,总觉得有些不对劲,“有机”总让人想到化学、食品,“有机”方法,到底是个什么方法呢?

索性查查Collins Cobuild,Organic,它的解释包括:

  1. Something that is organic that is produced by or found in plants or animals,这个是“有机”,没错;
  2. Organic describes change, development or progress that happens naturally or gradually rather than a sudden or force way,“渐进”的,“自然”的,而不是“突然”的,“强迫”的;

看到这里,“有机方法”就站不住脚了。这东西,说轻一点,是“硬译”,说重一点,根本没搞懂意思嘛。不过,这种例子还真多,比如sensitive,就被硬生生翻译为“敏感”,于是大家都“敏感”起来,只会说“大小写敏感”,而不会说“区分大小写”了

按:这是三年多以前写的一篇文章,今天重贴在自家园地。

盗版是打破垄断的利器么?

盗版,顾名思义,就是未经许可偷盗版权的产品。虽然限于国情,大家几乎都在使用盗版软件,不过谁心里都明白,这玩意儿不够光明,用起来多少有点儿名不正言不顺的味道。当然,凡事都有例外,反其道而行之,大肆鼓吹“盗版有理”的,也不乏其人,其中不少还颇有几分名望,例如以那本《起来,挑战微软霸权》扬名天下的方兴东先生,以及不少所谓“同情人民疾苦”,或者打着各种后现代旗号,反抗各种不公正和压迫的斗士。在他们看来,不管用什么手段,只要能够打击处于“霸权”地位的微软,就是“反垄断”。因此,使用盗版软件,尤其是现阶段在中国用盗版,是一件理直气壮的事情——因为盗版是“打破(不只是微软,或者还包括一切处于 “霸权”地位的软件厂商)垄断的利器”。往小了说,这是破除市场中的垄断,往大了说还联系到国家、民族大义云云。可惜,稍懂一点经济学,就知道这类言论纯粹是胡扯。

我们知道,在现实的经济环境中,任何行为、任何选择都是要付出成本,而不考虑成本的选择恐怕是极其罕见的(即使有“不考虑成本”的行为,多半也是因为“考虑成本”这种行为的成本太高所致),我们常说“三思而后行”,“物有所值”,“不买贵的,只选对的”,就是这个道理。

来看这个问题:“”你一辆车,你会要奔驰还是要夏利呢?我想大多数人不假思索就会选择前者。但是,如果问题变成让你付钱“”一辆车,你是否还不假思索就选奔驰车呢?恐怕大多数人都会做出不同的选择。

看似相同的问题,为什么有不一样的答案?关键就在于,第一个问题暗含的信息是选择奔驰和夏利具有相同的成本——都是“给”,结果无疑是收益最大的选择。而回答第二个问题时,则必须考虑价格因素——两个选项收益固然悬殊,成本也迥然不同,这时候自然要掂量掂量再做决定了。

回到软件的问题,盗版软件的一个特点就在于,它缺乏正常市场所具有的价格机制。也就是说,盗版市场完全没有定价差别,也谈不上什么“定价策略”,所有的软件——无论是精简版还是豪华版,也无论是过时的版本还是最新的版本——获得的成本几乎是一样低廉的,而且是对大多数人来说绝对可以承受的。既然不需要考虑成本的差别,这时候用户的选择自然是最新、最好、功能最全最多的软件。实际情况也是如此——不少朋友连做个最基本的图片缩放都要用最新版本的Photoshop,打几个字也要使用最新版本的Office。追求版本最新、功能最全的软件,似乎成为大多数用户的习惯了。可是这样一来,软件市场上的“夏利”、“富康”就面临被“斩尽杀绝”的命运,而它们本来可以依靠合理的价格策略占领一部分市场的——试想,如果软件的价格不是千差万别,你会为了一个并不需要,或者并不那么迫切需要的功能多花几百上千元购买更新更全的版本么——可是因为盗版软件没有价格差异,所有产品都直接面对着最强大的竞争对手。可以说,因为盗版消除了定价差异,所有的软件从开始就是在不公正的环境下较量,盗版市场奉行的是赤裸裸的“赢家通吃”的法则,只有最强最优秀最新版的产品能够“生存”下来(当然,这些软件的开发商也没有获得利益,只不过大公司承担盗版损失的能力更强一些而已)。如此一来,不但最优秀软件的开发商没有获得回报,独辟蹊径,慢慢成长之类的道路也已经被盗版生生扼杀,盗版已经成了 “垄断”的帮凶,帮助“垄断者”攻城拔寨、横扫天下,又谈何“打破垄断”、“维护竞争”呢?进一步说,在助长“垄断地位”的同时,垄断厂商却没有获得相应的利益,利益都被盗版者攫走了。“盗版有理”论者希望造就的,难道就是这样一个弱者被剥夺成长机会,强者被剥夺现实利益的畸形市场?

也恰恰因为如此,我们可以发现,对盗版叫苦连天的,并非是微软之类的“垄断者”,因为他们有国外市场的保障,承担盗版损失的能力比较强;相反更多的是金山等等并非处于“垄断”地位,却有一定实力的软件公司,道理很简单:本来也许WPS比Office有差距,但价格优势明摆着呢,现在可好,硬生生把WPS拉上Office的擂台,轻量级选手和重量级选手同台竞技,不输才怪呢——本来就没有这样比的么!

上个世纪那场关于社会主义的经济学大论战中,奥地利经济学派的掌门人米塞斯教授一再强调价格的重要性,他斩钉截铁地指出,脱离了价格的市场必定是畸形的市场,计划经济必然导致无穷的混乱。今天以盗版的问题观之,诚哉斯言!

“一艘轮船横渡大洋需要七天,七艘轮船横渡大洋就只需要一天吗?”我第一次听到这个段子,是在湖南经视的某档娱乐节目(抨击的是某些专家的“唯数字论”),接下来又听到了那个著名的“吃狗屎与GDP”的例子,“所以,很多时候光靠数字是不能说明问题的”,主持人俨然一脸严肃。

一艘轮船横渡大洋需要七天,七艘轮船横渡大洋就只需要一天吗?面对这个问题,许多人的第一反应就是,“不对”。不对在哪里呢?仔细想想就会明白,“横渡大洋”的工作,没法分拆给七艘轮船来同时完成。
是了,这就是问题的核心(Nature)所在——无法拆分完成的任务,投入更多的劳动力,不见得会有成效。这道理看似简单,变换了情境,就不是如此了。

芯片制造工艺不断发展,在同样方寸内集中更多晶体管的做法已经遇到了瓶颈,人们对计算速度的渴望却永无满足,于是“多核(共享内存的多处理器)”应运而生。多核能给我们的编程带来多大好处?双核真的能比传统的单核快上一倍吗?Amdahl定律(Amdahl’s Law)告诉我们,这是不可能的:

设加速比(完成同样的任务,单处理器所需的时间与n个处理器所需的时间)为S,任务中能并行完成的部分为p。如果单处理器的完成时间为1个时间单位,则理想状态下n个处理器所需时间(不考虑多处理器间的协调成本)是
(1-p)+p/n
那么加速比S的上限就是它的倒数:
1/((1-p) + p/n)

具体到“横渡大洋”的问题,其中的p等于0,所以,7艘轮船的加速比为1,当然还是需要7天。

Morgan Kaufmann的这本书(The Art of Multiprocessor Programming),就以“加速比”和类似“轮船横渡”的例子开头,来介绍多核编程的。全书内容分为两大部分:理论与实践。理论部分关注可计算性——什么样的问题是能够在异步并发环境中完成的,读过这部分,你会明白,为什么有些共享对象无法以任何并发算法来实现,以后不必再白费工夫(It is therefore important to understand what not to try, before proceeding to write multiprocessor programs);实践部分关注并发程序的性能——单核编程依赖的是基础完备的成型抽象,许多东西已经是“约定俗成”;而多核则需要以另一种视角看待,有时程序甚至必须“欺骗(outwit)”内存系统,这样的程序,不熟悉多核结构的程序员可能很难读懂。

传统讲解多核、并发编程的书,大都偏重实践部分,而忽略了理论部分。结果就是,读完虽然知道一堆多线程编程的技巧,也能保证程序的正确性,总是一头雾水,不能有效分析、拆解问题(不过是复杂些的“横渡大洋”问题:)),也难以真正提升程序的效率。相比之下,这本书在Amazon拿到五星,确实不难理解。

如今多核已是大势所趋,有兴趣的朋友,不妨都来读读这本“高年级研究生教材”。