记者/张蜀 记者手记:1977年高考的大学生意味着什么?让我想起路遥的一篇小说《人生》里的男主人公,当年的天之骄子啊。我较陈榕先生晚几年入清华,当年可能在学校见到过,但没有机会相识。77届学生对我来说挺神秘的,我从他们那里学到了很多东西,有时甚至超过了大学老师们所传授的知识,比如大学时没能理解微积分,相反给我印象最深的却是一位77届学生激情四溢讲解的斯特拉文斯基《春之祭》。而我在几十年之后,采访一位77届学长,也算是一个报答吧。 记者:您好,我记得《程序员》杂志以前采访过您。 陈榕:对。《程序员》杂志社8~9年前邀请过C++的发明者Bjarne Stroustrup来清华和北大讲演,那次我自告奋勇去当翻译,顺便解释了一些C++背景方面的故事,大家都比较有兴趣。我1986年在美国读书的时候就开始学习C++了,那时我所在的伊利诺大学正在设计世界上第一个用C++编写的操作系统Choices。《设计模式》的四位作者之一Ralph Johnson,他那时很年轻,一副娃娃脸,刚博士毕业,来伊利诺教书。我们跟他学习了Smalltalk和面向对象的基础知识,当年觉得面向对象可能就是Silver Bullet,我曾经花了很大工夫去研究面向对象和操作系统。 记者:我也对语言很感兴趣。我认为metaphysics永远不具有physics的丰富性,所以我更喜欢非理性的语言,比如像Perl和C。metaphysics只是一种封装,我想这是C++的问题。不过这次采访对象不是我,还是谈您吧,后来您怎么想到创业? 陈榕:其实我的创业非常不典型,做的事情不典型,年龄也不典型,只能说是“非典型创业”,对读者不一定有帮助,就当故事听吧。现在创业一般都是二、三十岁,我创业的时候已经四十二、三岁了。我1982年大学毕业后,考上中科院计算所倪光南和竺迺刚老师的出国研究生。倪老师所在的第六研究室当时正在做汉卡。设计汉卡需要硬件知识,也需要对自然语言的语法分析,所以考试题目包括大规模集成电路和编译原理。编译原理是软件专业比较难的课,当时学硬件的人一般不学编译原理。我上大学时比较用功,清华软件、硬件专业的课程都学了,所以就考上了。 我于1984年1月去了美国,1985年1月转学去了美国伊利诺大学(UIUC)。伊利诺大学在巨型计算机方面的研究是强项,我在那里学习了并行计算和计算机体系结构,还读到Amdahl’s Law。受其影响,我觉得并行计算可能应用面比较窄,出路不大,便在1986年去钻研系统软件。当时我对两个领域尤其感兴趣,一个是操作系统,一个是编程模型。这也是我1992年能进入美国微软研究院操作系统组的原因。1995年我在微软浏览器IE3组的时候也参与了一些ActiveX的设计工作,后来做过DCOM。你知道OLE Automation吗?当年就是以Doug Franklin和我两人为主写的。我所有的职业生涯都和操作系统及编程模型相关,25年来始终不渝。 至于创业,确实是很偶然的机会。1998年我们Base COM组开始设计COM+,1999年跟着Win2000一起Beta,不久就被告知COM+没戏了,只做到1.0版,之后全体转移去做.NET。我们.NET组当时的口号是“Software as a Service”。但是为了实现.NET的远大目标,微软内部产生了严重的“路线斗争”。一派认为要集中全部力量,实现一个类似Java的中间代码语言,进而实现SaaS;另一派认为要兵分两路,一路做中间代码,另一路从COM层重新做起。最终第一种方案获胜,微软决定采用C#来实现下一代OS,同时全盘放弃COM+。微软直到2004年才意识到1999年的决策失误,并重新启动了Silverlight计划,然而已经贻误了5年战机,并损失了全部COM团队。 由于当时我们用C语言实现SaaS的方案被否定了,自己觉得非常不爽,于是我就回国度假散心。那是1999年10月,美国到处都在.com(此com非彼COM)上烧钱创业,中国也在发烧,生怕钱烧不完。我在北京碰到几个朋友,他们帮忙介绍的投资人,看上了我在微软做过操作系统的背景,这样我就开始了自己的创业,可谓“逼上梁山”。 记者:怎么想到做操作系统? 陈榕:2000年时国内一般就是做做网站,并且也诞生了不少成功的互联网公司,而做基础软件,比如操作系统、中间件、数据库的人就非常少。可我不会做别的,只会做操作系统,所以没什么好想的。回头看,因为操作系统并不直接面对大众市场,所以类似项目非常不适宜创业。因为中国没有大型软件公司来收购创新型软件公司的环境,导致操作系统项目尤其不适宜在中国创业,所以我说我是非典型创业。 我要是十年前知道这些,我都要劝自己别冒傻气。但反过来说,我自1976年2月起下乡插队两年,又幸运考上大学,属于机遇不错的人。我们那代人与现在一般创业的年轻人可能不同:一是不怕吃苦、意志比较坚强,二是总想做一点此生无憾的事情。所以只要开始,就绝不轻言放弃。 记者:不过IT界很多人做的事情都是非典型的,我记得乔布斯也做过NeXT。 陈榕:说到乔布斯,其实我的经历和他的NeXT还有一些交集。当乔布斯投资NeXT Computer时,他已经被苹果开除了。再往前追溯,是20世纪80年代末,曾经有一个比较出名的微内核操作系统Mach,由卡内基·梅隆大学的一支团队发明,其主要发明人是Rick Rashid,目前是微软负责科研的高级副总裁,也是我在微软研究院时的顶头上司。Mach 1.0、2.0的主要代码实现者是Rick的一名非常出色的博士生。后来这个学生加盟NeXT,以Mach为基础,设计了NeXT OS。再后来乔布斯在苹果公司复辟,NeXT OS演变成了今天的Mac OS X。1991年下半年到1994年,大部分Mach发明团队都随Rick Rashid加盟微软研究院的操作系统组,那正是我当时(1992~1993年)工作的部门。当时除了我一个来自伊利诺大学,其他同事都来自卡内基·梅隆。 说到做操作系统,我们首先要谈什么是操作系统?比如Unix,能把进程、锁、内存都做好了,你就可以把它叫做操作系统内核。实际上操作系统就是一个运行平台。设计一个新操作系统的最主要目的,是看你要支持什么样的应用。这个着眼点,需要你对语言,即编程模型非常熟悉。所以在设计操作系统的同时,经常要设计语言。比如:设计Unix的同时设计C语言;设计.NET的同时设计C#。使用操作系统编程的人,要熟悉什么是进程、什么是线程、什么是锁这些东西。但是设计操作系统的功夫,要远远发力在操作系统之外。设计语言,目的是便于编写新型应用,而新型操作系统就是要将其跑起来。做操作系统,做的是什么?某种意义上说,操作系统就是运行平台,最早是Unix,然后是Windows,后来是.NET、WebOS,现在又将是移动互联网。至于改进一下Linux内核,并不是没有改进余地,但那已经不是问题的关键。相对IBM主机OS,Windows曾经短小精悍,是个“白领”就能上手,但Windows已经非常不适合今天的移动互联网了,病毒泛滥,安装、维护复杂,一般老百姓怎么能搞得懂?这样的情形下,我们再设计操作系统的动力将是什么呢?是新的看法、新的思想。 记者:你如何看待构件技术的应用前景? 陈榕:我最近写了一篇文章《另类云计算,另类物联网》,其中我强调了两个方面:对于我们现在这个工业化社会,一般事物可以有两种状态,一个是动态,另一个是静态,后者也可以说是零件化的。考察一下现代汽车工业,为什么它能够这样飞速地发展?零件化生产是一个重要因素。一个著名品牌的汽车,很多零件是可以互换的。在计算机软件领域里面,可不可以同样生成这样的零件?我觉得零件可以看成一个个集成电路,如果有了一堆这样的集成电路,怎样把它们动态组装起来,就是电路板的功能了,我们可以用Perl、Python、JavaScript等做这样的事情。所有这一切,零件是必要条件,它是用C/C++或者Java写不是很重要,关键是要像一个集成电路,具有通用性、一般性。如果我们能做成功这件事,就相当于完成了构件化。 [caption id="attachment_4805" align="alignright" width="268" caption="陈榕表示,科泰华捷的目标是做 通用性的中间件"]
[/caption] 从面向对象走向面向构件:微软做的COM,IBM的SOM,或者OMG的CORBA,都是基于这样的思想。这种思想,距离它们的诞生,其实已经存在二十多年了。只是它们当年的PC战场已经灰飞烟灭,以至于人们似乎有一种错觉:它们已经被人忘记了。如同很久以前就有人在曼哈顿建了摩天大厦,但是现在居民们都移居到上海了,于是人们忘记了在曼哈顿建摩天大厦的技术其实并没有过时。而从计算机技术领域来说,现在进入了移动互联网的时代,相当于我们进入了一个新的战场。或许今天正是我们重新发现构件技术价值的机会。 记者:你们公司的产品一直定位在做操作系统上,但我看你们公司网页宣传比较多的是中间件? 陈榕:其实这两个东西,我们都没有刻意去宣传。什么是操作系统?说起来这是一个哲学问题,如我刚才所说,操作系统就是一个Runtime,三十年前Kernel是操作系统,二十年前Windows是操作系统——Windows就架在Kernel之上了,十年前.NET就是操作系统,现在是XML/HTML+JS+Plug-in。所以概念都是与时俱进的。说到中间件,也要看中间件的含义是什么。 记者:据我所知,在Java编程领域中有很多情况下用到中间件。 陈榕:你说的是Framework,它不是构件。Framework可以看成是钢梁,构件则相当于那些预制件。构件镶嵌在Framework中,你有Framework,但没有构件,或者有构件,而没有Framework,都不行。现在大家讲的中间件多是Framework,为什么不说它们是构件?因为它们不是为第三方做的。构件要做到可以替换成第三方的产品,这才能实现软件的工业化生产。Windows可以看作一个中间件,它有两个特点:首先是通用性,如它的消息驱动机制;其次是它的效率,它能嵌入CPU汇编指令,在某个时间片跑出CPU的效率。Java具有通用性,但它跑不出CPU的效率。我们再思考一下,中间件能不能做得更具一般性?我们可以用构件拼装,我们可以同步调用你,也可以异步调用,消息也是同步或者异步的。也就是说有四个接口:同步出、同步入,异步出、异步入。所以我们的产品目标是一个具有通用性的中间件。你也可以管它叫操作系统级中间件。另外我们正努力的目标是做一个具有云计算功能的中间件,它既能跑本地程序也能跑网络程序。 记者:我总结一下,你们产品的特点,一个是通用性,一个是充分利用CPU效率,还有正在努力做的是网络应用。 陈榕:是。读者可以从www.elastos.com下载我们设计的Elastos SDK。Elastos的架构及API都是我们自己设计并实现的,包括内核、图形系统、文件系统、浏览器等,花了十年时间,一千人年工作量,走了N多弯路,已经商用。一个字:难! 记者:陈先生,我想问您最后一个问题,您认为现在哪个方向创业比较有希望?并且为我们展望一下未来。 陈榕:我不鼓励大家创业时来做中间件或系统软件行业。这对个人创业者可能不是很适合。相反移动互联网绝对是一个大的浪潮,我相信这个浪潮往短里说至少也得有二十年。IBM主机时代的软件相比PC时代的软件大小总和,可以说只是“噪音”。PC时代的软件大小总和,相比移动互联网时代的消费类电子软件,我相信,也可以说只是“噪音”。也就是说,IT产业的第三次浪潮才刚开始,移动互联网时代要把几乎全部PC时代的代码都要重写几个来回,再外加全新的代码,所以创业的机会和就业的机会都会非常好。 软件工业化生产的时代正在变为现实。如果我们预想:未来的构件服务=构件+自描述信息、云编程=服务构件+拼装脚本。所以云上下雨,自然不能像原来安装Office软件那样,一坨就是二、三百MB。一条彩信300KB,那么最大的“雹子”就是300KB。再加上,雨必须从不同的云上下来。雨点可能就是一个一个功能(服务)构件、编译好的二进制代码,可能是CPU指令,也可能是Byte-Code。而HTML/ XML/ JS等脚本语言要在客户端动态地将服务构件拼装成应用。所以人们将进入这样的时代——为一篇写得好的小说付钱,而不用为了印刷技术和纸张付钱。 (本文来自《程序员》杂志11年02期,更多精彩内容敬请关注02期杂志) 《程序员》11年02期精彩内容:我的创业故事 《程序员》杂志订阅坚持与展望——科泰华捷董事长陈榕专访
最新推荐文章于 2024-08-30 16:00:44 发布