加入阿里技术团队三年,哪些习惯让我在工作上持续受益?

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS SQL Server,独享型 2核4GB
简介: 2017年研究生毕业,我加入阿里巴巴数据库技术团队,从事分布式数据库研发,如今算来已经有三年时间了,在这期间,我深度参与了双十一背后的数据库PolarDB-X从设计到实现的全过程。在这三年的时间里,于我而言,最大的收获来自两方面:

本文作者:旺德,阿里云高级开发工程师

2017年研究生毕业,我加入阿里巴巴数据库技术团队,从事分布式数据库研发,如今算来已经有三年时间了,在这期间,我深度参与了双十一背后的数据库PolarDB-X从设计到实现的全过程。在这三年的时间里,于我而言,最大的收获来自两方面:

(1)大型数据库项目的磨砺。数据库作为三大基础软件之一,复杂度不言而喻,而分布式数据库将这个复杂度又提升了一个层次,因此尝试这个领域的企业并不多。一毕业就有机会挑战这个级别的难度,磨砺造就成长。
(2)有幸与一群实力超群的小伙伴一起工作,从他们身上能学习到太多东西了。

配图.jpg

根据工作经验和观察身边优秀的同事,我发现优良的工作习惯是区别一般工程师和专家工程师的重要素质。想要提升自己,必须要认识到哪些工作习惯会拖延工作效率,提升项目复杂度,增加沟通难度,甚至让合作伙伴失望,然后改正它们。刻意练习那些被证明有效实用的工作方式,成为习惯。在阿里的这三年,我积累了这些工作习惯:

01

最基础也最重要的习惯:想清楚再动手。大模块和功能,详细的设计文档必不可少。小模块和功能,最好动手之前,在白板或纸上写画清楚,并记录下来,千万不要靠巧合编程,要理解正在做的事情,并全面考虑各种可能性。

02

设计、编写正交性好的代码模块。这是大家公认的良好编程习惯,但说起来容易,做起来难。工程师可能会图一时之快,编写重复、复杂的“面条代码”,随着代码量膨胀,这无疑会是代码维护和问题排查的灾难。平时最好能刻意练习编写正交性好的代码(刚开始可能花时间,但要熟悉这种思维习惯),学习业界优秀的代码也是精进的方式。这里简单列四点实用技巧:

1、不向其它模块暴露任何不必要的信息,也尽量不依赖其它模块,隐藏复杂性

2、尽量避免编写相似的函数,让复用变的容易。

3、尽量避免直接使用全局变量。

4、编写独立的函数,减少函数间的依赖,函数解耦的一些技巧:

(1)只调用对象自身的函数。

(2)只调用传入参数对象的成员函数。

(3)只调用函数内部创建对象的函数。

(4)减少函数的长度。

03

如果发现代码中不满意的地方,早重构、多重构。尽量不要容忍软件中的“垃圾”。重构前应该确保:

1、不要在重构的同时加功能;
2、重构前确保拥有良好测试,确保重构对系统重量的影响最小化;
3、采取短小、深思熟虑的重构节奏。

04

系统里的每一项知识都是单一、无歧义、权威的,要与所有研发人员达成一致。避免合作者之间因为理解的差异,编写出语义相悖的代码。

05

把低级的知识放在代码里,注释留给高级的说明,糟糕的代码才需要许多注释,当然也不能没有注释。commit message也要认真写。

06

时刻考虑并发对代码的影响,面向并发设计;时刻考虑空间和时间效率;时刻考虑Corner case。

07

为项目制定详细的编码规范,并严格遵守。精心的为模块、文件、变量和函数命名,意义清晰无歧义。合理布局文件和文件夹。

08

关于bug排查。

1、遇到bug,不要恐慌,相信自己能解决它。学会评估bug的影响面。
2、bug是你的还是别人的没有关系,不要抱怨,问题已经在那了,解决它。
3、如果排除一个bug花费了很长时间,思考能否做点什么(例如增加日志、总结文档、优化代码等),让下次排查更容易。
4、Crash early,一旦发生异常,立即崩溃,让问题第一现场尽早暴露。如果认为什么不可能发生,就用断言确保它不会发生,不要自己说服和欺骗自己。
5、打印含有跟踪信息、格式统一规范的日志,尤其是异常路径的。

09

尽可能多、尽可能早、尽可能全面地测试。让质量成为正式的需求。

1、单元测试要覆盖正向路径和异常路径,关注一些边界条件,并且校验结果。
2、模块测试、集成测试、压力测试、性能测试都应该自动化。
3、不要忽略资源耗尽、故障恢复的测试场景

10

关于工具使用:

1、选择一种强大的编辑器,尽可能学好它,利用它。
2、尽可能多的自动化,让计算机去做那些重复的工作,显然它们更擅长。这既避免了出现错误,又提高效率。
3、使用配置文件,而不是集成在代码里。把抽象放进代码,把细节放进元数据。

