我的C++历程

若干年以前,当我刚开始接触计算机时,老师告诉我:世界上60%的代码时用C++编写的,30%是用C编写的,其他语言分享了剩下的10%。如果说在计算机的世界只需要掌握一门语言,那么毫无疑问的是C++。于是我学习了C,又学习了C++。记得那个时候,语言的争锋在于面向对象还是面向过程。老师一遍又一遍地强调面向对象的好处以及面向过程的害处,并忆苦思甜的回忆他们那个时代在纸带上打孔编程的经历,对面向比特的机器语言那更是深恶痛绝。“高级语言好啊!”那是她的原话。对学了面向对象的C++,我是沾沾自喜;面向过程的C,“也就是个鸡肋吧。”。

可是,情况渐渐地变了。记得第一次听说Smalltalk时,我震惊了:“难道还有其他面向对象语言!”然后才知道,C++不算纯粹的面向对象语言,甚至被许多面向对象拥护者所鄙视:“不过是在商场上成功了而已。”是的,在语言领域,C++没有坚定地拥护某种理念,是个四不象。那样的打击真不小,虽然还在用C++,不过没有无条件的支持了。用它,只不过没有找到合适的替代品罢了。(问我为什么不用Smalltalk?算了吧,我也就知道名字而已。直到现在,我也不怎么清楚它的语法,没有见过它的编译器。其实我从来不是面向对象的死忠者,Smalltalk只是破了我的C++完美梦的罪魁祸首而已)

然后Delphi进入了视角。“Delphi好啊,又能快速开发,又能使用大量控件,完美啊!”于是不少同学开始用Delphi。仍然对C++旧情难忘的我,渐渐与他们对立起来(当然只是观点的对立我,不影响感情的),经常要打打论战。我“处心积虑”要贬低Delphi,当时时常说的一句话是“Delphi不就能编Windows程序吗?Windows自己还是用C/C++编的呢。”不过好象用处不大,喜欢Delphi的继续用,不喜欢的继续不用。到是对手的话听到不少,什么Pascal严谨啦、什么单继承有多少多少优势啦,等等。给我的直接感觉还是开始的那些,画界面快一些,比VC用起来简单。所以,理论家多过实践家的我,并没有很了解VC,有时候也会因为图快而偷偷使用Delphi,当然不能让对手们知道,呵呵。

后来发生了一件有趣的事,我们的数据库老师布置了一个大作业,编写一个数据库应用程序,来练习一下设计数据库的基本方法如BCNF、外键、索引等等。这位老师是Sybase的拥护者,推荐使用Powerbuilder配合Sybase写数据库。这遭到很多同学的抵制,有人想用VC+Access,有人想用Delphi+Oracle。老师一声不响的走了,扔下一句话“随便吧”。于是大家各行其事。这时我“叛变”了。因为其实我虽然C++不错,但并不精通VC,更别说Delphi;也因为有一些不好的预感。所以我开始用Powerbuilder+Sybase。有同学VC很强,把程序写的功能众多;有同学Delphi很强,把界面画得很花哨;而我呢,其实PB也一知半解,只能把数据库设计得强一点了。最后,我的程序是最拿不出手的,只有数据库设计文档写的比较长,足足十多个表,仅此而已,我一直担心老师来检查时看到我那朴素的界面会生气。终于,那天老师来检查了。首先给他看的作品就是一个用VC+Access做成的,在我眼里比我自己那个强无数倍。看着那个运行起来的程序,我既羡慕、又担心,只希望到我时不要被骂得太很。没想到,老师只是稍微看了一下界面,就把它关了,然后打开了那个Access文件,稍稍浏览,就开始训话了:“怎么这个表没有主键?”“这两个表之间的依赖关系不对吧?”“这些字段能在一个表里吗,冗余了呀?!”“视图中这个子查询不必要的,速度慢了很多!!”……结果那个同学就狗血淋头了,我们都很同情他,也更为自己担心了。渐渐的,老师把矛头指向了Access。经过一番批斗,我这才知道,原来最常使用的Access有那么多缺点,在专业人士眼里就是个伪劣产品。我们所有人,都为曾经使用过Access而羞愧不已。值得庆幸的是,最后老师没有没有再看我们的作品,而让大家都交给他,他带回去慢慢看,走时说的一句话让我欣慰:“我不会通过你们的程序去看数据库,而是直接去审查它的结构,毕竟这主要不是编程作业。”后来证明,我的欣慰是有道理的——所有象我一样使用PB的,都拿了B以上的成绩;而使用其他开发工具和数据库的,最高也就B,大部分是B-,C+。而我,拿了A。我想,不管老师可能有什么其他考量,至少使用PB的同学,都专心在了数据库的设计上,程序都是简单而朴素的。而使用其他开发工具的,或多或少没能把握重点吧。

