去年底看到陈皓(酷壳博主)写了篇很好的文章《技术人员的发展之路》,里面提及职业发展的一定阶段,也许你会碰上一些复杂的人和事,这种情况下他写道:

这个时候再也不是 talk is cheap, show me the code! 而是,code is cheap, talk is the matter!

这里的 talk 其实就是沟通,近年来发现沟通越发成为一件重要的事。在近期的工作中也会观察到一些沟通问题,比如跨团队开会沟通时发生的一些分歧与争论。作为程序员的我感觉沟通一直是一个痛点,所以近年来一直在思考关于沟通的问题,下面就写写我的观察与思考吧。

木讷与沉默

这两个名词似乎已变成了程序员的标签,它们形象地体现了程序员在沟通中的表现。在程序员的世界里,沟通可能包括:与产品经理沟通需求、与同行交流技术、与外行交谈,还有与同事分享工作与生活的趣闻等。

有些程序员在分享趣闻与谈需求或技术时的表现大相径庭,刚才还是一个开朗的小伙突然就变得沉默不语了。沉默有时是不想说,特别在沟通需求时,程序员心里想着:与其扯那么多,哥代码都写完了。不就是一个小功能吗,默默无言,笑而不语的就接下了,想着赶快结束去写代码了。

程序员写出的代码本应该是公司的资产,但现实是代码这东西是同时带有资产和负债双属性的。Linus 写的 Linux 或者 @antirez 贡献的 Redis 里面包含的代码是极好的资产,但大部分我们沟通不充分的需求,最后基于此写出来的代码都是负债大于资产。最后,往往是出来混都是要还的,不是自己还就是别人来还。

程序员可能会争辩道,与人沟通本来就不是我们所擅长的,我们并不是因为热爱跟别人聊天才做软件开发这一行的。这个言论很有迷惑性,我早年一度都是这么认为的。当年毕业去找工作,外企如日中天,去了当时心中的很牛的 IBM 面试。面试过程中大部分的交谈过程我都记不清了,就一个问题至今很清晰。面试经理问我:你是喜欢多些跟人打交道呢,还是跟电脑打交道?当时的我毫不犹豫的回答喜欢跟电脑打交道,喜欢编程写代码,而且自觉我也不擅长和人打交道。

然后,我就被淘汰了。后来我才明白了,其实当时的这类外企挂着招软件工程师的名义,实际需要的更多是具有技术背景和理解的售前技术支持,因为在国内它们基本就没有一个真正的研发中心。如今我认为,即便你仅仅只喜欢写代码,那么和人的沟通能力依然是你跨不过去的瓶颈。写代码本身就是一种沟通,一种书面沟通。

程序写出来是给人看的,附带能在机器上运行。
--《计算机程序的结构与解释》

沟通从来都是个问题,书面沟通同样困难。

争论与无奈

程序员产生争论的地方多半都在和同行的沟通中,想必很多人都和同行有过关于技术方案的争论。我自己就曾在过去多年的工作中和同事有过技术方案之争,得到的教训可以建议给技术经理(主管)们:不要让两个都觉得自己很牛的程序员去同时设计一个技术方案。不巧,你已经这么干了并得到了两个不同的方案,那么记住,就别再犯下一个错:让他们拿各自的方案去 PK。

既然分歧已经产生了,为了避免无谓的争论,该怎么解决呢?

网友评论