支付宝研究员 李俊奎

作者 | 蚂蚁金服科技

责编 | 伍杏玲

出品 | 程序人生(ID:coder_life)

校招进入支付宝,11年时间,从一线工程师成长为支付宝安全核心架构师,这个技术牛人就是李俊奎。

李俊奎一直聚焦风控平台的技术和架构发展,并着手搭建了中国第一家云上的商业银行——网商银行。

在2016年双11和新春红包等活动中,李俊奎和他的团队实现历史性突破,即在系统不被降级的压力下,控制资源消耗不超过2015财年双11,并且很好地满足了业务需求。

同时,李俊奎率领团队实现了风控系统的异地多活,打造出新一代的风控体系。支付宝创立之初即提出“敢付敢赔”的口号,其背后的支撑就是由李俊奎及其团队负责建设的实时风控平台。

李俊奎乐于知识分享,经常在工作中对其他同学进行辅导,深受一线工程师的尊重和认可,被大家尊称为“向爷”(花名:向秀)。

不久前,在支付宝 BASIC College以代码为主题的分享活动中,李俊奎回顾了自己与代码是如何结缘的,并对程序员职业发展谈了谈自己的想法。

给初入行程序员的建议

从在校学生到初入职场,首先是要过三关,很重要的一关就是在工作的第一天或头几天,就要接触到代码,因为只有接触到代码心里才感觉是有点踏实的。

我加入公司的时候,还是相对比较简单的,不像现在代码量,公司体量已经很大了,不管是系统数还是代码数以及变更的数量都是很大的。08年的时候阿玺(蚂蚁金服副CTO)带着我们一起搭全站的系统环境,当时是50多个,基本上三个人,花一上午就能够把整个支付宝所有的环境搭起来。

刚刚加入公司的时候会有一段强烈的新鲜感时光,是来源于我们总觉得代码其实是最重要的。我现在也会和很多的新同学说,新人同学进来首先是要过三关,很重要的一关就是希望他在工作的第一天,就是要接触到到代码(如果是技术同学),能看到代码,最好能写代码,因为只有接触到代码心里才感觉有点踏实的。

比如说你工作了几天,代码没看到或系统也不知道,这个时候心里是不踏实的,不知道自己在干嘛,会有点失落。

我入职后的一两个月都是觉得支付宝代码也还好,数量还可以,但是后来就发现我只看到了冰山的一角。

如何快速成长?

在项目中成长,从我个人的经历来看也是这样的,项目在你修炼自己的代码的这种能力里面是非常重要的。

今天最想要讲的就是项目中成长,我跟代码结缘以来最主要的经历就是在项目中的成长。

1.要写代码先看代码

支付宝的代码分成三类:第一类代码是写得很好的,这个好跟不好其实是有非常重要的一个评价,就是你能否可以快速了解它,觉得它赏心悦目并且能够快速地抓住它主要设计的精髓。

我觉得这种代码是好的代码。这一类代码,很多就是在什么地方呢?

第一个就是在一些公共的库,第二个是一些所谓的核心的系统。

我很长一段时间,一部分是自己参加一些项目,第二部分就是看代码。

我认为Code Review其实很多情况下并不是提交了代码然后让人来Code Review,这是一个过程。我认为的Code Review更多的是“看代码”,代码有好的也有坏的。

好的就是我刚才说的一些比较核心的系统,比较重要的库,这些代码能看到很多一些设计,很多的原理。新同学多看一些代码,这对于其了解全貌很有益处。

2.考古

很多同学可能接触到一些别人推送过来的系统,交接过来的系统,会发现文档不一定是最好的,很多情况下就需要考古。我也考了很多的古,做每个项目之前很大一个工作其实就是要了解过往的系统到底是怎么运作的,或者说整个链路是怎么运作的,这个时候就需要去考古了。

不能说看一些PPT上面的东西就能把这个方案能够做得非常细致,非常典型的是一些拆分类的项目或者移交过来的比较大的系统。这个时候你只能去看PPT那个层面,当然这是一个恶习,PPT画得高大上无比,真正到代码上就各种坑,各种不注意的细节。

考古我觉得是非常重要也是非常有必要的。只有把代码基本上能够粗略的看全,然后才真正能够通过代码大概了解它的运作方式,这是非常重要的。

3.不断磨炼

第三类代码就是说代码跟配置其实很多情况下是分离的,这种情况下出问题可能会比较大。

我的例子就是当时我是在做前台业务,交易核心是最重要的系统的服务。交易其实代码跟它的配置是分离的,交易的代码,如果不知道它下一步往哪里走的,就只能把代码跟配置一起来看,甚至要调试。

这个时候,通过运行它的配置的代码,在整个运行中看它的过程,而不是只看JAVA的代码,实际上这个配置代表一些很重要的逻辑在里面,现在这样的情况越来越多。我理解现在是比以前更加的难,或者说范围更加的广。

