Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

关于“不要重复发明轮子”

  我所做的事情经常被认为是在“重复发明轮子”,我确实经常在做着这样的事情,这一点不可否认。但是“不要重复发明轮子”这句话的适用性是很有限的,不要把它视为一种教条。在一般的项目开发中确实很忌讳重复发明轮子,但它对于研究新技术而言是很有必要的。
  注意这里的动词是“重复发明(Reinvent)”而不是“重复制造”,这概念就有点不同了。也许很多人认为对于程序而言,发明和制造没什么区别,当我不这么认为。发明是发明一种技术,而制造是把这种技术做成程序。我在开发新的库时总是会先设计API,实际上设计API就是一个发明的过程,而根据这个API把库实现出来则是制造的过程。当然不仅是API设计,在开发过程中会用到的一些创新的算法也属于发明的范畴。
  比如jQuery,它的精华所在就是它的API设计,而不是如何实现。按照jQuery的API自己实现一个类似的库也并不困难。jQuery中有很多防呆设计,它对性能是有很大影响的,自己实现就可以去掉一些不必要的东西以提高性能。这就是在重复造轮子。实际上jQuery的实现已经非常优秀了,确实没有重复制造的必要。但是对于一些第三方的jQuery插件而言,在实现上可能就非常糟糕,这时候可能就需要重复制造,甚至重新发明。
  在讨论是否需要重复制造轮子时,我们的动机都仅是需要使用轮子而已。通常在做一个项目时候只是为了完成这个项目,很多时候就没必要为它去研究新技术,只要使用现有的技术就行,即使现有的技术有很多不尽人意的地方。但是如果目的本身就是研究新技术呢?那么重复发明轮子就有一定的必要性。了解原技术的发明背景对新技术的发明是很有帮助的。这就不是看源码可以学到的东西了,必须从“发明”这个行为中总结经验。
  一个项目如果在短期内需要完成,那么“不要重复发明轮子”才适用。对于一个已经上线了的项目,也许就需要尝试重新发明轮子了。比如早起版本的QQ是直接使用微软提供的控件的,因为当时它的目的是在有限的开发预算内尽快做出这个产品。到了后来,它就考虑自己开发控件,这就是在重复发明轮子。而这个发明对它自己来说确实非常有用。当一个项目越来越完善时,所使用的第三方程序就会越来越少。
  总之,重复发明轮子是很有必要的,关键在于选择合适的时机。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^