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

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

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

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

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

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

一、给初入行程序员的建议

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

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

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

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

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

二、如何快速成长?

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

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

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.养成看书的习惯。

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

  1. 支付宝核心工程师谈如何成为一名优秀的程序员?

    支付宝研究员 李俊奎 作者 | 蚂蚁金服科技 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 校招进入支付宝,11年时间,从一线工程师成长为支付宝安全核心架构师,这个技术牛人就是李 ...

  2. 架构师必备!分布式高并发都不会还做Java程序员

    Java核心架构笔记大致如下 0~1年: Java基础(基本语法.面向对象.继承.多态.接口和抽象类.异常.内部类.集合.泛型.反射.I/O等) Web编程(Servlet+MySQL数据库+商品管理 ...

  3. 助你成长为优秀的程序员 杰出的软件工程师、设计师、分析师和架构师

    编码规范往往只是对具体编程的格式及细节要求进行规定,但对于提高软件人员编程能力而言,编程规则更具有价值,下面将我的一些观点和想法提出来供大家参考,也希望大家批评指正,谢谢! 1 概述 编程是一个软件工 ...

  4. 编程规则 - 1 概述 -- 帮助你成长为优秀的程序员 杰出的软件工程师、设计师、分析师和架构师

    作者:Jon Ji 2011/8/20 编码规范往往只是对具体编程的格式及细节要求进行规定,但对于提高软件人员编程能力而言,编程规则更具有价值,下面将我的一些观点和想法提出来供大家参考,也希望大家批评 ...

  5. 为何优秀的程序员不断离开?,阿里P8架构师

    通常,我喜欢在做某件事情的时候反省自己的动机.我认为这种反省非常好,可以确保我保持理性,不要一时冲动做出幼稚的决定.所以,在这次辞职之前,我也反省了自己,最后还是决定义无返顾.请注意,这些说在开头的话 ...

  6. 一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

    摘要:且听有着15年软件研发.架构经验的华为云MVP魏群娓娓道来,如何成为一名合格的解决方案架构师? 架构师,这是一个在技术人员,特别是软件开发人员眼中具有神圣色彩的岗位. 团队中有了架构师,就是有了 ...

  7. 阿里云王牌架构师杨曦:也谈系统缓存设计误区及高阶使用技巧

    阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 "双11"的电商业务和技术场景在阿里云上实现,并 ...

  8. 滴滴架构师被迫离职后,只留下这份731页Java程序性能优化手册

    滴滴资深架构师深度分享Java程序性能优化的宝贵经验,从软件设计.编码和JVM等维度阐述性能优化的方法和技巧. 总览: 篇幅限制,这里就不全部展示出来了.需要获取完整版Java程序性能优化手册的小伙伴 ...

  9. 阿里资深架构师——支付宝和蚂蚁花呗的技术架构及双十一实践

    2019独角兽企业重金招聘Python工程师标准>>> 每年"双11"都是一场电商盛会,消费者狂欢日.今年双11的意义尤为重大,它已经发展成为全世界电商和消费者都 ...

最新文章

  1. 语言用加法实现加饭运算_「编程之美」用C语言实现状态机(超实用)
  2. Python第二周 str的方法
  3. Spring初始化机制
  4. zabbix 监控基础
  5. 实现两线程的同步一(wait/notify)
  6. flashback drop(2015-2-3学习日记)
  7. 如何在html中加入音效,JavaScript / HTML5中的音效
  8. springboot关闭http登录验证
  9. 计算机辅助设计排版,计算机辅助设计
  10. Vue 技术栈 教你玩坏 v8引擎 吃透 js 内存回收机制
  11. 【群晖】VMM安装ubuntu虚拟机+Jenkins
  12. Ubuntu18.04屏幕自动旋转解决方法
  13. 如何检查浏览器存储中个人证书的存在
  14. ionic 以及cordova apk打包成功,安装不成功,显示Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]
  15. css图片如何垂直水平居中设置
  16. Linux系统Shell if语句用法小结
  17. 2022高处安装、维护、拆除考试题库模拟考试平台操作
  18. Python实现knn分类算法(Iris 数据集)
  19. Javascript(JS) leetcode 954. 二倍数对数组
  20. JAVA card 应用开发(四) Java Card CAP 文件组件分析

热门文章

  1. 什么意思_invalid是什么意思
  2. python读json文件中不同的数据类型_怎么使用python提取json文件中的字段
  3. 【LeetCode笔记】283. 移动零(Java)
  4. 关于python类_python中类的总结
  5. linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)
  6. java互斥锁的实现原理_java-深入分析synchronized原理
  7. 可视化排班管理_小白经理的思考日记-可视化看板和走动管理
  8. 英特尔核显自定义分辨率_让免费的核显更好用!英特尔酷睿集成的GPU如何优化?...
  9. 从中师到博士,我用了22年...
  10. 在密码学研究方面不断创新突破—— 女密码学家的成功密码