您的位置:  首页 > 技术杂谈 > 正文

一个小镇青年程序员的逆袭人生:上市公司技术骨干 出版两本技术专著

2022-10-24 13:00 https://my.oschina.net/u/4518266/blog/5586000 遇白 次阅读 条评论

编者按:

1024 是 2 的十次方,是二进制计数的基本计量单位之一。在计算机的发展史中,在和 0/1 所代表的二进制世界里,有人用代码编织出了形形色色的数字、程序、互联网,创造出一个个神话。

——他们就是一群可爱、低调、踏实的程序员,昵称:攻城狮、「程序猿」、爱码士。 10月24日是“程序员节”,庆祝程序员自己的节日。今天我们就来聊聊这群爱码士:一群爱逐技术前沿、爱追梦的人。

本期,荔枝集团研发中心的基础架构部技术骨干吴就业给我们带来他的故事:从一个五线小城乡镇青年,一路通过自己的努力打拼在一线城市立足,成为上市技术骨干,写专栏,出了两本技术专著。他的身上,可以看到技术带给我们的无限可能。以下是吴就业口述:

专科时期:为了去北京,自费参加编程赛

我的老家在广西钦州钦南区的犀牛脚镇,高中时候成绩不好,2014年考入广西职位技术学院学习软件技术,是一所专科院校,对我们老家来说学费也不便宜,自己内心还挺有压力。第一次接触编程,期间主修Windows应用开发、Android应用开发。

大一学习c语言,但感觉学校教学进度太慢,自己先一步把一个学期的课程学完。有同学抱怨c语言指针很难学,但我没有那种感觉。后来不满足面对黑漆漆的屏幕,于是自己去图书馆学习php编写个人网站。

大一上学期结束后,我主动报名参加2015年第六届蓝桥杯算法比赛,开始接触算法。14年寒假在学校参加培训,而培训我们的正是我的恩师罗运贞,也是后面三个学期教我们主修课程的老师。罗老师一直教导我们,编程语言基础很重要、数据结构和算法很重要。

由于我并非学校初选选中参加比赛的,而是自己交钱参加比赛,所以一开始并不被看好。事实证明,那一次比赛我的却连国赛都进不了。

进国赛是可以去北京参加比赛的,从农村出来的我,也很想去北京。后来我就跟自己较劲,下次比赛一定要进国赛,一是想证明自己并不差,二是确实想借这个机会去北京,去一趟故宫、长城。受打击后,我就开始努力学习,学算法。

大一第二个学期算法课上,我当时总喜欢在老师面前表现,想要得到老师的认可,提前把老师觉得难不适合我们学的图结构和遍历算法都学了,课堂上老师出题目,我就直接到老师电脑上“趴趴”做好了,后来在学校的专业上成绩也一直排名第一,现在回想觉得自己像个小学生。

大二我参加2016年的第七届蓝桥杯比赛成功进入了决赛,虽然只拿了国赛二等奖,但第一次去了首都北京玩了几天,挺开心的。

    

当时,大专并不开设汇编语言课程,我就自己去图书馆借书学习,网上看小甲鱼汇编课程学习。

我印象比较深刻的是,有一本王爽写的x86汇编语言入门书籍,对我来说实在太深奥了,我一个学期内反复去图书馆借了三次,看了三次。第一次看得懵懂,没看完,后来看完小甲鱼的视频课程后开始看第二次,觉得看懂一些了,便动手写一些demo,第三次看是把没理解的看看能不能理解。虽然后面没能应用到工作中,也忘了,但是对低层的理解一直有印象。比如汇编指令是怎么执行的,寄存器和内存寻址,我们在c语言理解的函数是怎么跳转执行又是怎么回退回去接着下一条指令执行的,中断又是怎么中断的,这也为我后来学习jvm字节码打下了基础。

大一第二个学期,期末报名参加2015年全国数学建模竞赛,暑假都是在学校度过的,当时整个学校就我们十来人。我当时并不是真的热情参加数学建模比赛,而是因为比赛也涉及编程,而且是将编程算法用于解决实际问题,所以就有了兴趣。

