代码审查的艺术:Dropbox 的故事

Dropbox 的 iOS 应用中的每一行代码,都是开始于被添加到 Maniphest 中的一个 bug 或者功能任务,Maniphest 是我们的任务管理系统。当一位工程师在上面接受一个任务,那么在开始写代码前相应的责任就已经赋予他。Phabricator 这个平台包含了我们的代码审查工具,这个代码审查工具有很多很好的功能,但它在评估对象之间的相互协作上不是做的很好。为了弥补这点,我们的工程师在开始他们的工作之前需要知道审查他们的任务的人是谁[1]。对于被审查代码的工程师来说,这样能确保在他们的团队中有一个橡皮鸭,这个橡皮鸭知道项目中一些改动代码的背景和原因,并且对代码的设计决策上起到协助的作用。对于审查者来说,这有助于他们将一些变化考虑进他们的开发周期评估中,这样有助于开发周期评估的准确。如果不出意外的话,我们的经验会告诉我们提前做好计划可以有效地避免审查代码过程中的重复劳动。针对项目中的变化做计划可以像在白板前做交流一样简单,也可以像写一篇建设性文档一样深入。这都取决于我们自己的选择。

[1] 我的团队中每个人都要审查代码。新来的同事在可以独立审查较大的任务之前,会先被分配一些比较少的代码量。

随着任务的展开,工程师需要一直谨记我们的代码规范。这个规范是一个最佳实践和一致规范的大融合,它的存在使我们不用去猜测我们应该怎样编码,也使审查变得更容易[2]。因为这是一个大项目,开发团队中没有一个人能对整个项目有完美的映射或理解。所以我们的工程师需要依赖团队中其他工程师的帮助,将这些代码的功能表现拼成一个整体,这有助与我们在阅读代码时能理解其中的逻辑。

[2] 即使这样,每当一个新成员加入时,总还是不免要展开一次关于使用 property 还是 ivar 的辩论。

当这个任务的工作进行到某个阶段时,我们的工程师很可能会做出一些明显不合理的或者不受欢迎的决定。捕获这个心理的最佳时间就是发生这一刻 — 为将来向审查者做好解释的准备。去解释这些变化,说起来容易做起来难,我们的工程师被鼓励使用//TODO//HAX,和 //FIXME 来在代码中写注释。//TODO 和 //FIXME 从字面上就可以理解它的意义,尽管后者会产生编译警告,所以必须在下一次发布之前要被解决。//HAX 这个注释比较有趣的地方。我们用它标注那些用来绕过 Apple 的 API 里的 bug 但又不容易一眼看明白的方法[3]。我们的注释会写上日期和写这个注释人的名字[4],在之后很多时候我们总会感激这些额外的上下文的[5]。

[3] 标注里通常是第三方来源或者 radar 的链接,还有特殊的重现步骤。

[4] 比如像 //HAX:(ashleynh) 2015-03-09

时间: 2024-08-08 13:02:24

代码审查的艺术:Dropbox 的故事的相关文章

谈谈游戏机制Game Mechanism

抱着游戏实现的想法去钻研技术可以让人明晰逻辑,然而理清构建将会统观大局. 今天就从游戏机制上谈谈电子游戏的满足机制和划分. 国内游戏的设计已经完全抛开了传统的趣味表达和故事叙述概念,流行的是网络的成就感获得.那种自动寻路打怪的系统让人哭笑不得,玩家更多的是为了等级装备成就感的虚荣.不说艺术表达和故事诉求,这是为了满足非常低级心理层次的方式. 游戏机制和GamePlay 不同类型的游戏会涵盖不同的机制.如果把游戏机制进行分类:可以概述为五种: 物理机制:所有的动作类游戏玩家都会跳跃,AngryBi

架构师速成4.8-幼儿园书单资料推荐

java学习 head first java 高效学习 如何高效学习 学习之道 学习要像加勒比海盗 如何高效阅读 沟通 沟通的艺术 沟通:用故事产生共鸣 演讲之禅 60天完美口才打造计划 学习资料站 http://www.read.org.cn/ http://book.douban.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

中国版dropbox“坚果云”和它背后的团队故事

