C++不会没落但会走精英化路线

转载 2014年09月04日 00:04:59

IT行业的骨头是C/C++做的


精英化趋势

C++是一门引起无数争议的语言。眼下最常听到的声音则是C++将趋于没落,会被某某语言取代。我很怀疑这种论调的起点是商业宣传,C++的真实趋势应该是越来越倾向于精英化。

精英化是指在可用可不用C++的领域中,C++将逐渐退出,而所有剩下必须用C++的领域通常都是附加值比较高,难度较高的领域,比如:操作系统,数据库,大型网站后端等。

这一过程造成的现象就是在TIOBE上,C++的份额逐步下降。但就像经济上挤泡沫一样,这倒不是C++衰落了,而是原本人们对C++的期望过高了。

早在1995年,美国的调查机构就曾经预测:“终端用户”编程从从业人员比率上将占94%,而“基础结构”编程从业人员只占1.5%不到。(参见《软件成本估算:COCOMOII模型方法》)

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

只是当年OO很火的时候,大家又没有什么别的选择,就一窝蜂的用,实际上很多程序确实不适合用一个没有垃圾收集的程序来写。这里有一份统计列表,大家可以自己看看,当前C++的主战场是那里。The Programming Languages Beacon(这个表告诉我们:IT行业的骨头是C/C++做的

这导致的结果就是修炼C++的程序员必须往高端走,你要么找不到工作,要么就找到很好的工作。而不像其他语言,大差不差还能混口饭吃。这个趋势不好绝对化,但估计在未来会被强化。TIOBE上C++的份额跌得越多,这个趋势强化的越厉害。

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

  1. 网站A和网站B类似,用C++可以让速度提升30%,你感觉这个网站会选择语言的易用性,还是会选择速度?
  2. 公司A要开发一个新的软硬结合的产品,你感觉他会先开发一个虚拟机,再开发产品,还是会直接基于硬件上封装驱动后开发程序?

两个关键缺陷

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

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

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

Google在公布的C++ Coding Rule开篇就说:

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.

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

不知道没用过C++的人是否能想象,这个世界上还有一门语言的标准库里甚至不覆盖正则表达式和XML。C++就这样,并且还将持续这样。我专门查了一下,C++0x里好像有正则了,但没有XML的。(不用提醒,我也知道boost里有,但boost不是标准库。)

C++本身不缺库,并且还都是大佬级的,如:OpenCV,OpenMP,ACE,MPICH2等。随便那一个都是一方诸侯,如果你没用过OpenCV和OpenMP这些东西,第一次用一定会有点震撼,但关键是标准库不太行。

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

感想

C++语言已经无法简化,如果编译器能够提供可定制编译也许对这个语言会有帮助。比如:设定某个选项后,C++就变成了有对象的C。设置某个选项后,多重继承就不支持了。

也许有编译器可以这样,但我确实还不知道。再不行,自己定个规则使用C++的特定子集吧。


C++不会没落但会走精英化路线

精英化趋势 C++是一门引起无数争议的语言。眼下最常听到的声音则是C++将趋于没落,会被某某语言取代。我很怀疑这种论调的起点是商业宣传,C++的真实趋势应该是越来越倾向于精英化。 精英化是指在可用...
  • feng1072218457
  • feng1072218457
  • 2016年05月07日 10:47
  • 1111

【c++】利用递归实现走迷宫

要求: 1、将地图的数组保存在文件中,从文件中读取行列数 2.、动态开辟空间保存地图 3.、运行结束后再地图上标出具体的走法 说明: 1、文件中第...
  • a1414345
  • a1414345
  • 2016年12月24日 18:40
  • 1157

在Java的黄金时代下,.Net真的没落了吗

《IT项目管理与职业生涯规划大型论坛》中国.苏州 免费报名:http://www.hdb.com/party/b8an2.html?hdb_pos=manager_info 比尔盖茨公认的...
  • S_king_
  • S_king_
  • 2017年11月22日 14:03
  • 173

CODE大全告诉你java是否开始没落了

CODE大全告诉你java是否开始没落了!22 岁,对于一个技术人来说可谓正当壮年。但对于一门编程语言来说,情况可能又有不同。各类编程语言横空出世,纷战不休,然而 TIOBE 的语言排行榜上,Java...
  • xmt1139057136
  • xmt1139057136
  • 2017年08月08日 14:39
  • 1888

POJ 3984 迷宫问题(bfs)

题意: 定义一个二维数组,它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走 要求编程序找出从左上角到右下角的最短路线 思路: bfs基础题,在结构体内定义一个...
  • Doris1104
  • Doris1104
  • 2016年01月25日 22:02
  • 485

你知道Java正在没落么?

Google在今天召开的IO大会上宣布,kotlin语言将作为Android开发的第一语言 前言作为使用Java语言3年的程序员我来说,这个消息还是挺震惊的,在我们进入正题之前,我们先来看下上个月的语...
  • qhshiniba
  • qhshiniba
  • 2017年05月18日 15:16
  • 1630

基于精英选择策略的遗传算法

应用于TSP问题,对其他NP问题可能需要改变编码策略,以下是C++实现 /*由Parrot改进的遗传算法求解TSP * *选择操作使用转赌轮算法 *变异算子采用逆转变异算法 *交叉时先使用顺...
  • u011108221
  • u011108221
  • 2014年12月05日 22:17
  • 2314

C++的学习路线以及未来就业趋势

从学习C++到现在已经有四个年头了,但是从来没有很深入学习,有人说C++是面向对象的编程语言,但是我在这里想说的是,C++是一个多泛型的编程语言,它既可以面向过程,比如我们完全可以用C++写C的代码,...
  • qq_23225317
  • qq_23225317
  • 2016年11月10日 13:27
  • 2265

2016华为软件精英挑战赛总结

还记得当时做这个比赛的时候好多天都是满脑子想着这道题,除了后面没有意义的玄学调参,参加这种比赛还是很锻炼的。在比赛的过程中需要去学算法读论文这都是一种提高吧。这里写篇文章分析一下当时的思路同时也纪念当...
  • mmy1996
  • mmy1996
  • 2016年08月20日 19:52
  • 4267

C++学习推荐书目及进阶路线(仅供参考)

语言入门: 有丰富C经验,缺乏C++经验的: 《C++ Primer (3RD)》 有其他语言的丰富经验的: 《The C++ Programming Language》简称TCP...
  • chinaliping
  • chinaliping
  • 2013年08月09日 15:05
  • 1071
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++不会没落但会走精英化路线
举报原因:
原因补充:

(最多只允许输入30个字)