VC和Delphi之争不知不觉平息了。后来,我又听说Borland被收购了,因为它在C++Builder产品上犯了错,输掉了“C++圣战”,只能黯然落幕了。这样,使用Delphi的人就更少了,VC渐渐一家独大。忘记是这之前还是之后,我又听说Sybase和Microsoft联合开发SQL Server,结果Microsoft重构了一便SQLServer后将Sybase甩开,结果取代了后者在数据库领域的地位。这些都是传闻,也不知是真是假,不过更早时Microsoft也曾赢了IBM,使我不由地信了。我只是感叹:“三十年河东,三十年河西啊。”此后,便没有想过要改用其他语言。

真正开始理解C++,则是从那本The Design and Evolution of C++ 开始的。历史可以教育人啊。为什么要兼容C,为什么有虚函数,为什么要支持模版和异常处理?C++语言里那种种所谓“阴暗的角落”的背后隐藏着多少故事啊,一门语言从最初的理想,到最后通过编译器实现要经过多么艰难的历程啊!看着那些先驱们常常为了一个小小的、可能大多数人永远也不会用到、甚至听说过的语言特性而废寝忘食、争论不休,我的心中只能涌起深深地感动,以及同样深深地惭愧!!是啊,当他们在为C++语言、以及她现在和未来的使用者和受益者无私贡献的时候,我又在干什么!为了图方便而随波逐流?为了混个好成绩而见异思迁?为了搭上个好靠山而暗暗偷笑?算了吧,如果用C++的都是这种人,那C++离灭亡不远了吧,那些先驱者们该怎样的心痛啊!其实不用他们心痛,我自己就感到心痛不已。因为这心痛,我知道自己确实真正喜欢上了C++,她在我心目中的地位已经不可取代了。

此后是对C++不断的加深了解。Thinking in C++,(More)Effective C++,Inside the C++ Object Model,Generic Programming and the STL,...一本本书,让我愈发觉得自己对C++的了解是那么得少。我终于渐渐明白我的C++启蒙老师为什么会说在计算机的世界只需要掌握一门语言了,非不愿也,实不能也!我连C++也没能完全掌握,哪有时间去深入学习其他语言啊。所以,对于因为对抗Microsoft而逐渐兴起地Java,对于为了抢夺Java市场而逐渐兴起地C#,我根本就没有主动去考虑过她们。当然,我知道每一种语言都有她背后地故事,不会是外人表面看起来那么肤浅,只有真正喜欢上的人才有资格去了解真正有价值的东西。但是我不需要再去贪图它们了,有C++就够了。不过,也不是一点接触也没有。有时候,因为工作需要,我也写一些Java代码;而且我相信,与某些"Java高手"相比,我写的代码会令他们黯然失色。但是,我不会宣称自己是Java程序员——因为,我写Java的能力完全来自C++。J2EE?那很好,但我不会去学;JVM?那也很好,但我最多看一遍它的源代码就够了(只不过至今没有时间看,我宁愿先看标准C++库、ACE库或者Unix/Linux/DOS的源代码)。至于C#,我安装了VS2005,连C#一起装了,但从来只用VC8,一次也没用过C#。这不是谁好谁坏的问题,只因为——我是C++程序员!!!

也许由我来批评C#不合适:简单地说,我还不够格;客观地说,我不可能做到公正的。我只有在批评C++时有那么一些发言权(毕竟用了那么长时间了,积累下来的不满足以爆发一次,狠狠地批判了,呵呵)。但是,如果有人轻易地说C++就要完蛋了,我的态度除了绝不认同,就只剩下——淡淡的微笑了。何必生气呢,也许在某些时候,人都会有他的局限性,他看到的只是别人想让他看到的而已。更进一步,人永远都时有局限性的,虽然可以突破旧的局限,但是又会在更大、更隐蔽的局限中无法自拔。就象那些倡导Java、C#的商人们自己正用着C/C++并暗暗冷笑着的时候,谁知道将来他们会否正因此而破产呢?毕竟天道无常、天网恢恢,阴人的人以后也会被人阴的。再者,人与人之间也有可能难以交往的,当你忽视他时,他也可能正无视着你。但是这可能并不如想象中那么重要。现在的一个C++程序员和一个C#程序员,可能永远也无法认同对方,但是十年后,当两人都取得了属于自己的成就,再谈到十年前的争斗时,可能剩下的,也只是淡淡的微笑吧。

好了不多说了,只希望每个人都能够找到自己的道路。毕竟别人说的只能做参考,自己走走才是最有效的。
 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值