C++编程 - 真的不要重复造轮子吗

C++编程 - 真的不要重复造轮子吗


作者:flyfish 2014-3-14

在软件开发领域有一个著名的谚语-不要重复造轮子 Don't reinvent the wheel.
  这句话做为你的开发原则吗?
情景1

看看C++的大轮子,STL,各个公司组织都造自己的STL,HP的STL是大部分STL版本的老爹,Linux下的编译器GCC(The GNU Compiler Collection)采用的是SGI STL,VC++编译器使用的P.J. Plauger参考HP STL编写的STL。还有准标准库Boost。其他的小轮子就数不胜数了。


情景2
在开发中需要解析一种格式的文本,首先会想到是有没有人已经实现过对这种格式的解析例如对XML或者Json格式的解析。如果网上已经有实现的代码,那就测测,有Bug就修修,没问题就直接用了。


所以 Reinvent the wheel与Don't reinvent the wheel要看是谁。
有实力的组织不仅用轮子而且都在造轮子,做上层开发的大部分在用轮子。


提到wheel,reinvented这两个单词的书《人件》
A project requiring no real technical innovation is going down the tubes. Accounts receivable is a wheel that's been reinvented so often that many veteran developers could stumble through such projects with their eyes closed. Yet these efforts sometimes still manage to fail.
应收账款这样的软件就像车轮一样经常重新被发明,很多老程序员闭着眼睛也能完成这样的项目。但这些项目有时候还是失败的。
这里也没说不能重复造轮子。


重不重新发明轮子要在什么时候。
1学习的时候,重新发明轮子可以学习到更多技能。学习的最佳方法就是模式那些比我们优秀的人
2做项目的时候,首先要找轮子,辨别好轮子,没好轮子就自己造吧。

复用
不要造轮子的另一个方面是在可复用性上,Don't Repeat Yourself,Once And Only Once。
复用要看规模
有的复用是一个代码片段,一个函数等等。
有的复用是一个或者几个类组成,实现一个小功能
有的复用是软件开发方法上。
有的复用是dll,lib,exe的重用
有的复用是一种解决方案的复用
对于常见软件设计问题的标准解决方案的总结出现了设计模式。


你在开发的时候想到了代码复用吗?

1 WPS的开发

WPS由原来自己的格式,后来推到重来重新开发兼容Office,采用微软的Office标准开发,是否要复用以前的代码,这是个问题。
从PC到移动端,是否要重用PC上的代码,这是个问题。
最终都没有复用,因为战略。
所以Don’t Design for Reuse不为复用而设计在某些时候也是正确的。


2微软的开发
1) 看下微软MFC的CString 这个经常被用到的类
看源码一步步跟踪由 头文件afxstr.h,到cstringt.h最后跟踪到atlsimpstr.h。也就是MFC引用了ATL的代码并对其进行了扩展,做到了代码复用,结果是对ATL产生了依赖。
2)再看微软WTL的CString类,在头文件atlmisc.h中,没有引用其他的库,很干净。
在Visual Studio 2013中 Visual C++ Libraries团队修复了MFC中105个bug,ATL中 60个bug。但对WTL没影响。
所以同样是微软,有的开发小组复用,有的开发小组不复用,因为目的不同。

你可能感兴趣的:(C++编程 - 真的不要重复造轮子吗)