记得有一次,老师布置一道作业,三天时间完成,有一天晚上,我思考了很晚,忽然想到什么,兴奋的睡不着,但宿舍已经锁门,而且学校也没什么人,这么大的学校这么安静,也不知道我是怎么鼓起勇气一个人翻宿舍的墙到教室敲代码的,一坐就是通宵,终于把题目做出来了。不过后来比赛成绩并不怎么样,只拿了三等奖。

大二,我们也开始学习windows应用开发和Android应用开发。当时也参加过中国软件杯比赛,不过那一次连安慰奖都没有。当时恩师教我们,应该去看看开源项目,能够从别人优秀的代码中学到很多东西。

大学期间自己还写过很多好玩的东西,有的是学期期末考试作品,有的就是自己觉得好玩做来玩的。比如用c#写的纸牌游戏、简单版的图片编辑器,驾考模拟考试APP,用java写的校园二手交易APP。大二时候还认识一位比较厉害的学弟,自己写了跑酷游戏APP、课表APP,也是从学弟那里学了些好玩的,比如侧滑折叠展开菜单的实现、底部按钮点击弹开子按钮的自定义控件,后面还自己实现下拉刷新上滑加载的瀑布流控制,这些都是当时非常流行的元素。

大三在恩师的推荐下,就提前一个学期出去实习了。第一份工作公司是给南方电网开发windows应用的,工作4个月,做了一个利用socket通信控制摄像监控设备的系统。

当时还没毕业,其实并不好找工作,很多面试其实就是培训机构搞的套路,好在我没上当。期间面试过做php的,给的薪资1500,都不够生存,公司在小区里就几个人那种。

坚持一个多月终于找到了自己想做的Android开发的工作,给了3200的薪资,自己还觉得很满意就去了。在工作中,自己当时把主流的RxJava、Retrofit、OkHttp 融合成一个网络组件。当时有个需求,就是在app上展示报表,显示的列很多,要求左右滑动、支持选择隐藏列、固定某几列在屏幕左边,支持上拉加载下拉刷新,网上找不到适合的开源控件,于是就自己写了一个。

工作之余自己也去学习动画算法,比如贝塞尔曲线,用于实现按钮弹开还能做的效果,虽然最终实现很生硬,不过却也收获蛮多。

也利用工作之余,利用之前在工作中学到的socket通信,用c#写服务端,java写android app,做了一款模仿微信的即时通信APP

2017年暑假期间,自己也接过一个外包,做QQ自动加群机器人,最后钱没收到,这个项目现在还在GitHub上。

2017年,我开始了解到技术公众号。公众号不同于当时的博客,公众号互动性更强,像是在交朋友,做好了还能有收入。于是我也开始注册公众号,粉丝几年下来都没有几个人,也就说写的东西没几个人看,但是却坚持写了几年。

专科毕业时,由于在学校成绩不错,有升本的名额,当时因为跟别人合租,认识一位现在还保持联系的朋友,大我十来岁,是他鼓励我:年轻人应该回去升本拿个学历出去闯一闯,在这里3200工资,买个iPhone6还要分12期,每个月月光,这应该也不是你想过的生活。

当时就想,如果不靠家里,这收入以后还怎么买车买房娶老婆,而且当时的情景,似乎也学不到什么,我也不甘心这样一直下去。所以就辞掉工作回去升本了。

在离职后的一周,公司需要做一个接微信支持的需求,虽已离职,但还是很感谢公司给予的工作机会,所以我花了两天时间帮完成这个需求,后面领导也给我转了一千块红包,鼓励我回学校好好学习。

本科时期:明白后端的重要性,开始主攻

2017年9月入学,我进入了桂林电子科技大学,专业是网络工程,不过还是学的软件开发,加点网络基础。

