程序员为什么热衷于造轮子,升职加薪吗?

article/2025/9/30 19:48:06


作者:小傅哥
博客:https://bugstack.cn - 原创系列专题文章

沉淀、分享、成长,让自己和他人都能有所收获!😄

一、前言

哪个架构师没造过轮子?

你想过这样一件事吗?是先具备能力在安排职位,还是先安排职位在学习? 🤬什么?走后门,你出去!

就像我们上学考试、跆拳道考段、晋升答辩一样,都是先具备了可胜任上一阶段的能力,才给予相应的职位。所以,架构师造轮子从做程序员时候就开始了,只不过到了架构师阶段可以造出更好的轮子。

鉴于实际业务开发的紧急程度,不会允许你造轮子。但造轮子,几乎是每个程序员突破技术瓶颈的最佳方式。千万不要因为一句,不要重复造轮子的借口,给自己一个不学习的理由!

二、我造过的轮子

我可能是痴迷于造轮子!

了解小傅哥的粉丝可能都知道,我的第一份工作是写了两年的 C#,但为了不放下我写好的 Java,在工作之余就用 Java 语言把我能接触到到的项目,都用 Java 写了一遍,包括;串口打码机服务、中继器对接、PLC数据采集等等。

等到正式进入互联网后,像是为我打开了新的大门,这能接触到的知识太niao性了,盘它!来,看我造过的轮子

1. RPC 通信组件

  • 文章:手写RPC框架第三章《RPC中间件》
  • 源码:https://github.com/fuzhengwei/itstack-demo-rpc
  • 难度:⭐⭐⭐
  • 15年初进互联网,惊讶的发现原来两个工程之间还可以使用RPC通信,以前公司使用的还是http或者webservice,所以这部分知识给我带来了很大的冲击。为了能更明白的了解它,找到了一些git中的源码,像Dubbo、gRPC,进行学习。学着学着,就开始动手自己实现一次,实践的过程学到了大量的知识,包括;结合Spring开发中间件、自定义配置、主定义注解、切面拦截、Netty通信、编解码器、流量整形等等。这些知识也为我后续开发其他中间件,打下了一个很好的基础。

2. 编写JVM虚拟机

  • 文章:用Java实现一个JVM虚拟机
  • 源码:https://github.com/fuzhengwei/itstack-demo-jvm
  • 难度:⭐⭐⭐⭐⭐
  • 这是一个用不上的轮子,同时这么干可能有点虎🤔,整整写了一个月,写了几十万行代码,才能运行几个简单的HelloWorld。,因为我不想听别人吹着一些理论词忽悠了我的编码生涯,也不想看几本不能实操落地的书就感觉学会了。所以,我才愿意投入大量的时间进行实践,虽然我不能完整的编出一个可以用到生产使用的JVM,但我通过这样的学习,了解了JVM的基本功能;搜索和解析class、字节码指令集、运行时数据区、虚拟机栈、栈针、局部变量表、操作数栈、寄存器等,是如何一步步把Java代码跑起来的。

3. 基于SpringBoot的分布式任务中间件

  • 文章:开发基于SpringBoot的分布式任务中间件DcsSchedule
  • 源码:https://github.com/fuzhengwei/schedule-spring-boot-starter
  • 难度:⭐⭐⭐
  • 这是一个什么轮子呢?简单来说它这功能类似xxl-job,组件要解决的问题是把定时任务,可以分配到不同的机器上去执行,同时它是以 zookeeper 作为注册中心扩展为分布式任务调度系统。接入方式接单易用,统一控制启停、宕机灾备等。并且能自动检测;部署数量、任务总量、成功次数、失败次数、执行耗时等信息。

4. 服务治理中间件

  • 文章:服务治理中间件之统一白名单验证
  • 源码:https://github.com/fuzhengwei/door-spring-boot-starter
  • 难度:⭐⭐⭐
  • 服务治理是什么?其实服务治理包括的内容也比较多,例如;从部署层面、管理层面、应用层面、网关层面等等,而这里的服务治理说到的是应用层面,简单来说,例如你有很多个服务系统,每个服务的对外层都需要白名单,那怎么办呢?不太可能每一个系统都重复的开发类似的功能,这样也很难管理。所以我们希望把业务系统中,非业务逻辑的通用性核心功能抽离出来,开发成统一的业务组件,来帮助服务解耦,让业务系统更关心业务流程开发。那么这就是服务治理其中的一个作用。

5. Netty仿桌面版微信

  • 文章:Netty+JavaFx实战:仿桌面版微信聊天
  • 源码:https://github.com/fuzhengwei/NaiveChat
  • 难度:⭐⭐⭐⭐
  • 本项目是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信实现通信核心功能。

