Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499703
  • 博文数量: 109
  • 博客积分: 2331
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-24 21:36
文章分类

全部博文(109)

文章存档

2015年(2)

2013年(1)

2012年(78)

2011年(28)

我的朋友

分类: C/C++

2011-12-25 21:15:31

精英化趋势

C++是一门引起无数争议的语言。

眼下最常听到的声音则是C++将趋于没落,会被某某语言取代。

我很怀疑这种论调的起点是商业宣传,C++的真实趋势应该是越来越倾向于精英化。


精英化是指在可用可不用C++的领域中,C++将逐渐退出,

而所有剩下必须用C++的领域通常都是附加值比较高,难度较高的领域,比如:操作系统,数据库,大型网站后端等。

这一过程造成的现象就是在TIOBE上,C++的份额逐步下降。


但就像经济上挤泡沫一样,这倒不是C++衰落了,而是原本人们对C++的期望过高了。

早在1995年,美国的调查机构就曾经预测:“终端用户”编程从从业人员比率上将占94%,而“基础结构”编程从业人员只占1.5%不到。

(参见《软件成本估算:COCOMOII模型方法》)

C++本来就不适合“终端用户”这种涉众很多的项目,比如物流程序,而适合对性能要求较高的基础结构项目,比如OS,大型数据库等。

(根据Google的测试,)

只是当年OO很火的时候,大家又没有什么别的选择,就一窝蜂的用,实际上很多程序确实不适合用一个没有垃圾收集的程序来写。

这里有一份统计列表,大家可以自己看看,当前C++的主战场是那里。

(这个表告诉我们:IT行业的骨头是C/C++做的)

这导致的结果就是修炼C++的程序员必须往高端走,你要么找不到工作,要么就找到很好的工作。

而不像其他语言,大差不差还能混口饭吃。

这个趋势不好绝对化,但估计在未来会被强化。TIOBE上C++的份额跌得越多,这个趋势强化的越厉害。


短时间完全看不到C++退出历史舞台的可能性,只要硬件还是软件的基础:

例1:网站A和网站B类似,用C++可以让速度提升30%,你感觉这个网站会选择语言的易用性,还是会选择速度?

例2:公司A要开发一个新的软硬结合的产品,你感觉他会先开发一个虚拟机,再开发产品,还是会直接基于硬件上封装驱动后开发程序?


两个关键缺陷

这两个关键缺陷分别是语言的过度复杂和标准库的过度苍白。


C++语言过于复杂在业界是共识。

一个指针就使C++比关键字数目相同的语言复杂许多,导入模板后各种应用精巧的应用使这门语言进一步复杂化,个人感觉C++0x使这复杂性又升华了。

Google在公布的开篇就说:

As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.

这里也就不多说了,但贴几个好玩的句子:

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." -- Bjarne Stroustrup

Stroustrup还是挺搞的,意译下:C语言让人很容易开枪走火打到自己的脚,C++让走火发生的可能性降低,但一旦走火,你的腿就没了。)

"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." -- John Carmack.


C++标准库的苍白倒值得多说一点

不知道没用过C++的人是否能想象,这个世界上还有一门语言的标准库里甚至不覆盖正则表达式和XML。

C++就这样,并且还将持续这样。我专门查了一下,C++0x里好像终于有正则了,但还没有XML的库。

(不用提醒,我也知道boost里有,但boost不是标准库。)


C++本身不缺库,并且还都是大佬级的,如:OpenCV,OpenMP,ACE,MPICH2等。

随便那一个都是一方诸侯,如果你没用过OpenCV和OpenMP这些东西,第一次用一定会有点震撼,但关键是标准库不太行。

从这个角度看C++0x方向走错了:锦上添花的事做了不少,雪中送炭的事上不太给力。


感想

C++语言已经无法简化,如果编译器能够提供可定制编译也许对这个语言会有帮助。

比如:设定某个选项后,C++就变成了有对象的C。设置某个选项后,多重继承就不支持了。

也许有编译器可以这样,但我确实还不知道。


再不行,自己定个规则使用C++的特定子集吧。


PS:补充一个事儿。

看了国外的那张国外主要产品和开发语言的列表后,我挺想做张国内产品和开发语言的列表,也算为毕业生做点贡献。

免得大学就整错方向,所以那位要知道腾讯,迅雷,阿里等公司的后端开发语言,不妨回在下面,我整理后单独发个帖。

知名产品和开发语言的表格在这里。

(这应该不是公司机密吧)

阅读(672) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

souroot2011-12-26 20:13:33

没想到有人评论啊,这篇文章我是从CSDN上转载的,两位有兴趣可以去看看原文那边:http://blog.csdn.net/leezy_2000/article/details/7068001

Bean_lee2011-12-26 19:52:50

从我自己的角度上讲,学好C的基础上,我更想学习Python 和 Erlang。不过C语言还是半吊子的水平,不敢四处出击,虽然我也有Python方面的书,但是一直忍着没看。
C也可以面向对象的,我就有object-oriented programming with ANSI-C 这本电子书,一直也没时间看。

GFree_Wind2011-12-26 19:47:12

Bean_lee: 赞同,我手头也有好多本讲C++的书,但是觉得C++太难了。特性太多,我还是喜欢C。简单而强大。.....
C++想写好不容易。不过写好了的话,开发速度很很快。毕竟面向对象的组装,比C要方便。

即使说C也可以写出面向对象的代码。但是毕竟它不是真正的面向对象的语言,实现起来,还是不如C++自然。

我倒是希望有机会可以真正的参加一个比较大的C++项目。

GFree_Wind2011-12-26 12:29:48

一直很喜欢C++,基本上经典书籍均有涉猎。但是不得不说,C++太复杂了。。。。而C的语法相对极其简单清晰。