一段代码的感情色彩和心理活动

        同事希望我讲一讲代码规范(尤其是代码注释规范),还希望我进一步讲讲软件开发和心理学的关系,那我就先讲一个C++编码规范中的例子:在一个函数中,如果经过复杂的条件判断,最终执行业务逻辑,这有两种常见的编程风格,一个是逐个判非,如果不满足条件都返回false,一个是逐层判是,最终执行业务逻辑,就像下面这个表格。我称之为悲观盲目模式和乐观保守模式,好像有点不符合中文的逻辑,貌似都是悲观保守和盲目乐观呀,怎么这里不符合中文惯例呀?

悲观盲目模式

乐观保守模式

if(! cond1)

  return false ;

if(! cond2)

  return false ;

if(! cond3)

  return false ;

if(! cond4)

  return false ;

DoSomething();

return true ;

bool bFoo = false ;

if( cond1)

  if( cond2)

     if( cond3)

       if( cond4)

       {

        DoSomething();

        bFoo = true ;

       }

  return bFoo ;

        我在北航上学时,曾经有位老师说英文是最适合做软件设计、描述软件架构的,不过是老先生是个香蕉人,成长在美国,工作在香港,客串在大陆,老人家用了10分钟描述一个“船到桥头自然直”的意思,最后大家明白了,一个同学告诉他这个成语,老教授才不再说中文的不是了。

        闲话少提,我起的名字没有错,逐个返回false的貌似很谨慎,很悲观,出一点儿问题就说“我干不了了”,逐层判断的这位可好,象是一个大爷一样,不断提出需求,满足了再提出一个需求,直到最后才给你办事,大家如果办过房贷或者和其他税务局、工商局打过交道的就明白了,第一次去告诉你需要去A部门开证明1,等你第二次带着证明1去了,他让你去B部门开证明2,如此这般,非把你折腾的没脾气了,凑足所有的条件,最后他挑不出毛病了,才给你办事。

        可是大家仔细看,两者对于执行业务的逻辑的真正保护又是如何呢?前者采用排除异常的模型,可是有多少种异常呢?又或者说有多少种异常的组合呢?排除法是否排除了所有的异常,不能,它最大的可能是排除了已知的异常,遗漏了未知的、将来的异常,反之,第二种模式,层层保护,反倒是只在满足已知条件时执行业务,所以就开发者的心理活动而言,写第一种时心里是悲观的,结果是盲目的,第二种是乐观的,结果反倒是保守的。

        讲过几次了,我还需要再讲一次,关于这段代码的心理暗示问题。大家都看电影,有人爱看喜剧,有人爱看悲剧,我就喜欢看喜剧,前些年还爱看周星驰的无厘头,为什么呢?生活已经够紧张的了,再看勾心斗角的宫斗戏、谍战戏都觉得累的慌,还有人爱看悲剧,可能是看着还有更悲惨的事,让人更加的珍惜现在吧。同样的true和false在代码中同样有心理暗示,if(true) 代表顺利,if(false)代表不顺利,所以逐个判非的心理暗示是不顺利,是悲观,当然不排除苦尽甘来,柳暗花明的说法,而逐层判true则是乐观,虽然其else子句可能还是有设置false的语句,但还是完成重点工作的扫尾的含义,当然也不可大意。

posted @ 2014-12-02 22:14  范振勇  阅读(392)  评论(0编辑  收藏  举报