九曲十八弯,是桥;是费解;是C++。
如果一句话让你说得大家都不懂,要么是你太聪明和高深,像尼采;要么是你太幽默或周密,像谁呢?我以前和一个网友讨论CRM,他的帖子看得我晕晕糊糊的,一句中国话说得像E文一样,可以加10个that、who……像他。
一、读读E文诗
许渊冲:A Tranquil Night
Abed, I see a silver light,
I wonder if it's frost aground.
Looking up, I find the moon bright;
Bowing, in homesickness I'm drowned.
yqj2065的翻译:无题
在床上,我看到银色的微光,
我迷失,这是否满地的秋霜;
抬头望,好一轮洁净的月亮,
曲身想,沉浸于思乡的惆怅。
李白的翻译:静夜思
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
Tr. W.J.B. Fletcher的翻译:The Moon Shines Everywhere
Seeing the moon before my couch so bright
I thought hoar frost had fallen from the night.
On her clear face I gaze with lifted eyes:
Then hide them full of Youth's sweet memories.
只要有语言,就有诗。而唐诗只能为国人所意会,它展现的意境可以用其他语言所表达,但其“一字千金”的技术不是其他语言能达到的,如“春风又绿江南岸”。(see 李白诗9种英译版本)。『斯蒂芬称之为“语言游戏术”的杂耍?呸!』
二、沃夫假说与丘奇猜想
计算机科学的发展,越来越多地借鉴其他学科相关理论。
有一个叫Benjamin L.Whorf的提出一种假说:“我们依据自己母语划定的界限来划分自然”,或者说,存在一种可能性,某些想法能用一种语言表达,却不能用另外的一种语言表达。事实上,这里有两个关键问题必须分开对待:
1. 语言的最终功能是否相同?“如果玫瑰用其他名字表示,这种花还会一样的芬芳吗?”,我们几乎可以不假思索的认定,语言的最终功能应该是相同的,因为我们的脑袋是唯物的。但在计算机科学领域,这仍然被称为猜想,即丘奇猜想——任何一种具有明确步骤的计算都可以通过图灵机来实现。如果我们承认丘奇猜想的正确性,那么任何编程语言的“解决问题的能力”是没有差别的。这意味着只要功夫深,FORTRAN、C++、Java都可以磨针。毕竟,它们最终将等价与某种机器语言程序。
2. 不同的语言能否导致不同的思维方式?答案可能是“能”。在这一点上,沃夫假说又是对的。『对于讲澳大利亚的一种方言Guugu Yimithirr语的人来说,如果拿一支箭头指向他们左侧的箭让他们看,然后让他们画这支箭,除非他们画的时候看到这支箭仍然指向左侧,否则画出的箭就不会指向左侧。然而,如果他转过身,就会将箭画成指向右侧,也就是原先箭头所指的方向。这个例子说明了语言能够明显地影响人的思维和行为。』(见带“色”的语言:央视国际 2004年06月15日);而且,《面向对象编程导论(原书第3版)》(巴德著)中有一个编程语言方面的实例(P2);
我们得到这样的结论:
任何语言都可以编写任何程序;
语言的区别在于它如何影响程序员的思维方式。
这就是我说C++不好的原因。它的优点是面向对象的C语言,但它没有真正发挥影响程序员的思维方式的作用。所以说,树立面向对象思想,很大程度上意味者消除程序员(特别是C/C++程序员)已经拥有的过程式思维或过程化范式的干扰。
所以说,OOP就是编写出符合三大格言的程序。
三、面向对象编程范式、Java
这就不需要再讨论了。见1.2 范式(2)
l 范式(paradigm)是学习OOP时要理解的最重要的术语。
l Java语言被公认为是面向对象思想的最好体现。
设计模式、泛型编程是意境,C++、Java都可以表达;而使用C++来讨论OOP,我感到像静夜思的英文版,九曲十八弯,别扭。