我所钦佩程序员的三种品质

这几年来,我曾接触过形形色色不少的程序员,

或者是公司里的同事,或者是在社区中认识的朋友,

甚至还可能是只读过代码未见其人的,开源类库之作者。


这些程序员中,有优秀的也有平庸的,有程序员“大神”,还有普通人。

下文来总结一下,我所钦佩的程序员们都具备了哪些品质。


在此之前,我想先排除工作时长熟练程度两种因素。


首先,时间对每个人来说都是平等的,每人每天都只有 24 小时,

然而在等量的时间内,总会有人比其他人做的更好。


所以我不认为比别人工作时间更长,是一种优秀的品质,

优秀人士所考虑的,应该是如何更有效的使用时间。


其次,每个人所熟悉的领域和工具各有不同,唯手熟尔,

但对知识性质的工作而言,熟练者却未必会比其他人更有作为,

所以,我认为应该还有除了熟练程度之外的,关键特质。


下文我总结了,我所钦佩程序员所具备的三种品质。

零缺陷

软件缺陷,常被称为软件的 Bug,维基百科上是这样解释的,

A software bug is an error, flaw or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways.


我们需要重点关注以下两个单词,unexpected 和 unintended,

unexpected 指 意料之外的,

unintended 指的是 无意之中的。


这里就隐含着两个概念,期望实际表现

所谓缺陷,就是指软件实际表现出了与预期不符的行为。


因此,测试工程师对缺陷的描述,总是会包含这两方面,

我们的预期是什么,软件的实际表现又是什么。

而不仅仅是说“这里有问题”。


回到程序员品质的话题上来。

我观察到,优秀程序员总是能写出更少缺陷的代码,

甚至可以做到零缺陷


这怎么可能呢?

有过一些工作经验的程序员,可能都不相信。

怎么可能有人写的代码没有缺陷?


这就是困难的地方。


我发现优秀的程序员在发布之前,总是会对代码做尽可能全面的自测

而不是期待别人发现问题。

他们会做到万无一失,再谨慎的完成发布。


这是专业性的一种表现,程序员需对自己发布的代码,有信心。

确定不会出现问题。


我之前也不相信这一点。

为期一个月的项目,最终我会写出二三十个 Bug,

并把这些 Bug 认为是不可避免的。


直到读了 Robert C·Martin 写的《程序员的职业素养》,

尽管公司可能设有独立的 QA 小组专门测试软件,

但是开发小组仍然要把 “QA 应该找不到任何错误” 作为努力的目标。


不可否认的是,优秀程序员写的代码,缺陷就是少。


事实表明,全面自测的效果非常明显,

有很多项目,我都可以做到没有 Bug,这真是一件令人振奋的事情。

好读易用

程序员产出的是代码,是代码提供了功能,

所以,优秀程序员不可能不关注代码。


一方面,代码提供的功能是否可靠,是否好用,

另一方面,代码本身是否容易读懂,是否好维护。


通过对身边程序员朋友们的观察,

我发现,优秀人士总是会除了满足产品功能需求之外,

对代码的好读易用,提出更高的要求。


首先,他们会站在对方角度来考虑,别人怎样使用会更简单,

不管这个功能,是面向程序员的还是非程序员的,

都会有简洁的使用方式,有丰富的文档。


我一向认为程序员的编码行为是在创造知识

程序员工作的价值就在于,让别人用更少的成本,做程序员已经为他们做好的事情。

所以,用户的使用成本是不得不考虑的一环。


总而言之,优秀程序员写出来的功能,就是好用。


其次就是,代码的可维护性问题,虽说代码是给机器运行的,

但是,要想在现有代码的基础之上做出调整,就必须人能读懂才行。


我所观察到的优秀程序员们,也会非常的看重代码的可读性,

同样的他们会站在对方角度考虑,怎样编写代码,会更容易读懂

看这些人写的代码,会非常舒适,能快速了解到作者的意图。


所以,优秀程序员写出来的代码,就是容易读懂。


我之前也是不太在意这一点,一直坚信自己代码写的足够好,

代码就是注释,代码就是文档,

但其实就是这种莫名其妙的自信,让自己都理解不了当时为什么要那么写了。


后来意识到了,代码只描述了行为的执行过程,

为什么要执行这些行为,为什么要这样编写代码,就没有任何记录了,

这一部分信息的丢失,会产生深远的印象,导致以后没有人知道当时为什么要这样做


现在,我将行为的动机,也写到代码中了,必要时还会贴上设计文档的地址,

设计文档中,贴上需求地址,写好需求背景,

这样才算是完整的实现了一项功能。

恰如其分的做事

我所谓的恰如其分,就是在恰当的时间,用恰当的方式,解决恰当的问题。


这里包含三个层面,首先,我们要知道问题到底什么

忙活半天,结果发现解决了错误的问题,是最不可取的。

或者,解决的问题,跟别人理解的不一致,也是很糟糕的事情。


这就需要很强的沟通溯源能力,

解决正确的问题。


其次,找到了问题的根本所在之后,还要使用恰当的方式去解决它,

这是因为解决问题是需要成本的,谈到成本就会想到利用公司的资源

问题复杂到一定程度的时候,很少能独立解决了。


这时候,就得考虑解决问题的方式,怎样能调动更多的资源,

如何满足各方需求,让大家都赢

所以,优秀的程序员总是抬头做事的,不会闭门造车。


最后,解决问题的时候,还要看当前的时机是否恰当,

勉强做出来的事情,事倍功半,

需找到一个契机,人们才会群集响应,优秀程序员很少一人力挽狂澜。


办事能力是职场的软技能,也是程序员步入优秀的必经之路,

毕竟,举一人之力,不如举众人之力。

优秀的程序员,总是擅长借力打力。

结语

上文总结了我所钦佩的程序员,所具备的三种品质,

(1)优秀程序员写的代码,缺陷就是少。

(2)优秀程序员写出来的功能,就是好用;优秀程序员写出来的代码,就是容易读懂。

(3)优秀的程序员,总是擅长借力打力。


当然每个人对“优秀”的定义会有不同,

这是我自己对“优秀”的一种看法罢了。


律己则寡过,绳人则寡合。