【前端成长系列】三年从实习到全栈的升级之路

avatar
公众号「 微医大前端技术 」

高翔,微医云服务团队前端工程师,喜欢美食,热爱技术,喜欢折腾。

写在前面

弹指一挥间,发现自己从事前端工程师这份工作也快三年了,我是在学生时期通过自学了解的前端这个领域,因为一个人的原因,期间走了很多弯路,这篇文章想跟大家聊聊自己的前端之路,也当做个总结,记录下自己这几年来的工作经历。

自学之路

2015年的一个秋天,我无意间走进了学校的图书馆,闲来无事借了一本《21天精通网页开发》,回到宿舍后,我照着书上做出了我人生中的第一个网页,对于当时还没接触过图形件开发的我,网页上的一切都很新奇。一时间我产生了浓厚的兴趣,一发不可收拾,我的前端之路也由此开启。

初学前端的那几个月真是令人煎熬,不知道是什么原因,那些代码我第一天敲,第二天就忘了。我大概用了两个月的时间才学完了 HTML 和 CSS,但是我的代码还是很垃圾,只能勉勉强强还原一下样式,只要页面一放大或者缩小,必乱。JS 也是,一个简单的效果,我都要想半天,视频都看得懂,每当自己写的时候就写不出来。所以我投入了大量的时间来练习这些基础的东西,大概过了半年,还原页面对我来说已经没有难度了,我才开始去学习那些更高级的东西。

大二那个暑假,我赚到了我的人生第一桶金。我当时一直有一个想法,就是想看看自己一个人能不能在外面独立生活下去,于是我拿着手里仅剩的一点生活费在外面租了个房子,付完房租后身上就只剩300块钱,那几天几乎就是从早到晚在各种群里找私活做,好在自己运气好,偶然认识了一个开外包公司的朋友,跟着他一起写页面,一个多月下来挣了将近五六千块钱。回到学校后出手也阔绰了,顿顿都吃好的,这也成了我变胖的开始。

转眼间来到了大三,我发现自己除了切页面其他什么都不会,看到技术群里大家整天在聊 Node、Vue,我却一点不懂,我知道自己不能再这样安逸下去了,必须爬起来继续学习了。16年的10月,我开始接触到 Vue.js 这个东西,然后便一发不可收拾,各种没听过的名词出现在我的视野里:Webpack、Node.js、NPM、SPA......,一时间我又陷入了迷茫,但是没有办法,自己选择的路,跪着也要把它走完,我又一头扎了进去。很庆幸当时没有放弃,当一个个技能点被点亮的时候,当越来越多的代码我能看得懂的时候,一切都会变的有价值。

因为专业的原因,其实我身边的同学们大部分都在朝运维、网络、硬件的方向发展,只有我一个人在尝试前端这个方向,一个人的路上并不是一帆风顺,经常会遇到磕磕碰碰的问题,看不懂、学不会、搞不来,没有人带,但不知道为什么,我就是喜欢折腾,遇到搞不定的东西就是要把它搞定。可能正是因为自身的这种性格,给我带来了一些优势,使得我独立解决问题的能力要强于他人,亦给我带来无穷的财富,受益终身。

初出茅庐

17年10月,满怀信心的我开始找实习工作。由于学校的一些事务,我大概到10月中旬才开始全身心的去投简历,那段时间我疯狂的投简历,刷题,逛牛客,看面经,我记得当时投了大概有百来封简历,但是面试的却寥寥无几。大概是11月初的一个上午,微医给我发来了面试邀请,面试挺顺利的,一天时间就面完了三轮,当天 HR 就给了口头 Offer,于是我就来到了微医。

17年11月13日,我开始了微医实习之旅,第一天上班的日子记忆犹新,领导很 Nice,同事很热情。我还记得我的第一个需求是一个简单的活动页,因为没经验,以为交互稿就是最终呈现的样子,当时心想,这页面也太丑了吧,这 UI 真垃圾,然后认真地按着交互稿一个像素一个像素的去还原,现在想起来还挺好玩的,不知道当时 leader 看到我的页面时是什么样的心情。

