程序员所说的「轮子」是什么东西?创造它有什么意义?

貌似是库,如果是的话,另外多问一句为什么叫它「轮子」?出处哪里?
关注者
2,208
被浏览
794,587

37 个回答

显然,车轮子是圆形的,这是大家公认的,最合适的形状。而你非要发明另一种形状的轮子,这种行为就叫「重复发明轮子(Reinventing the wheel)」,即「造轮子」—— 明知道你做的不可能比前辈做得更好,却仍然坚持要做。

放到编程中,就是说业界已经有公认的软件或者库了,你明知道自己不可能比它做得更好,却还坚持要做。作为练习,造轮子可以增加自己的经验,很多事情看起来简单,但只有自己动手,才会发现其中的难点。

当然实际开发中也有很多情况不得不造轮子,比如希望做到「自主知识产权」、刷 KPI 之类的;或者造轮子的人真的觉得自己开发的版本有更强的功能、更好的性能也说不定呢。

程序员圈经常流行的一句话:“不要重复造轮子”。在计算机领域,我们将封装好的组件、库,叫做轮子。因为它可以拿来直接用,直接塞进我们的项目中,就能实现对应的功能。

有些同学会问,人家都已经做好了,你再来重新弄一遍,有什么意义?这不是在浪费时间吗。

殊不知,造轮子是一种学习方式,能快速进步,造得好,是自己超强能力的表现,同时能增加自己的知名度,有些人靠造轮子成了知乎大V,有些人靠造轮子写了书,有些靠造轮子被大公司挖人。

站在公司角度,是不是要造轮子有很多原因。站在个人技术角度,强烈建议大家造轮子,它能给你想不到东西。

这篇文章,站在技术角度来分析,轮子是什么,造轮子能给我们带来什么,我们要如何造轮子,希望能帮到大家,记得帮我点赞哦。

目录:

  • 发明轮子与造轮子的区别
  • 造轮子能得到什么
  • 造轮子的不同阶段、
  • 在工作中,要尝试造轮子吗?

一、发明轮子与造轮子的区别

现在我们都知道,轮子应该是圆的,最省力。而当我们的祖先,不知道什么形状都省力的情况下,就可以会发明出三角轮、四边轮、五边轮、圆形轮等等。每种轮子形状都不一样,这叫发明轮子。

而当大家都知道圆形的轮子是最好的形状以后,再发明其它形状的轮子就没什么意义了。而此时,如何改进现有的圆形轮子,才是最重要的。

上图中,同样是圆形轮子,但从石头轮到木头轮,再到空心木轮,再到气轮的演变过程,使圆形轮子越来越省力。

所以,这就是发明轮子和造轮子的区别,发明轮子是完全不考虑前人的基础,从零开始。而造轮子,其实是改进轮子的过程,在前人的基础上,能越来越好。

流行在程序圈的名句:“不要重复造轮子”,其它它的英文原原文是““Stop Trying to Reinvent the Wheel”。”真正的意义是,不要重复发明轮子。

所以,这也就是我们造轮子指明了方向,我们需要了解之前轮子的原理和利弊,加以改进,使它更好。而不是完全从零开始,自己重新弄。

二、造轮子能得到什么

1、学习技术的极好途径

我刚开始学习自定义控件时,自己根本不知道如何下手,就到github上搜别人写好的很漂亮的控件。怎么搜,我们等下会讲。

一次性找很多,一个个下载源码来看,找那些符合当前自己水平的控件,分析它的实现原理,找到哪些知识我不会,就去学这方面的知识。等这些都学会了,自己再跟着实现一遍,甚至还能发现它的一些bug,并能给它修复。

当你学了一个、两个、三个组件以后,就会发现,很多自定义控件所用到的知识都差不多,到现在,虽然我已经出了两本自定义控件的书了,但我仍经常到github上找找漂亮的自定义控件效果源码来看。总会发现些不会的知识亟待补充。

github的一个个开源组件,为我们提供了丰富的学习资源,而且别人的代码能上传上去,获取一些star,恰恰说明了人家代码写好的,在分析人家代码实现原理的过程中,不知不觉的就理解了他的代码架构方式,当你读了几个组件源码,你会发现,高手之所以是高手,代码可读性真的很高,有些人的代码读起来很享受,而有些人的代码读起来很想死。

而正是在分析别人代码的过程中,我们的架构水平和各种规范,也不知不觉地养成了,比我们自己沉浸在自己的舒适圈里,自认为自己很牛逼,毫无对比,更能清楚认识自己的水平。

向别人学习,不仅是一种态度,更是一向提升自己的方式。

2、知名度

之前写过一篇文章《启舰:有哪些让程序员受益终生的建议》,知乎上快破千赞了,强烈建议大家看看,写程序这么多年,全部经验所得。

其中提到,对于社招同学而言,需要外练名气,内聚实力。而造轮子就是外练名气的一种方式。在《启舰:有哪些让程序员受益终生的建议》这篇文章火了以后,很多同学问我,有关造轮子的各种问题,所以,我决定专门开篇讲一讲轮子的相关内容,就是现在的这篇文章了。

名气有什么用?那可以说是相当有用了,之前我写过一篇文章《启舰:对计算机专业来说学历真的重要吗?》,详细论述了,学历对于计算机专业的重要性。