第三类代码就是不断地去做这样的一个磨炼,我的理解就是自己在项目中做这种磨炼。

关于磨练,我这里有几个例子是自己经历过的。

  • 看书

不知道大家现在还看不看书?我当然是指不是看《故事会》《小人书》,而是看一些设计的书或者别人代码的这些书,我以前参加项目的过程中,其实忙里偷闲还是要去看一些书,我看鲁肃(蚂蚁金服CTO)也是这样的习惯,经常看到鲁肃拿了一堆的书自己在那里狂啃,这个确实是一个比较好的习惯。我自己的经验是,看书的过程中可以使大家开阔思路。

  • 单元测试

第二个我刚才说会看代码,其实还有一部分看单元测试。当然现在是在强制做,有覆盖率的要求,单元测试是非常重要的一个环节。单元测试是相对非常小的一段,它能做一些测试、模拟,甚至说做一些演示的工作。

如果大家一味地看注释,注释不一定是准确的,有的注释写得好,有的注释写得差,但是实际上单元测试如果它有一定的覆盖率的话,其实在哪些逻辑不清楚的情况下,看或者写一些单元测试对于理解系统运行也是非常重要的。

  • 设计的经验

比如SOFA框架(分布式中间件),我对新同学说,如果在试用期或实习期,能够把SOFA框架的整体的原理图能够搞清楚,它的一个依赖关系的那张图能搞清楚,那么就抓住了SOFA的精髓。然后再去看支付宝主要的系统的代码,就有据可依,这就是设计的一个好处。SOFA的框架相当于龙骨,能看懂就会知道主要的一些代码,核心代码是写在哪里的,一些主要的逻辑放在哪里的,这个很重要。

设计的第一块是向框架去学习,第二块其实就是向他人去学习。我经常看项目组其他同学的代码,看优秀的代码还会做一些总结。

在项目中成长,对工程师来说是非常重要的。从我个人的经历来看也是这样的,项目在自己修炼代码能力方面是非常重要的,大概占了百分之七八十。

总结

最后,是我给大家的一些建议。

1.多看代码,无论好坏,保持代码敏感度。

代码方面,我认为首先要看代码,多看代码,因为无论如何要保持自己对代码的敏感。大家可能经常自己吐槽是一个码农,天天不管需求在哪里,只管代码码哪里,这个肯定不是最好的方式。好代码跟坏代码是有本质的差距,好代码是体现了人的思想,体现人的设计。坏代码,为什么看坏代码?某种原因也是给大家一个警示,这个我们要避免。

2.写代码,多做总结,一次比一次好。

除了经常看别人写的好代码或者考古别人的代码,我也会经常回过去看以前自己写的代码。看的时候就想,这个代码,为什么觉得写得好?为什么它那个地方是有一些问题的。

我相信不是所有的代码都是好的,自己写的代码也不一定所有都是好的。但是自己给自己是有个评判,有的时候去看,这个地方做一下更多的抽象,或者更多地提取一些公共的一些东西,这个是非常重要的。

多做总结其实是为了让自己一次比一次写得少,一次比一次好,能够避免以前的一些坑,或者说能够避免以前的一些错误,这个就是一个进步。

3.写代码前,一些设计很重要。 

写代码有很多种,有的是直接完全按照需求实现,按逻辑实现。但我想即使这样,如果大家要提高自己的代码的能力或者代码的意识,一些设计特别重要。这个设计不是要去整设计模式,整高大上的框架。很多情况下是能够通过一些代码,能够把一些这种共性的东西做一些写法的不一样,可能都是很好的设计。但是如果只是纯粹的把逻辑实现,或者说就按照这个逻辑去这样做,有的时候并不一定是最好的。

4.养成看书的习惯。

现在是时间碎片化非常严重的时代,获取知识的渠道非常多,但是有一些经典的书或者体系化的书,建议还是要去多看。养成看书的习惯,那么获取的知识会比你看比如今日头条或者一些网页还是要来得更加的体系化。

【END】

目前的python就业方向

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

 热 文 推 荐 

☞Android 10 重磅来袭:支持 5G 与折叠屏、隐私安全全面升级!

这位博士都 50 多岁了,为啥还在敲代码?

☞2019 编程语言排行榜:Java、Python 龙争虎斗!PHP 屹立不倒!

☞2亿日活,日均千万级视频上传,快手推荐系统如何应对技术挑战?

☞Docker容器化部署Python应用

☞给面试官讲明白:一致性Hash的原理和实践

☞预警,CSW的50万枚尘封BTC即将重返市场?

☞她说:行!没事别嫁程序员!

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

