分享

大师之光:有种跨越国界的语言叫C

 wunianyi 2019-10-16

    语言太重要了,因为他的重要性,每个人都花很多时间来学习语言,幼儿时先学习母语,略长大了开始学习外语,成年了可能再进一步巩固母语,或者学习更多的外语。

    对于越来越多的现代人来说,除了学习人类的语言外,还要学习计算机的语言。随着信息产业的发展和软件不断地吞噬这个世界,这个人群越来越大,首先,差不多所有的大学生都要学习一门计算机的语言。其次,越来越多的家长开始让孩子学习计算机的语言。

    就像人类不是一开始就有语言一样,计算机也不是一开始就有语言的。今天一般把1843年时Ada Lovelace编写的一个计算伯努利数的程序看作是最早的计算机程序。这个最早的程序长什么样呢?就是下面这个样子。

    天啊,怎么理解这个程序呢?大多数今天的程序员可能都被难倒了。

    为什么大家都看不懂呢?主要原因是它不是使用编程语言表达的(要很多年之后才出现),而是使用操作流程的方式表达的。图中的表格分为很多列,最左边是操作序号,接下来是操作名称,即加减乘除四种操作,第三列是要操作的变量,用今天的话就是输入变量,第四列是接受结果的变量,也就是输出变量,第五列描述的是变量值的变化情况,第六列是结果表达式,接下来的三大列分别是数据变量、工作变量和结果变量。

    在第23行和24行之间的描述文字是指示要做循环,把13-23号操作重复一次。对当时的机械式计算机来说,如何做这样的循环操作呢?艾达在注释中做了描述。“已经想到了一种方法,那就是按照某种规则把卡片后退一定的步数。”(A method was devised of what was technically designated backing thecards in certain groups according to certain laws.)进一步说,就是把分析引擎中驱动卡片的轴反转一定步数后,再正向转动,“这样便把某一张或者一系列卡片再执行一遍。”(The prism then resumes its forward rotation, and thus bringsthe card or set of cards in question into play a second time.)

    看了第一个程序之后,各位程序员同行应该庆幸今天的代码有多好读和好写了吧。

    其实,直到老雷读大学时,还流行着画流程图(diagram)的方法,也就是在编写程序之前,先把操作过程画出来。这多少是受最初使用的图表方法影响的。

    1950年代,另一个伟大的女生Grace Hopper发明了编译器,这为编程语言的产生奠定了基础。

    在1960和1970年代,已经有几种编程语言了,比如C语言。1980年代时,更多的编程语言出现了。

    老雷在90年代读大学时,学校安排的第一门编程语言是Fortran,现在想起来,里面还有很多东西保留着原始的痕迹,难理解,不好用,也不通用。第二门语言是C语言,难倒了很多同学,考试时,一批同学被关,包括其它课很优秀的从来没有被关过的同学。第三门语言是8086汇编,又有一些同学不适应而被亮红灯。

    有人说,学外语很难。但对某些喜欢学外语的人来说,学一门别扭的编程语言更难。

    其实在1990年代时,已经有很多其它语言了,但是大学里一般都不教。因为什么呢?因为一种语言,从出现到被广泛接受和认可需要时间。而且时间的长度可能很长,不是以天和月计算的,而是以年来计算的。

    在读大学时,我就偷偷学一门叫C++的语言,在图书馆里找书看,把书上的例子抄下来,然后再敲到寝室里的486电脑里,编译、执行、。我当时喜欢C++的一个主要原因是感觉这门语言很亲近,里面的很多概念都与人类的语言很接近,比如类,对象,遗传,派生,等等。

    记得在毕业答辩时,我介绍我设计的软件时,还介绍了我做的类设计,也套用了C++中的面向对象思想。这个介绍赢得了一位评委老师的认可,问我既然系里根本没有C++的课,你怎么会这些?我回答图书馆里自学的。

    毕业之后,使用C++成了每天的工作。直到今天,仍是如此,虽然有时也使用其它的语言,但是C++是我用的最多的编程语言。

    C++的前身叫“带类的C”(C with classes),开始的时间是1979年,距离今年整整40年了。

    说到C++的历史,不得不提到它的发明者Bjarne Stroustrup,因为名字有些难读,所以大家一般就简称BS。

   BS是丹麦人,1975年从丹麦的Aarhus University大学获得硕士学位后,又到英国的剑桥大学读博士,在撰写博士论文的过程中,开始了构思C++的创新之旅。

    博士毕业后,BS带着妻子和女儿远渡重洋,从欧洲到美国,进入到著名的贝尔实验室工作(http://www./bio.html)。在贝尔实验室中,BS继续他的未竟事业,为自己的新语言制定规则,编写编译器,1983年时他的成果在贝尔实验室里试用,更名为C++。

   C++不是一天发明的,不仅BS花费了大约4年的时间打造第一个版本,而且他的工作也是基于具有极强影响力的C语言和当时已经比较成形的面向对象思想基础之上的。简单来说,C++把C的锐利锋芒,与面向对象的包容万物很好的融合在一起,成就了一个经典,至今仍熠熠生辉、长盛不衰。

    2005年5月,老朋友Jason组织第一届C++大会,居然邀请到了BS出席,这让很多人都很惊讶,佩服Jason的本事大,能把这么重量级的人物请到上海来。

    写这篇文章时,看BS自己主页上的简历,从2002年起,他在西安交通大学做荣誉教授(2002-2006: Honorary Professor at Xi'an Jiao Tong University.)。Jason的邀请成功或许与此有关。也或许就是Jason对C++语言的热爱感动了BS。Jason曾翻译了多本C++编程的书,这也是赢得大师信任的一个加分项。

    记得那次大会上面,BS介绍了当时正处于制定过程中的C++0x标准。会后,我写了一篇博客发表在高端调试网站上,文章很短,不妨摘录如下:

技术之美——C++之父印象

借C++大会的机会,有幸与C++的发明者Bjarne Stroustrup博士近距离接触。感受颇多,在此略记一二。

1,最强烈的感受就是Bjarne博士非常谦虚平实。近两小时的演讲,不论是介绍C++0x标准的制定过程,还是举例分析技术细节,他都娓娓道来,重在陈述事实原委,没有任何夸大或炫耀之词。

2,对于不同来源的各种对C++0x标准的建议,他都从是否适合加入标准的角度非常客观的分析和评价,而不批评其优劣。因为很多时候,确实不存在好与坏,而更多的是合适和不合适。

3,高度的负责精神。从Bjarne博士演讲的内容和他的神态都可以看出,他非常关心C++语言的发展和未来,C++0x标准的每个细节都牵动着他的心。所以两个小时的演讲中,几次看到他当讲到如何取舍某些功能时,他都流露出思考和关切的神情。

4,奉献精神。如Bjarne博士所言,C++是靠社区力量推动的,这完全不同于那些靠商业公司支持的语言(如C#,JAVA)。很多为C++标准做贡献的学者和研究人员都是无偿的。Bjarne博士也不例外,但他们始终不懈的努力着。

5,平易近人。Bjarne博士穿着朴素,没有任何“大牌的架子”。对于大家提出的每个问题,他都非常认真地思考,然后耐心的回答。每个答案都非常中肯。

Bjarne博士至今仍从事研究和教育工作,因此可以说他仍是个学者。但他的观点却很具实践性(practical)。他名扬世界,却虚怀若谷,从他的身上,可以看到一个技术领袖的特有之美。

    前几天朋友小聚时,找到了当时与BS的一张合影,弥足珍贵,贴出来分享。

    第一次与仰慕已久的C++之父见面,当时还是很感动的,特别的,会议结束后,Jason还邀请几位国内的讲师与BS共进晚餐。而且晚餐时,我与BS相邻而坐,真有点受宠若惊。

    记得,我当时还询问了BS一个有点敏感的问题。我问他你是C++的发明者,有如此好的技术,为什么不到著名的软件公司工作?或许早有人问过他这个问题,他立刻给了一个不是很正面,但也层次的回答:“在美国,教授很富有。”很多年过去了,BS的这句话始终在我脑海里,包括他当时说话的表情,'In US,professor is rich.'每隔一段时间,BS的这句话就会从我的脑海里冒出来一下。想起这句话,当然就想起BS。有时想起BS,也会不由自主的想起他的这句话,'In US,professor is rich.' 其实“In China, professor is rich too”,甚至,在中国,程序员也挺富啊。富的标准不一样,BS当年那样说,说明他的淡泊名利,至少在当时,或者很长的一段时间里,他觉得大学教授的收入足够了,有美国教授的收入,同时能有很多时间专注于自己热爱的C++,生活已经非常美好。

    当时,BS是在Texas A&M University当教授,这应该是他离开贝尔实验室后的工作。看他的主页,是从2002年起到Texas A&M 大学,一直到2014年。

    From 2002 to 2014, Bjarne was the College of Engineering Chair in Computer Science Professor at Texas A&M University.

    2014年1月,BS加入到Morgan Stanley,真的到著名企业工作了。

    就在这一年9月的1天晚上,Jason给我打电话,说BS又到上海了,晚上有个社区活动,邀我陪同参加。正式活动前,Jason和我与BS一起晚餐。于是在上海张江的传奇广场,我又有幸见到了BS。与上次见面,时隔11年。那天晚餐,就BS、Jason和我三个人,于是有了更多时间与BS聊天。记得,当时我们聊了很多话题。但是很遗憾,我没有问他为什么要加入Morgan Stanley,既然'In US,professor is rich.' ^-^

    我清楚记得,那天晚上,我们还聊到OS内核。让我有点惊讶的是,他对内核的熟悉程度远远超出了我的预期。与很多只专注语言层面的人不同,BS对内核的认识也很深。他当时说的一句话仍让我记忆犹新,“There are many kernels.”“有很多内核。”今天回想起来,BS的这句话仍振聋发聩,“有很多内核。”是么?中国有没有,有了还是没有?其实,BS的意思是,光有内核是不够的,甚至是没用的......真的没用么,也不完全是,内核和应用是共生的关系,离开了谁,对方都没意义。

    其实,在BS的简历里,有一条记录,可以佐证他在内核方面也是很资深的。    

    He is an advisor to the Norwegian startup includeOS. IncludeOS is an open-source minimal unikernel developed in C++.

    晚饭过后,我和Jason与BS一起到浦软大厦的一个阶梯会议室与更多的同行见面。那天晚上,BS讲了C++11。也就是不断难产的C++0x,一推再推,07、08、09,终于也没能在09年出来,直到2011年才出来。但是回过头来看,C++11确实是C++语言推出后,变化最大的一个版本。

    BS的演讲结束后,很多同行拿书请BS签名,Jason拍了一张照片,我做了一次路人甲。

    第三次见到BS是在2016年的C++大会上。因为多种原因,这次大会的规模比11年前的第一届C++大会扩大了好多倍,会场也壮观好多。上一张我坐在会场右侧中排位置拍的照片吧。

    这次大会上,BS讲的题目与前两次不同,不再是单纯的介绍标准,而是深刻阐述他对C++的认识和主张。他的题目是:“What C++ is and what it will become”

    从这个题目,就可以看出一代宗师的领袖之风和王者之气。这次BS给我的印象不再像第一次见他时那样低调,他已经名满全球,他可以有霸气了,但他的霸气不是为自己说话,而是为C++说话。在这次演讲中,BS驳斥了很多对C++的误解甚至诽谤,以高度凝练的语言总结了C++的“英雄本色”,突出了C++具有而且让其它语言望尘莫及的卓越之处,最突出的就是两大特征:

    - direct map to hardware(直接映射到硬件,所以高效锐利)

    - zeor overhead abstraction (0额外开销抽象)

    因为BS的日程安排很密集,所以2017年的北京C++大会,BS没有能参加。2018年,C++大会停办。

    2019年的C++大会已经确定在今年的11月2-3日*,而且BS会再次亲临会场,演讲的题目是《持续演进的C++:原则,问题与解决方案》。估计他会介绍即将推出的C++20。

    BS出生于1950年,今年已经69岁了。从29岁读博时构思C++,到后来的长期致力于C++的实现、标准化和不断演进,整整40年了。在他的主页上,他如此说:

    To make C++ a stable and up-to-date base for real-world software development, I have stuck with its ISO standards effort for almost 30 years (so far).

    致力于C++标准化30年,那么就是从C++98算起。无论是40年,还是30年,都是很长的时间,可谓一生的坚守。如此的执着,真让人敬佩。

     由衷感谢BS用40年的精力打造了一门伟大的编程语言,这门语言是没有国界的,BS的经典著作《C++编程语言》从1985年出版后,畅销不衰,已经被翻译为19种语言。('The C++ Programming Language' (Addison-Wesley, first edition 1985, second edition 1991, third edition 1997, 'special' edition 2000, fourth edition 2013) is the most widely read book of its kind and has been translated into at least 19 languages. )根据2015年的调查全球有440万的C++程序员。在每次的C++大会上,总是遇到不同行业的朋友,但是一讨论起C++,大家立刻便熟悉了,而且没几分钟,就可以大体推断出对方的功力。^-^ 

    这个世界是差异化的,但有些东西是被普遍认可的,比如对技术的执着追求。C++是没有国界的,感谢BS风尘仆仆地到世界各地以各种形式推广这门语言,为世界增加光。

   *希望了解2019年大会详情的朋友,请访问http:///books/2019CppSummit.pdf 或者大会官网

***********************************************************

正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生

欢迎访问http:///gedu/了解软件调试高级研习班的最新信息

或者关注格友公众号

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多