c++ 创始人的一些话语
时间:2010-03-06 来源:sjtlqy
Lippman 大牛的第一场,关于大型可伸缩性的软件开发的, Chen Shuo 同学翻译的很不错
找到电源,所以可以写写了。
果然是牛人啊,上来就讲形而上的东西。我听的有趣,就做了点笔记,但是记的不多。
我们从自然界去寻找灵感,然后在计算机领域去搞出来。以前的计算机是没有内存的,后来冯大侠说,计算机就像大脑,大脑是有记忆的,所以有了内存。
我们现在说大脑就像计算机,是本末倒置了。人们总是从自然界的角度来思考,然后解决软件里的问题。Lippman 牛的想法是,把软件比作生物,从 DNA ,细胞核开始向上一层层的。
系统的基础组织部分是 Data Structure 和 Data Stream ,这个就像细胞一样;在应用领域方面,Executive Function 和 Type Information 就好比生物的各个器官。
大牛参加了许多项目,他抱怨了一轮,说好多都可耻的失败鸟。大项目就是容易失败。程序员辛苦啊,根本不是所谓白领。而且每个程序员都是不可替代的。因为每 个人的学习经历不同,看待问题不同,写出来的程序就不同。人们对编程的理解并不像想象的那么美好。现在慢慢的我们提高了抽象层次,按这个宇宙存在的方式去 运作。但是从 java 开始学习编程,对程序员来说是有很大代价的,以前用 pascal 开始学习程序也有很大代价。大约是说,失去了对某些本质的理解。形成的对程序世界的世界观会有问题。
说回大项目,比如他参加的 Visual Studio 就不是啥成功的产品。用 .net 做 Windows 也很失败,那玩意根本就跑不快。微软做软件的哲学有问题,所以做不好。
有一个土星登陆器的项目,一代代技术都更新了。他作为技术顾问,提了些建议。主架构师纠结于用 java 还是用 C++ 这种问题上。其实架构师根本不应该关心用啥语言做。语言好不好都是屁话,把事情做好才对。最终项目是失败了。有很多问题都不是常规方法可以处理的。比如通 讯的问题,因为土星上有什么什么,导致有时候信号 5,6 小时发不出去,等等。传统的通讯连接方式就不适用。
还有好多项目(有具体列举,没一一记了),做着做着,做了好几年,程序员心都凉了。
另一个是 MMO 项目,花了几千万,还是可耻的失败鸟。做出来后,什么都好,什么都很完美,只能支持 40-50 人在线。公司还说圣诞就要上。高层说,无所谓,不能玩也无所谓,做出来就好。结果当然是不能用的。开发人员心那是拔凉拔凉的。
再话说,Sun AT&T 几个公司想用 C++ 重写 Unix 。还有 IBM 等等用 Unix 的公司,搞了个啥邪恶同盟。反正最后也是可耻的失败鸟。
还有 Bell Labs 的 Plan 9 。东西是好的。不过根本不能成为一个产品。这里,提醒各位同学,找工作要小心。先侦察一下,如果公司就是要做个啥项目光冲着赚钱去的,这心态就有问题,肯 定玩完。还有管理人员一定要懂技术,要知道做的东西是怎么回事。否则碰到这种倒霉事赶紧卷铺盖走人,别浪费青春。
接下去又说了好多悲剧,比如 IBM 的 OS/2 啥的。说着说着,说不下去了,名单太长,全是血泪史啊。
Lippman 接着自比江湖百晓生。我觉得他是自谦,想说自己其实只是倚老卖老,知道许多事情,参与了很多项目而已。
正题其实是说怎么做大规模可伸缩性的项目。结论很悲观,说 C++ 其实不适合做这个。最后我问了个问题,说那什么合适呢。他没正面回答。不过举了个例子,提了爱因斯坦的相对论,还有量子力学。大约是想说,C++ 更像是 BS 大牛个人的作品,他一个人构架了 C++ 的大部分东西。但是我们未来需要新的语言来解决问题的话,应该参考量子力学的发展过程,大家一起来构架。C++ 呢,说这个最后可能会被我们带进坟墓。不是 C++ 不好,是因为细节太多,没人全搞的明白。结果每个人写出来的程序都不一样。指定规范很难。最后会有很多人不愿意学。
正题里围绕的实际例子是在动画工业中的。其实做动画,好多工具都是用完即弃的。提高可复用性,关键在于要把可复用单元做的足够小。做大就没人理你了。
C++语言的创立者,斯坦.利普曼(Stan Lippman) 9月17日参加了在北 京召开的微软技术大会Tech.Ed2004并做 了"The C++ Binding, Integrating a Static and dynamic "的主题演讲。利普曼和天极网记者畅谈了对 “中国程序员的30岁现象”的看法,对C++、NET、面向对象等新技术发表了自己的看法。
天极网:做为C++大师,你认为一个优秀的程序员应该具备什么素质?
Lippman:不仅是C++,对所有的语言而言,我认为一个好的程序员应该具备独立性,而且要不惧困难,你必须心甘情愿的面对失败。所谓的独立性就是 因为有时你要能独处,你必须相信你能处理你明白的事情。我认为一个好的程序员要具备创造性,而管理人员要确保程序员有独立的空间,成为他们自己。
天极网:中国的程序员被一些人认为是吃青春饭的,程序员好像转向管理职位才有职业发展空间,你怎么看?
Lippman:我所认识的一些Unix创立者被提升为部门主管,但他们拒绝了提升,回到了程序员的职位上,因为他们认为这是自己能做得最好的地方。 总之,最后辞掉了部门主管的职位,回去做研究去了。
在美国,我们认为一个好的程序员并不意味着他能成为一个好的管理人员。如果仅仅是为了金钱的原因而强迫程序员们去从事管理工作,这与公司的最佳利益是相 违背的。因此我们发明了一个所谓的"多层升迁路径",随着技术经验的增长,微软分别为程序员设置了程序员、高级程序员以及MPS等等不同级别的技术职位。 微软能认识到你的能力,如果你愿意成为管理人员,当然是可以的,但你不必做你不开心的事情,只用尽量保持你编程的创造性。
在上世纪八十年代,美国的公司都被一个相同的问题所困扰,起因就是迫使年龄大的编程人员不再从事编程工作。我猜想在中国,随着程序员年龄的增长,这种 问题也会发生!
天极网:你如何看待C++语言的未来和C++与C##的关系?
Lippman:如果你想做web service,asp等等,c++将不会很适用,因为这个语言不灵活,它太繁复了,它不是为了网络服务 (Web service)而设计的。
C##就是为了网络需求而设计的,.net的理念就是并不是一种语言能解决所有的问题。它不像Java,迫使你只能用一种语言。如果你在开发的时候发 现另一个工具更好,那么你就可以选择另一个工具。
人们总喜欢让事物对立起来。如果有了微软的产品,你就一定要有SUN或Linux,因为人们喜欢看他们争斗,即使实际上并不会引发任何争斗。c++就像 一把没有把手的刮胡刀,它不可能对所有的事物都适用,就像Visual Basic也不可能对所有人都适用一样。有很多人都使用c++,也有很多人使用 Visual Basic,我们还需要其他的语言。c++很难,我们必须拥有难的语言,但同时,简单的工作也需要简单的语言来解决。实际上,没有哪种语言 能流行10年。对于c++的未来来说,我想它还是会表现的很好。
记得1991年Java出现的时候,人们预言c++将会消失,可这并 没有发生,而是SmallTalk消失了。当Linux出现的时候,人们又说微软有麻烦了,可实际上是Sun有了麻烦。C##并不会威胁到C++,在微软 我们在一栋大楼里工作。我相信C++现在表现得很好,在微软起着重要的作用。我们为整个社区做出了很多贡献。
天极网:你怎么看待面向对象技术的发展前景?
Lippman:从开始来看,每一种汇编语言的产生都是为了在计算机环境中解决特定问题的。你使用这个语言解决问题,而解决方案将使你面对更复杂的问 题,而这个语言可能就解决不了了,这时我们就需要另一种语言了。
面向对象的编程就是解决数据抽象这类问题而产生的,而面向对象同样面临网络环境下的一些新问题,这就是为什么我们需要一个更具弹性的平台。.NET是 一个动态,独立性的语言平台,这也是为什么我希望在.NET上使用C++。我认为.NET很有潜力、是软件进步的方向。
天极网:在.NET环境下,你认为程序设计有何变化?
Lippman:我想每一个人都同意这一点,那就是软件是脆弱的。其实我们在软件上不算成功。开发软件所需要的时间太长了,并不是说我们的编程人员不 合格,是因为这个工作不符合人类的自然本性,因为你必须像计算机那样进行线性的思索。
我们目前常用的方法就是将问题分割成更小的部分,然后保证它们连贯。.NET很有潜力,它是一个动态的模型,配套有很多的组件与很好的软件,能自适应的 辨识状况、改变或生成代码。程序员是不会改变的,改变的只是工具,我们的职责就是要给程序员配备适用的工具。但目前我们做的还不够。C++、 C sharp这些语言都只能算过渡性的语言。我们的程序员现在只能用它们,但并不代表将来应该用它们。
天极网:为了避免30岁时被炒掉,你对程序员有什么建议吗?
Lippman:我想如果你不喜欢编程,那么编程的生活将是十分恐怖的!而且如果你仅仅是出于对金钱的考虑而选择程序员这一职业,而并不是真心喜爱这 个工作,那么我奉劝你还是早点抽身的好。
但是,如果你喜欢创造,那么你可以考虑做一名程序员。今天的世界离不开电脑,几乎没有什么事情不是由电脑来运作的。而且你可以想想编程是一件多么奇妙的 事情啊。我认为,电脑技术是人类历史上最具创造力的技术,你必须能感受到它的奇妙。很多人也认为电脑技术很奇妙,试图弄清楚究竟是怎么一回事,可是非常困 难,因为他们的思维不具备逻辑性。
如果你不喜欢编程,那么不必强迫自己做一名程序员。当然我们需要好的管理人员,但是我觉得一名好的程序员比一名管理人员更有价值,因为我们有太多的优 秀管理人才,但优秀的程序员却并不多。(宋保强)
他们有人(貌似说的 pixar)做了个神奇的东西,反正就是类似 method 注册啦,动态生成类型啦之类的一个奇妙的 C++ 玩具。可以把代码动态的以字符串形式注册进去。动态生成一些类,一些接口调用之类。大约加了两个间接层。代码里充斥着所谓的注册代码。往往多达几千个。当 然性能上也因为这个间接层,下降了几十倍。
当然,大型可伸缩的项目,性能也不是关键的东西。
这里还插了几句关于脚本的。说是有 C++ 程序员说,其实我拿 C++ 写什么什么也很快的。不过那不行,因为 C++ 程序员太少。你用 C++ 写没问题,不过要求你写完了翻译成 perl 代码.
不过这个东西很复杂,所以除了写它的人,没人愿意去看怎么实现的。后来做这个的那个家伙回巴黎去了。那些代码也很可怕,很复杂,里面也有很多 bug 。
后来 Lippman 也做了个类似的东西,也是号称 Metaprogramming ,不过不是所谓 template metaprogramming ,而是代码生成代码。最终自动生成的是 C 结构。不过主要目的达到,就是隐藏众多细节。有人说这个不是 OOP ,没有 class 啥的,不过他认为这个也是 OOP 。OOP 不能看表象。他说,他其实只是想明白个事,关于静态数据和动态部分之类。
这个例子我很有感触,因为我们公司曾经也有个类似的东西。做了个 C++ 和 lua 的巨复杂的粘合层。弄的看起来很高级。结果发明和维护的人走了后,用它的项目组都以把这坨东西从项目中去掉为荣。
说起大项目,Lippman 说,一切失败的大项目都有个通病。就是时间很长,经过几年后,就变成了一个封闭王国。结果没人知道在干啥。里面拉帮结派,为了一些无所谓的技术问题争来吵 去。其实争论的都不是要干的事情。
另外,项目太大了后,就没人了解项目的全部细节。渐渐的,大家都只关心自己做的那一块。这样很糟糕。他思考后,认为解决的方法是,应该把结构旋转 90 度,变成一个有层次的结构。从上到下一层层剥离。同一层次上就不要横向切了。
嗯,这个问题我也很有感触,虽然我的项目不算特别巨大。但是只有我一个人了解项目全部的细节,这让人很累。当然如果要每个人都了解全部细节,就会让每个人 都很累。
以上是我凌乱的一些听课笔记。很多有趣的东西没来的及记下。可能也有很多我的误解在里面。同学们姑且看之吧。