标题:
C++ 与瑞士军刀
[打印本页]
作者:
Snowpine
时间:
2008-7-13 18:00
标题:
C++ 与瑞士军刀
几天前,极地狐来找我分享他于几周前参加“敏捷开发大会”时所获得的心得。当谈到会上关于C++为什么会如此之流行,而在新兴的开发中却越来越没了声音时,他问我对此的看法。问题分为两个部分,一是C++为什么会流行开来,而是为什么现在在很多开发中却没了C++的声音,却而代之的则是C#、Java等。
关于第一个问题,我们直接达成了一致:因为效率,以及基于C的发展基础。在当时,C是最好最流行的主流语言,而C++在此基础上,引入了OO(面相对象)(当然,之后还引入了GP等),提高了开发效率的同时,继承了C高运行时效率的传统,从鱼与熊掌二者兼得。更难能可贵的是,C++不仅在开发/运行双向高效率的情形下,还作为C的超集从而完全兼容之前所留下来的几乎全部的C代码。这些特性为C++无论是对于新人,还是已从业者,甚至是大量的软件公司的全面推广和流行铺平了道路。
而关于第二个问题,答案是成本。而在成本的因素中,其实首先还是效率。只是,这时的效率有了偏向。这时的世界,按某些人的话说,“硬件的发展已远远超过了软件的需求”,所以,“对于大多数的商用程序来说,运行期的效率并不是关键的问题”。这时的世界,时钟频率每秒按G来计算,而在之前的年代,单位还是MHz。于是,按照马克思关于商人对于利润追逐的描述,商人们一半“为了进一步的增大利润”,另一半被在行业中某些混饭的从业人员所欺骗,舍弃了运行时的效率,从而单独地追求开发效率。单独的追求开发效率的提高,有着商业本性的一面,这一方面对于商业来说无可厚非,因此也不在本文的讨论范围之内,本文所要讨论的,是之后剩下来的其余内容。C++虽然很强大,它有着OO、OP、ADT、GP等几种相差悬殊的风格,它有着完全冗余的解决方案,它上到应用软件,包括网站网页(请不要忘了在cgi诞生之前即诞生之后的那段时间,与服务器交互的网页是用什么开发的),下到操作系统的上层以及驱动程序,几乎无所不能。因此,它太复杂了,复杂得几乎没有人能够领会它的全部内容;复杂得至少在几年前,还没有哪个编译器能完全实现它的全部特性。因此,C++的掌握难度是很大的,要成为一位有一定实力的C++开发者的学习曲线是陡峭或者漫长的。而且再加上C++的标准库为之甚少,远不及C#或者Java来之方便,因此,无论是在培养/使用成本,还是在开发效率上,C++都不及现在的C#或者Java。此外,基于陡峭和漫长的学习曲线,以及C++所包容迥异的开发风格,以及完全冗余的实现,经常导致这个“高手”写的C++代码在另外一个“高手”看来是完完全全的“天书”,于是发生了OOer鄙视OPer,OPer/OOer完全看不懂GP风格的代码等等情况,同时也导致了面试/会谈的时候,两个高手因对不上话而不欢而散。此外类似的情况还存在于开发的思路与理念之中,就犹如OO的死忠指责运行期效率的死忠将大量短小的实现代码写于头文件中声明称内联一样。不容的风格,不同的模式和理念,导致了代码的混乱和维护成本的直线增加,这其实是一个开发管理上的问题。
话说了这么多,其实总结一下,C++就像一把瑞士军刀,功能繁多而且复杂,说明书也很长。有人终其一生也只用其中为数不多的几种功能,而且一把功能齐全的瑞士军刀带起来也比功能单一的其他工具要来得沉重。还有要不就是无法忍受其冗长的,而且鲜有前后关联,但又可以随意交叉使用的功能的说明书。对于第一种人,选用一种相对更轻巧,功能能单一的工具,比如Java,或许就已经足够了;而对于第二种人,至少证明C++不应成为其首选工具。至于风格和开发理念上的差异,上面说了,这是一个管理问题。工具本身没有对错好坏,只有适合不适合。选错了工具,那是人本身的问题,而不应该将应当承担的责任推给没有自我意识的工具。
从另一个方面比喻,C++就像特种兵。特种兵什么事都能干,但特种兵的使用和培养成本却高于其他兵种。有很多人在指责C++,但我想,不能因为身和平年代就指责特种兵存在的必要性,正如野外游玩遇险自救,还真非得有一把瑞士军刀不可。
有人写出了C/C++的解释器,让C/C++可以像脚本语言一样运行;在将要到来的C++0X标准中,GC(垃圾收集器)俨然已成为标准的一部分(当然,这不是强制性的,使用者可以将其关掉),就像Java或C#所拥有的那样。也许有一天,一个合适的,功能齐全的,足以匹敌Java或C#的标准库的诞生改变了C++培养曲线和开发效率不如Java或C#的问题。恩,也许,未来一切皆有可能!
------------------------------------- 分 割 线 -----------------------------------------
声明:本文为ASDL(Application Server Development Library)附加文档的外联部份。
原文地址:
http://blog.csdn.net/swxlion/archive/2008/07/06/2619077.aspx
作者:
Mallon
时间:
2008-7-13 19:11
C++是个万金油,前段时间学习了ACE框架,感觉设计得真TNND精妙
欢迎光临 幽游生活 (http://www.yylive.net/)
Powered by Discuz! 7.2