实习后,我开始负责微医健康号相关功能开发,我尽可能多的去参与需求,慢慢的整个项目结构在我脑中清晰起来。leader 也给了我很多的机会,给我分配了一些有挑战性的任务,比如在微医健康号 SSR 重构时,我就开始支持核心逻辑的开发,参与较底层的架构实现,我们7人小组奋战了1个多月,最终从零到一落地了微医的第一个全站 SSR 应用。在日常工作中,我也积极发挥自身的价值,收集了自己平时接触到的一些新技术,报名了多次团队内技术分享:《mpvue开发小程序调研》、《we-cli脚手架工具介绍》、《Flutter 初探》等。

微医的第一年,我学习了很多东西,认识了很多有趣的人。特别是我那时的 leader,时至今日,我还是想在正式场合跟他说一声谢谢。对于一名实习生来说,一个好的导师可能就决定了你未来的成长,非常感谢他给我指明成长的道路和目标,给我争取了一些额外的机会和挑战,使我的技术水平、业务能力能够突飞猛进。还有一起共同进退的其他同事,虽然有些已经不在微医了,但是还是想说一声“谢谢”。

崭露头角

在微医的第二年,我也从实习成功转正,作为正式员工,责任、机会和挑战变得更大。大概在18年底,由于外购的第三方客服平台很久没有维护,又不好用,所以集团有了自建客服工作台的想法。从一开始,我们就做了 Node.js BFF 层的规划,希望有一些不太核心的接口能用 Node.js 去承载,减少前后端的联调成本。但是写了一段时间后有同学反映这个东西写起来很难受,新开一个接口,一般要经历6个步骤:新建 Controller、声明 router、新建 Service、声明 Dubbo 接口方法、写接口单测、写接口文档,一整套流程下来,很容易漏掉某个步骤,优化开发体验成了亟需解决的问题。

有问题就去解决,首先支持了装饰器路由模式,用装饰器来定义路由,写起来更酸爽,更易于维护。然后又把 Dubbo 接口方法声明改成了自动化注册,最终6步变成了4步:Controller、Service、单测、接口文档,改造后小伙伴写起接口来效率明显提升。

除了开发体验,环境隔离也是一个困扰了我们很长时间的问题,正式环境 Node.js 在调用 Duubo 接口时环境是没隔离的,会调用到预发的 Dubbo 接口。所以很长一段时间,遇到有不兼容的需求变更时,我们都会等客服下班后再部署到预发环境,避免影响到客服小姐姐工作,一次两次还好,但是经常因为环境隔离的问题影响需求进度是我们不能忍的。最后通过深入源码和大量的调研,将部分 Java 的源码逻辑在 Node.js 上实现了一遍,才得以解决。

通过不断的迭代和优化,这套 BFF 体系变的越来越标准,于是就有了后面封装框架的想法,Aug.js 就此落地,这又是另外一个故事了,现在集团中已经有越来越多的 Node.js 应用开始基于 Aug.js 搭建。

对外分享

19年10月份,因为机缘巧合,我有幸成为了第一届缤纷前端技术沙龙的讲师,分享主题《Node.js 在微医的应用》,这是一次特殊的经历,因为我在此之前从来没有过对外分享过。大概是提前半个月我就开始做准备,每天下班回去,第一件事就是打开PPT,拿着手机做遥控器,然后开始自己演讲。练了几天后,效果很明显,PPT中的每个点我都能熟记于心。沙龙当天,我是第一个分享的讲师,分享过程还挺顺利,但是QA过程有一个问题让我印象深刻,到现在我还记得那位老哥问的:“如果我的页面初始化时要调用100多个接口,在SSR中该怎么办,会不会很慢?”,我心想,这哥们不会是来找茬的吧,随口答了一句:“怎么会有这种应用?”,但是那老哥坚持说他们的页面会调100多个接口,我也没办法,只能硬扯皮了,辛亏主持人及时救场,最后这个问题也就不了了之了。

这次分享之后,我把对应的文字版文章投稿到了知乎专栏和前端早读课,让更多的人了解到了我们团队,对我而言也是收货颇多,认识了很多志同道合的朋友,直到现在,还会有一些同学会时不时加我微信,问我文章中的一些问题。

抗疫行动

