写点什么

透视“语言大战”: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:20840
用户头像

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

关注

评论

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

第九周作业总结

Geek_ce484f

极客大学架构师训练营

大数据和Hadoop平台介绍

MySQL从删库到跑路

大数据 hadoop

第九周学习总结

orchid9

Week 9 作业01

Croesus

请简述 JVM 垃圾回收原理

orchid9

架构师训练营第二期 Week 5 总结

bigxiang

极客大学架构师训练营

能源区块链研究|区块链与核电安全

CECBC区块链专委会

区块链 核电

week5 作业二

shuyaxx

架构师训练营 1 期 - 第九周总结(vaik)

行之

极客大学架构师训练营

一致性 hash 算法的实现

幸福小子

一致性Hash算法

第9周作业1

Yangjing

极客大学架构师训练营

第9周作业2

Yangjing

极客大学架构师训练营

第九周学习总结

Meow

第五周学习总结

晴空万里

极客大学架构师训练营

Netty源码解析 -- 对象池Recycler实现原理

binecy

Netty 对象存储 高性能

数据库工程师整理最常见mysql面试题,每一道都是工作面试经典

小Q

MySQL 数据库 学习 架构 面试

训练营第五周作业

大脸猫

极客大学架构师训练营

InfoQ 写作平台的魔力

Yolanda

助推城市智慧化!正舵者携手中科院演绎区块链魅力

CECBC区块链专委会

区块链 人工智能

Snowpack - 更快的前端构建工具

曲迪

效率工具 前端 前端工程化 前端进阶

第九周作业

Meow

文件上传踩坑记及文件清理原理探究

比伯

Java 大数据 编程 架构 计算机

第九周作业

Geek_ce484f

极客大学架构师训练营

应届秋招生,熬夜吃透华为架构师这份‘典藏级’计算机网络+计算机操作系统,成功上岸腾讯

云流

网络协议 编程之路 计算机知识

架构师训练营

架构师训练营第九周课后练习

薛凯

第五周作业

晴空万里

极客大学架构师训练营

第九周作业

极客大学架构师训练营

训练营第九周作业 2

仲夏

极客大学架构师训练营

真零基础Python开发web

MySQL从删库到跑路

Python django Web bottle

架构师 01 期,第九周课后作业

子文

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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