分享一波:程序员赚外快-必看的巅峰干货

关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子。就个人技术而言,强烈建议造轮子!

程序员圈子里流行这么一句话:“不要重复造轮子”。它的原文是:“Stop Trying to Reinvent the Wheel”,意思是“不要重复发明轮子”。

首先我们要搞清楚两个概念 —— 造轮子和发明轮子。轮子是在距今6800年前被发明出来,在此之前我们的祖先可能已经就在尝试对轮子的创造。从三角形、四边形、五边形等等,一直到最后的圆形轮子,每种轮子都不一样,这叫做发明轮子。

而当轮子的形状确定后,再发明其它形状的轮子就没有意义了,改进轮子才是重点,于是就有了石轮、木轮、空心木轮、气轮的转变。而现在,气轮也有多种款式,适用于不同的场景,这叫做造轮子。

可以看出,发明轮子已经变得毫无意义,但是造轮子依然是人们所关注的焦点。

jdbc操作数据库过于繁琐,所以有了hibernate。hibernate过于笨重,因此有了轻量级的mybatis。mybatis 手写sql比较麻烦,因此衍生出了通用Mapper、mybatisplus等框架,struts2浪费资源,所以有了单例的SpringMVC。。。这就是重复造轮子的过程,了解现有轮子的原理和利弊,加以改进,这并不是一个无意义的过程。

造轮子是一种学习方式,造轮子前需要对现有的轮子理解透彻,我相信mybatisplus的作者一定熟读了mybatis的源码,这样才能把自己的轮子造的好,这是自我能力提高的表现,同时可以增加自己的知名度。有的人工作了五六年依然只会crud,有的人已经靠造轮子成了大V。有的人依然沉溺于旧技术而排斥新技术,有的人已经靠造轮子写了书。有的人在小公司使用SSM写完了一生的项目,有的人靠造轮子已经被大公司挖走。。

造轮子是学习技术的极好途径,当你要造一个轮子时,必定要去阅读类似的源码。初步可能寸步难行,而当你攻破了一个、两个、三个关卡之后不知不觉的就理解了他的架构方式,你会发现高手之所以是高手,代码可读性真的高。有些的代码读起来很享受,而有些人的代码读起来让人想死。而当你理解了框架源码后,自己的技术也就有了质的飞跃。

在阅读了源码之后,不知不觉中你的架构水平、代码规范、设计思想已经不知不觉的养成了,而不去尝试造轮子的话比如下面两个问题就可能有人答不上来。

接口和抽象类的使用场景是什么?
jdk8为接口提供了default关键字,接口方法也能拥有具体实现,那么接口是否可以替代抽象类?

而一个熟读了源码并尝试造轮子的人是不会有这种疑问的。

此外,对于社招而言,需要外练筋骨皮、内练一口气。造轮子就是外练的过程。通过自己去阅读轮子、造轮子,将心得分享到各个博客、论坛,或者是将自己造的轮子开源到github,以此来增加自己在行业里的名气。诸如科大讯飞之类卡学历的公司不少,所谓学历就是指学校的名气,学校的名气间接地反映了你个人的实力,而你个人的名气事实上远远比学校名气要有用。当你个人在行业内有了一定的知名度,什么学历不够、工作年限短、项目经验少都不再会影响到你,就等着猎头挖你吧。如果在面试的时候面试官也知道你,那绝对是必过的。

分布式事务这块,三种(也可以说是四种)模式已经定型,txlcn、seata、ShardingSophia等分布式事务框架层出不穷;分库分表这块也有mycat和sharding jdbc两大阵营;而至于像ruoyi、jeecg等敏捷开发框架亦或是gitea、gogs这样的git仓库那就是群魔乱舞。这是典型的重复造轮子的过程,而这些技术也并没有因为有了前者而导致后者热度上不去,因为它们各有所长。我相信这些轮子的作者小日子过得一定不错。

