校招进入支付宝,11年时间,从一线工程师成长为支付宝安全核心架构师,这个技术牛人就是李俊奎。程序员
李俊奎一直聚焦风控平台的技术和架构发展,并着手搭建了中国第一家云上的商业银行——网商银行。设计模式
在2016年双11和新春红包等活动中,李俊奎和他的团队实现历史性突破,即在系统不被降级的压力下,控制资源消耗不超过2015财年双11,而且很好地知足了业务需求。安全
同时,李俊奎率领团队实现了风控系统的异地多活,打造出新一代的风控体系。支付宝创立之初即提出“敢付敢赔”的口号,其背后的支撑就是由李俊奎及其团队负责建设的实时风控平台。架构
李俊奎乐于知识分享,常常在工做中对其余同窗进行辅导,深受一线工程师的尊重和承认,被你们尊称为“向爷”(花名:向秀)。框架
不久前,在支付宝 BASIC College以代码为主题的分享活动中,李俊奎回顾了本身与代码是如何结缘的,并对程序员职业发展谈了谈本身的想法。分布式
从在校学生到初入职场,首先是要过三关,很重要的一关就是在工做的第一天或头几天,就要接触到代码,由于只有接触到代码内心才感受是有点踏实的。单元测试
我加入公司的时候,仍是相对比较简单的,不像如今代码量,公司体量已经很大了,无论是系统数仍是代码数以及变动的数量都是很大的。08年的时候阿玺(蚂蚁金服副CTO)带着咱们一块儿搭全站的系统环境,当时是50多个,基本上三我的,花一上午就可以把整个支付宝全部的环境搭起来。学习
刚刚加入公司的时候会有一段强烈的新鲜感时光,是来源于咱们总以为代码实际上是最重要的。我如今也会和不少的新同窗说,新人同窗进来首先是要过三关,很重要的一关就是但愿他在工做的第一天,就是要接触到到代码(若是是技术同窗),能看到代码,最好能写代码,由于只有接触到代码内心才感受有点踏实的。测试
好比说你工做了几天,代码没看到或系统也不知道,这个时候内心是不踏实的,不知道本身在干吗,会有点失落。spa
我入职后的一两个月都是以为支付宝代码也还好,数量还能够,可是后来就发现我只看到了冰山的一角。
在项目中成长,从我我的的经从来看也是这样的,项目在你修炼本身的代码的这种能力里面是很是重要的。
今天最想要讲的就是项目中成长,我跟代码结缘以来最主要的经历就是在项目中的成长。
1.要写代码先看代码
支付宝的代码分红三类:第一类代码是写得很好的,这个好跟很差实际上是有很是重要的一个评价,就是你可否能够快速了解它,以为它赏心悦目而且可以快速地抓住它主要设计的精髓。
我以为这种代码是好的代码。这一类代码,不少就是在什么地方呢?
第一个就是在一些公共的库,第二个是一些所谓的核心的系统。
我很长一段时间,一部分是本身参加一些项目,第二部分就是看代码。
我认为Code Review其实不少状况下并非提交了代码而后让人来Code Review,这是一个过程。我认为的Code Review更多的是“看代码”,代码有好的也有坏的。
好的就是我刚才说的一些比较核心的系统,比较重要的库,这些代码能看到不少一些设计,不少的原理。新同窗多看一些代码,这对于其了解全貌颇有益处。
2.考古
不少同窗可能接触到一些别人推送过来的系统,交接过来的系统,会发现文档不必定是最好的,不少状况下就须要考古。我也考了不少的古,作每一个项目以前很大一个工做其实就是要了解过往的系统究竟是怎么运做的,或者说整个链路是怎么运做的,这个时候就须要去考古了。
不能说看一些PPT上面的东西就能把这个方案可以作得很是细致,很是典型的是一些拆分类的项目或者移交过来的比较大的系统。这个时候你只能去看PPT那个层面,固然这是一个恶习,PPT画得高大上无比,真正到代码上就各类坑,各类不注意的细节。
考古我以为是很是重要也是很是有必要的。只有把代码基本上可以粗略的看全,而后才真正可以经过代码大概了解它的运做方式,这是很是重要的。
3.不断磨炼
第三类代码就是说代码跟配置其实不少状况下是分离的,这种状况下出问题可能会比较大。
个人例子就是当时我是在作前台业务,交易核心是最重要的系统的服务。交易其实代码跟它的配置是分离的,交易的代码,若是不知道它下一步往哪里走的,就只能把代码跟配置一块儿来看,甚至要调试。
这个时候,经过运行它的配置的代码,在整个运行中看它的过程,而不是只看JAVA的代码,实际上这个配置表明一些很重要的逻辑在里面,如今这样的状况愈来愈多。我理解如今是比之前更加的难,或者说范围更加的广。
第三类代码就是不断地去作这样的一个磨炼,个人理解就是本身在项目中作这种磨炼。
关于磨练,我这里有几个例子是本身经历过的。
(1)看书
不知道你们如今还看不看书?我固然是指不是看《故事会》《小人书》,而是看一些设计的书或者别人代码的这些书,我之前参加项目的过程当中,其实忙里偷闲仍是要去看一些书,我看鲁肃(蚂蚁金服CTO)也是这样的习惯,常常看到鲁肃拿了一堆的书本身在那里狂啃,这个确实是一个比较好的习惯。我本身的经验是,看书的过程当中可使你们开阔思路。
(2)单元测试
第二个我刚才说会看代码,其实还有一部分看单元测试。固然如今是在强制作,有覆盖率的要求,单元测试是很是重要的一个环节。单元测试是相对很是小的一段,它能作一些测试、模拟,甚至说作一些演示的工做。
若是你们一味地看注释,注释不必定是准确的,有的注释写得好,有的注释写得差,可是实际上单元测试若是它有必定的覆盖率的话,其实在哪些逻辑不清楚的状况下,看或者写一些单元测试对于理解系统运行也是很是重要的。
(3)设计的经验
好比SOFA框架(分布式中间件),我对新同窗说,若是在试用期或实习期,可以把SOFA框架的总体的原理图可以搞清楚,它的一个依赖关系的那张图能搞清楚,那么就抓住了SOFA的精髓。而后再去看支付宝主要的系统的代码,就有据可依,这就是设计的一个好处。SOFA的框架至关于龙骨,能看懂就会知道主要的一些代码,核心代码是写在哪里的,一些主要的逻辑放在哪里的,这个很重要。
设计的第一块是向框架去学习,第二块其实就是向他人去学习。我常常看项目组其余同窗的代码,看优秀的代码还会作一些总结。
在项目中成长,对工程师来讲是很是重要的。从我我的的经从来看也是这样的,项目在本身修炼代码能力方面是很是重要的,大概占了百分之七八十。
最后,是我给你们的一些建议。
1.多看代码,不管好坏,保持代码敏感度。
代码方面,我认为首先要看代码,多看代码,由于不管如何要保持本身对代码的敏感。你们可能常常本身吐槽是一个码农,每天无论需求在哪里,只管代码码哪里,这个确定不是最好的方式。好代码跟坏代码是有本质的差距,好代码是体现了人的思想,体现人的设计。坏代码,为何看坏代码?某种缘由也是给你们一个警示,这个咱们要避免。
2.写代码,多作总结,一次比一次好。
除了常常看别人写的好代码或者考古别人的代码,我也会常常回过去看之前本身写的代码。看的时候就想,这个代码,为何以为写得好?为何它那个地方是有一些问题的。
我相信不是全部的代码都是好的,本身写的代码也不必定全部都是好的。可是本身给本身是有个评判,有的时候去看,这个地方作一下更多的抽象,或者更多地提取一些公共的一些东西,这个是很是重要的。
多作总结实际上是为了让本身一次比一次写得少,一次比一次好,可以避免之前的一些坑,或者说可以避免之前的一些错误,这个就是一个进步。
3.写代码前,一些设计很重要。
写代码有不少种,有的是直接彻底按照需求实现,按逻辑实现。但我想即便这样,若是你们要提升本身的代码的能力或者代码的意识,一些设计特别重要。这个设计不是要去整设计模式,整高大上的框架。不少状况下是可以经过一些代码,可以把一些这种共性的东西作一些写法的不同,可能都是很好的设计。可是若是只是纯粹的把逻辑实现,或者说就按照这个逻辑去这样作,有的时候并不必定是最好的。
4.养成看书的习惯。
如今是时间碎片化很是严重的时代,获取知识的渠道很是多,可是有一些经典的书或者体系化的书,建议仍是要去多看。养成看书的习惯,那么获取的知识会比你看好比今日头条或者一些网页仍是要来得更加的体系化。
本文为云栖社区原创内容,未经容许不得转载。