转载地址:c++的反思
最近两年 C++
又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++
你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++
呢?
咱们要有点娱乐精神,关于 C++
的笑话数都数不清:
笑话:C++
是一门不吉祥的语言,据说波音公司之前用ADA
为飞机硬件编程,一直用的好好的,后来招聘了一伙大学生,学生们说我靠还在用这么落后的语言,然后换成C++
重构后飞机就坠毁了。
笑话:什么是C++
程序员呢?就是本来10行写得完的程序,他非要用30行来完成,并自称“封装”,但每每到第二个项目的时候却将80%打破重写,并美其名曰 “重构”。
笑话:C
容易擦枪走火打到自己的脚,用C++
虽然不容易,但一旦走火,就会把你整条腿给炸飞了。
笑话:同时学习两年 Java
的程序员在一起讨论的是面向对象和设计模式,而同时学习两年 C++
的程序员,在一起讨论的是 template
和各种语言规范到底怎么回事情。
笑话:教别人学 C++
的人都挣大钱了,而很多真正用 C++
的人,都死的很惨。
笑话:C++
有太多地方可以让一个人表现自己“很聪明”,所以使用C++
越久的人,约觉得自己“很聪明”结果步入陷阱都不知道,掉坑里了还觉得估计是自己没学好 C++
。
笑话:好多写了十多年 C++
程序的人,至今说不清楚 C++
到底有多少规范,至今仍然时不时的落入某些坑中。
笑话:很多认为 C++
方便跨平台的人,实际编写跨平台代码时,都会发现自己难找到两个支持相同标准的 C++
编译器。
关于 C++
的笑话我有一箩筐,各位 C++
粉用不着对号入座。言归正传,为什么要黑 C++
呢?谈不上黑不黑,我从94年开始使用 C++
(先前是 C
和 Pascal
),一路看着 C++
成长壮大,用 C++
写过的代码,加起来应该超过 10MB
了吧,C++
的各种宝典我也都读过,一直到 2004年开始切回 C
,主要原因是发现很多没法用 C++
思路继续解决下去的问题,或者说用 C++
思路解决下去会很糟糕的问题。
那时候(2004-2005)正是 C++
满天飞的时候,言必称 C++
,用必用模版,我跳出来说你们醒醒吧,别过火了,这个世界并不是都是抽象数据结构和算法就可以描述清楚的。于是很多人激动的跳出来说:“你没领会到 C++
精髓,你根本都不会用 C++
”。我问他们:语言是用来解决问题的,如果一个语言学了三四年都会经常掉沟里,算好语言么?如果编写十多年 C++
的程序员都很难掌握得了,这算好语言么”。他们又说:“语言是死的,人是活的”。
我记得当时一位国内 C++
大牛,为了纠正我的 “错误观点”,给我看过他写的一套十分强大的库,我打开一看,倒吸了一口冷气,全部是.h
文件。我只能回他三个字:“你牛逼”。当然这是一个极端的例子,那家伙后来终于也开始把.h
里面的东西逐步挪到.cpp
里面了,这是好事。
当时和云风在一家公司,2004年新人培训时,他给新人布置了一个实现内存分配器的作业,批改作业的时候,他经常边看边问人家,“不够C++
呀,你能不能百分之百OOP
?”,“1%
的C
都不要留”。我当时在公司内部邮件列表里面发过关于C++
的问题,大部分人都表示:“你看没有C++
我们怎么写3D
引擎呢?”。我跟他们讲:“John Carmack
直到 Quake3
都还在用着 ANSI C
,后来因为不得不支持 D3D
,改用 C++
了。为啥 C
不能写 3D
引擎了?”。他们告诉我:“你看,Point
,就是个对象,Matrix
也是个对象,那么多 Vector
的代数计算,用 C++
的算术重载是多么美妙的事情,三维世界就是对象的世界。”。
确实当时客户端 GUI
的话,只有 C++
,图形引擎也只有 C++
,这两个正是C++
最强的地方,所以我也没和他们争辩,强迫他们承认 C
也可以很漂亮的写图形,而且C
写的可以写的很优雅。我又不是闲着没事情,何必去质疑人家的核心价值观呢。当年我正在接手一个 C++
项目,代码超过 800KB
,每次崩溃都需要花费很长时间去定位,项目中大量的前后依赖,改一个地方,前后要看好几处,一处遗漏,整个系统就傻逼了。我开始重构后,花了两个星期,将性能敏感的核心部分剥离出来用 C
实现(代码量仅 200KB
),然后导出 Python
接口,用Python
来完成剩下的部分,整个脚本层代码量只有 150KB
。整个世界清爽了,整个 C++
项目原来的工期为 2个程序员四个月