今年春节,一场疫情打破了原有的生活节奏,大年三十上午,还在睡梦中的我被领导电话叫醒,需要紧急支持全国抗疫平台上线,一开始我以为只是一个小需求,一会儿就可以完成,可做着做着发现不对劲,越来越多的同事开始入场,会议电话一个接一个,我意识到可能要开始战斗了。我们老家是农村,大年三十那天有很多传统,我还非常清晰的记得那个画面:我一边抱着电脑一边给老祖宗做祭祀,磕头的时候电脑就往旁边一放,起来之后继续写代码,差点都要被爸妈揍了。

还记得大年初二那天,我们的平台流量到达了最高峰,我也是那晚的见证者,一时间千千万万的用户涌了进来,页面开始变卡,接口开始迟钝,PV 每秒钟几千几千的涨,辛亏运维同学及时赶到,平时巨难申请的机器一下子就给我们扩容了十几台,一切资源都像抗疫平台倾斜,我们顶下来了!那段时间根本分不清白天与黑夜,哪里有枪声哪里就需要支援,大家都是坚持到真的快熬不住了才去休息。一开始我心里也会抱怨,但是当看到那越来越多的数字,看到一篇篇报道,看到央视妈妈的专访视频,一切的投入都是有价值的。

直至今日,我已经在微医工作了两年半的时间,两年半的时间我成长了很多,我也从那个刚步入社会的毛头小子变成了可以独当一面的前端工程师。看着公司这两年的发展,其实也会有很多感触,微医在进步,它以一个互联网企业的身份承担起越来越多的社会职责,健康有道、就医不难的目标也未曾动摇过。作为技术人,当治病救人这项神圣事业和工作关联在一起时,一切都会变得有意义,变得未来可期。

思考

上面就是我的前端成长之路,我还想试着写一写自己的思考,希望能对大家有一点帮助。

健康第一

健康才是最重要的,不管工作有多忙,也要抽出时间休息,注意要少熬夜!就拿我自身来说,一年前我突然患上了突发性耳聋,早上起来左耳听力突然下降,医生说辛亏我就医及时,不然可能左边耳朵就听不见了,住了一个星期的院,虽然听力是恢复了,但是带来的后遗症也是很难受的,每天晚上左边耳朵就准时开始耳鸣。这些其实都是不规律的生活导致的,现在我后悔莫及。

持续学习

大家都知道前端是一个发展迅速、技术更新迭代快、横向扩展高的领域,很多同学直呼“别更新了,老子学不动了”。对于一大波新的技术,我们如何保证自己的竞争力呢?先谈谈我自己,我一般只会着重了解那些我认为重要的和自己感兴趣的新技术,比如我花了很多时间去深入了解 Typescript,因为我觉得这个技术是重要的,是未来必不缺少的。我还花时间去了解后端 Java 的一些中间件,把他们运用到 Node.js 生态中,这是我感兴趣的,它可以提升我对服务、对架构更深层次的认知。所以找对目标后再去学习会往往会事半功倍,不会产生三分钟热度,更不会觉得学习是件很难的事。

发散思维

别把自己当成前端工程师,这句话我一直想找个机会分享给大家。很多同学都能把自己负责的事情做的很好,但是却得不到高度的肯定,会感到困惑迷茫,那是因为他们只顾了自己的一亩三分地。有时候我们也要尝试着走出去,去了解产品经理的思维,去了解后端的技术......,这样和其他技术同学沟通时效率会变得更高,自己的业务储备也会有所提升。过程中你还会发现其他同学的痛点,帮助他们一起提效,增加自身的影响力。

开阔视野

我对技术的态度其实更偏向于广度大于深度,所以我自身的规划也是如此。当有一门新的技术时,我会先去了解它能做什么,目前是什么程度,在自己知识字典里先记录下来,当有需要时再去翻阅。在公司也是如此,我会去了解一些非前端领域的东西,去了解后端、App、测试、产品他们都在干什么,这对一个人的成长其实是很有帮助的,当视野变得开阔起来的时候,你看事物的眼光也会有所改变。

保持心态

有时候我们也要佛系,快乐工作,用心生活,对于技术的变革、个人的成长,我们要保持好心态,不要焦虑。出去走走,感受自然,感受阳光,下下馆子,吃吃美食,何乐而不为。