快速成长,在相互宝路上狂奔 | 年度总结系列

1,684 阅读10分钟

本文作者:蚂蚁保险-对二

16年毕业之后,对自己3年之后的工作发展有着比较明确的规划和目标。3年也是来不及回味就已经转瞬即逝,19年的5月底终于来到杭州,入职了蚂蚁。在圆满完成了第一个三年计划的同时也开启了下一个3-5年的发展规划。PS:记得毕业第一年的大冬天来过杭州游玩,当时就和妹子说之后来杭州工作怎么样,憧憬的心情现在仍然记忆犹新,现在回忆也是完成了当时的臆想。

2019年

入职蚂蚁之前,已经做了较为完备的心理建设。不管是996的福报,还是每周都要花费8小时的沪杭往返幸福大巴,扛一扛只要能学到东西,这都不是事儿。现在站在19年的尾巴上,想对自己说:学到的东西是真的多,活下来也真是不容易~

技术上

之前的每一年,对自己技术上的进步都较为满意,今年也还不错,主要的技术上的进步在于
(1) ts&单测的bff开发模式
(2) 造轮子。

Typescript

来蚂蚁之前,就已经在node层实践了ts的开发模式。但是仅仅只是在controller层运用,其目的也只为了使用decorator的语法。当时对ts的认知仍然停留在:node的能够在服务端开发立足,很大一点在于其快速开发,快速迭代的能力。而ts则将js渐渐带入到静态编译语言,变得“臃肿”。使得ts既无法像java那种强规约,稳定,又减少了js的动态语言的优势。感觉丢了西瓜捡了芝麻。

6月来到蚂蚁之后,跟随翰文,真正意义上从0开始完全使用ts去开发一个大型的node项目--相互宝。半年之后我们已经将相互宝整个node端从js重构到了ts。所谓实践出真知,我现在对于ts的开发模式才有了完整的认识。

  • 少bug:ts的首要好处即是大幅度减少了编码过程中出现的bug,通过vscode对于ts的完备的强类型语言提示能力,将非逻辑的bug数降到了最低。再快速迭代的相互宝项目中,node端的提测质量一直保持的相当高的标准,同时也从未出现过node端的线上bug。
  • 易合作:对于大于3人同时维护的项目,代码的可读性已是相当重要,同时ts的类型检查可以无缝做到相互使用对方的代码,而不需要去询问或者添加较多的注释。相互宝现在日常有4位同学维护开发,当有大的需求和战役时,会有6-7位同学共同开发。这时明确的类型申明,代码规约大幅减少了团队的沟通成本和新加入开发的学习成本。
  • 可维护:按规范开发的ts项目,重构对其而言简直是小事一桩。就一个快速迭代的项目,重构是一件一直要做的事情,实时保持项目能够快速适应业务的复杂度和需求。ts提供给了开发者随时重构的能力和信心,复杂的业务逻辑也不会再成为我们重构的阻碍。优雅的代码和结构永远不会是一朝写成的,是经过一次又一次打磨而成的。半年来,相互宝node端的代码结构就已经经过了多次的较大优化。
  • 玩法多:基于ts的项目在开发过程中迸发出很多js无法给予我的灵感。基于这些灵感完成了ts-validate和ts2proxy的开发和落地。

typescript对于开发效率和项目质量上的提升是数量级上的变化。ts在相互宝的完美落地也推动了ts在整个前端保险业务的运用。

面向单元测试编程

2018年,在点融负责开发的node项目也是相当巨大,接口繁多,逻辑复杂,单测也是必须要做的事情,然而当时单测率的红线仅为80%,对于每个方法仅仅也只是做到,运行过即可。想必每个开发者都会感觉到补充单测时的烦躁。
来到蚂蚁之后,看到现在98%红线的单测覆盖率真的是叹为观止。可谓是开发一小时,单测补一天。每次提交的commit的都会发现是几百行,结果代码其实只改了两三行,其他都是补充的单测。 =。= 也正是这种高要求的单测覆盖率培养了面向单元测试编程的习惯。
之前的编程习惯是:代码写完--项目起起来--调用接口--返回结果是否符合预期--补充单测--提交代码。
现在的编程习惯是:根据需求写好单测--代码写完--跑通单测--提交代码。

单测已经不再是一种需要补充的累赘,而是需要去完成的目的,代码编写正确性的依据。当有bug时,第一步去做的也是用单测复现bug,然后修复bug,再去跑通单测。同时单测也是跟着需求的快速迭代而实时改变的。它保证了每一个需求分支,每一个接口的兼容性。

造轮子

