其实吧,自己造的轮子用起来特别安心。
首先,花费(运算量)太高。用别人的轮子不可避免地要接受别人的设计。你本来打算做个小马车摆在外面好看。结果拿来别人的轮子一看,又是防爆双轮胎,又是防弹钛合金,好是好,可是绝大多数功能用不上。但需要花的钱(运算量)却要几百几千倍,你说这种情况下你造不造一个自己的轮子?
其次,质控困难,别人的轮子也会有毛病(bug),而且一旦出问题就会完全失控。你没有那些奇形怪状的螺丝刀,连紧个螺丝都做不到。如果是第三方免费轮子,只能等新品出来替换。能不能把你的问题解决还不一定。如果是花钱买的轮子不免要跟供应商扯皮。很简单的小问题来来回回要撤几个星期。
再次,兼容问题,别人的轮子看着不错,有时候跑一跑就不转。回头一看跟你的轮轴不匹配。为了用别人的轮子,还要换自己的主轴。可是自己的主轴有时候却又是换不得的。
最后,难以扩容,比如改换一下轮子的尺寸。让轮子遇到冰就换成履带模式。别人的轮子你无法改变,所有功能都被限制死。
因此,只要是扎扎实实想要做大做强的公司,在时间资源允许的情况下,能自己造轮子就自己造轮子。与之相反,炒概念,赚快钱的公司,能用别人的轮子就用别人的轮子。
对于外行人来看,程序员的工作好像常常重复造轮子。其实,看似重复的每次造轮都有所创新,都有通用轮子达不到的需求。
因此,这种所谓程序员喜欢重复造轮子的说法其实跟“披萨就是把烧饼馅放在外面”一样,是外行对内行的误解。
我在之前的文章百行代码,千行测试里面曾写过:
不要重复发明轮子。
很多大牛推荐我们“造轮子”,但是造轮子的目的是为了学习,而不是使用,尤其不要用在生产环境。
造个轮子很简单,但是你非要把自己的轮子安在汽车上,开上路,那肯定是一个安全隐患。
有很多人会说,“既然自己可以写一个,为什么非要用别人的?” 还有人觉得,有些非常小的功能不需要使用别人的。
很多人还会借此吐槽 leftpad 模块,但是平心而论,你自己能徒手这一个没有 bug 且高性能的 leftpad 函数吗?
前几天我们项目组就遇到了一次,其实功能很简单,一个页面分享出去,并使用 url 携带参数。比如:
aaa.html?id=123456
看似很简单的一个需求,但是真正自己写一个却不简单。
1. 查找“=”字符,然后截取后面的?
2. split("="),然后去第二个
3. ……
不到 10 行代码就写完了。
第一次分享到微信是正常,把分享出去的页面再次转发分享,页面错误。
因为微信会在 URL 后面添加一些额外的参数,同样,不同的平台都会有不同形式的添加参数方式,有的加&
,有的加#
,不论加什么都会导致解析的失败。
归根结底是我们写的解析函数有 bug,我们重新造了一个有 bug 的轮子。
解决方式就是:npm i qs
麻雀虽小,五脏俱全。看看 github 源码,“百行代码,千行测试”。绝对比自己写的代码靠谱。这一百行代码很容易写出来,但是作者为了保证这一百行代码没有 bug 而写了几千行的测试代码。这样的库我们才用着安心。
我写这篇文章不是为了推荐这个 qs 库,而是告诉大家不要重复造轮子用在生产环境,平时大家多造轮子用来学习。