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++ 退出历史舞台的可能性:
- 网站 A 和网站 B 类似,用 C++ 可以让速度提升 30%,你感觉这个网站会选择语言的易用性,还是会选择速度?
- 公司 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++ 精英化趋势的更多相关文章
- TOP100summit2017:网易测试总监钱蓓蕾——新时代测试正走向精英化、自动化、智能化
壹佰案例:钱蓓蕾老师您好,很荣幸邀请到您成为第六届壹佰案例峰会测试专场的联席主席.您从事测试工作11年了,您觉得最近几年测试工作有什么趋势上的变化么? 钱蓓蕾:测试行业近几年变化挺大的,正逐渐向精英化 ...
- [转]Web3.0时代,企业知识管理新趋势
[转自http://www.amt.com.cn/html/ManageFront/AMTPoint0/2014/0716/1370.html] Web3.0时代,企业知识管理新趋势 2014-07- ...
- NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
NoSQL最早起源于1998年,但从2009年开始,NoSQL真正开始逐渐兴起和发展.回望历史应该说NoSQL数据库的兴起,完全是十年来伴随互联网技术,大数据数据的兴起和发展,NoSQL在面临大数据场 ...
- Atitit 教育与培训学校 的计划策划 v4 qc18
Atitit 教育与培训学校 的计划策划 v4 qc18 1.1. 版本历史12. 教育历史的前世今生12.1. 自学vs 家庭学校vs 私立学校vs 公立学校模式 vs 企业内部学校 vs 其他商业 ...
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- SNS网站成功原因剖析_完结
SNS网站成功原因剖析 前言 亿注册用户)为例,讨论下 Fackbook成功的原因,进而分析结合国内环境,讨论当前国内流行的 SNS网站成功失败要素. 一.Facebook (一) Facebook总 ...
- Atitit 教育与培训学校 的计划策划 v2
Atitit 教育与培训学校 的计划策划 1. 历史大趋势,教育的普及化1 2. 我们的目标,人人可以接受硕士博士教育,确保全球60亿人的普世化教育1 3. 学校的注册,可以选择在全球费用最优惠的地方 ...
- 自媒体时代网络脱口秀节目的“五W”分析——以《罗辑思维》为例
摘 要:随着互联网的发展,网络媒介生态的变化正在悄然进行.一大批网络自媒体节目<罗辑思维><晓说><凯子曰>等进入大众视线,成为大众关注的新焦点,其中<罗辑思 ...
- 【转】物业管理与移动互联网科技|微信公众平台,物业app,物业O2O
[导语]当下,物业管理行业正在接受新科技浪潮的冲击和洗礼,业界企业纷纷探索物业服务的新发展模式.云服务.微社区.微信公众平台.app等,这些本来陌生的词汇在物业管理行业变得耳熟能详.在借助科技手段拓展 ...
随机推荐
- k8s实战之从私有仓库拉取镜像 - kubernetes
1.实战目的 从私有docker仓库拉取镜像,部署pod.上一篇中,我们搭建了私有的镜像仓库,这一篇我们将与k8s结合实战使用私有仓库. 2.登录docker 为了完成本次实战,需要登录docker, ...
- kubernetes 客户端KubeClient使用及常用api
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, gith ...
- C/C++中extern和static
目录 1 extern概念 2 extern作用 2.1 变量声明 2.2 变量定义 2.3 声明和定义举例 3 为什么使用extern 4 怎么使用extern 4.1 基本数据类型定义变量 4.2 ...
- docker 搭建私有仓库 harbor
前提 已安装好 docker 和 docker-compose 环境:CentOS Linux release 7.5 docker 版本:18.09.05 1.安装harbor wget -P / ...
- 两个案例轻松理解MyBatis中的TypeHandler!
在做开发时,我们经常会遇到这样一些问题,比如我有一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,怎么实现?再比如我有一个User类,User类中有一个属性叫做 ...
- Java进阶篇设计模式之三 ----- 建造者模式和原型模式
前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...
- 泥瓦匠想做一个与众不同的技术"匠"
点击蓝字,关注泥瓦匠 本文阅读大约 3 分钟.感谢阅读 喝了最后一口百事可乐,想到它的 slogan:新一代的选择.新一代的选择,每个人选择不同,人生道路历程也不同.就像我刚毕业的时候,毕业选择不一样 ...
- Golang struct结构
结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...
- 与其想当然的 overdesign,不如自己动手做个试验
Conmajia Jan. 29th, 2019 早在2012年,我曾经针对 C# System.Random 不同的初始化方案专门做过一次试验,得出了单次默认初始化即可获得质量很好的随机数的结论.可 ...
- C#工具:分词辅助类
using System; using System.Collections; using System.IO; using System.Text.RegularExpressions; names ...