写点什么

透视“语言大战”:C++ 呼唤敏捷实践

2007 年 9 月 15 日

Linus Torvalds 的一番言论为导火索,国内的技术博客们掀起了一场不大不小的“语言大战”。是否真如 Linux 之父所说的那样,“C++ 是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使情况更糟,以至于极容易产生彻头彻尾的垃圾(total and utter crap)。”孟岩的切身经验颇值得玩味:

我早在 N 年前就发现自己写程序速度慢,我当时对 STL 远比周围人熟悉,照例说长缨在手,应该效率很高才对。结果发现不是,写程序的时候特别没自信,总在想:“这样固然是可以 work 了,但恐怕有更好的方案吧,会是什么呢?加个模板参数试试?要么抽象出一个基类?做一个 bridge 模式?那么 Ownership 的问题怎么解决?谁来负责回收内存呢?移植一个 boost::shared_ptr 过来吧!可多线程情况下会不会拖慢速度呢?应该不会,可是会碰到循环引用的情况。要么在中间搞一个 weak_ptr 把循环链断开?哎呀不行不行,太复杂,别人也理解不了。还是先这样吧,能 work 就行。” 就这样,兜了一个圈子回来。有的时候,这个圈子不是纯柏拉图式的,我会真的实现不少 “优化” 设计来比对,那个时间啊,花花的就耗在里面了。

另一位资深的 C++ 程序员刘未鹏则这样感叹

群众是容易被误导的,我也曾经是。以为掌握了更多的语言细节就更牛,但实际却是那些语言细节十有八九是平时编程用都用不到的。C++ 中众多的细节虽然在库设计者手里面有其用武之地,但普通程序员则根本无需过多关注,尤其是没有实际动机的关注。一般性的编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。

显而易见,在 C++ 这种语言上,人们投入了大量精力、撰写了大量图书和文章来关注它的语言细节,却对在真实环境下使用它解决问题的最佳实践重视不足。如果这还不够糟糕的话,不妨再看看 C++ 在项目层面上的最佳实践——几乎没有任何成文的资料存在。当敏捷实践对于 Java、.NET、Ruby 等等社区的开发者逐渐成为常识时,C++ 程序员们还要花大把时间去学习摸索如何写一个好的 makefile、如何组织自己的项目目录结构,更不用说持续集成和测试驱动开发了。但 C++ 团队仍然需要敏捷实践。据记者的了解,国内有多家从事电信、铁道等行业应用开发的 IT 企业已经痛感缺乏项目组织手段和质量保证手段带来的问题,并希望通过引入敏捷实践来改善项目质量,提高工作效率。在 C++ 项目中引入敏捷方法,至少需要以下几方面的最佳实践作为支撑:

  • 项目自动化:如何在 make 等现有工具的基础上,通过合理的项目组织,实现项目构建、集成、测试的完全自动化。

  • 测试驱动开发:如何引入以 CppUnit CxxTest 为代表的单元测试工具,并以测试驱动功能代码的开发。这个话题又可以引申出两个方面:

  • 面向对象设计:针对某一特定领域的软件应用,如何进行合理有效的面向对象设计,使之有可能进行单元测试;

  • mock:如何为 C++ 应用引入 mock 技术(甚至是 IoC 容器),从而简化单元测试。

  • 持续集成:如何加快集成的频率,将 C++ 项目与现有的持续集成工具(例如 CruiseControl )结合起来,使集成状态成为项目健康情况的重要标示信息。

  • 重构:如何有效利用现有工具,对规模较大的 C++ 程序进行重构;如何避免使用对重构构成障碍的语言特性。

正如记者所指出的,C++ 的敏捷实践正在日益受到相关 IT 企业和开发团队的重视,但这方面的系统研究和资料仍然非常欠缺,给希望引入敏捷实践的 C++ 团队造成了巨大的障碍。经验丰富的 C++ 程序员们如果投入更多的精力来讨论和总结“如何用 C++ 做好一个项目”,会给整个行业带来更大的价值。

2007 年 9 月 15 日 01:20852
用户头像

发布了 21 篇内容, 共 21772 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

众盟科技2020智能化白皮书:穿越新商业周期,读懂商业智能化的真义

脑极体

甲方日常 20

句子

工作 随笔杂谈 日常 Java 25 周年

架构师训练营 1 期第 2 周:框架设计 - 作业

piercebn

极客大学架构师训练营

网站日志分析最完整实践

MySQL从删库到跑路

判断一个请求是否是Ajax异步请求

麦叔

ajax

分布式高并发下Actor模型如此优秀

架构师修行之路

系统设计 reactor 高并发

LeetCode题解:145. 二叉树的后序遍历,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

看动画学算法之:排序-count排序

程序那些事

动画 看动画学算法 看动画学数据结构 count排序

响应式编程到底是什么?

博文视点Broadview

Java 响应式 响应式编程 reactor 并发

船长梁晓玲的猎鹰号真的能赚钱嘛?不分析不知道……

成周

心理学 船长梁晓玲 诈骗

第7周的总结

Vincent

极客时间 极客大学

知乎万赞,获得腾讯offer后自述,编程能力是如何突飞猛进的

周老师

Java 编程 程序员 架构 面试

高并发下为什么更喜欢进程内缓存

架构师修行之路

缓存 架构设计

架构师训练营第 1 期 -week2

习习

微前端qiankun从搭建到部署的实践

fengxianqi

前端框架 微前端 微应用

超越色彩的魅力:读《黑白适界》

北风

艺术 摄影 黑白 摄影征文 画册

“大数据+区块链”的智慧城市建设!

CECBC区块链专委会

区块链 大数据

救人于无形的“环境智能”,到底是一种什么智能?

脑极体

Spring系列之新注解配置+Spring集成junit+注解注入

云流

Java spring 架构师 微服务框架

一个草根的日常杂碎(9月22日)

刘新吾

生活 随笔 记录

架构师训练营 - 第 2 周课后作业(1 期)

阿甘

时空碰撞优化系列·二

誓约·追光者

hive Sparksql 计算效率 优化

我把某大厂P8大牛手写的 Linux+网络编程 手册搞到手了

互联网架构师小马

Java Linux 程序员 网络编程 操作系统

架构师训练营 - 第 2 周学习总结(1 期)

阿甘

第7周作业

Vincent

极客时间 极客大学

Redis 发布订阅,小功能大用处,真没那么废材!

楼下小黑哥

Java redis spring

oeasy 教您玩转 linux 010400 总结 summary

o

添加字幕哪个视频剪辑软件比较简单?

奈奈的杂社

视频创作 视频剪辑 视频后期 自媒体 后期字幕

架构师训练营第 1 期 第 1 周作业

李循律

c++杂谈-1

菜鸟小sailor 🐕

c++

一夜爆火,只因阿里内部作为参考的SpringBoot巅峰之作git开源

小Q

Java 架构 面试 微服务 springboot

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

透视“语言大战”:C++呼唤敏捷实践-InfoQ