阅读了《构建之法》的几章内容,有一些想法和问题。

第四章 两人合作

代码风格规范

  这一章说及了代码设计和风格规范,其中,风格规范中提到了:

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

  因为我在刚刚接触c语言的时候,我的学姐就已经提醒过我,在写代码的时候要注意代码的格式,要“好看”。而我本身便是一个不折不扣的强迫症,对于代码风格规范,我一向是严要求……尽可能的做到三个原则。

  然后在命名方面,文中提到:

阿超:我在某个同学的程序中看到有些变量叫“ILoveFang”、“SB”,不知道这些变量在现实生活中有没有什么意义。

   

  这段话对我简直暴击。因为在刚开始学C语言时,每到要给变量或函数命名时总是没有头绪,于是就衍生了“stupid”、“wtf”等令人啼笑皆非的函数变量名。后来改正过来,是因为看了同学做ACM题的一些代码,其中每一个变量名和函数名都特别易懂,能大概看出这个函数的主要功能,于是我在写代码时也开始学起这种命名方式,果然,在复查代码时,变得轻松多了。

 

注释是为了解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方,……

  这个也点醒了我,在之前写的代码大多是简单的ACM水题,并不复杂,再到了前段时间的个人四则运算项目时,由于有多个函数,多个变量要引用,在复查的时候就常常感到头大,因为常常会忘了调用的某个函数的功能,然后还要浪费时间去查看一下。

 

结对编程

  随后,书中受到两人结对编程的内容。我和我的伙伴许征航同学(以下通称 黑哥)其实在之前的个人项目中就简单合作过,不过大多是他在帮助我。我们大致是这样的,我将代码写好列出,然后将代码中一些问题和bug提出,然后由他读我的代码(过程中对代码没有理解问题),并提出测试的思路,由我实现后,两人再根据测试的结果讨论出是什么地方出错,再由我自己修改。在看到书中结对编程的描述,似乎差别不大,但是,我心里还是明白(有逼数),这个过程还是黑哥在带着我,我的任务的勉强完成,主要还是黑哥的一些意见和指导。书中提到:

每个人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平比较高的那一位。这样程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。

  对此,我的疑问是,像我这样基础比较差的同学,和黑哥这样个人实力比较强的同学结对合作,是否会适得其反,降低工作效率或者说拖后腿?毕竟,我的代码能力较弱,在自己设计代码的过程中就要话费不少的时间,那么如果初始代码也难以实现,那两人结对的“领航员”不也就形同虚设?而如果我来做“领航员”的角色的话,万一遇到了我看不懂他人代码的情况呢?毕竟实力差距摆在那里……

  然后,我查了一些关于两人结对编程的一些问题,就是关于两个合作伙伴之间能力差距的问题:

关于结对编程,发现了一些新的受益之处。首先,它可以促进参与项目的程序员自身的提高,一对程序员工作的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,学到一些新的东西。而水平高的一方同样因为不断地把自己的想法说出来而整理了自己的思路。【注1】

    这个说清了两人合作,有能力差距反而是益处,对较差者有提升水平和指导的好处,对能力较强者有清晰思路的好处。但是…道理我都懂可是想我跟黑哥这样能力差距“更大”的结对,是否有什么更好的方法磨合呢?

 

 注1:摘自互动百科.结对编程:https://baike.baidu.com/item/%E7%BB%93%E5%AF%B9%E7%BC%96%E7%A8%8B/7526152?fr=aladdin

第十七章 人,绩效和职业道德

这一章讲述的是在整个团队中的领导人的能力,如何评价绩效以及程序员应该遵守的职业道德。   

领导力

很多技术人员在展望将来的职业发展时,会说“我以后想做管人的”。其实,领导(Leader)和经理(Manager)是有区别的。

从高中参加的一些社团活动,到现在大学的同乡会活动等,我见过许多的团队团体的领导人。他们中有的是“领导”,有的是“经理”。像大学我们广东同乡会的会长的角色就是一个“经理”,对一些事务进行统筹策划安排,并让其他忍受去做。但是领导不同,领导的目的性更强。

在领导力—知人善任:

第三象限:积极的学习者

能力:对于这个人物不太了解;没有经验;“我都不知道我不知道啥”。

动力:很想学习,充满好奇心,热情,对于自己的可转化技能充满信心,觉得学习新技能也不是太难,处于一种无知的乐观(Uninformed Optimism)状态。

第三象限就是现在的我没错了,但是在我们团队项目的小组成员里,类似我这样的人依旧不少,只有一位同学能力较强,那么在这种情况下,整个团队如何才能磨合好,共同进步呢?

我在搜索资料后并没有找到这个问题的答案,但是经过我自己的思考,我的想法是:

  1. 由能力最强的同学制定好分工计划,各人完成各人工作;
  2. 能力一般的同学完成中坚部分工作,有问题的地方请教能力强的同学;
  3. 能力较弱者由能力一般的同学帮助,完成工作。

其实还是人的问题

  说道团队合作,书中也说到:

P ={做事的,不做事的,不让别人做事的,做假事的,假装做事的}

    对于这点我有点担忧,一个团队中难免出现P1以外的人,那么一个领导者(Leader)如何管理好每个人呢?

  我搜索了类似的问题,在知乎上的知友们有各种说法,有的说是恩威并施有要给予自由发挥的空间,有的说隔离后给一个闲职,然后就当增强自身能力地工作。我当然更倾向于前者,但不知道还有其它的方法。

软件工程师的职业道德  

原则3 产品

3.07 力求完全理解参与开发的软件的规格要求。

……

3.11 确保项目文档齐全,包括所有发现的问题和解决的方法。

  在这里我又一次想起了那个如同病毒般的杀毒软件——金山毒霸。在我之前的一篇博客也提到了,金山毒霸如同病毒般粘附在我们的电脑里,而我们这些用户却连它什么时候潜伏进我们的系统中都不知道。【注2】然后,我有看到了一种说法:

不仅是金山、腾讯、瑞星、还有最严重的百度,国产各大品牌除了有流氓家底的和离倒掉差不多的之外都被人恶意推广了,目的就是要把这些牌子搞到没人喜欢,然后剩下的就是因此而收益的那个了。【注3】

  
  这段文字的言下之意就是,一些软件的商业对手为了恶意竞争,恶意推广对方的软件,通过这样来打击对手。仔细想想,其中不无道理,这些恶意竞争的目的已经达到——败坏了对手的名声。但是我想问的是这么一个问题:难道在这样的商业环境网络环境下,我们普通民众只能当无辜的、无声的受害者?或者说牺牲品?