1. <em id="2qvri"><tr id="2qvri"></tr></em>
      1. 首页»软件工程»Facebook元老王淮眼中的软件开发原则

        Facebook元老王淮眼中的软件开发原则

        来源:infoq 发布时间:2013-03-19 阅读次数:

          王淮是Facebook的早期员工,也是Facebook内部第二位中国籍工程师和第一位研发经理,曾经负责支付后台和安全系统,担任反欺诈部门的技术经理。最近,他分享了一些基本的码农原则,包括代码结构、测试重要性等。

          正确性是第一要求,他认为“不能解决问题的代码是耍流氓”。

          然后是代码结构,王淮觉得结构体现逻辑:

        第一步,第二步,需要什么数据,需要做什?#21019;?#29702;,处理完了结果到那里去,都应该在结构中被很好的体现出来。

        结构体现设计。 设计一定要清晰。我的经验来看,一般来?#25285;?#22312;设计结构图上面的每个组件都对应着自己的类,然后之间或类内部的通信通过成员函数来完成。

          他提供一个可借鉴的做法:在一个大的功能实现过程中,给出第一个diff(提?#28142;?#30721;增量)的时候,可以只把结构当做一个diff,里面的函数可以是空的(place holder,作为占位符)。 把数据的生成和界面的展示分开来。典型的可以按照MVC的模式来,但也可以只把数据和UI界面分开来的比较轻量级的做法。结构应当是提?#28142;?#30721;审查的时候最最关注的地方。最需要问的问题就是“这个diff号称要解决的问题被正确解决了吗?”

          测试的重要性不言而喻。王淮指出:

        不论你再正确,还是?#20889;?#35823;的时候。通过(相对)公正的测试一是来减少自己被绕到代码里的几率,二是让后续的或者别人的改动对自己代码不经意的破坏被最快的展现出来。测试应该把类主要的功能都测一遍。测试也应该把类?#25512;?#20182;类最重要的集成部分也测一遍。

          对于提?#28142;?#30721;增量的问题,王淮说了几个需要注意的事项:

        • Bug修?#27169;?#26080;所谓,该多大就多大。一般bug fix不会超过100行。超过的要特别重视,想想究竟是什么原因造成。会不会是当初设计的问题。一个diff,原则上不应该超过200-300行修改。但多了怎么办,把一个diff变成多个。
        • 每个diff应该只做一件事情。每个diff尽可少的做一个改动。这样可以尽可能的方便自己的管理(学会用git branch),和方便审阅者的代码审查。如果diff越集中做一件事,审查代码的人需要越短的时间来审查做出高质量的,整体效?#35797;?#39640;。
        • 一个功能超过一屏,则将其?#25351;睢?/li>

          面向对象还是面向函数,王淮指出,Java本身就是面向对象,所以这个问题?#28142;蟆?#20294;千万不要出现披着面向对象的外皮,在类里面写超长的面向函数的处理。这种情况下,尽可能的分流成辅助函数。

          关于代码规范,他举了一些简单的例子:比如文件名,变量或函数名的命名规范,?#20013;?#30340;前?#27599;?个空格或4个;每行的字数(不应超过80字符);如?#38382;?#29992;public/private/protected;用左右括号的原则;空行的使用;文件和代码comments的位置 (比如,代码注释只能单独成行);对“// TODO:”的使用规范;宏、常量的使用。这里没有特别的哪一种样式一定更对,但是需要有一个大家统一的指南,一起遵守,让整体的代码有统一的风格和标准。最大的?#20040;?#23601;是有利于可读性,可读性的好坏决定着维护成本。

          注释应当简洁但充分。有些人觉得代码应该?#36816;得?#29579;淮?#28142;?#21516;意,代码是实现细节,?#23454;?#30340;在意图上给予?#24471;鰨?#21487;以大幅度的减少读代码的人的烦恼。

          代码审查越来越受到重视,王淮指出:

        • 作为审查者,一定要读懂diff;所有被接受的diff必须是在读懂的前提下。做审查者的人要有“将来如果这些代码线上出问题,我要帮助支持”的心理准备。
        • 代码审查应该被每个工程师当做工作的重要一部分。
        • 应当在24小时内给回复,这应当变成共识。
        • 感觉有问题的代码,一定要在相应的行上做出评论 (inline comments),以让作者明白问题所在。
        • 尽可能?#35759;?#20462;改的所有意见?#28142;?#24615;给出,减少来来回回的次数。比较复杂的建议审查者主动找代码作者来进行线下沟通,达成一致。
        • 一般的diff,来回次数不宜超过3次;如果超过3次,想想看,是不是diff 太大,太复杂了。

          说到代码审查,thoughtbot公司最近在github上发布了自己的代码审查原则,其中几个值得关注的要点包括:

        • 接受这样的现?#25285;?#24456;多编程上的主张都是一种个人观点。应该讨论它们的利与弊,提出你的倾向观点,迅速地达成一种解决方案。
        • 提问,而不是命令。(“把这个变量改成:user_id,你觉得如何?”)
        • 请求给予?#24471;鰲?“?#20063;?#26126;白。你能解释一下吗?”)
        • 避免代码的归属之争。(“我的”,“不是我的”,“你的”)
        • 避免使用一些会被认为是有关人身特征的词语。(“笨蛋”,“愚蠢”)要把所有人都看作是有魅力的、聪明的、善意的。
        • 要明确。要记着并不是每个人都能理解你的意图。
        • 要谦虚。(“?#20063;?#33021;确定——我们来分析一下。”)
        • 不要?#27599;?#24352;修辞语。(“总是”,“从不”,“永远”,“毫无…”)
        • 不要讽刺。
        • 展现真实的你。如果你不是幽默型的人,不?#19981;?#20351;用一些表情符号或动画gif图,不要勉强。如果你是这种人,请自信的发挥。
        • 如果有太多的“?#20063;?#29702;解”或“另一种方案:”的评论,请专门针对这个人进行交流。可以把你们线下的交流总结成一个帖子附在后面。
        • 对审查者的建议表示感激。(“谢谢提醒。?#19968;?#25226;它改正。”)
        • 理解审查?#23884;?#20107;不对人。审查的是你的代码,而不是你。
        • 解释为什?#21019;?#30721;写成这样。(“因为xxx原因?#20063;?#20889;成这样。如果我把这个类/文件/方法/变量改个名会更清晰些吗?”)
        • 整理所作的改动,在以后的迭代中重构它们。
        • 在做修改的版本上注明代码审查的链接。
        • push提交要基于最早的一轮反馈,并形成一个独立的分支。等这个分支上的任务完全完成了再合并。这让审查者能够根据早先的反馈?#19994;?#20320;的单独的更新。
        • 努力站在审查者的立场上理解。
        • 争取回复每个评论。
        • 直到最后一个人退出登录后再合并分支。
        • 直到?#20013;?#38598;成测试(TDDium, TravisCI,等)告诉你这个分支的测试套件通过后再合并分支。
        QQ群:WEB开发者官方群(515171538),验证消息:10000
        微信群:?#26377;?#32534;微信 849023636 邀请您加入,验证消息:10000
        提示:更多精彩内容关注微信公众号:全栈开发者中?#27169;╢sder-com)
        网友评论(共0条评论) 正在载入评论......
        理智评论文明上网,拒绝恶意谩骂 发表评论 / 共0条评论
        登录会员中心
        江苏快3投注技巧 快乐十分网上购买 2019年四不像特肖图 彩票店营业员工资高吗 重庆时时彩预测软件 电子游艺厅消防要求 棒球球棒有什么用 4场进球走势 新加坡快乐8开奖 大乐透买的人多吗 福建体彩36选7走势图1开奖结果 双色球基本走势图带连线 江西快3昨天开奖 广东快乐10分钟官网 北单比竞彩好 四川时时彩下载手机版式