`
hnylj
  • 浏览: 211221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谈谈“不要重复发明轮子”

阅读更多

只身在他乡,常常想起我的父亲,在我们当地他是出名的木匠师傅,一手掌脉设计建造了许多建筑物,留下了很多赞誉,不过现在人年龄也大了,就没有当木匠师傅了。他曾经给我说过,在工程领域,文官永远要输给武将。其意思就是说,一个纸上谈兵的人永远要输给一个不断实践的人。这样的道理或许有些绝对,也不会有人不懂,也许是因为从小就在这样的氛围中耳闻目染,所以我一直都是一个乐于动手实践的人。

 

在软件工程领域,有一句著名的话,叫做“Don't Reinvent the Wheel”--不要重复发明轮子。这句话说得非常经典,也非常有道理。但在生活中,我就发现时常有些人常常被这些名言所束缚,其实我觉得“不要重复发明轮子”也只是站在某一个角度告诉IT人员的一个道理,如果将其奉为不可叛逆的金科玉律,就会束缚我们的思维,阻碍我们的步伐。

 

我是一名从事Java相关开发工作的IT人员,回忆当初自己自学java走过的路,我戏剧性地发现自己就是一个典型的在不断重复发明轮子的人。一个东西别人已经写过了,我将其下载下来,理解他的思路,重新自己再写一遍,或者再改造一遍,通过这个过程,我有很迅速的提高和积累,收获真的不是一点两点。

 

在论坛中,当一些热爱软件开发的同行们贴出一个自己写的东西,下面的留言总会出现,“又是一个重复的轮子”之类的跟帖,但我发现更多的留言是热心指出“如何如何。。。会更好”之类的跟贴,后一种跟贴是抱着一种欣赏交流的态度,非常好,因为我也是这样。

 

试想一下,如果你写了一个数据库连接池的小组件,你将对jdbc有深刻的认识;如果你写了一个IoC容器,你将对各种设计模式,反射机制等有更深的认识;如果你写了一个缓存框架,你将至少会在软件性能优化上加入自己的思考;如果你写了一个js library,你将对js的使用有更深刻的体会。如果......。这些工作永远比每天写几个Ation,几个service,几个DAO让我们提高积累得更快,从而也更清楚地认识自己真正匮乏的是什么。

 

我们不追求一定要让自己的小组件大范围推广,只因为我们还有几分对软件开发的热情,我们乐于学习,愿意研究,我们愿意付出一点时间来不断提高自己,因为这样不仅能让人体会到作为一个男人的那种充满斗志的“孤芳自赏”,也更让我们变得更有价值和竞争力。你觉得呢?

 

 

分享到:
评论
84 楼 路小尘 2015-04-08  
从学习的角度出发,还是很有道理的。
83 楼 yahuvi 2014-11-25  
“一个东西别人已经写过了,我将其下载下来,理解他的思路,重新自己再写一遍,或者再改造一遍,通过这个过程,我有很迅速的提高和积累,收获真的不是一点两点。”这只能说是学习轮子和发展轮子。重复发明我个人认为是指已经存在的东西而你在完全不知道的情况下又做了一相同的东西,这期间你需要花费更多的时间和精力,Don't Reinvent the Wheel说的意思是让你站在巨人的肩膀上,这是我的愚见。
82 楼 thzthbthy 2011-04-30  
我这样理解的,一个人有了发明轮子的能力,他会不明白这个轮子怎么用吗?
81 楼 kevin2003sk 2011-02-21  
轮子已经发明出来了自然不用我们重新发明,事实上你也没办法重新发明。

但是,我们还是需要重新造轮子地!跟现实世界是一样,不同的车、不同的用途需要不同的轮子,所以,我们需要根据公司的实际情况、项目特点组装出适合自己的轮子。至于这个轮子跟你的车配合的好坏那就另说了。
80 楼 javamonkey 2011-02-14  
现在很少见到有人说“又是一个轮子”,轻者遭到他人否定,重着被认为脑残。

所以LZ不用这么悲观,多重复造造轮子挺好的

学习可以用,实际项目也可以这么干
79 楼 pouyang 2011-02-10  
引用
试想一下,如果你写了一个数据库连接池的小组件,你将对jdbc有深刻的认识;如果你写了一个IoC容器,你将对各种设计模式,反射机制等有更深的认识;如果你写了一个缓存框架,你将至少会在软件性能优化上加入自己的思考;如果你写了一个js library,你将对js的使用有更深刻的体会。如果......。这些工作永远比每天写几个Ation,几个service,几个DAO让我们提高积累得更快,从而也更清楚地认识自己真正匮乏的是什么


78 楼 chq32 2011-02-10  
还有 问题是很多人造的轮子 都自认为很好 其实发现搞到最后 只实现旧轮子的的十分之一,百分之一,甚至千分之一。。。然后就是一个很好的理由:“适合我们的业务”,,
所以还是在旧轮子上扩展 比较实在点
77 楼 chq32 2011-02-10  
强烈支持重复做轮子,确实可以学到好多,但是。。。如果硬让别人用,那就强烈逼视了,最烦那种自己搞个轮子,然后就强让别人学他的破东西,滚啊。。
所以我的观点就是 自己折腾玩就行了。。
76 楼 ld57601870 2011-01-30  
很同意楼主的观点,我现在确实只是个写几个service,几个Action的程序员。看完楼主的我也尝试去联系一下那种“数据库连接池的小组件”,“IoC容器”等等,提高自己,认清自己真正匮乏的是什么。
75 楼 speedoops 2011-01-29  
如果现有的轮子没有什么太大的问题,那么就不应该重复发明轮子;
如果现有的轮子有些小的不合理,那么可以改进这个轮子;
如果没有现成的轮子可用必须发明新轮子,那么请发明可以被别人重用的轮子。

不管怎么样,第一件事应该是找找看有没现成合适的轮子。
74 楼 gentoo1439 2010-10-20  
研究轮子很能提高水平
73 楼 nighthawk 2010-09-06  
不要重新发明轮子。
这句话是在一定的语境下产生的。
顶 darkelf9
72 楼 fireflyc 2010-09-05  
<p>我觉得不要重新发明轮子本意是有道理的,如果你用某个东西之前一定要把某个东西搞清楚那么你可能永远也学不会怎么用。试问,那个东西不是先使用之后觉得有趣才会一查究竟的?<br><br><span style="color: #ff0000;"><strong style="background-color: #ffffff;">但是在今天这个时候就不是这样了,太多的山寨framework,动不动就是搞出来一个framework,framework在今天这个时代都成了一个贬义词我都不屑用这个词来侮辱自己写的东西。</strong></span></p>
<p><span style="color: #ff0000;"><br>所以我曾经呼吁过社区做一些有意义的事情,与其拼命山寨各种framework不如做一些有意义的山寨工作,山寨discuz,山寨liefrary,山寨cassso,山寨社区平台。。。。。这个世界有太多可以山寨的东西,唯独不缺的是山寨framework</span></p>
<p> </p>
71 楼 HenryYu 2010-09-05  
造不造轮子,我认为应从两个层面来看:
1,个人对技术态度问题。若一个对技术有兴趣和热情的话,从来是不会甘心仅从使用角度去看待问题,人云亦云是那是八哥没有什么两样。必定深究其所以然,若发现有更好解决方案,那么造一个新轮子就必然的行为了。
2,实际需要决定。若你的项目要求是一个短、平、快,做完,收款,走人,那么拿来主义当然是没有问题,反正轮子很多,找个合适的,装上就跑,何必再造呢?若你做的产品型的系统,可维护性和可扩展性要求很高,那么你的产品核心模块就不能拿来主义了,道理很简单,你闭上眼睛想想若中国第4代战斗机还是装俄罗斯的发动机那将是多么被动情形?!
前段时间做个系统,其核心是一个Socket Server,大家都是用Netty封装一下算了。问问自己,出问题了,有能力维护Netty吗?不是有源码吗?等你看懂了,也就和自己写一个没有什么区别了。于是我自己写了一个,功能当然没有netty那么多花样,满足自己需求就可以;第1版本,性能很一般;第2、3、4,现在第5版性能已经和netty相当接近了,而且相当可靠。关键是,核心在自己手上,可维护,出bug,快速定位,解决问题。
这就是造轮子好处,用人家轮子,出问题了,等着哭吧!
70 楼 sam_chi 2010-08-24  
顶!非常同意楼主的观点!
69 楼 ajonjun 2010-08-03  
不是闭门造车就行了。嘿嘿
68 楼 yin_bp 2010-08-03  
linliangyi2007 写道
楼主可以无视那些看不起“发明轮子”的人,自己写过跟自己看过是两回事


同感,咱偷空也做了不少轮子,有持久层,aop,标签库,分布式事件,rpc等,呵呵,在很多项目里头用的蛮好啊。
67 楼 czxiyj 2010-08-03  
不要被老外给蒙骗了,他们是想掌握核心,让我们永远根在他们后面而已。
66 楼 神之小丑 2010-07-23  
不重复发明轮子的必经之路就是重复发明轮子
65 楼 snake1987 2010-07-06  
darkelf9 写道
不要重复发明轮子 是从工程角度出发说的

在实际项目中,尽量用已经通过工程证明 的可用的轮子
如果一定要做一个,那也必须要在对已有轮子充分了解下,能够保证自己做的轮子 比已经有的轮子 有非常明显并且本质的好处


至于个人通过做轮子学习,自己的时间当然自己可以支配,愿意去读源代码愿意去造轮子去冒险都可以,只要自己觉得值得就行
但是不要让公司和团队为个人的轮子去冒险




角度不同,观点也就肯定不同了,基于学习的角度来看,楼主的做法还是很值得学习的,很好的学习方法

相关推荐

Global site tag (gtag.js) - Google Analytics