前三年的工作更多的是需求的实现,项目的添砖加瓦,阅读&拆解别人家的轮子。在蚂蚁工作的项目给了自己想要去实现的灵感,同时工作的氛围push了自己去实现自己的想法。已经记不清这半年来有多少个前半夜在公司电脑前“抓耳挠腮”,去思考去突破去实现自己的idea。根据自己在ts-chair项目上的实践也沉淀出了一些成果。

  • ts-validate:因为ts对于每个接口的入参进行类型声明,为什么我们还要在controller中去对一个个入参做pick和assert呢?为了不想去写大量的assert和pick,去学习了ts的api和ast,typescript的plugin,为了兼容ts-node的运行方式,又把ts-node撸了一遍。在我挠掉很多头发之后也终于落地了想法。
  • ts2proxy:蚂蚁有一个jar2prxoy的库,可以在c h直接通过sdk调用java接口,同时又有接口的参数和返回的类型声明和注释。接口文档,swagger这种东西全都省了。把这个库撸了一遍之后产生了为什么不能在node层也实现这种功能呢?node项目给前端小程序和H5也提供sdk,也能有接口的参数和返回结果的类型和注释。在js的时代,我们需要在项目中写额外的代码去实现。但是ts天然的给我们提供了.d.ts的描述文件,项目中不要任何的额外代码就能去实现一个前端调用的sdk。想法很美好,但是开发过程中的卡壳也是一个接着一个,自然下班到家睡觉也睡不踏实。不过头发掉的多了,思维也就自然发散了,最后也终于能够实现并且在相互宝中落地使用。

技术外

同样不只是技术上,在心态上之前的每一年也是越来越成熟,而今年也对自己较为满意,感觉也是在心态上进步了很多。技术上在翰文身上学到很多,那么在心态上从省道身上学到的也都是相当多的宝贵财富。

  • 解决问题永远是最重要的事:遇到困难,或者糟糕的,委屈的事情,慌张和抱怨是没有用的,也是永远解决不了问题的。需要想的是要如何去解决它,摆正心态,冷静分析,从容应对,先解决当下的问题。因为再怎么不爽,事情还是要做完的,问题还是要解决的。

  • 做事情要有条斯里,面对复杂的项目,混乱的排期,首先不是急着着手去做,而是先把这被揉成一团的棉线先理清楚,有了明确的着力点之后再去做,才可思路清晰,事半功倍。

  • 稳:这是在做项目时,最重要的一点。省道和虎哥可谓把这一点做到了极致。要做到稳,首先必须把节奏掌握在自己手中,按着自己的节奏才不会出错。那么要有自己的节奏就必须要有自己的安排和规划。做事先定计划,不管是写下来的还是心中的,都不可想到哪里做到哪里。同时,侥幸心理绝对不能有,因事小而不为,乃是大忌。

  • 除了上述几点,还有就是工作未来的规划,今年也是感觉柳暗花明又一村。改变,我觉得应该作为未来工作规划的关键点。角色的转变,心态的转变,视角的转变,都是需要去做的。安于现状,不走出自己的舒适区,则不会有任何的改变。在蚂蚁最庆幸的就是永远有一堆人,在后面鞭策你,给你很大的压力。这种压力感觉在高三之后再也没有过了。是一种让你永远无法停下脚步,要一直前进的压力。而工作之后飞快的进步则正是压力才能带来的。有idea就去做,有问题就去解决,要站出来把控整体节奏。行动,行动,行动。

2020年

还等不及反应已经就在面前。那么对于3年之后的该如何规划呢。
业务上,经过半年的摸爬滚打,感觉对相互宝的业务已经得心应手,对于owner整块业务,缺的就剩省道的这一种“稳”了。现已得其精髓,想必年初整体owner业务,心态上和能力上都已经准备好了。
技术上,跟随团队一同成长,也终于get了技术sense是个什么东西。我总结下来就是:想到了,就去做!自认为,也已得其精髓,在技术的sense和行动力上,也已完成了0到1的进步。2020年,要做到的就是1到100。能够将技术落地,想法落地,提效开发。
前三年的工作,我给自己的定的基调是,学习。2020年开始的3-5年,我给自己定的则是,输出。经过3年的积累,也已形成了自己的观点和想法,那么下一阶段则需要继续输入,然后总结,最后输出了。不仅从别人身上学到东西,也需要能够让别人从自己身上开始能够学到东西,获得东西。

工作第一年是希望第三年成为一个独当一面的开发者,在第三年希望在第五年时能够成长为一个TL。当然永远都是水到渠成,你做到了X,才能成为X;而不是被别人放到了X的位置上,才做到X。