16

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

 3 years ago
source link: https://segmentfault.com/a/1190000024525929
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

juE7J3Z.jpg!mobile

作者:小傅哥

博客: https://bugstack.cn - 原创系列专题文章

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

一、前言

哪个架构师没造过轮子?

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

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

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

二、我造过的轮子

我可能是痴迷于造轮子!

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

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

1. RPC 通信组件

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

2. 编写JVM虚拟机

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

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

2YRrQ3j.png!mobile

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

4. 服务治理中间件

  • 文章: 服务治理中间件之统一白名单验证 -%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86%E4%B8%AD%E9%97%B4%E4%BB%B6%E4%B9%8B%E7%BB%9F%E4%B8%80%E7%99%BD%E5%90%8D%E5%8D%95%E9%AA%8C%E8%AF%81.html)
  • 源码: https://github.com/fuzhengwei/door-spring-boot-starter
  • 难度::star::star::star:
  • 服务治理是什么?其实服务治理包括的内容也比较多,例如;从部署层面、管理层面、应用层面、网关层面等等,而这里的服务治理说到的是应用层面,简单来说,例如你有很多个服务系统,每个服务的对外层都需要白名单,那怎么办呢?不太可能每一个系统都重复的开发类似的功能,这样也很难管理。所以我们希望把业务系统中,非业务逻辑的通用性核心功能抽离出来,开发成统一的业务组件,来帮助服务解耦,让业务系统更关心业务流程开发。那么这就是服务治理其中的一个作用。

5. Netty仿桌面版微信

qUFzEj6.png!mobile

6. 还有很多造过的轮子

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

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

三、造轮子升职加薪吗?

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

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

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

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

四、有人反对你造轮子?

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

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

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

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

五、总结

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK