价值观这词,这几年在大公司里出现的最多,比如阿里巴巴的六脉神剑,本意是好的,最后却褒贬不一。
编程也有价值观,这东西对程序员有用不?如果是程序员总结出来,分享给程序员的,我认为这是一种经验的总结和提炼,是有价值的分享。
Kent Beck 出过一本《实现模式》的书,内容是围绕概括出的三个价值观:沟通、简单和灵活,延伸出一些的编程原则,遵循这些原则,他列举了几十个编程中常用的实现模式,供阅读者学习和参考。书很薄,但很精。
我对“沟通”这个价值观理解的多一些,而且也易描述,所以今天我们先聊“沟通”。
编程的产物是代码,代码能沟通么?能,但这里不是指代码与CPU的沟通,而是指与人的沟通。一个人写出代码,另一个人要来维护这份代码,他就需要阅读这份代码,写代码的过程,阅读代码的过程,就是沟通。
代码与人的沟通重要么?举几个例子。有人写了一份代码,其中有20个变量,但变量名都些看不懂的字符组合,如果你在维护这份代码,你有何感想?又有人写了一份代码,该换行的,有时候换,有时候不换;该缩进的,有时候缩,有时候不缩;有时候变量名、函数名用驼峰式,有时候用全小写并_分隔,有时还有全大写的;函数返回数据时,有时候返回int,有时候返回string,还可能会返回数组和对象;有时候一大块代码堆在一起,如同乱麻。现在你要维护它,你的心情如何?如果你是这个项目的技术负责人,你是否蛋定?如果你是公司老总,对这样的程序员,你的态度?
上面只是极端的例子,更普遍的,应该是这样的。变量名是取的就是有那么点别扭,有点飘;代码规范上总是有那么些残缺,怎么看都看不习惯;百来行代码堆在一起,看着有点晕;函数接口描述不清,这个函数是干嘛的,一句话说不清,可能需要篇短文;目录和文件结构,也无规律可循。等等。这些都是代码沟通能力差的表现。
代码不能沟通,那就找作者呗?作者很忙或者请假了怎么办?作者早就不在这公司了怎么办?作者今天不鸟你,也是有可能的。作者放下手头的工作,给你讲解,轻则几秒钟,重则10分钟+。你会反驳说,一般看不懂的地方稍微解释下就懂了,很快。是的,对于两三个人的团队,作者最多讲两遍,对于10人的、或者更大的团队呢?作者是否要开大会了。如果没能和作者沟通,在没理解的情况下修改代码,那不是编程,而是编bug,那只能花力气调试着理解这份代码了。如果是一份每个人看了都能懂的代码,会节约多少成本呢?
代码的沟通能力,直接关系着代码的生命力,没人维护,代码也离死亡不远了。
提高代码的沟通能力,应该是循序渐进的。最基础的,代码规范,变量、函数和类的命名;然后是代码块的分离,封装函数或方法,做到一块只做一件事;还有组织各种文件、类库;等等,这里可以涉及编程的一切,列举不完。越深入,你要掌握的知识越多,需要经历的磨练也越多。在每一步的升级过程中,需要进行足够多的实践去积累经验,还可以参考优秀的开源代码,参阅优秀的书籍,和同行或不同行业的同事去交流,然后自己必须总结,才能成为自己的东西。
对“沟通”这一条的感悟,我的是这样的,在写代码时,我认为我写的东西就是为了以后维护这份代码的人服务的(包括我自己),就这么简单。
不细说了,有价值观指引着呢 ...,相信你在编程实践过程中也会有有所感悟,并欣喜,没错,这就是编程的乐趣。
(文章首发于微信公众帐号:PHP工程师,如果你觉得不错,那就关注我吧,也可以推荐给朋友)