communication,沟通。一个简单的词,但是却是很多程序员的通病。沟通确实是很多程序员的弱点(包括我自己在内J),很多程序员更擅长的是和机器打交到,而不是与人交往。
但是,作为程序员,沟通却是我们日常工作的一部分(如果你只是为了独自为了自己做软件,那么你是例外)。你需要和同事讨论方案和技术问题,你需要从客户那里获取需求(可能是外部客户,也可能是内部客户)。你需要说服他人你的方案或者设计是更好的,等等。有合作,就有沟通。因此,作为程序员,也需要掌握一定的沟通技巧。
沟通最基本的要求,就是要表达自己的想法。在表述之前,先整理一下自己的思路(在头脑中或者在纸上),列出自己要表达的内容,想好先说什么,再说什么。相信没有人原意听杂乱的表述。
同时,要知道你的听众是谁,他们感兴趣的是什么。“见人说人话,见鬼说鬼话”,“到什么山上唱什么歌”,这里并不是要大家两面三刀,而是要根据听众来选择表达的重点和方式。如果你是在技术峰会上给专家讲解你的产品,当然可以详细的讲解技术细节。但是如果是给公司的股东做汇报,你需要讲解的是你的产品有那些优势,能够给他们带来什么好处。
以上两点是沟通的最基本的要求。再进一步,你要选择沟通的时机和沟通的方式。
关于沟通的时机,书上举了两个例子:一个是在你的老板心情很不好的时候去要求给你的电脑升级内存。虽然我们说作为职业人士,不要让自己的情绪影响工作,但是没有多少人能够完全避免情绪的影响吧。第二个例子是当你的上司刚刚因为源码丢失的问题被老板骂了一通之后,你向他建议建立一个代码备份库。
而沟通的方式,则要看你的听众的喜好(尤其是当听众是你的上司或客户的时候),有的人喜欢图表,有的人喜欢详细的数据表格。你应当投其所好。同事,要注意你的沟通材料要看起来足够的好。看你的材料的人可能没有时间逐字逐句的研究你的材料,也没有耐心密密麻麻的文字中找出你要表达的观点。同时,你的材料应该是赏心悦目的,至少不要让人看了就皱眉头。写到这里,让我想起了原来看“清华大学寝室夜话”中的那句话:“现在最有前途的编程语言是PowerPoint”。
同时,沟通是双方的交流,而不是单方面的命令,因此,除了说,你还要注意聆听对方的想法或意见。有人说沟通的流程是LQR(Listen, Question, Repeat)。首先倾听对方的信息;然后就不清楚或者有疑问的地方提出问题;最后用自己的语言复述一遍以确定理解没有偏差;如此循环。而且,作为程序员,在获取用户需求的时候,还要善于引导用户说出详细的需求。有些时候,有些需求用户觉得是理所当然、不言自明的事情,潜意识里就没有想起应该说,这个时候就需要你的提问来引导用户了。
最后,是沟通的效率的问题。在当今社会,沟通的途径是多种多样:面谈、电话、email、视频/电话会议等等。如非有其他的需要,应该尽量选择效率更高的方式。同时,对于重要的决定,一定要有文字的记载和确认。
另外,作为一个不善于沟通的程序员,要克服自己的弱点,主动的和他人交流(同事和客户)。交流的能力也是可以锻炼出来的。(这一条也是对自己的要求哈)。