一位转行码农的成长之路

架构之美

共 3945字,需浏览 8分钟

 · 2021-05-02


-     前言    -


对,没错儿,聊的就是我自已,我是转行的码农。聊聊我的学习工作经历,聊聊技术成长心得,给想转行的朋友一些参考。在写代码的路上感觉迷茫的业内同学也可以联系我,共同交流进步。


-     我学的什么专业    -


我本硕都在中国地质大学(北京)读材料科学与工程专业,无机非金属材料方向。每天打交道的是各种石头各种土和科学仪器。毕业后进入一家专业相关的公司工作,说实话我还挺喜欢这份工作的内容,唯一不满意的就是钱。在家庭并不宽裕的条件下想在北京生活,什么都可以没有,就是不能没有钱。确实没有办法,开始了我的转行之路。


-     转行之路    -


1、小有信心

为什么想转行写代码呢,因为当时有一些在互联网行业写代码的朋友,我的工资跟他们比完全不在一个数量级,听到他们的收入就一个感觉,有钱。

大学里学过c语言,但是成绩并不高,好像只有60多分,是不是很惊奇,一开始我并不是能有100%的信心可以转行成功的。于是我重新买了一本C语言的教材,立下目标“如果这本C语言学起来很轻松我就继续,否则放弃”。我用了一星期左右学完了这本C语言,感觉还可以,看起来并不难。大学里没考高分也许是没用心学,也许是教材讲得不好,过往不再纠结,我觉得转行应该没问题。

2、士气衰落

C语言的书我是看完了,可是学完能干什么呢,我连课后习题都写不出来。好在我有互联网界的朋友跟我说可以暂时不考虑那些习题,因为有的涉及很难的算法,超出了语言基础的范围,暂且搁一搁吧,学习一下其他课程。

于是我又继续学习了数据结构、操作系统、计算机网络、C++等课程。好了,都学习了这么多了,问题来了,我能干什么呢,每天对着一个黑黑的窗口敲几行C代码,编译一下,运行一下,报错了再debug一下,好无聊啊,更无聊的是这代码还不是我写的,是我抄的书上的代码,我连抄的代码都跑不起来。一时间非常气馁、低落。

有朋友给我建议先不学那些基础课程了,做点有意思的项目玩玩,比如写个计算器,我一脸懵逼知如何下手,因为我只在黑窗口里敲过代码,我的程序也在黑窗口里跑,那个图形界面怎么出来的。难道我要先画个图形界面,怎么画。说实话我转行码农这么多年了,不自恋地说编码水平超过大多数后端同学还是没问题的,现在让我写个计算器我也不会。

3、绝望之谷

我想一定是我学得还不够好,沉下心继续吧。于我又学习了汇编语言,intel汇编、at&t汇编,学习计算机是怎么启动的,至今我还记得一个magic的内存地址,0x7c00。我把用C语言写的程序编译成汇编之后,研究汇编代码,继续深入地学习实模式、保护模式,内存分页,一级页表、二级页表。难,非常难,难以理解,我换了好几本书也不看不懂。

来点实用的吧,学学api,开始看《Unix环境高级编程》,尝试看了几次,都没能看完,依然写不出程序。至此我已经沮丧到极点,感觉就要放弃了。

4、扬帆起航

又有朋友跟我建议说学Java吧,Java简单,好就业,也可以上个培训班,培训班还帮推荐工作。刚毕业的我工资只够养活自己吃喝的,分文不剩,哪有钱上培训班。辞了现在的工作上培训班风险太大了,没有工资收入还要交学费,万一没转行成功又丢了工作,先继续自学吧。我从网上下载的java基础教程开始学习,又下载了培训班的免费视频教程,终于我在浏览器里看到了“Hello, world”,还填写了表单提交到后端应用。终于感觉好像能写点“有用的”代码了。

5、波涛汹涌

自学了Java以后找工作又是个问题,虽然有铺天盖地招聘需求,但无一例外都要求2~3年以上工作经验。听说上Java培训班的老师都会教怎么修饰简历,我在要不要修饰简历上内心忐忑,最终我还是没有修饰我的简历。简陋到不足一页纸的简历,实在没有亮点,根本过不了HR的法眼,几百份地投都石沉大海,偶尔的一两次面试机会也都以失败告终。我都在想要不还是去培训班培训一遍吧,或者干脆放弃吧。

6、胜利的彼岸

不过最终还是有贵人相助,我拿到了第一份写代码的工作。


-     代码之路    -


1、初出茅庐

上班的第一天我呆坐在那里写不出一行代码,不过在好心同事的帮助下,开始上道了。逐渐地熟悉了crud的工作,甚至能写出骚气的存储过程。不过第一份工作做了好多项目,这些项目的都没有用户量或者说用户量掰着指头都可以数得过来。终于公司决定裁员不做互联网方向了,在裁到我之前我找到了一份新的工作。

2、快速成长

