精华内容
下载资源
问答
  • 程序员圈经常流行一句话:“不要重复造轮子”。在计算机领域,我们将封装好组件、库,叫做轮子。因为它可以拿来直接用,直接塞进我们项目中,就...站在个人技术角度,强烈建议大家造轮子,它能给你想不到东西。这

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

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

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

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

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

    目录:

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

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

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

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

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

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

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

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

    二、造轮子能得到什么

    1、学习技术的极好途径

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

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

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

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

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

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

    三、造轮子的不同阶段

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    展开全文
  • 显然,车轮子是圆形,...放到编程中,就是说业界已经公认软件或者库了,你明知道自己不可能比它做得更好,却还坚持要做。作为练习,造轮子可以增加自己经验,很多事情看起来简单,但只有自己动手,才会发现...
    显然,车轮子是圆形的,这是大家公认的,最合适的形状。

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

    放到编程中,就是说业界已经有公认的软件或者库了,你明知道自己不可能比它做得更好,却还坚持要做。作为练习,造轮子可以增加自己的经验,很多事情看起来简单,但只有自己动手,才会发现其中的难点。当然实际开发中也有很多情况不得不造轮子,比如希望做到自主知识产权、刷 KPI 之类的;或者造轮子的人真的觉得自己开发的版本有更强的功能、更好的性能也说不定呢。

    此一词语的由来是因为轮子由人类所发明,且在各方面都带来许多便利。有人认为,既然轮子已被发明,而且在使用上没有什么缺陷,重新再发明一次轮子是没有意义的,只是浪费时间,分散研究者的资源,使其无法投入更有意义及价值的目标。
    不过在教导复杂概念时,“重造轮子”倒是个重要的方式。这种方式不是提供学生许多已知的事实及技术,然后就期待学生完美及快速的应用这些事实及技术。重造轮子的教学方式是提供新的材料,让学生自行完成其中重要的步骤,同时也理解此领域的相关事实及技术。
    有时一些工程设计看似只是像“重造轮子”一様,但其中确实有其价值,例如用来回避软件许可的不相容,或是回避一些第三方提供模组或是零件的技术限制。例如要在网页中嵌入一个用Javascript写成的快速排序法。快速排序的算法广为人知,而在且在C++或Java的通用函式库中已有此模组,但有些Javascript的实现不一定包括此算法。因此若一程式设计者希望可靠的在网页中应用快速排序,他必须“重造轮子”,也就是重新实现一次快速排序法。程式设计者也可以直接从其他网页上复制,但这就会带来版权及软件授权的问题,在此例中重造轮子可以提供了欠缺的机能,但又不会有版权问题。
    展开全文
  • 轮子的尊严

    千次阅读 2004-12-01 07:53:00
    经常听到人用轮子作的比喻,大意是说在软件行业里,不... 先来说说什么是轮子吧,轮子是每个车子上都必须的相同的基本的东西,所以被用来比喻成软件行业里的可重用的基本的算法和结构等,比如队列的算法,链表的算
            经常听到有人用轮子作的比喻,大意是说在软件行业里,不需要重新发明轮子。时间久了,这好象成为了一句行业内经典的话,只要是你作了别人作的事,就会有人来用这句话来笑话你。我对这句话很是反感,其实即使是轮子也是有它的型号和尊严的。
            先来说说什么是轮子吧,轮子是每个车子上都必须有的相同的基本的东西,所以被用来比喻成软件行业里的可重用的基本的算法和结构等,比如队列的算法,链表的算法,再比如高级一点的内存管理或磁盘管理等都可以,再比如更高级一点的操作系统,只要你原意这些都是轮子,它们都是可被重用的。
            轮子是有型号的,每个轮子虽说样子一样,但大小不同,适用不同的情况,用在不同的位置上。卡车的轮子比较大而耐力好,用来负重物;轿车的轮子比较小而速度快,用来灵活飞快的奔跑,它们可以随便的换位置吗?同样是软件的模块,虽然功能相同,但可能会因其内部的结构和算法不同,产生的效果也很不一样,可能就有的速度很快但很浪费内存,有的很节省内存但比较慢,对于不同的应用就要使用不同的算法,如果这个算法我们没有现成的代码(轮子),我们就应该重新作一套,我不明白这应该要被人笑吗?如果当年悟空的轮子是量身定作的,也就不会让唐憎左右为难了。
            有时候一个轮子可能很适和你的车子,但是不是我们就可以拿来重用呢?不是的,轮子也是有它的尊严的,随便用别人发明的轮子是要付出代价的,不说在现在的法律框架下不被允许,你使用别人的劳动成果而不尊重它的尊严,你这个聪明的人类还有没有一点自已的尊严,而且如果你不懂得尊重它,那别人也同样不会尊重你。你用这样的轮子造出来的车,只能被称之为破车,我是不敢用的,我怕有一天,车子的轮子坏掉的时候,没人会给我修理。
            最后让我们来看看是谁在发明着轮子,它们的境遇如何。现在被软件业搞行沸沸扬扬的.net和java,这应该算是两个大轮子了,很多人在为它们打架,争谁的更好,其实它们也只是轮子而已。x软在不断的发明着新式的先进的轮子,用它们占领着市场的主动性,牵着那些不想发明轮子的人和公司,不管功能如何合不合适,用人家的轮子就要听人家话,可不要对人家指手划脚的,要不没你什么好果子吃,而且如果人家看上你了,呵呵你就没跑,没轮子的汽车怎么跑。原来秘密就在于此,事情的真象是谁发明了轮子,谁就会掌握市场,就会赚大钱,真的赢家是那些发明轮子的,而那些没有发明轮子的只能跟着喝喝稀饭吧。
            我不知道是谁把轮子这个故事带到软件业和我们这个没有轮子的地方的,现在的问题变成了如果我们一天没有自己的轮子,我们就一天不会真正跑起来,就算跑在别人的轮子上也不会得到安生,那些发明轮子的会不断的来威胁你搔扰你,让你每天过着提头来见的生活。我们的软件业一天没有轮子,就不能说它是朝阳的,腾飞的,提头的日子就真的那么好过?
            我们,我们都是干什么吃的?轮子有它的尊严,我们的尊严在哪里?
    展开全文
  • 最近编写一个Log分析工具。分析工具基本完成以后,因为... 我要做的东西功能是否可以拆分。 拆分的功能是否是已经开源功能块。(先去调研) 动手开发。 经过上面的步骤,不仅可以避免重复造轮子,也让自己对于要

    最近编写一个Log分析工具。分析工具基本完成以后,因为分析工具执行不同的功能。想做成命令行的工作模式。所以,面临命令行参数的解析处理。我也不管三七二十一,直接动手开干,根据自己的想法思路开始造轮子。当时就没有想想是否已经有开源的组件,思想上没有转化。这是对我来说,经历这次开发最大的收获。

    再次开发新的功能,我要重新调整一下,需要拆分步骤:

    1. 我要做什么?
    2. 我要做的东西功能是否可以拆分。
    3. 拆分的功能是否是已经有开源功能块。(先去调研)
    4. 动手开发。

    经过上面的步骤,不仅可以避免重复造轮子,也让自己对于要开发的东西有更加清晰的架构。

    最后,也说一下我最后选择的开源组件。我在github上搜索到了多款开源命令行分析工具。

    最后有2款比较看好的

    • JCommander : 支持注解的配置方式(github上有1.5K的星)
    • jopt-simple : 虽然github的星少,但是看到使用的人很多。这个也是我最终选择的。

    我最终选择的是Jopt-simple,看了官方介绍,感觉它比较屌吧。

    Jopt-simple罗列了更多的cmd解析工具

    JOpt Simple is a Java library for parsing command line options, such as those you might pass to an invocation of javac.

    In the interest of striving for simplicity, as closely as possible JOpt Simple attempts to honor the command line option syntaxes of POSIX getopt() and GNU getopt_long(). It also aims to make option parser configuration and retrieval of options and their arguments simple and expressive, without being overly clever.

    Here are some libraries that perform the same duties as JOpt Simple:

    I hope you'll agree that JOpt Simple tops them all in ease of use and cleanliness of code (although I admire JewelCli quite a bit).

    I'd love to hear your constructive feedback, especially suggestions for improvements to the library or the site! If your project is using JOpt Simple, do let me know.

    下面附带上这个的官网和gradle地址:

    https://jopt-simple.github.io/jopt-simple/index.html

    // https://mvnrepository.com/artifact/net.sf.jopt-simple/jopt-simple
    compile group: 'net.sf.jopt-simple', name: 'jopt-simple', version: '6.0-alpha-3'

     

    展开全文
  • 轮子

    2018-06-26 10:34:35
    当然有的轮子是收费,自己支付不起……那也只好自己制造咯。轮子指组件,组件很多,如:日历,下拉框,弹窗等等。这些一般网上都现成例子,但是如果相应实力,还是推荐自己再做一遍。毕竟自己才是最...
  • “ 阅读本文大概需要 3 分钟...“轮子”这个东西我给过很多次解释,我个人认为,某个库和框架可能已经不能满足我们需求,我们可能需要在它基础上改造时候,我们需要去深入去了解它源码、设计逻辑,能够去改...
  • 后端的轮子(一)

    2016-07-06 16:53:08
    作为一个之前做底层的服务器后端人员,对造轮子这事还是比较吸引力的,虽然说现在几乎所有的东西成熟的开源实现,但是造轮子一种魅力,勾引着我们去创造自己的轮子,这个系列就叫轮子系列吧。 前言 首先,...
  • 先抛出结论:微信小程序就是一个类似RN的轮子,可以快速开发,一定适用场景,但是也其局限性。 本文针对微信小程序示例代码进行分析,告诉大家: 微信小程序到底提供了什么? 开发微信小程序方便么...
  • 手撸分布式锁这篇文章本来是准备写下 Mysql 查询左匹配问题,但是还没研究出来。那就先写下最近在鼓捣一个东西,使用 Redis 实现可重入分布锁。看到这里,有的朋友可能会提出来使用 ...
  • 从0到1美国句谚语叫做“不要重新发明轮子”,大概的意思就是说,别人已经做出来的东西,你就不要再花时间下去重新再做一遍了。可能很多有意创业的朋友看了这句话后,再结合从Peter Thiel的《从0到1》中获得的...
  • yii2 登录注册 轮子

    2017-04-12 18:38:00
    //利用到了yii2 框架之中的验证规则 进行判定而已 也不是很高深的东西 但是 使用框架自身的轮子安全性能的隐患 1注册reg controller 中 我都以admin 为例子 public function actionAdd() { $model = ...
  • 轮子还是要重复发明

    千次阅读 2016-05-26 15:16:39
    “不要重复发明轮子”,很多开发者在新入行不久,就经常会被这样叮嘱:这个世界上程序员已经太多,遇到问题已经够多,而解决方案层出不穷。你走过路,跳下坑,已经无数先驱在你之前路过,跳过。所以在做...
  • 这里安卓源码大全,内含几千个demo例子,几乎覆盖所有市面上UI设计功能点需求,保存一份,就是求职工作多一份报障。 android实例源码,很好很强大… 丰富页面展示效果类别: 轮子例子大全: 作品...
  • 在做公司官网的过程中要做一个简单的轮播,不想用插件,自己写了。写完之后顺便看了看github上别人的轮播插件源码,发现原来造轮子也并不难,只要用面向...还是很开心的,原来觉得很高大上的东西,自己做一做发现也并
  • 希望最后每个人都自己拿得出手的东西。 哲学 综上所诉,我们轮子计划的哲学应该是这样子的。 轮子要足够小,至少分享起来要简单 轮子要足够独立,仅仅描述自己的那部分思想就好 轮子不脱离实际,从demo拆分出轮子...
  • 看到这里,有的朋友可能会提出来使用 redisson 不香吗,为什么还要自己实现? 哎,redisson 真很香,但是现有项目中没办法使用,只好自己手撸一个可重入分布式锁了。 虽然用不了 redisson,但是我可以研究其源码...
  • 轮子是一个永远都说不完话题,总一帮子人在哪里叫嚷:“不要重复发明轮子”,然而事情总是其对立一面,还有另外一帮子人在那里不停发明轮子。好像永远都没有一个定论来标明是否还需要另外一个轮子。 ...
  • 关于国内外专家学者经常谈到Spring中有所涉及的一些“轮子”现象,我曾经在《Spring中的Rod Johnson 与“轮子理论” 》一文中系统地发表过自己观点,当然思想及理论的东西很多时候跟文化、习惯、思维、信仰等很多非...
  • 今天这一篇没想到会这么长,后面一段是写网络模型的,和缓存本身的关系不大,只是写到那里就想到了这个问题,多写了一些,那一段是我自己的理解,肯定不对的地方,欢迎...缓存是后端使用得最多的东西了,因为性...
  • 本篇趟个雷,把数据库纳入到轮子中了,前面说到了数据库其实不算轮子,也说到了其实我写不出来数据库,这里所说的数据库严格来说是关系型数据库,他比轮子复杂多了,是一个和操作系统差不多复杂度的东西,所以才能...
  • 原来一个TinyXML的好东西:www.sourceforge.net/projects/tinyxml 其文档:...相当强大,而且也是很好用的。XML的应用太广泛了,它是不得不学习的东西。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 705
精华内容 282
关键字:

有轮子的东西