You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 KiB

03丨沟通程序员为什么应该爱上交流

程序员这个群体最开始被社会认知的时候,标签之一就是不善交流。慢慢地,“喜欢玩电脑,不喜欢和人交流”成了大家对程序员的一个刻板印象。作为程序员,我发现工作的时间越久,承担的责任越大,那么交流是一个越来越重要的能力。

在这一讲里,我们就来聊聊程序员如何进行高质量的交流。当然了,你可能会想,我不喜欢交流照样工作得很顺利,可是,交流带来的好处也就体会不到了。

当然了,在开始前,让我们先想想,为什么我们会不爱交流呢?

为什么程序员普遍不喜欢交流?

其实,是不是喜欢和人交流绝大部分是由性格决定的,和职业无关。可能程序员这个行业,相比其他行业,吸引了更多的不喜欢交流的人吧。但是除了性格之外,确实有些客观因素影响了交流的积极性。

工作被打断严重影响效率

我觉得这个绝对应该是排在第一条的。和人交流一般需要约好时间,到了时间不得不放下手头的工作。有时候也会有人主动过来,随便聊点东西。无论是哪种形式,其实都会打断程序员当前的工作。

而所有的程序员,都非常讨厌自己的工作被打断。

交流不能直接帮程序员完成工作

网上有个段子,说程序员和产品经理在开会,讨论到下班才结束。产品经理一看正好到点了,就欢欢喜喜地闪了,留下程序员拿着需求挑灯加班。

会议结束之后,程序员的工作才算真正开始,从利益的角度来说,也难免我们会抵触这种不能帮自己直接完成工作的交流了。

程序员其实只是交流中的“利益受损者”,我们排斥的不是交流本身,而是厌烦交流中时间的“浪费”。

当然,面对面的交流只是一个例子,其实写文档、回邮件、做演示等等都一样,都让程序员感觉是“浪费时间”。

简单来说,没有无缘无故的讨厌。别管程序员嘴里怎么说,心里其实明白,归根结底,还是因为我们觉得这些事情影响了自己的“利益”。

爱上的第一步:正视和人的交流

如果交流有损程序员的利益,那为什么我们还要交流呢?我就写我的代码,写完下班不是挺好的吗?其实这就涉及到一个长期利益和短期利益的问题了。短期来看,少参加一个会,少和人聊两句业务,少被人打断几次,从一个星期的维度看,可能工作确实完成得更快了,加班更少了。

但是从长期发展来看,缺少交流的程序员,很难发展为公司的骨干,升职加薪可能都会被排在后面。我们的工作,真的不止眼前的程序。

在做事情的时候,优秀的交流能力是必须的。如果你能够展示自己在交流能力上的优势,组内外的同事也更愿意和你合作,经理也会优先考虑让你承担更多的责任,对自己的发展有很大的好处。

我认为,交流的好处可以从两个方面来说,一个是输入,一个是输出。

输入

我们都说要创新,要整合资源。其实要想做到这一点,在一个公司里实现成长,就要时刻保持自己获取信息。如果能够重视平时的交流,交流的时候多主动思考,慢慢地,自己收获的关于公司和行业的信息也就越来越多,没准还就能够找到新的突破点,抓住新的机会。

机会都是自己争取的,这句话看似鸡汤,但是背后的道理一定要明白。没有哪个创新是空中楼阁,在现代社会闭门造车也很难成功。只有足够的信息可以在脑子里碰撞,创新的火花才更有可能出现。在外人看来的灵光一闪,背后可能有很深的积累。

输出

现在已经不是一个酒香不怕巷子深的时代了。自己的想法,自己的工作成果,都应该积极主动地向外界输出。输出不一定是什么长篇大论,可以是简单的交流、发邮件、写文档、做工作成果演示等等。通过输出,我们才能慢慢赢得自己的声誉,树立自己的影响力。

养成主动交流的好习惯

当我们意识到交流的重要性之后,就应该慢慢养成主动交流的好习惯。

交流不一定要是非常正视的形式。我们可以闲聊,趁着吃饭或者散步的时间,主动和组内同事,和自己的经理,和自己上下游的关键联系人交流自己的想法以及正在自己做的事情,然后也从对方那里获取相应的信息。

不要让自己做一个小透明,做的事情要让别人知道。同时,也知道别人在做什么,别人遇到了什么问题。别人的问题,就是你潜在的机会。

当然了,我们也可以通过分享会的形式,进行正式演示。这种演示一方面可以展示自己的工作成果,另一方面也可以听取别人的意见,看看自己的工作如何能给更多的人带来价值。

前面说到的交流多偏向于信息交换。其实日常工作中还有很多交流都是为了解决具体的问题。从技巧上而言,这两种类型的交流并没有什么区别。

程序员交流的技巧

换位思考,注意受众

其实人和人之间交流最重要的一点就是换位思考。站在对方的角度理解自己表述的内容,看看能否被正确地接纳和吸收。程序员是一种专业性很强的工种。很多专业技能相关的内容,可能会让非专业人士摸不着头脑。大到一个公司,一个部门,小到一个组,一个项目,都可能有很多专有名词,专用词汇,需要很强的背景知识。

所以我们在交流的时候首先要进行快速的角色转换找到对方和自己认知的“最大公约数”英文叫做“on the same page”。然后对于交流中需要补充的知识做简单的介绍比如系统特点专有名词的介绍等等避免受众一路带着问号听你说最后对话变成了“鸡同鸭讲”。

举个例子。如果我们发现上游的订单数据有问题,那么我们可能需要找同组的人帮忙看。这时候,我们可以找组内相关的同事说,帮忙看看订单的数据是不是有问题。组内的同事对系统都是很熟悉的,不需要交代太多上下文。

如果我们发现确实是上游的数据有问题,有些字段缺失了,需要上游系统配合帮忙查找问题。这时候可以发邮件给上游系统。我给出两个邮件标题,你觉得哪个更好呢?

  1. 订单数据在OrderProcessor引起异常
  2. 从3月15日起来自Kafka的订单数据缺失了OrderingTimeOrderName字段

第一个标题明显没有分清交流对象。OrderProcessor是自己组内项目的代码这明显不是两个组的责任交界。数据在进入OrderProcessor之前还有很多步骤不能确定是上游发的数据的问题。难道你想让上游的组去看你的代码帮你找自己代码的问题吗

第二个标题很清晰明确。上游数据发到Kafka这是大家责任的交界处。时间问题也都交代得很清楚。上游的组完全可以以此为起点向后查找自己的问题。

简单来说,既要让对方听明白,也要让对方听到自己应该听的。交流不是应付差事,说完拉倒,也不要只顾自己说。

交流要带有足够的信息

我们来看一个教科书般的交流失败的例子:

A问“订单信息数据在HDFS上有吗

B说“有。”

B的回答没错但是也没啥用。A的问题明显是想知道订单信息在HDFS的具体位置而非只是有或者没有。B如果知道具体在那里就应该一并告诉AB如果不知道也应该回答“有但是我不知道在那里。”如果B知道谁可能会知道那么应该一并告诉A。这样一次交流基本就可以结束了。

再以上面订单数据的问题举例。使用了正确的邮件标题,内容也要足够翔实。邮件内容应该包含如下信息:

  1. 证明订单信息并非一直缺失这部分数据,并拿出数据,附带数据的详细来源。
  2. 证明现在的订单数据并非所有的消息都缺失这部分数据并找出缺失数据的消息ID和没有缺失数据的消息ID、时间等追踪信息以便对方定位问题。

用数据说话,数据出处要清晰;推理条理要清晰,事情的来龙去脉要清晰。有时候写重要的邮件和文档,就像写论文一样。

先说重点和结论

这一条规则适用于所有场合。日常中普通的交流也是如果带着明确的目的那么就要先说出自己的结论和想法如果是写邮件和文档内容翔实的一个副作用是难免冗长。这时候应该注意先把结论抛出来再写细节。如果是PPT类的演讲也是先抛出结论和成果再去涉及详细的内容。

这样不仅可以让对方马上抓到重点,而且还可以让对方在有疑问的时候,可以带着疑问去阅读后续的细节。

总结

程序员的工作就像是产品。好的交流就像是包装,广告,公关和营销。有了好的产品,还要有好的包装,突出产品特点的广告,及时的公关和合适的的营销,才能赢得市场。没有这些,别人可能根本就不知道你有这么个产品,不知道这个产品能干什么,有什么特点等等。

这里再总结一下,从输入这个角度来说,交流的好处可以分为以下几点:

  1. 获取更多的信息;
  2. 理解公司的业务;
  3. 加深对行业的理解;
  4. 发现新的机会。

如果在交流中能够输出自己的内容,长期来看,给自己带来如下好处:

  1. 赢得自己的声誉;
  2. 树立自己的影响力;
  3. 赢得同事和经理的信任,承担更大的责任。

充分的交流,并不是“就知道动嘴”,而是一个获取信息,加工信息,给出信息的过程。只有交流了,我们才能知道对方的想法,自己认为的好,可能并不是大家认为的好,自己没有想到的好处,别人可能想到了。我们在日常工作中应该多注意自己交流技巧的培养,养成喜欢和人交流的习惯。工作越久,交流在工作中的地位也就越重要。

思考题

你是一个喜欢交流的程序员吗?你有因为擅长交流而获得什么惊喜吗?欢迎你在留言区留言,我会和你一起交流,也欢迎把这篇文章分享给你的朋友或者同事,一起讨论一下吧!