本科期间在某个平台做过兼职,要求做Android、IoS两端app,和一个网站。Android端当时对我来说很简单了,但app总得有服务端吧,object-c也不会、网站也不擅长。不过却觉得是个挑战,根本不考虑能不能做出来拿到钱,就一心想把这东西做出来。

一个月时间,陪舍友熬夜,他们玩游戏我“工作”。边学object-c、ios开发,边做,边学spring、struts2、hibernate边做后端,边学css、js,加上php搞网站,最后把App做出来了,Android、iOS、php网站,都很不错——就表面而言已经能忽悠过关了,只是后端时不时就挂。

经历过这一次折腾后,我开始意识到,对于一个产品而言,稳定的后端有多重要,也明白为什么在上一份工作中,那些做后端的同事感觉都很受重视,而且工作也很充实。

加上当时也了解到h5的发展趋势,感觉后端更有发展前景。于是就转而开始学习后端技术。

本科在校期间也做过不少作品,有办卡预约小程序、恋爱APP、通讯录(包括来电秀、来电拦截)、电商APP。

情侣APP:

仿京东商城APP:

求职:靠贷款生活,差点卷铺盖回老家,幸好有女朋友默默支持

专升本是两年制,本科第二年就可以出来实习了,也就是2018年的10月。

当时也年少无知,无知到以为自己已经有技术经验,就自信的一个人、提个行李、背个包,拿着家里给的几千块钱,一张票,去到杭州,一个陌生的城市。

漂了半个月,一共只有两次面试机会,一次是一个看着不正规的公司,办公室很隐蔽,上班时间是中午和晚上,办公室里边摆满了Android机,像黑客的屏幕在干什么似的,还愿意给一个毕业生很高的薪资,吓得我面试完就跑了,叫我去上班也不去。还有一家公司是做p2p的,让我去面试,其实是他们公司当时做Android的刚离职,急缺人,但我面的后端开发,然后安排面试官把我虐一通后,问我要不要做Android,我拒绝了。后面再也没有面试,钱也快花完了,只剩回去的车费,开始焦虑了。

后来同学跟我说,他在广州找到了工作,薪资还挺高,对于刚毕业来说,当时学校还一度以为他进了传销。他跟我说,可能广州机会更多,让我来试试,于是2018年11月我便来到了广州。

到广州后我就先到朋友那,租了同一个公寓的房。因为当时他跟女朋友住,而我女朋友也决定来广州跟我一起。房租是1470,当时已经没钱了,压二付一,就在某借贷平台借了几千(具体多少忘了)。

但是找工作也并不顺利,简历天天投,电话没一个,而我当时就是想做后端岗,也放弃了其他的技术岗机会。

两三千月薪的实习生岗位也投了不少,但是电话都没一个。当时想法是,两三千就两三千,先要一年工作经历,熬一年,我对自己有信心。

这期间,我女朋友先找了一份工作,她是想承担房租和生活开支,减轻我的压力。但是底薪只有1500的工作,也就做了一两周吧,因为一些原因,我让她辞掉了工作,就这样,我们靠着贷款生活。每天能吃点咸菜伴饭、女朋友煮的面都觉得美味。

因为我比较要强,不服输,家里人一来电话就是劝我回广西南宁,可我升本就是为了出来闯,不到迫不得已,不会选择回去,所以到广州后没敢再问家里要钱,也是瞒着家里钱早就花完了。

边找工作我也边学习,当时用信用卡花6300买了一套后端的架构课程。(付款记录找不到了,只有评论记录)

因为找不到工作,焦虑,有一个月的时间,睡都不想睡,就想24小时学习,每天睡眠不超过4个小时。女朋友也是默默的陪着我,劝我不要熬夜,她也一直在找工作,她想找一份人事的工作,也想要有份收入,让我能安心学习,让我慢慢找工作。

本科在校期间也深入学过jvm和初步了解字节码,通过这个课程了解到jvm字节码可以用来做埋点,链路追踪,于是就来了兴趣,决心要掌握这门技术。当时觉得每次找指令都要用手机打开《深入理解Java虚拟机》这本书的附录找,效率低,于是就把字节码打印下来贴在墙壁上,直到第二年搬家才撕了下来。这其实也是形式上的一种自我激励罢,最后通过写demo过程中记住了大部分的指令。

