赖勇浩(http://laiyonghao.com)

C++

C++ 在 2011 年其实风头甚劲,C++2011 标准出台,gcc/msvc/clang 都很快速地支持了许多新特性,新兴的移动设备的性能较差,更是 C++ 的新舞台,在这个时候唱衰 C++,压力很大。我使用 C++ 年头不少,但除了在校的时候写过两个小游戏参加过两个比赛(分别是面向社会和面向大学生的)弄些证书好找工作以外,在工作中只用过大概不到一年半,做《斩魂》(http://zh.163.com)的早期版本,写了服务器端的几条进程和客户端的 GameAI 部分。经验少,而且写得不好,所以基本上有人在 weibo 上问我 C++ 的问题,我都是转发给 @bnu_chenshuo 和 @miloyip 等真正的行家去回答的。所以实际上今天写这一篇,我底气很是不足,但是朋友们给前两篇很大面子,弄得我骑虎难下,只好硬着头皮写了。
前文提到 C++ 的新标准,很有必要提一下标准化对 C++ 的影响。首先我们要肯定标准定制对 C++ 的积极作用,但标准化过程中的超长流程,一次次将 C++ 推向深渊。C++ 的第一个标准是 1998 年的 ISO/IEC 14882:1998,距离整个 90 年代最流行的 C++ 程序库 MFC(Microsoft Foundation Class Library)的第一个版本发行时间已经整整  6 年。1998 年,MFC 版本号为 6.0,与其一起发布的 Visual C++ 6.0 占有了巨大的市场。因为 MFC 发布得标准制定的时间早,所以 MFC 内部实现了许多后来标准库里也有的组件,比如各种数据结构容器。VC6 的市场占有率让 windows 平台下开发的许多 C++ 程序员甚至不知道有 STL,同时也无视 C++98 标准,从更兼容标准的 VC2002/2003 的市场占有率就可以看出来,直到今天,我知道国内不少公司还是只用 VC6 的。
其实在 90 年代,计算机的运算能力有限,市场上非常需要一款性能较高、抽象较强的编程语言,C++ 获得了成功,但它标准化的时间过长,造成各种编译器有各自互不兼容的“方言”,成了它的第一个软肋。第一个瞄准这个软肋的就是 java,java 在 1995 年推出,虽然性能稍逊,但它有更高的抽象能力、也更安全,并且更容易跨平台,所以迅速获得了成功;第二个瞄准这个软肋的是 C#,微软不能推动 C++ 发展,又不愿 C++ 的市场被 java 鲸吞,于是在 2001 年推出了 C#,经过 10 年的发展和微软大量的金钱推广,C# 已经成功获得了它应有的江湖地位。
虽然 java/c# 都不是善类,但 C++ 在 21 世纪的第一个十年里仍然地位稳固,这是因为 Linux 和 MacOS X 大获成功,在这两个平台上 C++ 都是非常有竞争力的编程语言,C++ 自然水涨船高。但随着 web2.0 和 web app 概念的兴起,以及 CPU 的主频进一步提升,服务器端编程语言渐渐地对执行效率不再敏感,而是更在意程序员的开发效率,众多的脚本语言开始蚕食 C++ 的市场份额,从早期的 perl 到后期的 python/php/ruby,在 2005 年以后,C++/java/C# 等静态类型的编译型语言的市场份额都下降了,新兴的贵族是动态语言。面对动态语言在开发效率上的强劲挑战,C++ 社区除了在 2003 年对 C++98 做了小小的 patch,基本上睡着了,完全没有应对之策,哦不,连应用的姿态都没有。
进入 21 世纪的第二个十年,市场又发生了变化,云计算越走越近,也许我们中的大部分人今天还可以说只闻其声不见其形,但 The Data Center Is the Computer 这句话大家应该觉得很务实:完成一个用户操作,在服务器端的进程间通信次数前所未有地多。在这个十年,我们需要这样的编程语言:
1、能充分利用现代 CPU 的计算能力,不仅仅是多个核心,更是巨大的 L1/L2/L3 Cache、超线程等;
2、能够大量减小异步 I/O 的性能提升的同时带来的副作用:异步编程的复杂性以及对可维护性的伤害;
两句话其实也可以压缩为一句:需要有更好的并发模型的语言。一开始大家都在已有的编程语言中寻找,然后找到了 erlang,实践证明 erlang 自有其局限,所以 google go/scala/rust 等新语言如同雨后春笋般拨地而出。C++2011 标准努力降低 C++ 的编程难度,并提供了线程库以支持现代 CPU,如果在 2005 年,这个标准绝对有竞争力,但在今天,它只能成为新的编程语言的垫脚石。正如 IE 最大的用处是用来下载其它浏览器,不久之后,也许会流行新的冷笑话:C++ 最大的用处就是用来实现其它编程语言。
市场一直在寻找一门中间的高级语言,它上承 C 语言和汇编语言,下启脚本语言。C++ 最先抢占了高地,并在与 java/c# 的争斗中不落下风,但新的十年,它的对手又增加了 google go/scala/rust 等新锐,并且新的标准不可能在两三年内再次出台,两三年内新锐成长起来后,留给它的位置就不多了。
上文讨论的基本上都是服务器编程,有必要再来看一下桌面和移动设备领域。首先看桌面软件,rust 是 mozilla 基金会开发系统程序语言的,它的定位是部分取代 C++ 开发 firefox 的浏览器,所以 rust 会进入桌面开发,google go 肯定会顺道啃一口。移动设备方面,主要是 android、ios 和 windows phone,随着移动设备性能增强,编译型语言加脚本的模式就会占大头,编译型语言方面主要是 C++ 和 Objective-C 在竞争,C++ 会占上风(但需求量远远小于脚本,从 lua 在 2011 年的增长速度可以印证),但是谁知道 rust 之类的会不会进入移动设备呢,毕竟移动设备的 CPU 核心也越来越多了呀,C++ 还是前景堪忧。
回首 C++ 的 30 年,展望它的未来,总结起来可能就是:标准化流程拖死人了。如果不是 15 年不能标准化,java/c# 的搅局可能不会出现;如果在 2005 年能够应对动态语言……如果云时代有更好的并发模型……
题外话:java/c# 不会有 C++ 的问题,因为它们有自己的平台,有巨大的财富支撑。特别是平台的作用非常巨大,你可以想像一下如果 Adobe 有自己的浏览器或手机操作系统 ActionScript/MXML 会不会是今天的境地;也可以想像一下 google go 的飞速发展动力是什么。

两点解释

1、我觉得有必要解释“不宜进入”一下这四个字,我想要表达的意思就是如果你现在不是这三个技术点的专家,并且手上没有使用这三个技术点的项目,进入这三个技术点仅为技术储备,那么就“不宜进入”。另外我不是说用了这三个技术点的项目就死,学了这三个技术点的人就找不到工作,或者这三个技术点明天或明年就 game over,渣都没得剩,不是这样的意思,它们还会存在很长一段时间。本文不是叫专家自废武功,也不是叫已经做好技术造型的项目赶紧儿换技术,举例说,如果你选择了用 java 做服务器端,flash 做客户端开发一个 webgame,那你最好玩命儿地把 ActionScript/MXML 和 java 多线程编程(及异步 I/O)给钻透,不然可能随时掉陷阱里。
2、新年新气象,工作和家庭都有很重要的事情压在肩上,大家的评论我不逐条回复了,我会在一两个星期后再统一写一篇《2012 不宜进入的三个技术点(Q&A)》统一回答,还请见谅。

转载于:https://www.cnblogs.com/aiwz/archive/2012/02/01/6154316.html

2012 不宜进入的三个技术点(下)相关推荐

  1. 2012 不宜进入的三个技术点

    http://blog.csdn.net/lanphaday/article/details/7217506 2012 不宜进入的三个技术点(上) 赖勇浩( http://laiyonghao.com ...

  2. 2012 不宜进入的三个技术点(上)

    赖勇浩( http://laiyonghao.com) 其实写这篇博客的想法在年前已经有了,但一直在犹豫要不要写,一是因为写出来肯定会有人骂的了,刚过完春节的,在自己地头找骂,实在是晦气:二是因为我对 ...

  3. 2012 不宜进入的三个技术点(中)

    赖勇浩(http://laiyonghao.com) 线程 线程是指进程中的一个单一顺序的控制流,是操作系统能够调度的最小单位,一个进程中可以有多条线程,分别执行不同的任务.线程有内核线程和用户线程之 ...

  4. 关于2012年度土建工程专业中级专业技术资格考试有关问题的通知

    关于2012年度土建工程专业中级专业技术资格考试有关问题的通知 现将2012年度土建工程专业初.中级专业技术资格考试.报名.培训工作有关事项通知如下: 一.考试组织 湖南省住房和城乡建设厅.省人力资源 ...

  5. 三次技术转型,程序员的北漂奋斗史

    作者 |  门心叼龙 责编 | 伍杏玲 出品 | CSDN博客 卧室里家人已经熟睡,虽然已经是深夜11点多了,我却一点睡意都没有,窗外的马路上依然是车水马龙,我坐在电脑桌旁,带着耳机听着汪峰的< ...

  6. 02205微型计算机原理与接口技术自考,2012年微型计算机原理与接口技术自考题模拟(2)...

    2012年微型计算机原理与接口技术自考题模拟(2):2012年微型计算机原理与接口技术自考题模拟.本试卷总分100分:共有10类型题目 一.单项选择题 ,每小题1分,共16分,在每小题列出的四个备选项 ...

  7. 三次技术转型的我在帝都的北漂奋斗史

    卧室里家人已经熟睡,虽然已经是深夜12点多了,我却一点睡意都没有,窗外的马路上依然是车水马龙,我坐在电脑桌旁,带着耳机听着汪峰的<北京,北京>,想着MV里面里的那些人,高楼林立,街景复杂, ...

  8. 三次技术转型,程序员的北漂奋斗史 | 程序员有话说

    卧室里家人已经熟睡,虽然已经是深夜11点多了,我却一点睡意都没有,窗外的马路上依然是车水马龙,我坐在电脑桌旁,带着耳机听着汪峰的<北京,北京>,想着MV里面里的那些人,高楼林立.街景复杂. ...

  9. Airplay、DLNA和Miracast三种技术的介绍

    Airplay.DLNA和Miracast三种技术的介绍 AirPlay AirPlay 是苹果开发的一种无线技术,可以通过WiFi将iPhone .iPad.iPod touch 等iOS 设备上的 ...

最新文章

  1. Hibernate Criterion
  2. 04 | 深入浅出索引(上)
  3. 你该认识这样的Linux_shell函数使用案例
  4. 相依關係: XXXXXXXXX但它卻無法安裝
  5. Asp.Net Core对接钉钉群机器人
  6. 应用C语言编辑画图程序
  7. 台式机Windows 10系统打开或者断开网络的方法
  8. Python datetime timedelta
  9. JS代码混淆 支持PHP .NET PERL
  10. 小白必须要会的Github操作 确定不进来看看?
  11. linux之rsync远程同步文件
  12. Bailian3256 矩阵的乘法【数学计算】
  13. python在win10怎么搭建_Win10下Python环境搭建与配置教程
  14. 双系统linux安装cetos,电脑安装windows和centOS系统双系统
  15. 2018-01-03 烂尾工程: Java实现的汇编语言编译器
  16. 关于opengl 编程指南中使用几何着色器渲染毛发的分析
  17. 【毕业设计/课程设计】企业员工绩效考评APP的设计与实现
  18. 汇率转换方法java,[java] 汇率换算器实现(2)
  19. Scanner扫描仪的使用方法
  20. 智慧酒店的建议和分析

热门文章

  1. 信息竞赛进阶指南--搜索相关(模板)
  2. lucene 索引出错 no segments* file found in org.apache.lucene.store.MMapDirectory
  3. [链表]---链表中环的入口节点
  4. JS异步模式与Promise模式
  5. python中的 if __name__ == '__main_'的作用和原理
  6. python3(六)监督学习
  7. 可视化 nltk_词嵌入:具有Genism,NLTK和t-SNE可视化的Word2Vec
  8. pjsip for Android的编译
  9. 如何看待2018年小米雷军98.18亿年薪?
  10. iOS酷我音乐导出工具使用说明和原理介绍(提供下载链接及工程源码)