谈谈自己造轮子

原创 2014年04月30日 08:33:37

写下这篇文章,主要是对我近段时间工作的反思。

为啥要造轮子

对于一些程序员来说,喜欢自己造轮子可算是一个很平常的事情,我想可能有如下原因:

  • 对于一些小的功能,不需要借助外部库,直接能够自己写完搞定。
  • 对于一些大的功能,很多外部库不能很好的与自己项目整合,有时候还不如自己写一个。
  • 有时候即使能用的外部库,因为程序员相轻的思想,就觉得自己写的nb,不用。
  • 还有可能就是想深入学习某一个知识点,自己动手造一个。

我不觉得造轮子不好,曾今很长一段时间我都认为造轮子是体现自己能力很好的一种方式,但是现在越来越觉得,不要过分的去造轮子。

造轮子的教训

昨天,我需要对接amazon s3的存储,官方没有go语言的sdk,所以我就动了自己写一个的想法,即使我知道铁定有第三方的实现。

amazon s3的接口因为都是restful形式,同时签名机制已经非常熟悉(国内的存储服务接口几乎都按照这套设计的,除了几个奇葩的公司),所以我就开始写了,写完了之后,我在看一个第三方的goamz实现,发现跟我相差不了多少,一下子碉堡了。

我真的叫做没屁事了,这么浪费时间。

造还是不造?

很多时候,我们要克服自己造轮子的冲动。

对于一个需要实现的功能,我觉得首先可以考虑该需求是否有成熟的解决方案,如果有,使用的成本有多大?

譬如对于python来说,如果我们现在需要一套web框架,如果自己去写,而不用成熟的tornado,django这些的,我真觉得蛋疼了。而对于go来说,我到现在还没发现我们用起来趁手的web框架,所以就有了自己造的polaris

如果项目进度有压力,多数时候我都倾向于通过集成外部解决方案来实现,而不是费时的自己去造轮子,因为这时候体现你能力的不是你写了多少nb的东西,而是将程序运行起来,提供服务。当然,你也不能找太挫的,或者完全无法驾驭的程序,那样后面就够你疼了。

即使真的需要自己去写一个轮子,还需要不停的问自己:我这个轮子稳定性如何,能否高效的运行,后续随着需求的变更我能不能很容易的掌控?如果发现自己搞不定,还是求助一下别人比较好。

如果我对某一个知识点特别有兴趣,想去深入研究并且有时间,那我觉得自己造几个轮子也算是很不错的事情。譬如我前段时间想重新深入了解网络编程,虽然有libev这些好用的开源库,我也基于他们封装了很多东西,譬如tnettpush,但是我仍然自己写了一个libtnet,写完了,我才有“啊哈,原来是这样“这种豁然开朗的感觉。

写在后面

随着现在github这类网站的流行,找到高质量的第三方实现已经变成一件很容易的事情,作为一个程序员,不能固步自封,总认为我自己写的才是好的,有时候“自己动手,丰衣足食”这种想法反而会累死自己。

今天刚好看到了一篇文章一位码农的几点思考,里面的观点我很赞同,与大家共勉。

程序员为什么热衷造轮子

“程序员为什么喜欢造轮子”,这是个老生常谈的话题,不过,里面还是有很多道道儿哈...
  • foruok
  • foruok
  • 2016-05-16 06:50:19
  • 19034

【专业造轮子】:一位大神的编程之路,让我大吃一惊!

vczh,本名陈梓瀚,因知乎的个人信息介绍上写有 “专业造轮子”,所以江湖人称 “轮子哥”。 vczh 大学时代就在微软实习,毕业后即加入微软。开始时是在微软上海,后来进入北京的微软亚洲研究院。...
  • qq_23100787
  • qq_23100787
  • 2016-05-04 22:20:13
  • 11938

浅谈源码--“造轮子”与“拆轮子”之间的关系

写在前面本文只是个人在工作生活中的一些小感悟,诸位大神看过,如有同感,且会心一笑即可,很高兴您能有相同的感受。如有其它意见,您尽可将其附于评论。很高想能与您一起探讨。此致一些体会个人感觉,在实际的生产...
  • u014440417
  • u014440417
  • 2016-08-11 23:05:22
  • 783

论要不要重复造轮子--新手当然要去造轮子

 在程序界有一句话很流行,不要重复造轮子。然而,这句话被滥用了。已经渐渐沦为程序员懒惰的借口。甚至因此而盲目指责那些勤奋的人。     大多数情况下初学者很难分清楚自己是不是在重复造轮子。当我...
  • u012028953
  • u012028953
  • 2014-12-18 20:04:00
  • 568

推荐一个vue, angular的组件分享网站--轮子工厂

造轮子还是找轮子,似乎一直是开发过程中总会碰到的问题。以学习为目的的造轮子还是好的,不仅是一个不错的学习过程,而且也可以和已有的组件比较一下,对技术理解也会提高。但是在实际的项目,还是建议尽量寻找优秀...
  • LvYifan_ashleyaa
  • LvYifan_ashleyaa
  • 2017-07-08 21:17:18
  • 1374

[造轮子]Android多线程下载

初以为,下载是个极其简单的东西,想试一下。因为知道某些app的下载失败率很高,所以搞了个小聪明讨个巧,分块下载,每块一个md5,如果分块校验失败,则对本块重新下载(貌似古时候的FlashGet就是这么...
  • pouloghost
  • pouloghost
  • 2016-06-13 17:40:51
  • 447

谈谈自己造轮子

自己造还是不造轮子,这是一个哲学问题吗?
  • siddontang
  • siddontang
  • 2014-04-30 08:33:37
  • 5049

不要重复造轮子

 “不要重复造轮子 Stop Trying to Reinvent the Wheel”, 可能是每个程序员入行被告知的第一条准则。我自己也会对新人反复灌输这个概念,写程序其实是一个最能“偷懒”...
  • u012687934
  • u012687934
  • 2014-02-04 21:36:08
  • 1206

Python 重复造轮子/造轮子找模子,你都应该熟读该文

Chardet,字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama,主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable,主要用于在终端或浏览器端构...
  • szw_yx
  • szw_yx
  • 2018-01-07 18:31:46
  • 449

高性能C++网络库libtnet实现:IOLoop

libtnet采用的是prefork + event loop的架构方式,在最新的linux系统中,提供了timerfd,eventfd,signalfd,加上原先的socket,大部分功能都可以抽象...
  • siddontang
  • siddontang
  • 2013-12-05 23:10:57
  • 3617
收藏助手
不良信息举报
您举报文章:谈谈自己造轮子
举报原因:
原因补充:

(最多只允许输入30个字)