但,如果你在行业内有一定的知名度,什么学历不好、什么工作年限不够、其它的各种影响都不再是影响了,你就等着被猎头挖吧;在招聘时,如果面试官也知道你,那绝对是必过的存在。

轮子我没造过,但我是写书、写博客的受益者,在我面试VIVO时,表现的并不好,因为我创业一年,Android知识从来没复习过,很多知识都遗忘了,还没来得及复习,就让我去面试了。

他们原以为,我是一个特别厉害的人物,安排三个技术专家同时面,结果,一问三不知。不过,最后,还是给了我OFFER。因为他们公认我的能力是足够的,只是时间过了太久,有所遗忘,拾起来就好了。相反,如果没有这个行业影响力,那这次铁定是挂了。

Android领域的一个专家,任玉刚,在Github上提交了动态加载框架。是动态加载框架的先驱,后面很多框架都借鉴了它的原理和代码逻辑。

github上的star量达到了5.8k,如果你也能弄出来这么个组件,就等着别人来邀请出书、做讲座、挖人吧。

三、造轮子的不同阶段

造轮子像学习一样,是有个渐进的过程的。不要想着,自己弄出来一个组件,就指定火,好大喜功,一步登天,那是不可能的。

VIVO有个名言,凡事都有因果,我们只管埋头种因,到收获的季节自然喜迎丰收!

我们老看到,人家谁谁谁,怎么怎么样,多么多么厉害。其实,人家的努力和付出,你是看不到的。大家都是人,不是神。你所有看到的都是假相,他们背后的努力,你是看不到的。

第一阶段:学习为主、查漏补缺

先到github,根据你喜欢的组件的关键字去找对应的组件,比如你搜索“自定义控件”,就会出来各种语言的包含自定义控件的组件列表,当你选中java语言时,就会筛选出,java语言下的所有自定义控件的组件列表。

一个个去看他们的效果,如果效果喜欢,就再下载下来源码读一读。看看人家是怎么实现的,怎么做的,用到哪些技术,不会的去学。

第一阶段,主要是以学习为主,先看人家是怎么做出来的,学习相关技术防出来一个。就这样,在你防个半年以后,会发现,在这个领域,你的知识已成系统,这时候,就可以尝试自己去写一个控件了。

当你发现有些知识不会的时候,看看下面我搜集的资料,很快学会即可。

。。。。。。。。


第二阶段:简单控件自已实现

在自己的知识形成体系以后,在看博客或文章时,经常会看到人家介绍一些组件,这时,就想如果自己实现,要如何实现。自己先尝试实现出来,把bug都解决。

然后,再去看人家的源码,在对比的过程中,就会发现,思路是不是一样,他实现的比你好还是比你的差,他里面涉及的一些知识,是不是有问题等等。

通过不段的磨练,这方面的知识基本上就达到活学活用了,可以进入下一步了。

第三阶段:分析复杂控件实现原理,提交Merge Request

在自己能实现一些简单控件的时候,这时候就需要找一些复杂的组件来拆解了,看人家的代码架构。学习架构的知识和实现原理,为自己实现复杂控件打下基础。

比如,我前段时间研究Lottie框架,Lottie是一个动画框架,通过将AE做出来的动画直接应用于代码中。

在了解了Lottie的原理后,发现Lottie在字体解析与绘制时存在bug,就改它的源码,修复bug,增加功能等等,以使这个框架能顺利应用到项目中。

这就是达到一定水平后的驾驭能力,当你对一个领域熟练以后,对于高端框架,完全能够帮它修复bug,拓展功能,更进一步地,你可以改变它的核心逻辑,以达到更进一步改进框架的能力。

第四阶段:实现自己的组件——实现真正的造轮子

当你在使用一个框架、组件时,发现它用着不爽,或者有自己的想法时,就可以尝试自己去改进一个出来。当然,最好的改进方式,还是先对市面的所有相似组件原理完全了解之后,在他们的基础上加以改进,效果会更好。

我虽然,将这个步骤放在最后,但造轮子却是随时都可以的,大家不必担心自己写的组件不够好,被人批评。等你真正写完,放到github上,你可能会发现,根本没人看……批评都不会有。

这跟写博客是一样的,刚开始的时候,博客质量不高,根本也是没人看,但只要坚持优化写法,总会有炉火纯青的那一天。

很多人,喜欢什么都准备好了才开始。去年,我写书的时候,有个朋友想做公众号,一直在想着准备素材、调研方向、看各种教程,以他的说法,他要全部准备好了,熟门熟路了才会开始。

而我则不同,我在开始任何一件事前,只会思考定方向,做哪方面的内容,一旦方向定了,我从不会考虑准备的好不好,就是开始做。遇到不会的,想办法解决就是。现在我的书已经写好了,粉丝也已经三万了,他还在准备当中。

我们不管做什么事都需要打基石,开始打基石最好的时间便是现在,如果现在不开始,也许往后也不会再开始了。

四、在工作中要尝试轮子吗?

工作中,如果时间允许,简单的组件,可以尝试自己写,复杂的组件,建议使用现成的。毕竟公司不是慈善机构,不可能因为一个组件让你写个二十来天,更何况,网上有现成的,拿来用即可。你自己排期,排个二十来天,自己也没办法钟解释吧。

这篇文章就到这里,希望大家都能有所收货。记得帮我点赞哦。

本人所有文章、回答都与版权保护平台有合作,著作权归启舰所有,未经授权,转载必究!