写点什么

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

  • 2019-10-18
  • 本文字数:3286 字

    阅读完需:约 11 分钟

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

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


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


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


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


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


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

给初入行程序员的建议

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


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


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


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


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

如何快速成长?

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


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

要写代码先看代码

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


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


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


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


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


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

### 考古

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


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


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

不断磨炼

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


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


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


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


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

1. 看书

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

2. 单元测试

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


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

3. 设计的经验

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


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


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

总结

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

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

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

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

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


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


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

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

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

4.养成看书的习惯。

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


本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。


原文链接:


https://mp.weixin.qq.com/s/twkykXzsHcdk_2fa5xNvjQ


2019-10-18 18:201235

评论

发布
暂无评论
发现更多内容

基于Java+SpringBoot+Vue前后端分离家政服务平台设计和实现

hunter_coder

后端开发

基于Java+SpringBoot+Vue前后端分离教师工作量管理系统设计和实现

hunter_coder

后端开发

基于Java+SpringBoot+Vue前后端分离疾病防控综合系统设计和实现

hunter_coder

后端开发

基于Java+SpringBoot+Vue前后端分离计算机学院校友网设计和实现

hunter_coder

后端开发

(图片不缺失)深入淘宝商品详情:利用taobao.item_get_desc API挖掘商品标题与描述

代码忍者

API 文档 API 测试 pinduoduo API

跨平台的SSH、Telnet和SFTP客户端Termius for Mac v8.4.0直装激活版

Rose

Termius for Mac破解

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

Rose

文献解读-遗传病-第二十五期|《通过贝叶斯和单倍型预测胎儿基因型进行单基因病的无创产前诊断》

INSVAST

基因测序 基因数据分析 生信服务 遗传病测序 遗传病

Autodesk AutoCAD2020(附安装教程图解) 激活特别版 mac/win

Rose

AutoCAD2022序列号 autocad2022秘钥

基于Java+SpringBoot+Vue前后端分离教师工作量计算系统设计和实现

hunter_coder

后端开发

蝉联“第一”背后,是vivo的“快乐飞轮”正循环

脑极体

终端

Autodesk AutoCAD 2024 Mac破解补丁版 cad2024中文安装教程 兼容m芯

Rose

macOS Sonoma 14.6 (23G80) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos Sonoma

Apple Intelligence将在今年10月推出?AI毛绒玩具BubblePal回答人类幼崽十万个为什么!|AI日报

可信AI进展

人工智能

微服务架构革新:百度Jarvis2.0与云原生技术的力量

百度Geek说

微服务架构 企业号2024年7月PK榜 百度商业产品矩阵 Jarvis应用托管平台

基于Java+SpringBoot+Vue前后端分离教学资料管理系统设计和实现

hunter_coder

后端开发

B端常用交互方式的量化及优化实践和指引|得物技术

得物技术

web前端 交互 企业号2024年7月PK榜

怎样在touchbar养电子宠物? Touch bar pet for Mac 在macbook上养一只宠物

Rose

MacBook 电子宠物 touchbar

JProfiler for Mac(Java开发分析软件) JProfiler

Rose

Java 开发 JProfiler 14下载 JProfiler 14破解版

基于Java+SpringBoot+Vue前后端分离机动车号牌管理系统设计和实现

hunter_coder

后端开发

基于Java+SpringBoot+vue前后端分离技术交流和分享平台设计实现

hunter_coder

后端开发

霍尼韦尔:AI在工业领域的应用方兴未艾 不断发现新的应用场景

财见

2024 ChinaJoy,火山引擎以AI大模型为动能推进游戏玩法创新

新消费日报

小间距LED显示屏:引领显示技术新潮流

Dylan

技术优势 LED显示屏 全彩LED显示屏 led显示屏厂家 市场

谷歌新AI模型在国际奥数竞赛达到银牌标准!OpenAI推出AI搜索引擎SearchGPT挑战谷歌!|AI日报

可信AI进展

人工智能

macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

Rose

从校招生到核心架构师,支付宝研究员李俊奎谈如何成为一名优秀的程序员_文化 & 方法_Geek_cb7643_InfoQ精选文章