我找第2份工作的唯一目标就是做的项目有一定量的用户会使用,对工资并无奢求。第2份工作也是家小公司,后端只有3个,在这里我开始做点略有“技术含量”的东西,比如封装了各种通用的spring-boot-starter,甚至写了一个异步采集日志的功能。工作之余不能忘记提升自己,不满足于日常crud的需求,开始学习mysql、设计模式、多线程等知识。此时才发现当年我学习的那些无聊甚至差点儿让我放弃编程的基础知识帮了大忙。

第2份工作果然没让我失望,项目上线了,确实有用户。但是此时我又瞄上了下一个目标,找一份有大规模用户的工作,有“高并发”需求的工作,而且必须是有一定知名度的公司。

3、小有成果

第3份工作我来到了58,做的项目确实有相当大的用户量。但是我发现日常为了满足业务需求写的代码并没有比第2份工作有难度。我开始想给自己找点“有点技术含量”的工作,当时58的RPC框架里还不能用spring,同事们都用google guice,非常难用不友好。于是我下载了RPC框架的源码开始研究,终于通过骚气的黑科技在58的RPC框架中接入了spring。有同事说保存在58 wlist的微信id查不出来,是因为微信id里有特殊符号和查询语句关键词一样,后来我又对58的wlist客户端进行了进一步封装,对出现的关键词进行转义,还做出一套api可以很方便地拼接出查询语句。

我对crud工作有点不满足了,想着能不能换个方向,做中间件吧,看起来更有技术含量的样子。于是又开始寻找机会,找个中间件工作试试。

4、走向成熟

又是遇到贵人,我来到了转转做RPC框架开发工作。入职之前我的内心一边窃喜,一边忐忑,但是我内心的忐忑在入职之后逐渐消失。经过两周的源码阅读我已经掌握了RPC框架的主要组件,并发现了现有代码中存在的问题,信心倍增。在随后的大半年里,大刀阔斧修改代码,显著地提升了RPC框架的健壮性,接着又开发出了分布式调用跟踪系统。

虽然RPC框架的稳定性得到了显著提升,但是它的可扩展性和api友好性还是太差了,被rd吐槽严重。于是我决定直接重构,后来推出了一个全新版本的RPC框架,除了协议上和旧版兼容之外,整体架构和api全部重构,得到了RD们的好评。由于公司的业务需要,我又开发出了php版本的RPC框架,在写这个php版本的RPC框架之前,我对php一无所知,没写过一行php代码,一切都是现学现卖。

这一年我在转转拿了一次季度优秀员工和一次年度优秀员工,职级晋升一级。


-     成长心得    -


自认为转行码农后的这几年没有浪费,一直在成长,一步一个脚印。收获符合预期,超出转行前对自己未来的想象,关于工作和学习总结了以下几点心得,分享给大家。

书读百遍,其义自见:有很多书,有很多源码,我都读过多遍,一开始读不懂,读不完,没关系。放那儿,过一段时间回头再来一次,如此往复终于有一天会发现茅塞顿开。但是这并不代表每次遇到困难不用思考直接抛弃,只是在充分思考想到脑袋都要炸了依然没有理解的情况下才会放下,下次再来。大家知道冲击钻和普通电钻的区别吗,仔细琢磨一下。

兴趣是最好的老师:写了这么多年代码,依然兴趣不减,写出优雅的代码是一种享受,学到新的知识令我兴奋,有个问题困扰着我大半夜睡不着觉还在想第二天这个代码该怎么写。

基础很重要:我仍然不后悔当初没有直接学Java web开发而先去学了很多“无聊”的计算机基础知识,至今我仍然会去翻那些书,前几天我才刚刚搞明白了内存分页,以及为什么会有二级页表。

目标明确:了解自己,知道自己喜欢什么,知道自己擅长什么,不好高骛远,不制定无法企及的目标,不小看自己的能力。学习目标明确,知道该往哪里走。跳槽目标明确,不为了跳槽而跳槽,不仅仅为了工资而跳槽,当然如果现在就差钱了,那就为了工资而跳槽。

珍惜当下的工作和生活:传统行业的收入和写代码的收入根本不在一个数量级上,转行的我更加珍惜这份写代码的工作。写代码后娶了媳妇、买了房还有两个可爱的儿子。

心得不宜过多,否则就不是精华了。


-     致谢    -


感谢父母,给了我一颗还算不错的脑瓜。
感谢大学的老师们,虽然我不再从事相关的工作,但是大学对我的训练受益终生。
感谢毕业后工作的第一家公司,虽然工资不高,但是有这份工作我才得以立足北京。
感谢在我转行过程中给予过指导的朋友们,让我少走一些弯路。
感谢在找工作过程中遇到的贵人们,以及在工作中帮助过我的同事们还有领导们。


作者:王建新,转转架构部资深Java工程师,主要负责服务治理、RPC框架、分布式调用跟踪、监控系统等。

来源公众号:种代码

浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报