NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 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:20930

评论

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

Java并发Map的面试指南:线程安全数据结构的奥秘

程序那些事

Java 多线程 程序那些事 面试秘籍

对话在行人|厦门航空:紧抓数智化转型关键因素实现业财融合

用友BIP

2023全球商业创新大会 对话在行人

中国广核集团智慧司库系统票据业务成功上线!打造票据数智管理新标杆!

用友BIP

全球司库

Microsoft word 2019 for Mac v16.78 beta中文激活版

mac

windows 办公软件 苹果mac Word 2019 文字处理软件

在加密货币交易所开发中使用人工智能和机器学习

区块链软件开发推广运营

交易所开发 数字藏品开发 dapp开发 区块链开发 NFT开发

集成学习方法——随机森林

小魏写代码

Web3.0时代的全新合作模式:DAO | 京东云技术团队

京东科技开发者

区块链 DAO Web3.0 企业号9月PK榜

软件测试/测试开发丨利用人工智能ChatGPT批量生成测试数据

测试人

人工智能 程序员 软件测试 ChatGPT 测试数据

如何提高技术领导力?与你分享 5 个心得

LigaAI

程序人生 技术管理 成长与思考 技术领导力 企业号9月PK榜

慢SQL治理实践及落地成果分享 | 京东物流技术团队

京东科技开发者

数据库 sql 慢SQL 企业号9月PK榜

快手发布文生图大模型“可图”,探索AI新玩法

Geek老T

短视频 AIGC

Rocketmq并发和顺序消费的失败重试机制

石臻臻的杂货铺

RocketMQ

行云管家支持信创吗?是真的吗?

行云管家

信创 国产化 行云管家

Unite for Mac(将网站转化为应用程序) v4.6中文激活版

mac

苹果mac Windows软件 Unite 应用程序转换工具

中国机械总院张红新:强化集团级数据治理 业财融合助力企业降本增效

用友BIP

2023全球商业创新大会

国庆机酒预订又快又便宜?内附华为Mate60负一屏抢购攻略

最新动态

对线面试官 - Java基础面试题【一】

派大星

Java 面试题

修旧利废,提升净资产收益率

用友BIP

资产管理

数字化转型与架构-架构设计篇|什么是架构风格和架构模式?

数字随行

数字化转型

文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题

福大大架构师每日一题

福大大架构师每日一题

百度集团副总裁吴甜:大语言模型面临三大技术挑战

飞桨PaddlePaddle

文心一言 文心大模型

什么是隧道代理、http代理,隧道代理较于http代理有什么优势?

巨量HTTP

代理IP http代理

教你用API插件开发一个AI快速处理图片小助手

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号9月PK榜

JDK8升级JDK11最全实践干货来了 | 京东云技术团队

京东科技开发者

Java jdk8 JDK11 企业号9月PK榜

选择渲染农场的几个标准

Finovy Cloud

游戏制作 影视制作 渲染 云渲染 渲染农场

专业级PDF编辑和管理 Acrobat Pro DC 2023 for Mac

胖墩儿不胖y

Mac软件 pdf编辑器 编辑pdf pdf工具

聚焦企业开放OpenAPI痛难点,华为云API Explorer助力构建API门户

华为云开发者联盟

软件开发 华为云 华为云开发者联盟 企业号9月PK榜

探索以太坊 Layer 2 解决方案的后起之秀——Starknet

Footprint Analytics

区块链 以太坊 Layer 2

主动写入流对@ResponseBody注解的影响 | 京东云技术团队

京东科技开发者

spring 注解 企业号9月PK榜 @ResponseBody

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