11

做一个知识输出者,多写文章和总结,在自己常用的平台分享,总结和复盘能加快进步。不要害怕交流,不要害怕暴露缺点,有效的交流越多,你就越有影响力。

12

今天了不起的软件,比明天完美的软件更重要。

13

最后,多运动,保持头发和衣着整洁,保护好颈椎,保护好视力...


阿里云分布式数据库PolarDB-X团队招人啦!

团队简介:

PolarDB-X是阿里巴巴全自研自主可控的分布式数据库系统。不同于同品牌基于共享存储架构的数据库PolarDB,PolarDB-X是一款Share Nothing架构的分布式数据库,可支撑千万级并发规模及百PB级海量存储,专注解决海量数据存储、超高并发吞吐、大表瓶颈以及复杂计算效率等数据库瓶颈问题。

面向人群

2021 届海内外院校应届毕业生

(毕业时间为 2020 年 11 月 - 2021 年 10 月)

应聘方式:扫描下方阿里巴巴春招二维码

春季招聘.png

或直接将简历投递至dehao.wdh@alibaba-inc.com


直播预告

3月26日 15:00-16:00邀您一同见证

云数据库SQL Server 2019版全国首发

全面提升性价比及数据库能力

一年享4折

这里

预约观看直播
SQL.jpg

相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
目录
相关文章
|
存储 编译器 C语言
三年经验的C需要懂的问题
2013年3月写的文章。那会的工作主要是做一些通信设备上的底层软件,所以会深入的了解C的相关底层内容。这是那时候写的三年的C经验需要知道的事情。请不要问我这些问题的答案。
67 0
|
数据库 Android开发
不断提升自己创造溢价的能力,工作感悟
不断提升自己创造溢价的能力,工作感悟
|
搜索推荐 开发者
39岁的HR宝妈:用1/10成本完成公司数字化转型升级|《102个开发者故事》第三期
从事HR工作12年,39岁的她还有机会突破自我,改变人生赛道吗?
428 0
39岁的HR宝妈:用1/10成本完成公司数字化转型升级|《102个开发者故事》第三期
|
机器学习/深度学习 人工智能 自然语言处理
从服务内部到实现商业化,美团云所经历的这两年
100 万单、 1000 万单到 1400 万再到 1600 万单的峰值,美团点评的外卖日订单迅速上涨。与此同时,配送体验要求也在不断提升,平台也始终面临运力的挑战,必须不断平衡配送成本和配送体验的要求。
307 0
从服务内部到实现商业化,美团云所经历的这两年
在一个执行力极差的团队工作是一种怎样的体验?
一个执行力极差的团队能把一个公司活活的拖死,在这种团队中工作是一种怎么的体验呢?相信很多小伙伴会对这种团队的工作氛围感兴趣。正好冰河在假期与一位经历过这种团队的朋友聊天,聊到了这个话题,今天就给小伙伴们总结下在一个执行力差的团队工作是一种怎样的体验!
253 0
|
Android开发 开发者 UED
创业开发团队的9个误区
如今的创业公司面临的最大问题就是服务交付的速度,创业公司的开发者也与创业团队的其他成员一样,整天忙于救火,因此往往搞错重点和优先级,并最终为公司带来大麻烦。
225 0
创业开发团队的9个误区
WM
|
存储 canal 开发框架
我所经历的创业公司是如何做技术的?--《我与开源的故事》
人类的文明得以快速发展,很重要的一点在于我们可以站在巨人的肩膀上继续探索。而开源世界之于互联网行业来说就是这个巨人之一, 本文将重点阐述作者本人所了解的开源世界,以及如何通过开源项目做出有效个工作产出。
WM
9040 0
我所经历的创业公司是如何做技术的?--《我与开源的故事》
|
存储 运维 监控
技术与业务同行:我是如何在业务中成长的?
勇于打破自己的边界,拓展自己的技术栈。
2867 0
技术与业务同行:我是如何在业务中成长的?
|
Web App开发 移动开发 供应链
铁军:保持成长动力,与技术、业务、团队共成长
对于前端的成长我认为首要的是自身成长的内在动力,其次是伴随技术业务团队共同成长,不忘初心、保持空杯、梦想前行。
铁军:保持成长动力,与技术、业务、团队共成长
|
数据安全/隐私保护 网络架构
在阿里网络团队实习两年是一种怎样的体验?
大家好!我是田冰川,南京大学2016级直博生,导师为田臣老师,研究方向为计算机网络。2018年6月,我以研究型实习生的身份入职阿里巴巴基础设施事业部网络研究团队,实习期间主要从事网络验证相关的研究工作,即通过形式化方法与灰度测试,来降低网络变更中的潜在风险。
2223 0
在阿里网络团队实习两年是一种怎样的体验?

相关产品

  • 云数据库 Redis 版
  • 云数据库 RDS MySQL 版
  • 云原生数据库 PolarDB