6. 还有很多造过的轮子

  1. 数据库分库分表路由中间件
  2. Redis缓存读写引擎中间件
  3. ES + Ibatis结合使用中间件
  4. 全链路业务流程监控

除了,这些造的轮子还有很多,其他的不一一列举了。当然我不只造轮子,还造各种小工具,甚至还包括js写的散列路由计算器。总之,我可能在造轮子的路上越走越远,是因为过于痴迷🧐!

三、造轮子升职加薪吗?

造轮子本身不一定升职加薪,如果你第一次造,也许会被扣薪。

如果是运用到业务系统中的造轮子,不同于CRUD,往往需要了解 Spring 或者 SpringBoot 部分源码,以及动态代理和反射等知识。并且在设计实现上也要考虑的非常全面,否则出了事故就不只是一个系统,而是所有使用你这个轮子的系统都需要随着你升级改造上线。所以,造轮子不一定升职加薪!

但,造轮子可以让个人的技术栈得到很全面的成长,也许还能让你在某个阶段突破现有的技术瓶颈。因为造轮子你需要学习以往别人的轮子、组件的源码、拓展的技术栈以及更加全面的思考🤔。

最后是你造的轮子要能经受起验证,也要能适应业务需求进行拓展,并且这可能还是一份除了你日常业务系统开发外的其他工作。是否能经受起这份考验,也就决定了你能收获多少知识。而这份别人没掌握的知识才是你升值加薪的筹码!也是你能留下的本事和走出去的能力!

四、有人反对你造轮子?

不要重复造轮子、不要重复造轮子、不要重复造轮子

很多时候你是否听到这句话,而把自己内心的小火苗浇灭。其实这句话从某些时候来说不一定是错的,因为一个项目的开发到上线,需要对时间成本、项目质量、可靠度进行评估,谁也不敢贸然使用一个没有验证过的新功能,也不敢让你拿着练手。

当然,有时候我们造的轮子不一定是重复的,可能是创新的。但这个轮子的阶段,不应该是新项目启动时候开始,最起码应该是你在这之前就写过,已经验证过,已经投入生产过,才敢让你造了用。对于当前这次开发,如果非常紧急,那么最好的是求稳,并在这个项目里吸收更多的经验。并总结如果是用了你的轮子,那么这个轮子能支持多久,还需要扩展吗,会不会有问题。

这一切的学习、总结、应用,最终都是可以为你技术栈成长铺路的。不要因别人反对就放弃,也不要倔强的就非要怎样,而且游刃有余的成长和学习。有准备的人,总是会在必要的时候给力😎!

五、总结

  • 没有一句话能评论造轮子的错和对,即使是已经有了的轮子,那么你以学习为目的呢?你以可以拿出更优的方案为导向呢?所以,想造就造吧,只不过千万要验证在使用!
  • 造轮子能我们学到很多业务系统开发以外的知识,这些知识能拓展你的技术栈,扫描掉一些技术盲区,为你以后的晋升答辩或跳槽面试铺好够到更高薪资的垫脚石。
  • 想造轮子要学会读源码、学会技术迁移、学习数据结构、学习算法、学习设计模式,一定是先提升技术视野了,才能让自己有造轮子的想法,而不是硬造。

六、系列推荐

  • Mybatis接口没有实现类为什么可以执行增删改查
  • Spring定时任务Quartz执行全过程源码解读
  • 基于jdbc实现一个Demo版的Mybatis
  • 咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?
  • 手写mybait-spring核心功能

http://chatgpt.dhexx.cn/article/XjsgiNao.shtml

相关文章

造轮子,实现一个spring类似框架

目录 Yao框架项目地址使用示例导入maven包定义一个启动类定义一个Controller放入容器中定义一个实体类定义一个Mapper接口定义一个websocket的controller配置文件 Xioc 小型的依赖注入框架,目前支持的注解详解目前支持功能列表如下缺陷待完善 xweb 整合netty支持web…

个人网站开发之前端首次造轮子_篇一【前端大作业】【gowork.fit】

文章目录 一,前言二,开发目的三,页面样式四,顶部导航栏五,最后 一,前言 最近有一个需求:我采用了纯原生前端,没有使用框架,从0到1达到了百分百原创代码,作为…

程序员该造轮子吗,造轮子能升职加薪吗?

持续坚持原创输出,点击蓝字关注我吧 作者:小傅哥博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!???? 目录 一、前言二、我造过的轮子1. RPC 通信组件2. 编写JVM虚拟机3. 基于SpringBoot的分…

Android学习路线_工具篇(五)自己造轮子