当时学asm找不到更多资料,我用了最笨的方法,就是看api文档,然后自己摸索,错了再试错了再试,直到做出来为止,有时候一搞就是一个通宵,直到搞出来才睡得着。

由于钱的问题,不得不面对现实,没记错的话应该是2018年12月初,找了一份月薪给到一万的Android开发工作,但是干了一周,觉得自己像是废了,我连钱都不要就跑路了。说不出为啥,就是一根筋想做后端。女朋友也表示理解我,支持我的决定。

到12月底,本来已经快熬不下去,打算带女朋友回南宁了。没想到就有一个不错的机会,一家做广告网盟系统的公司,给了我面试机会。若不是第二天给我发了offer,估计我已经启程回南宁了。

也是因为得来不易,第一份工作我非常拼命,表面上看,跟同事一样的下班时间,再下班后我依然花很多时间去学习业务,学习项目代码。

有了一份工作,以后就有经验了,找工作也就不至于这么难了。但没工作时候也欠下了一万多的债务,后面我花了半年时间才还完。

2019年7月毕业后,女朋友也顺利找到了工作,很感谢女朋友那一年的陪伴,真的没有一句怨言,所以我们毕业一年后就结婚了。虽然我们现在生活也很普通,但有妻子陪伴,有个淘气的小儿子,已经很幸福。朋友们还经常开玩笑说我买了台奥迪汽车高大上,哪个男人不爱车呢。

工作后:心怀感恩,不断追求自我的目标

2018年底到20年初,一直在第一家公司做,也就短短一年多,其实我都想不到我会那么快离职。

入职半年,领导还给我加了薪,所以一是感激,二是觉得工作也挺有挑战的,也期望公司越做越大,有更多成长机会,而且当时另一个领导对我也很好。我心想,如果当时他是老板或者他自己出来开公司,我会毫不犹豫跟着他。

由于机会得来不易,我也很珍惜,也想快速成长,试用期期间,我每天回家都自己加班学业务,看代码,希望顺利通过试用期。

大概半年后,就是我毕业后,因为带我那个同事的离职,也很久没招到合适的人替代他的位置,我对业务也非常熟悉了,我成了项目的主要开发者,加上另一位同事,只有两个人做这个项目。于是我抓住机会,开始规划对项目进行重构,觉得项目很适合微服务化,我把微服务如何划分的架构设计图拿给领导看,领导也同意我去搞。

于是我就引入Dubbo、Nacos,利用设计模式,开始重构系统。因为需求也多,我只能利用下班时间去搞这事,一块功能一块功能慢慢的迁,业务代码不熟悉的又臭又长的那些没敢动,直接照搬。

由于小公司没有测试人员,并且为了省成本,测试环境都没有。改完本地简单测一下就直接上线了,所以出现过两次大的故障,一次直接被运营怼了,质问我到底专不专业,我只能默默不吭声。另一次导致盈利亏损,直接被老板在群里骂了。

熬了两个多月,才把整个系统重构完成,重构过程中做了性能优化,最终运维成本还降了一半。后面又经过三个月吧,系统才稳定。

毕竟是年轻,放在现在,如果不是领导层推动要做的事情,我是没有那个勇气了。

除了重构,在职期间也做了一些基础性的工作,比如

 

  • 自研广告主半自动化对接框架:JVM字节码+N叉树+广度优先遍历算法;
  • 自研miniexcel,解决pom导出excel频繁oom问题,并支持扩展;
  • 封装支持高并发的千万级记录的ip范围查询组件,使用Redis缓存;
  • 编写支持分库分表多平台多数据库类型的动态数据源框架;
  • 使用Sharding-jdbc实现数据库分表,并适配多平台动态数据源切换组件;
  • 解决系统存在的缓存穿透、雪崩问题;
  • 实现分布式事务,基于TCC处理分布式事务问题。

