程序员到底要不要重复造轮子?

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

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

程序员圈子里流行这么一句话:“不要重复造轮子”。它的原文是:“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荷包
在这里插入图片描述
一个能让你学习技术和赚钱方法的公众号,持续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1582年日历怎么了_【知乎周边】知乎2020年日历开箱+测评

感谢 刘看山 刘看山福利社 知一声 这边知乎朋友赠送的礼物,这边拿到了新的一年2020年知乎的日历。随日历还赠送了一年的盐选会员体验卡,这个福利很特别哈。打开盒子,里面是厚厚的但是却不是很大的一个正方体。侧面写有“有问题的日历”日历内…

JDK8那些惊为天人的新特性

分享一波:程序员赚外快-必看的巅峰干货 介绍 随着java的发展,越来越多的企业开始使用 java8 版本。Java8 是自 java5之后最重要的版本,这个版本包含语言、编译器、库、工具、JVM等方面的十多个新特性。本次课程将着重学习其中的一些重点特性。 Jdk8新…

【数据结构和算法05】 红-黑树(转发)

2019独角兽企业重金招聘Python工程师标准>>> 【数据结构和算法05】 红-黑树(看完包懂~) 置顶 2016年04月13日 15:50:25 eson_15 阅读数:52681 标签: java数据结构算法红黑树 更多 个人分类: ● 结构算法---…

数据结构与算法——二叉树、堆、优先队列

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 七、树 7.1 树 7.1.1 树的定义 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活…

继牛津大学后,加大伯克利分校等多家美国高校终止与华为合作

文/AI财经社 唐煜编/嵇国华据 Nature News 报道,在美国相关部门的压力之下,加州大学伯克利分校(UC Berkeley)近日宣布不再与华为签署新的研究合作;德州大学奥斯丁分校也正在审查自身与华为的关系…

为什么varchar字段长度最好是2的n次方-1

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 计算机是二进制计算的,1 bytes 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到127。 而var…

Python之celery的简介与使用

celery的简介 celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能被并发地执行…

不使用比较运算符如何比较两个数的大小

分享一波:程序员赚外快-必看的巅峰干货 前言 今天在水群的过程中看到有位群员谈论到这个话题,是他找工作过程中某家公司的面试题(到底是哪家公司才会出这种没营养的题目刁难别人),有点兴趣,就开始写了。 开搞 想了一…

java占位符填充_Java使用freemark生成word

1、制作模板先用office word做一个模板word文档,${usrName}、${nowDate}占位符 可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式改变之后 在替换xml 格式改了后有些原本的字符会分开)2、用office word将模板word另存…

Java中如何使用非阻塞异步编程——CompletableFuture

分享一波:程序员赚外快-必看的巅峰干货 对于Node开发者来说,非阻塞异步编程是他们引以为傲的地方。而在JDK8中,也引入了非阻塞异步编程的概念。所谓非阻塞异步编程,就是一种不需要等待返回结果的多线程的回调方法的封装。使用非阻塞异步编程…

城市运行一网统管_【宣传活动】持续开展城市运行“一网统管”建设宣传活动...

为进一步推进本镇城市运行“一网统管”建设工作,提高城市治理能力和治理水平,提升社会各界的知晓度和参与度,激发职能部门人员、党员、群众参与“一网统管”工作的热情。9月10日,镇网格中心于福泉居委会议室开展“推进城市运行‘一…

Java如何只使用位运算实现加减乘除

分享一波:程序员赚外快-必看的巅峰干货 前言 接前面一篇博客,这又是某个公司的奇葩面试题(都说了到底是哪家公司才会出这种没营养的面试题)。不过吐槽归吐槽,这个题目还是有点学问的,比前面那个 不使用比较运算符如何…

pmc订单表格_复工了,读一则“如何提升订单准交率和生产效率”的真实故事

故事发生在中国南方小镇上一个做办公家具的公司……家具公司创建于1995年,是一家集研发、生产、销售、服务为一体的现代办公家具、酒店家具制造企业。主要产品有实木班台系列、会议台系列、职员桌系列、屏风系列、沙发系列、办公座椅、酒店家具系列。在省外还有两个…

GET和POST请求到底有什么区别?

分享一波:程序员赚外快-必看的巅峰干货 看到这个标题,想必大部分人都已经想关掉这篇博客了。先别急,你真的知道这两个的区别吗? 做过WEB开发的朋友可能很熟悉,看到这个问题能立马脱口而出二者的区别。 GET在浏览器回退时是无害的…

有赞电商云应用框架设计

背景 有赞是 SaaS 公司,向商家提供了全方位的软件服务,支撑商家进行采购、店铺、商品、营销、订单、物流等等管理服务。 在这个软件服务里,能够满足大部分的商家,为商家保驾护航。 但是很多大商家往往会有自己的特殊需求&#xff…

vivado 如何创建工程模式_基于Vivado的FPGA高性能开发研修班2019年8月30日上海举行...

一、课程介绍:从7系列FPGA开始,Xilinx提出了Vivado Design Suite设计软件,提供全新构建的SoC 增强型、以 IP 和系统为中心的下一代开发环境,以解决系统级集成和实现的生产力瓶颈。同时,Xilinx专门针对Vivado推出了Ultr…

程序员的自我修养——远离“外包思维”

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 在我们做开发的日子里,不免会进行跳槽,跳来跳去公司无非就分成两大类——互联网公司、外包公司。当然我们本次讨论的并…

英特尔为 Kubernetes 推出分布式深度学习平台:Nauta

2019独角兽企业重金招聘Python工程师标准>>> 随着人工智能的发展,深度学习的价值不断增长,但实现它可能是一个复杂耗时的过程。英特尔(Intel)正寻求通过其在 Kubernetes 进行分布式深度学习的新开源平台来改变这一状况,该深度学习…

pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam

来源:AINLPer微信公众号编辑: ShuYini校稿: ShuYini时间: 2019-8-16 引言很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比一下pytorch中常用的四种优化器。SGD、Momentum、RMSProp、Adam。随机梯度下降法(SGD&#…

python计算无穷级数求和常用公式_傅里叶变换(二) 从傅里叶级数到傅里叶变换...

在上一部分当中,得到了利用三角函数表示周期函数的方法,但是对于非周期函数就...凉了。所以有什么办法吗?没办法(划掉)。这时候我们就需要拿出来我们的黑科技——傅里叶变换。一、傅里叶级数的推广当然这东西肯定不是凭…