(速途网专栏 作者:娄昊川)坚果云是一款中文存储服务,前身是“坚果铺子”,提供免费的云空间,与dropbox类似,用户可以直接把档案同步到坚果云,供自己和伙伴用任何设备访问.自上线以来,几乎所有用户都反映该产品满足了他们很多需求,那这个产品背后的精神和团队究竟有着怎样有趣的故事. 今天我们采访了坚果云的两位创始人,同样也是坚果云的打造者,蔺皓和杨剑: Teambition:坚果云和dropbox是最像的,同步性能都非常好,想比之下坚果云最大的优势在哪里? 蔺皓:dropbox也是一款存储个人数据

《艺术的故事》-读书笔记1

1.关于艺术家们画的不够逼真的作品 毫无疑问,现代艺术家们有足够的知识作出更逼真的作品,因此,当我们看到一副画画的不够正确时,首先应该考虑两件事,一件事是艺术家是否无端地更改了他所见的事物 的外形,另一件事是除非已经证明我们的看法正确而画家是错的,否则就不能指责一幅画画的不正确.一幅作品不够正确的地方也许正是了解它的钥匙. 2.关于什么是美?为何美?如何创造美?也许很难回答,但是美学感受却是可以通过对美好事物的不断观赏,分析来提高的. 3.知之为知之,不知为不知,是知也. 注:本文观点为<艺术的

《反入侵的艺术——黑客入侵背后的真实故事》书评

说是书评,但限于本人词穷,表达能力也有限,叫读后感或许更好一些. 一. 前言简介 凯文·米特尼克(Kevin David Mitnick),世界范围名声最大,影响最高的黑客,没有之一. Mitnick也许就是黑客的代名词.美国司法部仍然指责他为"美国历史上头号电脑犯罪通缉犯".他的所作所为被记录在两部好莱坞电影当中:<Takedown>和<Freedom Downtime>. 15岁时,Kevin Mitnick用打工赚的钱买了一台计算机,当他"闲逛&

【沟通的艺术】故事大王

作者:范军 (Frank Fan)新浪微博:@frankfan7  微信:GetToCloud  虽然逻辑和数据对技术演讲很重要,可恰当的故事也必不可少. 在听完演讲的一周后,听众可能会忘却绝大多数内容.但一个恰当的故事,会让人记住.相对于逻辑和数据而言,人脑对故事的印象更深刻.故事往往能引发感情,产生关联.感情从而能影响决定及行为. 在技术为主的演讲中,听众对技术的了解可能差异很大,如果过多注重技术细节,很可能让部分听众昏昏欲睡.那么演讲者怎么才能有效的传达信息呢?不妨尝试用讲故事的方式. 人

.NET单元测试的艺术-3.测试代码

开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录: 1.入门 2.核心技术 3.测试代码 一.测试层次和组织 1.1 测试项目的两种目录结构 (1)集成测试和单元测试在同一个项目里,但放在不同的目录和命名空间里.基础类放在单独的文件夹里. (2)集成测试和单元测试位于不同的项目中,有不同的命名空间. 实践中推荐使用第二种目录结构,因为如果我们不把

【沟通的艺术】自我反思的技术演示

作者:范军 (Frank Fan)新浪微博:@frankfan7 仅仅练不说是傻把式,仅仅说不练是假把式.又说又练才是真把式.沟通的艺术系列,不敢托大.纯属自己心得分享. 本文是一次技术演讲的自我点评,请见演讲视频. 本財年32场演唱会才刚刚开头.却一下子落在自己的主场.幸者,有不少熟识的圈内人.不幸者,自己的演讲风格和内容还不到位.在家门口丢人可丢大发了.本意遮头蔽面,好事者却上传录像到Youtube. 面对自己的演讲视频,我鼓足了勇气,磨蹭了两周之后,才不得不斗胆重温. 既然尴尬难免.就豁出

Python演绎的精彩故事(一)

Python是一门广受赞誉的编程语言.她既有强大.简洁而优雅的表现力,又能够支撑工业级的开发实践. 但本文不是Python的入门介绍和教程. 今天我们来讲一个与众不同的故事,看看Python还有哪些不为人知的精彩值得发掘. 我们想借助Python的智慧和威力来尝试一种新思维.新设计.新框架.我们希望构造一种可以媲美硬件工业成熟典范的力量,让软件开发也能够高效.成熟而艺术.这是本文作者的一个梦想. 故事情节概要:假设我们要编写一个应用程序,功能是基于网络的纯文本聊天客户端程序,命名为TextCha