“双十一”前夕,支付宝BASIC College举办了一场名为“超级Ma力大赛”的活动。这是一场只用代码说话的竞赛,共有数千名支付宝的工程师参加,程序员和程序媛们通过写代码、晒代码,展现出对极致代码的孜孜追求,并以此描摹出支付宝最强Coder的画像——匠心、极致、传承、创新。

我们采访了分别获得卓越代码奖、优秀代码奖、最强CodeMan的三位支付宝程序员,聊聊在他们心中,什么是好代码,怎样才算是卓越的程序员。

优秀的代码有共性

一千个读者有一千个哈姆雷特,一千个程序员也有一千种代码写作方式,但好的代码一定是有其共性所在的,三位程序员也都给出了自己的看法。

“优秀的代码,在我看来就是可以跑、可以读、可以被欣赏。”这是优秀代码奖得主入栈同学非常体系化的概括。

  • “可以跑”是对机器来说的,写代码最基本的目的就是告诉计算机怎么干活,所以代码首先要写对。我们常常说的并发问题、安全问题、异常处理缺失问题等等,都是“可以跑”这个要求上面出了问题。
  • 第二个“可以读”是对人来说的,毕竟代码阅读的次数要远远超过编写的次数。一份可以读的代码,即使在性能、扩展性上存在缺陷,还是能通过较好的可读性,被他人理解,进而解决这些问题。相反,有些代码虽然精妙、高效,但是看不懂,受众小,不好扩展,就容易被历史所抛弃。
  • 第三个是“可以被欣赏”。前两个标准,评判角度在于功用性,“可以被欣赏”则是从艺术性的角度。就像照片的本意是为了记录,但也可以被做成艺术品,代码也一样。优秀的代码读起来,主次分明、层次清晰、赏心悦目,就和看小说一样,能看到代码作者背后对领域问题求解的思考,看到对风险的重视,看到精雕细琢的痕迹。

而在卓越代码奖获得者樱桃同学看来,如果只能用三个词来概括优秀的代码,首先应该是正确,其次是可读,最后才是性能。

正确一定是排在最优先的位置,因为不正确的代码达不成功能最后毫无意义。代码首先是给人读的,然后才是给机器读的,可读性对保证他人理解、项目的长期维护性上影响最大,而且可读的代码通常会是简洁、优雅的。最后才是性能,性能跟业务是伴生关系,前期代码性能相对来说不会太重要。

摘得最强CoderMan称号的连明同学给出的概括则是“可读性、高稳定性和优雅性”。除了入栈和樱桃都提到的可读和优雅以外,连明补充了一个高稳定性的特点。

在他看来,稳定性是相对难得的一个代码特性,因为除了实现功能以外,稳定性还意味着在技术风险方面的考虑,以及当下的稳定性和未来业务迅猛扩展时能否保持稳定性的考虑。

代码可读、正确、稳定、简洁优雅,这是支付宝程序员们对优秀代码所下的定义。

师兄领进门,修行在个人

工程师文化意味着什么?也许“Open”和“Share”两个词可以略作解释。支付宝BASIC College一直有一个“师兄文化”,许多技术同学的第一本“入门教程” 就是师兄的代码,在师兄的传帮带之下,支付宝的技术同学不断提升着自己的技术实力。

入栈直到今天仍对自己的师兄功玉有着深刻的印象:

我现在写代码的严谨态度,有很大一部分就是当年师兄带我时培养起来的。我记得,有一次我们和组内其他一些同学讨论,在做vo、bo、do的转换时,是使用Apache Beanutils好,还是直接手写getter、setter更好,一块白板讨论了半个下午,性能、缺陷、给后人留坑等各种问题都考虑到了,最后的结论是直接手写会更好。这与后来集团推出的《阿里巴巴Java开发手册》不谋而合。

类似的故事也在连明身上发生过。初入行的连明第一次开发第一个迭代版本,完成后给师兄Review,师兄只提了两点:写代码前有没有装支付宝的代码格式化插件工具;单测、代码安全扫描有没有打开。然后连明就懵了,后来他才明白,前者代表的是代码格式、规约,这些对于生产而言很重要。后者更容易被技术同学所忽视,魔鬼存在于细节中,如果连这些都做不好,师兄也没有继续做Review的必要。