工欲善其事,必先利其器。工具,是人类进化的一大助力,善于制造与使用工具,可以加快我们学习的速度。各种类型的工具和使用我们已经了解得差不多了,日常开发过程中也会遇到一些问题没有现成的工具可以解决,那…

避免重复造轮子,Java 程序员必备

优秀且经验丰富的 Java 开发人员的特点之一是对 API 的广泛了解,包括 JDK 和第三方库。如何使用现有的 API 进行开发,而不是为常见的东西编写新的代码。是提升开发效率必选之路。 一般来说,我会为日常项目提供有用的库,包括 Log4…

我们为什么要造轮子

程序员都喜欢造轮子,我身边的程序员,无论他们用什么语言,java、android、ios、python、go, 甚至是js,都热衷于造轮子。其实用go程序员造轮子我倒是能理解,毕竟很多java转go的朋友经常 吐槽:怎么这个没有&am…

程序员为什么热衷造轮子

搜索一下“造轮子”或者“程序员为什么喜欢造轮子”,会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年。不过还是有再谈的必要。 “造轮子”的含义: 明知道你做的不可能比前辈做得更好&#xff0c…

「轮子」是什么东西?创造它有什么意义?

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

Java获取当前日期的前后一天/一周/一月/一年

Date today new Date(); //当前时间 Calendar calendar Calendar.getInstance(); //得到日历 calendar.setTime(today);//把当前时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天 Date yesterday calendar.getTime(); //得到前一天的时间 calend…

java获取当前的年月日日期

import java.util.Calendar; import java.util.Date;public class Main {public static void main(String[] args) {Calendar cal Calendar.getInstance();Date datenew Date();//现在的日期cal.setTime(date);Integer yearcal.get(Calendar.YEAR);//获取年Integer month cal…

java获取当前日期(JAVA获取当前日期的前三天工作日)

在java里怎么取离当前日期最近的一个星期天??知道getNow import java。util。Calendar; import java。util。Date; public class Test { public static void main(String args[]){ //获得当前日期 Date date new Date(); Calendar cal tInstance…

Java 获取当前日期并且实现日期的格式化

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览。 今天做一个需求是 实现当前事件减去100天并且格式化为下图所示 实现代码如下: String time "";if(S…

Java获取当前日期的前一天

Java获取当前日期的前一天 //获取当前日期Date date new Date();//格式转换SimpleDateFormat f new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar Calendar.getInstance();//设置当前时间calendar.setTime(date);//在当前时间基础上减一年calendar…

Java获取当前时间的方法

1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是不受时区的影响,但是得到结果是时间戳的格式,如: 1543105352845 可以通过代码将时间戳转化为我们可以理解的格式&…

Java获取当前日期和时间

文章目录 1、 System.currentTimeMillis()2、 Java.util.Date3、 Calendar API4、 Date/Time API4.1 LocalDate4.2 LocalTime4.3 LocalDateTime4.4 ZonedDateTime 5、 总结 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取&#…

Java如何获取当前日期和时间?

本文将为您介绍 Java 中关于日期和时间获取的方法,以及介绍 Java 8 中获取日期和时间的全新API。 1、 System.currentTimeMillis() 获取标准时间可以使用 System.currentTimeMillis() 方法来获取,此方法优势是不受时区的影响,但是得到结果是…

孪生网络 Siamese Network

文章目录 孪生网络的发展孪生网络定义功能与用途损失函数 孪生网络的发展 孪生网络又称为连体网络,网络中的连体是通过共享权值来实现。孪生网络最早是出现在1993年的论文《Signature Verification using a ‘Siamese’ Time Delay Neural Network》用于美国支票上…

论文笔记:孪生神经网络(Siamese Network)

Siamese Network 原文:《Learning a Similarity Metric Discriminatively, with Application to Face Verification》 1、四个问题 要解决什么问题? 用于解决类别很多(或者说不确定),然而训练样本的类别数较少的分类…

SiameseFC超详解

SiameseFC 前言论文来源参考文章 论文原理解读首先要知道什么是SOT?(Siamese要做什么)SiameseFC要解决什么问题?SiameseFC用了什么方法解决?SiameseFC网络效果如何?SiameseFC基本框架结构SiameseFC网络结构…

Siamese网络代码详解 训练自定义数据集 模型推理

开门见山,Siamese网络结构如下所示: 主干网络:VGG16。整个VGG16的网络结构比较简单,如下图所示,主要分为5个部分: stage1为 2次33卷积+1次22最大池化,输出特征为64通道;stage2为 2次33卷积+1次22最大池化,输出特征为128通道;stage1为 3次33卷积+1次22最大池化,输出…