《构建之法》第四章 两人合作

时间:2022-01-05 23:47:51

《构建之法》第四章 两人合作

4.1 代码规范

做一个有商业价值的项目,或者在团队里工作,代码规范相当重要。“代码规范”可以分成两个部分:

  1. 代码风格规范——主要是文字上的规定,看似表面文章,实际上非常重要
  2. 代码设计规范——牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则

4.2 代码风格规范

代码风格的原则是:简明,易读,无二义性.

  • 缩进:Tab键在不同的情况下会显示不同的长度,严重干扰阅读体验而。4个空格的距离从可读性来说,正好
  • 行宽:行宽必须限制,但是以前有些文档规定的80字符行宽太小了,现在时代不同了,可以限定为100字符
  • 括号:在复杂的条件表达式中,用括号清楚地表示逻辑优先级
  • 分行:不要把多条语句放在一行,更严格地说,不要把多个变量定义在一行上。
  • 命名:用单个字母给有复杂语义的实体命名啊hi不好的,在C语言中,比较通用的,也是经过了实践检验的方法叫“匈牙利命名法”。
  • 下划线:下划线用来分隔变量名字中的作用域标注和变量的语义。移山公司规定下划线一般不用在其他方面。
  • 大小写:由多个单词组成的变量名,如果全部都是小写,很不易读,一个简单的解决方案就是用大小写区分它们。

    Pascal——所有单词的第一个字母都大写

    Camel——第一个单词全部小写,随后单词随Pas-cal形式,这种方式也叫lowerCamel

    一个通用的做法是:

    所有的类型/类/函数名都用Pascal形式,所有的变量都用Camel形式

    类/类型/变量:名词或组合名词,如Member、ProductInfo等

    函数则用动词或动宾组合词来表示,如get/set、RenderPage()

  • 注释:注释是为了解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方。不要注释程序是怎么工作的(How),因为程序本身就应该能说明这一问题。需要注意的是,复杂的注释应该放在函数头;另外,注释(包括所有源代码)应该只用ASCII字符,不要用中文或其他特殊字符,否则会极大地影响程序的可移植性。

4.3 代码设计规范

代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面。

  • 函数:现代程序设计语言中的绝大部分功能,都在程序的函数中实现。
  • goto:函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。
  • 错误处理:

    1、参数处理:在Debug版本中,所有的参数都要验证其正确性。在正式版本中,对从外部(用户或别的模块)传递过来的参数,要验证其正确性。
    2、断言:如何验证正确性?那就要用断言(Assert)。断言和错误处理是什么关系?当你觉得某事肯定如何时,就可以用断言。

4.4 代码复审

代码复审就是看代码是否在“代码规范”的框架内正确地解决了问题。有以下三种形式:

  • 自我复审:用同伴复审的标准来要求自己。不一定最有效,因为开发者对自己总是过于自信。如果能持之以恒,则对个人有很大好处。
  • 同伴复审:简便易行
  • 团队复审:有比较严格的规定和流程,适用于关键的代码,以及复审后不再更新的代码覆盖率高——很多双眼睛盯着程序,但效率可能不高(全体人员都要到会)。

代码复审的目的在于找出代码、逻辑、算法以及其他潜在的错误,发现可能需要改进的地方,同时教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。

代码复审后,最好在程序中加入人名,以示负责。比如:

//$todo(wzf): make this function thread-safe
//$review(wzf):is this function thread-safe?  Need to double-check 
//$bug(wzf):when input array is very large, this func might crash

在代码复审过程中,$review标记的问题要一一讨论,在代码复审过后,所有的$review标记要清除。在一个里程碑或正式版本发布之前,所有的$todo$bug标记都要清除

4.5 结对编程

结对编程有很多优势,比如:

  • 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强
  • 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感
  • 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动

总之,如果运用得当,结对编程可以取得更高的投入产出比(Return of Investment)

4.6 两人合作的不同阶段和技巧

1、萌芽阶段

2、磨合阶段

3、规范阶段

4、创造阶段

5、解体阶段

如何给别人提供容易接收的反馈:(三明治办法)

  • 首先,先来一片面包,强调双方的共同点,让对方觉得处于一个安全的环境。
  • 其次,再把肉放上,提供建设性意见。
  • 最后,再来一片面包,呼应开头,鼓励对方把工作做好。