因为运营、商务是直接找开发提需求提问题的,每天需要回答运营的各种重复问题、运营提各种需求还需要自己去说服运营哪些不做哪些排期做。不过技术直接跟运营、商务对接,确实很考验沟通交流能力,是段很宝贵的经历。

系统重构我并没有因此受到表扬,唯一的安慰,便是年终给了个优秀员工奖。

我的第一份工作对我意义非常大,因为我写的一本电子书,和一本纸书,都缘起于在这份工作中。

由于不了解dubbo的一些参数配置,直接啃源码。有一次服务雪崩,我引入了Sentinel,但是当时用的很懵懂,于是就深入学习和研究Sentinel源码。为提高工作效率,用字节码加算法实现一个半自动对接广告主的组件,也再次巩固了jvm字节码的知识。

经过一年的工作,其实我已经找到适合我、我喜欢的方向了。当时了解到阿里、美团这些公司有专门做中间件开发的部门,但是自己的学历、经验,英语,让我望尘莫及。

辞职后也想过去阿里做后端,因为阿里在技术上对我影响很深。找人内推说对学历有要求,自己投简历也石沉大海,也就放弃了。

20年赶上疫情,也刚好要跳槽,加上觉得电商业务应该是比较具有挑战性的,所以20年3月我选择入职一家电商业务公司。

跟以前在小公司不同了,一个人只负责一小块业务。不过我还是一样喜欢搞技术。我非常感谢我当时的领导,他知道我的兴趣所在,给了我很多成长的机会。在这一年,我主要负责新项目的系统架构,负责技术难点攻克,帮助同事解决技术上的难题,在领导的安排下,在内部开过两次技术分享会:《Spring Cloud微服务与云原生》、《Kafka高性能数据同步(Mysql Binlog)》。

在职期间其实除了订单一小块的业务,我很少写业务代码,更多是做些便技术的活,例如

  • 电商业务支付中心、SSO单点登录、消息推送服务、数据同步服务等项目的技术选型与架构设计,引进网关、Docker。

  • 基于XXL-JOB二次开发分布式定时任务调度平台,改用线程池执行任务,支持泛型参数自动解析,实现安全检查点中断任务机制;

  • 自研轻量级分布式调用链追踪Java探针,结合阿里云日记系统查调用链路;

  • 多数据源组件封装,支持在应用层解析sql以实现埋点事件,并支持监听事务状态给事务注册回调函数;

  • 消息推送服务:使用反应式编程提升系统吞吐量,优化系统的部署成本,WebFlux+R2DBC+Lettuce+Spring Cloud Kubernetes;

  • SSO单点登录:SSO服务的开发,以及为方便各系统接入SSO封装SDK,适配Shiro框架的注解,接替Shiro的鉴权,让接入项目几乎零代码改动。

工作之余,我完成一本电子书的编写和一个专栏的编写,也写了很多文章。

后来我那位叫我来广州的朋友到了荔枝集团,他给我发了内推链接,我看到中间件这几个字,瞬间来了兴趣,这就是我想要的工作。我就让朋友帮我内推试试看,比较幸运很顺利拿了offer。

我在2021年7月加入荔枝集团,可以说这是一次重大改变。我从再度迷茫,不知道后面的路怎么走,到明确自己的方向,扩展了未知,知道要学哪些东西。每天的工作都很充实,每一个项目也都充满挑战。

入职后做过消息中间件的开发工作,也重构过xxl-job,目前主要是参与网络项目和服务框架的研发。一起参与声音创新、不断去赋能荔枝各项业务,源源不断的提供高质量代码。这期间,也有幸加入荔枝技术文化团队,参与荔枝技术社区的运营工作,帮助一起打造属于我们自己的1024程序员节,今年的荔枝程序员节包括“金码奖”这些创意,就是我参与一起从策划到落地的,扩展了活动策划的技能。希望自己能得到一些成长的同时,也能为社区做出一点贡献,帮助更多小伙伴去实现自己的技术梦想。