造轮子就像学习一样需要有个过程,不要想着自己写个框架就指定火(这样的人我见过,真的,写了个mybatisplugs就大骂mybatisplus各种缺点,结果自己的框架存在严重的sql注入问题,甚至被我爆出了数据库账号密码。。)。我们总看到谁谁谁多么厉害,但是人家背后付出的努力是你看不到的。

那么如何造轮子呢?

首先,看源码。想要拥有造轮子的能力至少你得熟悉别人的轮子,源码的阅读是不可缺少的。源码并不是那么的高高在上,可以先从HashMap、HashTable、ConcurrentHashMap、Vector、ArrayList等集合框架的源码入手,读懂了之后尝试着手写,这些东西事实上读懂一个其他的都是分分钟的事情。像Hashmap实现原理这个问题可以说90%以上的公司都会问,而如果只靠背的话很容易就忘了,自己确实阅读过源码并且手动实现过那就可以记住一辈子。

接着,封装工具类。所谓框架只是个概念,比如早期的JQuery和Bootstrap就称为框架,而现在只能称之为库。而前段中库和框架的关系就类似于java中工具类和框架的关系。封装工具类就是造轮子的基础,或者说封装工具类就是在造轮子。在对源码熟悉并且代码规范和思想有所了解之后,就可以自己去封装工具类了,这里推荐两个工具类:StringUtils和ReflectionUtils,当然后者在网上可能搜不到,因为这是我自己造的轮子。前者是对lang3的StringUTils进行增强,如trim方法不能去除特殊字符的空白符,StringUtils没有提供脱敏方法,没有中文钱数转英文方法等等,这就是这个轮子的缺陷,那么就需要去完善它。而后者就是常用的反射框架,通过对此的封装,能加深对反射的理解,而反射则是一切框架的基础。

工具类封装的多了,渐渐地就开始由小到大,那么你就可以开始阅读框架源码了,这里建议从mybatis开始,这是最贴近我们的一套框架,通过阅读mybatis框架的源码,加深对其的理解,为其写中文注释等等。最后通过mybatis的插件机制自己写一个分页插件。这是重复造轮子的过程,但是它并不是没有意义。通过一个分页插件,就能加深对MappedStatement、Executor、ResultSetHandler等等等的理解,这对后期自己完全手写mybatis是极有帮助的。

最后需要提到的是,上面的那些过程一定不要忘记发博客。上面仅仅是通过重复造轮子去提高自己的技术水平,而发博客、开源到github则是提高自己的名气。事实上写博客也是将自己的知识点向外输出的过程,只有向外输出了,才能记得更深刻,这也不失为一种学习方法。

最后需要说的是,重复造轮子并不是不可取,相反我非常建议多造造轮子,这是对自己技术的磨练,也是更深层次的学习。

*************************************优雅的分割线 **********************************

分享一波:程序员赚外快-必看的巅峰干货

如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程

请关注微信公众号:HB荷包

一个能让你学习技术和赚钱方法的公众号,持续更新

