我的码农原则

标签: 互联网 观点•专栏 产品 | 发表时间:2013-03-16 08:52 | 作者:王 淮
出处:http://www.tmtpost.com

这篇文章只是体现我以前写代码和做代码审查时候的一些原则。供大家借鉴。欢迎大家补充。

 

正确性 (Correctness)

正确性是第一要求。不能解决问题的代码是耍流氓。

  • 结构 (Code Structure)

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

结构体现设计。 设计一定要清晰。我的经验来看,一般来说,在design chart上面的每个component都对应着自己的class,然后之间或class内部的通信通过member function来完成。
一个可借鉴的做法 – 在一个大的feature implementation过程中,给出第一个diff的时候,可以只把结构当做一个diff,里面的函数可以是空的(place holder)。

把数据的生成和界面的展示分开来。典型的可以按照MVC的模式来,但也可以只把数据和UI分开来的比较轻量级的做法。结构应当是diff review时候最最关注的地方。最需要问的问题就是“这个diff号称要解决的问题被正确解决了吗?”

  • test的重要性

不论你再正确,还是有错误的时候。通过(相对)公证的test来 1)减少自己被绕到代码里的几率;2)让后续的或者别人的改动对自己代码不经意的破坏被最快的展现出来。

test应该把class主要的function都测一遍

test也应该把class和其他class最重要的integration也测一遍。

 

可读性 (Readability)

Readability leads to maintanence cost.

  • diff的大小

bug修改,无所谓,该多大多大。一般bug fix不会超过100行。超过的要特别重视,想想究竟是什么原因造成。会不会是当初设计的问题。

一个diff,原则上不应该超过200-300行修改。但多了怎么办,把一个diff变成多个 – split to multiple changes.

  • 每个diff应该只做一件事情

每个diff尽可少的做一个改动。这样可以尽可能的方便自己的管理(学会用git branch),和方便reviewer的代码审查。如果diff越集中做一件事,审查代码的人需要越短的时间来审查做出高质量的,整体效率越高。

  • 一个function超过1屏 => split it, idiot.

  • 统一的代码规范

比如文件名,变量或函数名的命名规范,分行的前置空2个spaces或4个;每行的字数(不应超过80char);如何使用public/private/protected;用左右括号的原则;空行的使用;文件和代码comments的位置 (比如,代码comment只能单独成行);对“// TODO:”的使用规范;macro,constant的使用;

等等等等。

这里没有特别的哪一种style一定更对,但是需要有一个大家统一的guideline,一起遵守,让整体的代码有统一的风格和标准。

最大的好处就是有利于readability.

  • object-oriented v.s function-oriented

Java本身就是面向对象,所以这个问题不大。但千万不要出现披着面向对象的外皮,在class里面写超长的面向函数的处理。这种情况下,尽可能的分流成helper function.

 

  • crispy & sufficient的注释

注释应当简洁但充分。有些人觉得代码应该speak for itself。我不大同意,代码是实现细节,适当的在意图上给予说明,可以大幅度的减少读代码的人的烦恼。

 

diff发出去之前

  • 与master做一次merge update,确保resolve all conflicts
  • run一次所有涉及的test cases (需要工具)
  • 考虑最可能做reviewer的人,可以是团队伙伴,也可以是修改涉及到的源代码的owner。但必须是关心该改动或和改动相关的人。
  • 所有的manager应当自动subscribe自己的团队里所有人的diff requests (做好filtering,但你不一定要看)

code-review之中应该做的

  • 作为reviewer,一定要读懂diff;所有被accept的diff必须是在读懂的前提下。做reviewer的人要有“将来如果这些代码线上出问题,我要帮助support”的心理准备。
  • code review 应该被每个engineer当做工作的重要一部分。做Performance Review的时候应该把帮助做过的code review考虑,for both employee & manager.
  • 应当在24小时内给回复,这应当变成共识。
  • 感觉有问题的代码,一定要在相应的行上做出评论 (inline comments),以让作者明白问题所在。
  • 尽可能把对修改的所有意见一次性给出,减少来来回回的次数。比较复杂的建议reviewer主动找author来进行线下沟通,达成一致。
  • 一般的diff,来回次数不宜超过3次;如果超过3次,想想看,是不是diff 太大,太复杂了。

check-in之前应该做的

  • 与master做一次merge update,确保没有问题
  • run一次code change涉及到的所有test cases(包括新增的和涉及到的test cases)

 

相关 [码农 原则] 推荐:

我的码农原则