如果大家对C/C++感兴趣的话,可以加一下我们的学习交流Q群:637  935  295,免费领取一套学习资料和视频课程哟~

樱桃所在的团队是一个新组建的团队,他虽然没有经历过师兄的传帮带,但对此也有自己的一番理解。

国内计算机专业存在一个很大的缺失,就是没有培养出大公司所需的、开发能力符合要求的程序员。大公司需要很多能够写出架构合理、实现健壮、代码可读的人才,代码比赛也好、师兄文化也好,都是在填补一个鸿沟,从大学到公司之间做一个引导,工程师要有扎实的基本功,才能聚集在一起做大规模的软件工程。

支付宝的师兄给技术同学上了入行的第一课,播种下了匠心与传承的种子,一代又一代支付宝技术人努力地在各自的岗位上持续追求着极致与创新,这就是支付宝的Code文化。

狂奔在追求卓越的代码路上

樱桃是清华毕业的博士,“我开始写生产线上的代码也就半年多时间”他说。

参加这次超级Ma力大赛以后,他觉得对于自己的代码价值观有了很好的引导作用。作为一个既是一线开发者又是半个Manager的技术人,他眼里的优秀的程序员形象必须具备独立思考能力,能够独立解决一个问题,可以完美Cover从需求分析、设计到落地的全过程。

入行三年多的连明,这次获得了“最强CoderMan”殊荣,但他表示,自己不敢说最强,但是有朝着最强前进的追求。在他看来,支付宝优秀的程序员都有一些共性:

  • 匠心。一个好的程序员就是一个好的工匠,不管是工作还是交流,都精益求精,永不满足,具备耐心和专业的态度。
  • 传承。好的程序员应该是一个Master,不仅自己很强,而且可以带动他人。
  • 创新。很少人能真正做到创新,连明也希望自己能够用一个创新的想法和思路解决支付宝业务上的痛点,让技术驱动业务增长。

但他认为,态度是首要的,没有态度支撑,这一切将毫无意义。

入栈总结了三种优秀程序员的类型:一类是实现型,实现功能既快又好;一类是架构型,拿到需求能快速抓住核心,提出解决方案;一类是创造型,能够发现问题,提出创新的策略、算法以解决现存问题。“我目前还是努力成为一个架构型程序员”,谦虚的他这么说。

提到怎么时刻保持自己的技术实力不断提升时,三位也分别给出了自己的看法:

  • 樱桃表示自己大学时缺失的是对软件工程能力的培养,通过自学读了两本好书《可读代码的艺术》和《代码大全》,学会了如何写可读代码、如何去设计软件。
  • 入栈则会在广度和深度上下功夫。广度上时刻关注领域技术文章,碎片时间看看Hacker News、Reddit的programming频道;深度上参与大型项目与牛x的10倍程序员一起共事,学习、提升自己,他提到,在财富技术部这个平台,他参与了一系列大型项目,接触了很多大牛,感到十分幸运。
  • 连明很感谢金融核心平台部这个平台,让他有机会一进来就负责比较核心的系统,从了解一个系统,到了解其承载的业务,再到整条线的系统、架构,让他学到了很多东西。

其实对于支付宝技术人而言,初心就是做到代码的匠心、极致、传承和卓越,通过技术实力来回馈业务,保证业务的稳定与增长。

敬畏每一行代码,时刻为之保持思考,支付宝的技术同学们狂奔在追求卓越代码的路上。