支付宝核心工程师谈如何成为一名优秀的程序员?相关推荐

  1. 从校招生到核心架构师,支付宝研究员李俊奎谈如何成为一名优秀的程序员

    校招进入支付宝,11年时间,从一线工程师成长为支付宝安全核心架构师,这个技术牛人就是李俊奎. 李俊奎一直聚焦风控平台的技术和架构发展,并着手搭建了中国第一家云上的商业银行--网商银行. 在2016年双 ...

  2. 如何成为一个优秀的程序员_如何成为一名优秀的程序员

    如何成为一个优秀的程序员 by Amy M Haddad 通过艾米·M·哈达德(Amy M Haddad) 如何成为一名优秀的程序员 (How to be a great programmer) Wh ...

  3. 我要成为一名优秀的程序员!

    2019独角兽企业重金招聘Python工程师标准>>> 2013年的3月14号,所谓的白色情人节,这天我很不幸.在班级篮球比赛中,我上篮落地时不小心搞到小腿骨折,然后在恐慌中被送进了 ...

  4. 想要成为一名优秀的程序员,这十八招必看

    文章目录 第一招:速学能力 第二招:理解能力 第三招:编程能力 第四招:使用能力 第五招:编码能力 第六招:注释能力 第七招:思维能力 第八招:英语能力 第九招:学习能力 第十招:思考能力 第十一招: ...

  5. 成为一名优秀的程序员基本要素

    职业要求 一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的. 程序员 大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位. ...

  6. 讲点码德!避免这些代码坏味道,努力做一名优秀的程序员

    Martin Fowler:任何一个傻瓜都能写出计算机可以理解的代码.唯有写出人类容易理解的代码,才是优秀的程序员. 大家闭着眼睛想一下什么是好代码?也许你的脑海中漂浮着一堆词:干净.整洁.命名规范. ...

  7. 如何成为一名优秀的程序员(三)

    ...程序员不妨多学学解密.杀毒.肯定在中国有大的用场. 首先一定要理解c++中的面向对象理论,最好理解MFC的编程,这样一步步下去 行呀,不过你准备接受VC的时候同时认识MSDN,这可真是个大宝库, ...

  8. 怎样成为一名优秀的程序员

    工作了有这么一段时间了,在小编的眼里看来,不管你在哪里工作,或者是做各种不同的工作,成为一个优秀的员工与成为优秀的软件开发工程师的过程是一样的,下面便是大神们总结的一些伟大的程序员所具有的经验和品质. ...

  9. 讲点武德!避免这些代码坏味道,努力做一名优秀的程序员

    Martin Fowler:任何一个傻瓜都能写出计算机可以理解的代码.唯有写出人类容易理解的代码,才是优秀的程序员. 大家闭着眼睛想一下什么是好代码?也许你的脑海中漂浮着一堆词:干净.整洁.命名规范. ...

最新文章

  1. 手机内存RAM、ROM简介
  2. 你那么追捧的springboot,到底替你做了什么?
  3. Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
  4. 秘密开发一年多,解密奥运史上首个数字云徽章
  5. XII Open Cup named after E.V. Pankratiev. GP of Eastern Europe (AMPPZ-2012)
  6. eBPF and IO Visor: The what, how, and what next!
  7. 华为交换机静态路由配置案例_快速了解配置三层交换机策略路由配置
  8. php websocket ipv6,原生socket支持ipv6
  9. 解析搜索引擎的Robots协议
  10. 计算机学院李成伟,【迎新专题二】校长李成伟带队视察迎新工作
  11. 华为oj c语言 dna序列,(华为OJ)C 语言—计算字符串的距离(动态规划算法)
  12. java坦克大战爆炸效果_用java做坦克大战--主要类和基本功能实现
  13. windows安全中心(windows defender)对下载内容报毒解决方案
  14. 社科院与杜兰大学金融管理硕士项目——苦练基本功是通向成功的必经之路
  15. 64位处理器_计算机基础:处理器
  16. 金蝶——“免、抵、退”税操作说明及帐务处理
  17. WPF渲染事件CompositionTarget.Rendering
  18. 抖音实战~分享模块~短视频下载(保存到相册)
  19. 在flask中同步调用celery.task函数报错分析
  20. php 五舍六入,Golang浮点型的默认舍入规则——四舍六入五成双

热门文章

  1. 【U-net】【粗读】Retinal blood vessel segmentation using fully convolutional network with transfer...
  2. 矩池云上如何修改cuda版本
  3. tsung压测mysql_高并发测试工具Tsung使用教程
  4. grid++中打印表格时怎么让每页有打印表头_一张表学习EXCEL(七):打印也有方法...
  5. 【机器学习】Andrew Ng——03线性代数知识回顾
  6. 程序员的自我修养笔记 2
  7. JAVA Swing GUI设计 WindowBuilder Pro Container使用大全5——JToorBar使用
  8. 金牌访谈栏目《架构师说》重磅上线!
  9. 为什么新一代的Rust、Go等编程语言都如此讨厌if-else、Switch结构
  10. 瑞典正成为欧洲硅谷?