C++和C++程序员面临淘汰?
C/C++是十分古老的语言,C语言现在仍然广泛应用于系统开发和
很多计算机标准组织的协议实现。C++在程序设计的历史上也有着
不可磨灭的地位,由于它的抽象能力,使其在发展初期就以极快的
速度占据了半壁江山,在系统,图形,网络,等很多领域成为主角。
可以说其辉煌的历史也正在起到减缓其消亡速度的作用。
从世界范围的统计数据来看,C语言和Java的应用广泛度长期处于
绝对优势当中。而曾经和C语言平起平坐的C++虽然仍然可以排在
第三名,但应用范围和人数却在稳步下降当中。作为一个主要使用
C++的程序员不得不思考这个问题。C++标准10年如1日的没有变动,
我想并非不是它不需要改进,而是它正在面临淘汰的一种表现,标准
委员会的那些牛人们或许正在致力于新的语言的完善,而现实中却
还有很多新人正在努力进入这样一个可能没有未来的语言中。更可
怕的是学习这个语言会使大部分新手在初期便深陷一些误区当中
(具体的在后面提到)。
先说说C++和C语言的比较,C语言可以说是在一个特殊的领域和
群体当中得到了永生,那个群体是计算机界最疯狂的人,最崇尚自由
的人,这些人对性能和对机器的掌控要求除C之外再没有任何高级
语言可以满足,这些人的抽象能力强到只有没有任何抽象能力的语言
才能让他们感觉到自由(好像有点拗口)。C之所以永生,原因很
简单,就是它没有所谓的抽象,它简单到就是可以直接和机器对话,
所以就像汇编一样无法被淘汰和改进。还记得linux之父的C和C++
的争论,其实在那个领域C++确实是非常尴尬的地位,有点像东施
效颦。
再说说现在的新一代的面向对象的语言java和C#与C++之间的比较
C++曾经应用广泛的原因就在于虽然无法和C比性能和自由度,但其
抽象能力比C强大的多,所以在那个特殊群体之外的人们大部分选
C++来开发高性能程序,比如图形引擎,数据库,这种趋势就造成了
C++越来越接近应用开发。而这一层面的人才需求量大,应用多,
加上C++过于繁重的学习细节,造成了传说C++写出的垃圾代码数量
最多。打一个可能不恰当的比喻,C++就是C语言程序员当中一部分
需要抽象的人自己为自己量身定做的一个语言,可以说是面向对象
理念的实验品,所以当这些人有了经验之后再发明的java出现之后
C++就不再有任何优势。可以说底层的高性能要求的部分用C做,中间
和应用层用java或C#做,这样难道不比使用C++来的更完美吗?
刚才提到C++初学者很可能一开始便陷入可怕的误区,这才是这个
语言除了没用之外的最可怕的地方。相信很多多年使用C++的程序员
有时候会有一些感觉,就是曾经好像过多的精力投入到了语言的技巧
和细节中去,而这些细节是否对除C++以外的应用开发有正面作用
还值得推敲。所以当java程序员很早就开始注意模式的时候,我们
还在为多态的什么内存模式而争论的不亦乐乎,并非说讨论模式就
比讨论语言技巧高明,而是作为应用程序员来说,对比一下我们讨论
的话题,会让C++程序员感到无比的压力。现实中我也对比过一些
新手,曾经学习java或C#的人比学习C++的更容易理解软件的架构
和层次。这是很可悲的。
当然你可以说是因为那些学习C++的新手水平比较低,高水平的
C++程序员比高水平的C#程序员更有前途。我也很愿意相信这个观点
。但无论如何无法掩饰C++在应用领域显示出的疲态和压力。而且
如果让我劝诫新人的话,我更愿意让他们更多的精力来学习java和
C#,之后再学习C++可能会反过来对理解起到很好的作用。C++还有
很强的生命力,而这个生命力可能只是它从历史当中继承而来。它
的前途如何,其实我也不敢定论,只是希望更多的学习者不要陷入
到误区当中。