在这里也认识了更多的大牛,感谢现领导刘伟培养,和同事的帮助,非常关照我,他们经常开玩笑说把握重点打造成荔枝技术的IP,玩笑归玩笑,这一点我是非常感激的,这一年,我成长很快。我深切知道,独木难成林,百川聚江海,未来还有更加漫长的路要走,有荔枝这帮领导和同事一起,我们技术打磨的更快、更好、更强,我们也会从一棵南方的荔枝小树苗,成长为遍布全球的茂密荔枝林。

开专栏写作,出版两本书背后,我看到了自己的成长

我的写作习惯从大学期间开始,当时更多是为了做笔记。后面发现公众号有技术号主发技术文章,感觉很好玩,有氛围,也跟风开始写作。从起初不知如何开头,到慢慢习惯成自然。

20年初我就写过一本电子书:《Java虚拟机字节码从入门到实战》,可在微信读书APP阅读,开源版已更名为《深入浅出JVM字节码》,但只开源部分章节。

起初目的很简单,就是自己在学习过程中,找不到系统的学习资料,完全靠自己摸着石头过河,经常为了搞懂一个bug,熬夜通宵。所以想整理成学习资料,分享给后学者参考。这是件非常有意义的事情。最终我用了三个月业余时间完成编写,熬夜、牺牲周末。
对于一个小人物,想找出版社出版成图书并不容易。最后我才只出版电子书,当时我并未考虑开源,因为没有版权保护,一发出去,很快就会成了很多人的伪原创。这是我第一次想出版图书的经历,结果以失败告终。
转后端后,我就习惯每学习一个框架都去研究透原理、源码,不在乎多,而在乎是否真正学到了什么。在这个过程中,我喜欢总结输出原理分析、源码分析文章,发布在各个博客平台以及公众号。

2019年底,经历过一次服务器事故,开始接触Alibaba Sentinel,并应用Sentinel解决了高并发下的流量治理问题。在使用的过程中,发现有些配置很不理解,于是我便开始深入研究Sentinel,并在之后写了一个源码分析专栏。当然,这并不是我研究的第一个源码项目,但这却是我这一次出版图书的缘起。
20年初,我的公众号开始被一些出版社编辑发现,并主动留下了联系方式,但当时我并不太想写,所以很多编辑留了微信我都没去加。

因为想不到要写什么,我又不想写入门类书籍,因为我不指望出书赚钱,我很清楚我想出书的目的,因为自己也在做公众号,提升影响力,另外就是圆自己出版一本书的愿望,不甘心之前的失败。

后面一段时间,我发现我的专栏被别人盗成原创,各种投诉都被驳回,气愤之下,就想把专栏完善并出版成书。碰巧有编辑愿意接这个选题,所以就有了出版图书的开始。

这本书是20年底签约写,21年将专栏整理成书,并加了几章内容,完成三审三检,22年3月才出版。

从写博客,到公众号,到电子书,到专栏,再到出书,就是我成功出版第一本书所走过的路,回想起来,也与我们的技术成长是一样的,从语言基础,到demo,到项目实战,到自学深研,从量变到质变。

虽然我写的两本书可能不是什么好书,但也都是我用心去写的,花了很多时间精力,反复读过多次,修改过多次,才出版。特别是后面出版的纸书,写专栏时就反复阅读修改不下8次,出版成书时更是改了不下十次。

在1024“程序员节”的日子,在荔枝集团办公室里,一下子回忆起了这么多“爱码士”的往事,从一个五线城市的小镇青年,一路走到这里,在一线城市扎根,在上市公司做技术骨干。对于我来说,这些都仅仅是个开始,未来还有很多路走,很多山要去翻越,也会上下求索吃很多苦,但我们终将活成自己想要的模样。更多的程序员起步条件各方面其实都比我好,我想说,1024,祝大家节日快乐;跨山越海,你们可以的!

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接