一线的程序员可能会遇到这种事情:领导安排一个任务,按照自己的能力两个小时就可以做完,但领导偏偏要你用半个小时设计,然后花三个小时给同事讲怎么做,同事做完之后又用半个小时评审,最后觉得还不如自己一个人做得好。既然如此,为什么要把任务交给别人去做呢?
因为,设计和实现的信息密度是不一样的,这两种工作的含金量是有差别的。
具体的代码实现属于密度低的信息:实现中有很多细节的魔鬼,与软件的功能并无太大关系,比如为了多线程协调工作而引入某种同步机制。软件的功能设计则属于密度高的信息:你可以用几张图清楚地表达出某个功能的作用原理,却不需要花好多个小时研读它背后的代码。功能设计是代码实现的抽象,正因为它,信息得到了提炼,含金量也因此提高。
从职业发展的角度来讲,程序员无论是成长为技术骨干,还是转型做项目经理,都需要在公司建立越来越大的影响力。影响力在很大程度上是与规模等价的——你带领或者管理的软件规模越大,你的影响力就越大。既然如此,就更应当把精力集中到信息密度更高的地方。当你站到了更高的抽象层次上,大脑会允许你处理更大规模的业务,这就是职业发展迈向下一个台阶的起点。
回到上文提出的例子,自己两个小时的工作比用四个小时教别人工作的效果要好,那为什么还要把任务交给别人来做呢?这是因为,代码并不是写完就万事大吉了,它会不断地被人阅读,被人提问,被人修改。程序员在维护一段代码上花费的时间,会远远超过编写它的时间。你编写并维护这段代码,就意味着今后你需要长期在大脑中存储和运算这些密度较低的信息——具体实现的细节。这些信息会与你的设计工作抢占资源,损耗精力,阻碍你获取更大的影响力。
综上所述,如果有条件,程序员应当多多参与设计工作,同时适当把具体的编码活动外包出去。