- - 钛媒体TMTpost—把脉科技资本论
这篇文章只是体现我以前写代码和做代码审查时候的一些原则. 正确性 (Correctness). 结构 (Code Structure). 第一步,第二步;需要什么数据,需要做什么处理,处理完了结果到那里去,都应该在结构中被很好的体现出来. 我的经验来看,一般来说,在design chart上面的每个component都对应着自己的class,然后之间或class内部的通信通过member function来完成.

排版六原则

- 沈裔 - 所有文章 - UCD大社区
几天后,就收到了秋叶老师的来信,希望与我探讨一些设计问题. 他写过一本畅销书《说服力-让你的PPT会说话》,眼下正在写续集. 我看了新书的样章,觉得很不错,有些内容很值得分享. 良好的设计如何使得一个平庸的文档脱胎换骨. 下面是一张大学生的求职简历,再普通不过了,想要引起招聘经理的注意,恐怕很难. 秋叶老师对它进行了简单的排版,还是一张表格,还是黑白配色,没有使用任何图形元素,效果却完全不一样了.

浅析OOP原则

- - ITeye博客
      学习java编程已经有相当长的一段时间了,可以说对面向对象语言编程已经是有了相当深刻的理解了. 每一个程序员在编写代码的时候不仅要能够用一门语言来实现我们的想要的东西,而且还要有规范我们所做的工作的一套原则. 我想不仅是编程,做每一件事情包括做人都要有自己的原则性. 说到java编程,OOP原则就要上场了.

Android设计原则

- - 所有文章 - UCD大社区
译者按: 在 iOS HIG已经强大经典了N年之后,Android终于推出了一套比较系统的 HIG(大概是为了配合Android 4.0 Ice Cream Sandwich). 仔细比较两套HIG的“设计原则”部分,发现完全是截然不同的两种风格. iOS HIG走的是更专业型的路线,描述严谨且有不少的专业词汇(比如Metaphors、Consistency之类的).

页面导航原则 [www.aliued.com]

- - ChinaUEDCollection
著名的格林童话故事里面汉赛尔和格莱特知道后母想要在深林里面丢掉他们的计划,将面包屑撒在来时的路上,虽然当月亮升起时,面包屑被鸟吃掉了,但是现在的互联网设计师们从这个故事中找到了灵感,设计出不会被鸟吃掉的固定“面包屑”. 图1:互联网上各种各样的面包屑. 汉赛尔和格莱特为了在森林中找到回家的路,撒下了面包屑,这是一种导航方式,如果没有被鸟吃掉,无论走到森林的任何地方都可以知道如何从当前的位置走回家去.

面试基本原则

- mazhechao - Reborn
到了这个阶段,很多本科申请者都要接受面试考验了. 以下向同学们分享一下几个重要的面试基本原则. 无论是谁,都会告诉你第一印象很重要. 然后紧接下来的建议就是“衣着得体”. 但,我一直觉得“衣着得体”是个很含混的要求. 在每个人的眼里,“得体”的标准是不一样的. 不过,倒是有一个小的建议很重要:全身上下颜色越少越好.

软件测试的原则

- - CSDN博客推荐文章
 在软件测试中有很多重要的指导原则,这些原则看上去大多是显而易见的,但是总是被我们忽略,作为虫师,我们当然应该把这些原则牢记于心,作为专业测试人员的基本素养. 原则1 测试用例中一个必需部分是对预期输出或结果的定义.  这条原则是软件测试中常犯错误之一,但是如果不按照这条原则进行,由于“所见即所想”这样的一个心里现象的存在,某个似是而非的错误结果可能会被当成是正确的结论.

与人交往的原则

- - 傅佩荣
「君子之交淡若水,小人之交甘若醴. 」这句大家耳熟能详的话,是道家《庄子》书中的句子. 庄子以智慧出众而知名,他说的话总比一般人的想法更为深刻些. 问题是:如果朋友之间亲密交往,分享生活上的点点滴滴,彼此互相支持打气,没事就约了吃饭喝咖啡,那么这样就该被视为「小人」吗. 相反地,有些点头之交的朋友,由于同学、同乡、同事、同行等机缘而认识,几年下来真是「淡如水」了,那么这样彼此反而可以升格为「君子」了吗.

android 屏幕适配原则

- - CSDN博客推荐文章
      Android手机屏幕大小不一,有480x320,640x360,800x480.怎样才能让App自动适应不同的屏幕呢. 其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用.

SVN之使用原则

- - 研发管理 - ITeye博客
以下是我起草的部门SVN规范里原则的一部分. 必须提交注释,注明相关修改信息,例如bug号、任务描述等. 具体内容可采用约定或者设置的形式. 你所提交的改变将体现给其他开发者,要明白提交的后果,. 代码变动及时提交,避免丢失本地修改后无法恢复. 新增加的文件同时被提交,否则只在你本地能正常工作,导致其它人不能编译通过.