程序员到底要不要重复造轮子?相关推荐

  1. 到底是否应该重复造轮子

    引言 之所以谈起这个话题,是因为和新公司同事的一次交流.他是LZ当时二面的面试官(以下简称CZ),看过LZ的github,因此知道LZ正在尝试写一个redis的Java客户端.在交流的过程中,CZ给L ...

  2. 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...

    前言: 曹丕在<典论·论文>中说到,"文人相轻,自古而然".中国自古就有文人相轻的传统,文人相轻真没有什么要紧的,就像是小夫妻似的斗斗气拌拌嘴,然后还可以理直气壮地拿稿 ...

  3. 程序员到底为什么要掌握数据结构与算法?

    周末了,闲聊几句. 当代程序员,也就是我们,其实是非常幸运的,为什么?因为前人,也就是那些大牛已经为你铺好路了. 大牛铺路导致的后果就是整个计算机系统像这个汉堡包一样是分层的: 越是上层越抽象,用起来 ...

  4. 不再重复造轮子,AI 给你推荐更好的代码,还没bug

    2020-09-18 14:47 导语:还在抠bug抠到怀疑人生? 作者 | 青 暮 编辑 | 丛 末 程序员的的代码大部分都不是如同写书法那般一挥而就,而需要反复地抠bug,抠到怀疑人生. 剑桥大学 ...

  5. 还在重复造轮子?Java开发人员必知必会的20种常用类库和API

    介绍 一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车.<Effective Java>的作者Joshua Bloch曾经说过:"建议使用现有的API来开发,而不 ...

  6. 7个实用的Python自动化代码,别再重复造轮子了!

    关于Python有一句名言:不要重复造轮子. 但是问题有三个: 1.你不知道已经有哪些轮子已经造好了,哪个适合你用.有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子. 2.确实没重复 ...

  7. 重复造轮子,对此你的看法

    关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子.就个人技术而言,强烈建议造轮子! 程序员圈子里流行这么一句话:"不要重复造轮子".它的原文是:"Stop ...

  8. 不要重复造轮子 Stop Trying to Reinvent the Wheel

    "Stop Trying to Reinvent the Wheel(不要重复造轮子 )", 可能是每个程序员入行被告知的第一条准则.在公司里面,我也会对团队里面每个新进的成员反复 ...

  9. 35岁就失业?程序员到底该如何打破成长魔咒?

    作为一名程序员,大家都会为自己未来的职业发展焦虑. 一方面是因为IT是知识密集型的行业. 知识体系复杂且知识更新速度非常快,"一日不学就会落后". 另外一方面,IT又是劳动密集型的 ...

最新文章

  1. WCF 动态调用(1)
  2. 支持向量机的近邻理解:图像二分类为例(2)
  3. PRDICQR and PRD01QR
  4. 移动项目工作笔记0002---使用Weex开发移动端应用
  5. [原创]Firefox扩展
  6. mysql数据类型强转
  7. linux ppsspp速度,PPSSPP模拟器详细使用技巧
  8. sublime在wamp下配置php文件,配置WAMP环境下的sublime和PHPdesigner
  9. html中%3ch3%3e有颜色吗,typo.html
  10. 《数字图像处理》第三章学习总结感悟1:灰度变换与空间滤波概念及常用灰度变换方法介绍
  11. 【推荐】万物兴歇——衰老与寿命的演化
  12. vue导入音乐_【vlog制作】不经电脑,如何在VUE中导入自定义音乐
  13. 十六款优秀任务管理软件,哪款适合您呢?
  14. 电视升级鸿蒙系统,网友升级了鸿蒙系统,各项体验都很不错,终于有了自己的系统...
  15. 函数的返回值返回概念
  16. ZZNUOJ(18.08.07)
  17. 安川服务器报b33怎么维修,YASKAWA安川伺服报警A10 A41 A32 AC9 F50 b33没显示等维修
  18. ResNet学习介绍
  19. Unity3D中的SendMessage使用(消息传递的三种方法)
  20. STM32F1与STM32CubeIDE编程实例-BMP180气压温度传感器驱动

热门文章

  1. 模拟灰度传感器循迹的程序_PLC编程,实例讲解西门子PLC模拟量编程
  2. mysql 全局不重复_php uniqid() 通过MYSQL实现全局不重复的唯一ID
  3. css文件插入背景音乐,h5页面添加背景音乐
  4. 看了就知道为什么别人C语言学习效率那么高了
  5. poj 2528 Mayor's posters(线段树+离散化)
  6. C++ ACM模式输入输出
  7. 用计算机模拟地球诞生,计算机模拟显示早期金星或像地球一样宜居
  8. dj打碟怎么学_学DJ要不要去培训学校?
  9. html中一张a4是多少pt,CSS设置A4纸张尺寸
  10. 获取http地址如何从上面抓取图片_用 Python 自动抓取妹子图