最近在做新年的规划,其中一个重点就是“建立责任制,程序模块落实责任人”。这条写出来简单,但做起来并不简单。道理在哪里?姑且听听我的经验。

很多公司对“程序模块落实责任人”的理解是这样的:这是你的模块,你负责开发,出了问题找你。也就是说,由这个程序员负责开发和除错,就是落实了责任了。但许多这样落实的“责任制”并没有起到好的效果,程序还是问题频现,系统仍然漏洞百出。依我看,原因就在于“出了问题找你”。

“出了问题找你”看起来很明确,其实相当模糊。究竟要出了什么问题才找你呢?异常问题找你,正常问题是不是也找你?这其实取决于到如何定义“问题”。不称职的程序员,很可能有非常好的态度来解决问题,但这些问题,其实本来不该出现。所以责任制仅仅局限于“你负责开发,出了问题找你”是不够的,应该更进一步,变成“你负责开发,所以你应该交出不会出问题(或者说‘高标准’)的程序”。

在我看来,程序员真正要做的是——套用冯小刚的书名——我把程序献给你,向用户提供满意的程序。如果把程序员看作母体,程序就是脱胎于母体的新生命。不幸的是,很多程序并没有生命那么顽强,它们或许经不起风吹雨打,或许不能适应变化。总之一句话,无法脱离母体生存。所以程序会出各种正常或异常的问题,而且每到这种时候必须得靠程序员出马。换句话说,这些程序员不仅做到了“我把程序献给你”,而且更慷慨,不但献出程序,还顺带献出了自己。

举个例子吧。许多公司的业务都涉及到计费,对很多程序员来说,计费其实相当简单,无非是按照规则进行简单的加减乘除而已。但是,计费规则可能一开始考虑并不周全,而且经常需要调整,所以业务部门的同事常会对某条计费产生疑问,结果业务同事会来找程序员询问某个计费的问题,程序员说“噢,好,这个简单,我进程序跟一下”,然后启动调试器(debugger)切入代码,找到问题再答复给业务人员。这样的情景相当普遍,而且会再三出现。如果程序员每次解决问题的态度都很好,解决问题又很迅速,他就很可能被评为“负责任的程序员”。

这就是上文说的,不但“把程序献给你”,还顺带献出自己的情形。除此之外,还有一种可能。如果这个程序员开发的计费程序,不但可以显示最终的费用,还可以直观列出费用的明细,以及详细的计算逻辑。从此以后,即便业务人员有困惑,也可以自行解决。那么相比上面提到那个“负责任的程序员”,这样的程序员更负责任。

我自己就有过这样的亲身经历。相比直接在程序中进行加减乘除得到最终结果的程序,编写能够直观列出明细和计算过程的计费程序,无疑要花费更多心思和劳动——因为你不但要自己想清楚,还得清楚显示出来,并且让其他人看明白。但是只有做到这一点,计费程序才真正成为“计费程序”,可以完整提供与费用有关的全部信息。而之前提到的“计费程序”,仅仅提供了计算过程而已,要说明计算逻辑,解答业务人员的困惑,还得程序员亲自出马——这样的程序员或许很勤恳,但明显不够“称职”。

An image to describe post 我把程序献给你

据说程序员都是很懒的人,他们偷懒的办法就是用程序去帮自己解决问题。可是,不少程序员似乎过得很辛苦,程序并没有减轻他们的负担。照我看,原因就在于。本来程序员应该献出的只有程序,但是献不出足够好的程序,就必然顺带把自己也献出去——程序献得多,不会有什么问题;自己献得多,当然就亏了嘛。