支付宝程序员眼中的极致代码和卓越程序员是什么样的?相关推荐

  1. 玫瑰花的python程序代码_python玫瑰花代码讲解,怎样用程序编写编写玫瑰花的代码,c程序或gava或者python...

    python怎么画玫瑰花 海龟绘图有着许多的命,这些命以划分为两种:一种为运动命令,一种笔控制命令 1. 运动命令: forward(degree)  #向前移动距离degree代表距离 backwa ...

  2. 优秀程序员眼中的整洁代码

    点击上方蓝字关注公众号 码个蛋第274次推文 看看大神们怎么说 作者:风铃无声江舟听雨 博客:https://www.jianshu.com/u/b525437c0777 有多少程序员,就有多少定义. ...

  3. 微信小程序php实现登陆的代码,微信小程序实现微信登录

    步骤: 1.调用wx.login得到code 返回的结果示例: { code:"051nI5Pa1XJkDs0773Pa1OWYOa1nI5PF" errMsg:"log ...

  4. 程序员眼中的编程语言

    下图是一个搞笑的图片--程序员眼中的编程语言. 图片的横轴是编程语言. 纵轴是各语言的程序员.粉丝.信徒. 中间的各个小图片则是,粉丝眼中的编程语言的形象. 比如说, 第一行第一列,是Java程序员看 ...

  5. 观点:再见Objective C?程序员眼中的Swift

    对于苹果开发者来说,如今已经进入了"Swift时代".虽然编程语言Objective C备受喜爱,不过它作为苹果主流编程语言的日子已经所剩无几.随着WWDC开发者大会的落幕,Swi ...

  6. iOS程序员眼中的首次使用产品体验

    2017.11.23 一. 前言 首先想说一下为什么写这篇文章: <启示录>这本书曾提到:如果开发的产品没有市场价值,那么无论开发团队多么优秀也无济于事.那么同样的,在我们程序员费尽周折抓 ...

  7. 【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

    阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015 ...

  8. java中类图概念,程序员眼中的UML(4)--类图释疑之一,Attribute和Property之区别

    程序员眼中的UML(4) --类图释疑之一,Attribute和Property之区别 上一篇中提出了很多问题,其中最令人费解的可能就是Attribute和Property之区别了吧.我在网络上寻找良 ...

  9. 【程序员眼中的统计学(12)】相关与回归:我的线条如何?

    相关与回归:我的线条如何? 作者 白宁超 2015年10月25日22:16:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机 ...

最新文章

  1. [置顶]       加载事件js代码
  2. 如何学习Linux性能优化?
  3. illustrator下载_Illustrator笔工具练习
  4. Java 中的并发工具类
  5. java恶搞程序半成品,打开将程序本身写到c盘隐藏,并设置开机启动项。可无限开机,可加影藏cmd while死循环 卡爆cpu
  6. springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺
  7. Java 8 Stream Api 中的 peek、map、foreach区别
  8. linux中 jdk 的卸载和安装[转]
  9. java/php/net/python房产信息管理系统设计
  10. 计算机内存和磁盘的关系
  11. 小米手机:雷布斯的米饭刚下锅
  12. AMiner发布:2022年人工智能全球最具影响力学者榜单AI 2000
  13. springboot中使用kafka
  14. 用计算机升级ipad系统软件,iPad如何升级系统?三种ipad升级系统的方法汇总
  15. Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
  16. 自主开发的小型Web服务器
  17. springboot集成mybatis
  18. CSS传统布局所用的元素
  19. java 工作两年的简历_工作经验只有两年的Java开发,简历中需要写学校经历吗?...
  20. 中兴通讯goldenDB分布式数据库在实际应用中的方案解析

热门文章

  1. “国家科学数据中心”联合专刊征稿
  2. 四大必看亮点,2019黄石工业互联网创新发展大会精彩前瞻
  3. 专题导读:大数据驱动的智能计算体系架构
  4. 【2016年第6期】支持植物学大数据整合与公众服务的iFlora云平台建设
  5. 作者:桑基韬(1985-),男,博士,中国科学院自动化研究所副研究员
  6. 作者:王学志(1979-),男,中国科学院计算机网络信息中心副研究员。
  7. 【数字逻辑设计】Logisim构建三种多路选择器
  8. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)
  9. 【数据结构与算法】红黑树的Java实现
  10. Python学习秘籍 这些窍门就连老司机都不一定知道 值得学习