20 为什么世界和你的理解不一样?

从今天起,我们要开启一个新的模块:沟通反馈。

如果看到沟通反馈几个字,你就以为我打算在这里教一些谈话技巧,那你还真的想错了。

在这个模块里,我打算与你讨论的主题是,生活在真实世界中。

沟通反馈和生活在真实世界这两个话题是怎么联系到一起的呢?请听我慢慢道来。

《大富翁》里的沙隆巴斯有句口头禅:人生不如意的事,十有八九!但是不知道你有没有想过这样的一个问题,为什么人生如此不如意?

如果这是一篇鸡汤文,我应该告诉你世事艰辛。但我要说的是,真实的原因往往是因为你想得太美好,用我们做软件的例子来看一下:

在我们的愿望中,做出来的产品应该一举成名,现实却是惨淡经营; 在我们的愿望中,产品经理给出的需求应该是清晰明了的,现实却是模模糊糊; 在我们的愿望中,写出来的代码,应该是快捷无错的,维护也很容易,现实却是 Bug 百出,越修改,修改的时间就越长; 在我们的愿望中,你给我布置任务,我应该迅速地理解到关键,现实却是做出来的与你的目标根本就是天差地别; …… 为什么会这样?欢迎来到真实世界,真实世界不是以美好愿望驱动的,它有着自己的运行规律。虽然我们都生活在同一个世界中,但每个人理解世界的方式确实是千差万别。

我们努力地学习各种知识,为的就是更好地理解这个世界的运作方式,而沟通反馈,就是我们与真实世界互动的最好方式

你也许会好奇,为什么我们对世界的理解会出现偏差?接下来,让我们一起用一个信息论的视角看一下。

一个信息论视角的解释

1948年,克劳德·香农(Claude Elwood Shannon)在《贝尔系统技术学报》(Bell System Technical Journal)上发表了一篇论文《通信的数学原理》(A Mathematical Theory of Communication),这是现代信息论的开端。

我们程序员熟知的通信、数据压缩、密码学、自然语言处理等诸多领域都有信息论的身影。

我们这里要借鉴的是香农信息论中的一个通信模型,如下图所示:

通信模型

这个图中包含了几个要素:

  • 信源(Information Source),它负责产生信息(Message)。

  • 发送器(Transmitter),它会对信息进行某些操作,也就是对信息编码,产生信号(Signal)。

  • 信道(Channel),它是信号传送的媒介。

  • 接收器(Receiver),它是对信号执行发送器的逆操作,解码信号,提取出信息。

  • 信宿(Destination),它负责接收信息。

当然,图中还有一个因素叫做噪声(Noise),指的是削弱信号的东西。

不过,它并不是我们这里讨论的重点,我们暂时忽略它。

我们用一个实际工作中的例子来理解一下这个过程。假设你的项目经理来给你布置一项工作,在这里,项目经理就是一个信源。

他的想法就是他的消息,他要把这件事告诉你,先要在大脑中做一次编码,转换成语言表达出来。他说出来的这段话就是信号。

比如,这个信号是“完成一个需求”。这段话通过信道,也就是空气传播到你耳朵里,接收到这段话之后,你会按照自己对这段话的理解进行解码,作为信宿的你,形成了自己的想法,这就是你接到的消息,整个过程就完成了。

我们来看一下,理解偏差是怎么产生的。

项目经理给你传输的信号是“完成一个需求”,在项目经理脑子中,这个信号的原始信息可能是这样的:编写完成这个功能所需的代码,然后为这段代码写好自动化测试,再将它与现有系统集成好,通过测试人员的验证。

而在学习这个专栏之前,你从“完成一个需求”这个信号中解码出来的信息却是:把功能代码写完。这样,问题就出现了。即便这里忽略了噪声的干扰,当编码和解码不是一个版本的时候,无论如何,项目经理的信息都很难准确地传达到你这里。

这就是人们往往对世界产生误解的原因。

信息的传达要经过编码和解码两个过程,无论是编码出现问题,还是解码出现问题,都会造成信息的不准确。

一方面,有些人表达不清楚,一件简单的事,他说了半天,你依然是云里雾里。这就相当于,信源发出的信息经过编码得到的信号已经不准确了。

另一方面,就像听一些技术演讲,人家说得很清楚,但因为自己没有相关背景,依然无法得知人家表达的信息。这就相当于信号虽然准确,但我们没有对应的解码装置,信号无法转成有效信息。

再有就是像前面这个例子,收发双方编解码器不配套,同样的信号得到的信息截然不同,信息传达的目的也不能很好地完成。

有了理论做基础,我们就容易理解世界为什么总和我的理解不一样,这就是编解码的过程出了问题。因为每个人经历见识的差异,造成了各自编解码器的差异。世界是同一个世界,每个人看到的却是千姿百态。

如果想在这个真实的世界中生活得更幸福一些,我们能做点什么呢?那就是改善我们的编解码器。

怎么改善自己的编解码器呢?这就是“沟通反馈”这个模块要讨论的内容。

改善编解码

站在改善编解码效果的角度,我们要考虑哪些问题呢?

首先,我们要考虑一下编码器的效果。

换句话说,当我们想把信息传达给别人的时候,我们得把信息编码成一个有效的信号,至少要保证在我们这里信息不丢失

我举个例子,有一次,我在客户现场做咨询,客户的一个程序员给我介绍他们的系统,他讲了二十分钟,我还是听得一头雾水。

于是,我打断他,花了五分钟用我的语言给他讲了一遍,然后问他:“你想说的是不是这个意思?”他猛劲点头:“就是这样的。”

为什么会这样呢?

究其原因就是,他上来就在给我讲实现细节,完全没有任何铺垫。

要知道,我是来了解情况的,所以,我的背景知识肯定是不足的,凭空理解这些细节是非常困难的一件事。

从沟通的角度上看,这么做浪费了大量的时间,因为在过程中,我要不断地让他给我补充这些缺失的背景。

这几乎是很多程序员讲东西的通病:讲东西直奔细节

我在面试中也经常遇到过类似的情况,一些候选人上来就给我讲技术细节,我对他做过的系统一无所知,所以,我只好打断他,让他先把背景给我介绍一下。

同样,很多人抱怨别人不能理解自己,其实,首先应该想的问题是,自己到底有没有把话说清楚。这就是编码器出现问题的情况。

其次,我们还要考虑一下解码器的效果,也就是说,当一个信号呈现在我们面前时,作为接收者,我们是否能够有效地解码信息。

著名作家王小波曾经讲过一个花剌子模信使的故事,说的是中亚古国花剌子模有一个奇怪的风俗,凡是给君王带来好消息的信使,就会得到提升,给君王带来坏消息的人则会被送去喂老虎。

如此一来,谁还敢把坏消息带给君王呢?但问题是,君王不听坏消息,坏消息就不存在了吗?

这就相当于解码器出了问题,过滤掉了很多真实的信息。但真实世界就是真实世界,它不会按照人们的美好愿望运行。

再举一个我们身边的例子,能做程序员的人,大多是很聪明的人, 当几个人一起讨论问题时,别人往往刚开了个头,他就认为自己已经理解了别人的想法,然后开始表达自己的观点。

信息都不全,何谈解码。所以,开发团队的讨论中常常出现一个人高谈阔论,却离题万里的情况。

我们要想让自己更好地工作生活,就必须接纳真实世界的反馈,而接纳真实世界的反馈,

一是需要我们打开自己的接收器,把信号接纳进来,让反馈进来,这是解码的前提;二是扩展见识,提升自己解码器的效果,更好地理解别人要表达的内容到底是什么

说了编码器和解码器可能出现的问题,我们再来看另外一个可能造成影响的问题:编解码器算法,也就是怎么协调沟通双方更有效地进行沟通。

既然前面已经说了算法不够好会影响到信息的传递,那接下来的问题就是怎样找到一个好的算法。其实,我们从始至终在讲的各种最佳实践就是一个个好的算法,帮助我们改善沟通的效果。

还是回到前面提到“完成一个需求”的例子,我们在“以终为始”模块已经讲过了,通过制定“完成的定义”就可以帮助改善这个过程。这就相当于,沟通的双方都有了一个编解码手册。

当“完成一个需求”这样的信号发出时,作为接收方,你的解码动作就变成了,先要查一下手册里,关于“完成一个需求”的标准动作都有哪些。

于是,你就不会对事情做那么简单的估计了。

在“沟通反馈”这个模块下,我还会给你介绍各种“算法”,也就是最佳实践,帮你在工作中提高“信息”传递的效率。

回到我们这部分主题上,沟通反馈就是改善编码、解码以及算法的方式。

无论是“发送”得更清楚,还是“接收”得更明白,抑或是通过各种协调算法,都是为了让通信的双方做好准备。

总结时刻

人生不如意之事,十有八九,之所以很多人有如此多的不如意,很大原因在于我们对真实世界有着很多不切实际的幻想,美好的愿望并不能驱动这个世界,在软件开发中也是如此。

虽然人和人生活在一个世界中,但对世界的理解却是千差万别的。

我们借用了信息论的一个通信模型解释为什么每个人看到的世界会有如此大的差异,其核心就在于,人和人拥有不同的编解码器。

想要在这个真实世界中生活得更幸福一些,需要我们不断地改善自己的编解码器。

改善编解码,需要从几个角度着手,分别是:

编码器,让信息能输出更准确;解码器,减少信号过滤,改善解码能力;还有编解码算法,也就是各种来自行业的“最佳实践”,协调沟通的双方

如果今天的内容你只能记住一件事,那请记住:通过沟通反馈,不断升级自己的编解码能力。

最后,我想请你回想一下,你在工作中遇到过哪些因为沟通反馈不畅造成的问题呢?欢迎在留言区写下你的想法。

21 你的代码为谁而写?

关于“沟通反馈”的话题,我准备从代码开始讲起,毕竟我们程序员是靠代码与机器进行沟通的。

写代码是每个程序员的职责,程序员们都知道要把代码写好。但究竟什么叫写好呢?每个人的理解却是各有差异。

编写可维护的代码

初涉编程的程序员可能觉得能把功能实现出来的代码,就是好代码,这个阶段主要是基本功的学习,需要掌握的是各种算法、数据结构、典型的处理手法、常用的框架等等。

经过一段时间工作,日常工作所需的大多数代码,在你看来都是不在话下的。尤其像搜索和问答网站蓬勃发展之后,你甚至不需要像我初入职场时那样,记住很多常见的代码模式,现在往往是随手一搜,答案就有了。

再往后,更有追求的程序员会知道,仅仅实现功能是不够的,还需要写出可维护的代码。于是,这样的程序员就会找一些经典的书来看。

我在这方面的学习是从一本叫做《程序设计实践》(The Practice of Programming)的书开始的,这本书的作者是 Brian Kernighan 和 Rob Pike,这两个人都出身于大名鼎鼎的贝尔实验室,参与过 Unix 的开发。

写出可维护的代码并不难,它同样有方法可循。

今天,我们用写代码中最简单的一件事,深入剖析怎样才能写出可维护的代码,这件事就是命名。

types

命名难题

计算机科学中只有两大难题:缓存失效和命名。- —— Phil Karlton

这是行业里流传的一个经典说法,无论是哪本写代码风格的书,都会把命名放在靠前的位置。

估计你开始写程序不久,就会有人告诉你不要用 a、b、c 做变量名,因为它没有意义;步入职场,就会有人扔给你一份编程规范,告诉你这是必须遵循的。

不管怎样,你知道命名是很重要的,但在你心目中,合格的命名是什么样的呢?

想必你知道,命名要遵循编码规范,比如:Java 风格的 camelCase,常量命名要用全大写。

但是,这类代码规范给出的要求,大多是格式上的要求。在我看来,这只是底线,不应该成为程序员的追求,因为现在很多编码规范的要求,都可以用静态检查工具进行扫描了。

我们的讨论要从名字的意义说起。作为程序员,我们大多数人理解为什么要避免起无意义的名字,但对于什么样的名字是有意义的,每个人的理解却是不同的。

名字起得是否够好,一个简单的评判标准是,拿着代码给人讲,你需要额外解释多少东西。

比如,我们在代码评审中会看到类似这样的场景:

评审者:这个叫 map 的变量是做什么用的?

  • 程序员:它是用来存放账户信息的,它的键值是账户 ID,值就是对应的账户信息。

  • 评审者:那为什么不直接命名成 accounts?

你知道评审者给出的这个建议是什么意思吗?如果不能一下子意识到,遇到类似的问题,你可能会和这个程序员一样委屈:这个变量本来就是一个 map,我把它命名成 map 怎么了?

变量的命名,实际上牵扯到一个重要问题,代码到底是给谁写的?

代码为谁而写?

任何人都能写出计算机能够理解的代码,只有好程序员才能写出人能够理解的代码。- —— Martin Fowler

代码固然是程序员与机器沟通的重要途径,但是,机器是直白的,你写的代码必须是符合某种规则的,这一点已经由编译器保证了,不符合规则的代码,你想运行,门都没有。

所以,只要你的代码是符合语言规则的,机器一定认。要让机器认,这并不难,你写得再奇怪它都认。行业里甚至有专门的混乱代码比赛。

比如,著名的 IOCCC(The International Obfuscated C Code Contest,国际 C 语言混乱代码大赛)。

但是,我们写代码的目的是与人沟通,因为我们要在一个团队里与人协同工作。

与人沟通,就要用与人沟通的方式和语言写代码。人和机器不同,人需要理解的不仅是语言规则,还需要将业务背景融入其中,因为人的目的不是执行代码,而是要理解,甚至扩展和维护这段代码。

人要负责将业务问题和机器执行连接起来,缺少了业务背景是不可能写出好代码的

我们在“为什么世界和你理解的不一样”这篇内容中就讲过,沟通的时候,输出时的编码器很重要,它是保证了信息输出准确性的关键。

很多程序员习惯的方式是用计算机的语言进行表达,就像前面这个例子里面的 map,这是一种数据结构的名字,是面向计算机的,而评审者给出的建议,把变量名改成 accounts,这是一个业务的名字。

虽然只是一个简单的名字修改,但从理解上,这是一步巨大的跨越,缩短了其他人理解这段代码所需填补的鸿沟,工作效率自然会得到提高。

用业务语言编程

写代码的时候,尽可能用业务语言,会让你转换一个思路。

前面还只是一个简单的例子,我们再来看一个。

我们用最常用的电商下单过程来说,凭直觉我们会构建一个订单类 Order。

什么东西会放在这个类里呢?

首先,商品信息应该在这个类里面,这听上去很合理。然后,既然是电商的订单,可能要送货,所以,应该有送货的信息,没问题吧。再来,买东西要支付,我们会选择一些支付方式,所以,还应该有支付信息。

就这样,你会发现这个订单类里面的信息会越来越多:会员信息可能也要加进去,折扣信息也可能会加入。

你是一个要维护这段代码的人,这个类会越来越庞大,每个修改都要到你这里来,不知不觉中,你就陷入了一个疲于奔命的状态。

如果只是站在让代码运行的角度,这几乎是一个无法解决的问题。

我们只是觉得别扭,但没有好的解决方案,没办法,改就改呗!

但如果我们有了看业务的视角,我们会问一个问题,这些信息都放在“订单”是合理的吗?

我们可以与业务人员交流,询问这些信息到底在什么场景下使用。

这时候你就会发现,商品信息主要的用途是下单环节,送货信息是在物流环节,而支付信息则用在支付环节。

有了这样的信息,你会知道一件事,虽然我们在用一个“订单”的概念,但实际上,在不同的场景下,用到信息是不同的。

所以,更好地做法是,把这个“订单”的概念拆分了,也就有了:交易订单、物流订单和支付订单。我们原来陷入的困境,就是因为我们没有业务知识,只能笼统地用订单去涵盖各种场景。

如果你在一个电商平台工作,这几个概念你可能并不陌生,但实际上,类似的错误我们在很多代码里都可以看到。

再举个例子,在很多系统里,大家特别喜欢一个叫“用户”的概念,也把很多信息塞到了“用户”里。但实际上,在不同的场景下,它也应该是不同的东西:比如,在项目管理软件中,它应该是项目管理员和项目成员,在借贷的场景下,它应该是借款方和贷款方等等。

要想把这些概念很好地区分出来,你得对业务语言有理解,为了不让自己“分裂”,最好的办法就是把这些概念在代码中体现出来,给出一个好的名字。这就要求你最好和业务人员使用同样的语言。

如果了解领域驱动设计(Domain Driven Design,DDD),你可能已经分辨出来了,我在这里说的实际上就是领域驱动设计。

把不同的概念分解出来,这其实是限界上下文(Bounded Context)的作用,而在代码里尽可能使用业务语言,这是通用语言(Ubiquitous Language)的作用

所以,一个好的命名需要你对业务知识有一个深入的理解,遗憾的是,这并不是程序员的强项,需要我们额外地学习,但这也是我们想写好代码的前提。

现在,你已经理解了,取个好名字,并不是一件容易的事。

总结时刻

代码是程序员与机器沟通的桥梁,写好代码是每个程序员的追求,一个专业程序员,追求的不仅是实现功能,还要追求代码可维护。

如果你想详细学习如何写好代码,我推荐你去读 Robert Martin 的《代码整洁之道》(Clean Code),这本书几乎覆盖了把代码写好的方方面面。

命名,是写程序中最基础,也是一个程序员从业余走向专业的门槛。我以命名为基础,给你解释了写好代码的提升路径。最初的层次是编写可以运行的代码,然后是编写符合代码规范的代码。

对于命名,最粗浅的理解是不要起无意义的名字,遵循编码规范。但名字起得是否够好,主要看是否还需要额外的解释。很多程序员起名字习惯于采用面向实现的名字,比如,采用数据结构的名字。

再进一步提升,编写代码是要写出人可以理解的代码。因为代码更重要的作用是人和人沟通的桥梁,起一个降低其他人理解门槛的名字才是好名字。

实际上,我们很多没写好的程序有一些原因就是名字起错,把一些概念混淆在一起了。想起好名字,就要学会用业务语言写代码,需要尽可能多地学习业务知识,把业务领域的名字用在代码中。

如果今天的内容你只能记住一件事,那请记住:用业务的语言写代码。

最后,我想请你思考一下,想要写好代码,还有哪些因素是你特别看重的?欢迎在留言区写下你的想法。

22 轻量级沟通:你总是在开会吗?

今天我们来探讨一个很多程序员日常工作中,经常碰到却会带来困扰的话题:开会。

头疼的开会

有一次,我听到两个程序员在聊天。

一个资深程序员说:“还是晚上好,我可以一门心思写代码”,另一个年轻程序员不解地问:“你白天也可以写啊。”

资深程序员很无奈,“我倒是这样想,可是白天参加那么多会,哪有工夫啊!我的代码就只能加班写了。”

这段对话听上去让人有点心酸,但这种现象,确确实实广泛存在于程序员的日常工作中,尤其是你经验丰富又在一个大组织中工作,这几乎成了你的宿命。在这些程序员的认知中,开会太多影响了他们写代码。

你以为我想讨伐开会吗?并不是,开会本身并没有错,因为开会的本意是将大家组织起来解决问题。但请你回想一下,你参加的会议有多少解决了问题呢?

开会是为了解决问题,但真实情况却是开了会又没有解决多少问题,这真是一个奇特的矛盾。

回想一下,你参加过的会议里面,有没有效果特别好的呢?

在我职业生涯中,凡是效果特别好的会议,基本上都是用来做信息同步的

比如,领导宣布一个事情,这种会议几乎不会浪费时间。宣布消息,大家收到消息,结束。

那效果不好的会议是什么样呢?几乎都是那些讨论会,你一言我一语,每个会几乎无一例外,都有几个擅长打岔的,这个会基本上都会跑偏,时间就会这样一分一秒地流逝了。

我给你举个例子,我之前参加过一个上线计划的评审会,这个团队的负责人要把相关利益方都召集起来,其中包括上下游可能会受影响的团队、测试、运维等等,一个不大的会议室里挤满了人。

这个负责人刚开始讲方案没几分钟,下游团队的负责人就站出来问:“这个方案为什么要这么做?我担心会对我们系统造成影响。”讲方案的人只好停下来解释。结果是越解释,细节越多,双方你来我往,一个方案评审会,就转变成一个技术讨论会了。

测试和运维的同事本来是想来听技术方案,以便为后续的工作做准备的。看着双方的讨论,一脸无奈,因为他们知道,方案没确定好,所有的事情还是下回再说吧!

怎么样?是不是很熟悉的感觉。为什么会这样?因为他们选错了沟通方式。

开会是一种重量级的沟通,几乎是我们日常工作中最重的。

它有很强的仪式感,所以,大家相对来说会很重视。而且会议通常会牵扯到很多人,尤其是与这个事情相关度不那么高的人。

你可以想一下,有多少次开会,你是在精力集中的?

如果你是高度集中的,那恭喜你,你是高效地参与其中。但更多时候,你可能神游天外,因为讨论的内容可能与你关系不大,或者你已经听不懂了,你坐在那里的唯一原因是,主持人还没宣布会议结束。

用开会这种重量级的方式讨论问题,就好比杀鸡用了牛刀,这是不恰当的。

那该怎么解决这个问题呢?很简单,杀鸡用鸡刀。

轻量级沟通

实际上,真正在会议上能够积极参与讨论的人并不会觉得会议是浪费时间,因为高度参与其中,人是进入到心流状态的,时间流逝很快。觉得浪费时间的,往往是没有参与其中的人。

换句话说,会议之所以给人留下如此不堪的印象,一个重要的原因是,真正参与讨论的人并不多。所以,我们换个角度思考一下,只要把这些真正参与讨论的人拉到一起讨论不就好了?

所以,改善会议的第一个行动项是,减少参与讨论的人数

有人会说,我这个讨论有好几个议题,每个议题要不同的人参与,那你要做的是,分别找这几个人专门讨论,而不是把大家放到一起。

不知道你发现没有,在讨论行动项的时候,我用的是“讨论”,而没有提到“会议”两个字。我之前说过了,会议是一种重量级的沟通方式。

所以,我们会倾向于选择一种轻量级的沟通方式,比如面对面沟通,这样一来,每个人的压力就会小很多

相比于会议的形式,面对面沟通因为注意力有限,参与的人数不可能太多。也因为参与的人数相对少一些,每个人的投入也会更多一些。

所以,我们的第二个行动项是,如果你要讨论,找人面对面沟通。

一旦理解了这些改进方式,我们就可以改进自己的行为方式。如果有一个问题需要讨论,我要做的是,分别找到相关人针对关心的主题进行讨论,然后,我把讨论的结果汇总再去征求大家意见。如果大家达成一致了,我才会选择开会。

这个时候,开会的目的不再是讨论,而是信息同步:我准备这么干了,相关各方已经同意了,知会大家一下,结束。

站立会议

我前面说过了,开会并非都是不好的,一些信息同步的会还是有必要的。

举个例子,有一种实践叫站会(Standup)。很多公司都在实践它,站会甚至成为每天的开工仪式。

一般的做法是,早上大家来上班了,先开一个站会,让大家同步一下昨天的工作,然后开始今天的工作。

有的人一听到站会这个形式就会皱起眉头。如果是这样,多半是你的团队“站”错了。

你知道,这个会为什么是“站”会吗?因为按照一般人的习惯,站的时间不会太长,因为站的时间长,累啊!所以,如果站会超过10分钟,你的站会一定是错的。

也许你会说,这点时间恐怕不够给我们站会吧?因为每个人都有一大堆要说的。请问,你觉得其他人说那么多,你关心吗?

现实是,一旦一个人说多了,跟你关系又不大,你就开始思维发散了。

所以,在总长固定的情况下,每个人发言的时间一定是有限的。在有限的时间内,你能说什么呢?

我建议你只说三件事:

  • 我昨天做了什么?

  • 我今天打算做什么?

  • 我在过程中遇到了什么问题,需要请求帮助。

“做了什么” ,是为了与其他人同步进展,看事情是否在计划上。一旦偏离计划,请主动把它提出,这样,项目经理可以过问,因为这会涉及到是否要调整项目计划;

“要做什么” ,是同步你接下来的工作安排。如果涉及到与其他人协作,也就是告诉大家,让他们有个配合的心理准备;

“问题和求助”, 就是与其他人的协作,表示:我遇到不懂的问题,你们有信息的话,可以给我提供一下。

这三件事都是与别人相关的,几句话快速说完,结束。因为这些事情与别人相关,所以,大家的注意力可以相对集中一些。

你或许会问,如果我的问题很复杂,需要讨论该怎么办。对不起,那是另外一件事,你可以在站会结束之后,找相关人去讨论,不要在这个会上浪费大家时间。在站会上,你只要在问题和求助中告诉大家,你有一个问题,需要相关人讨论,结束。

为了让大家保持注意力集中,我的一些团队还用过发言令牌的方式。比如,找一个毛绒玩具,谁拿到“令牌”谁发言,然后,随机地扔给一个人,一旦这个人走神,大家一下子就能发现了。

一些有趣的方式、短暂的时间,以及与所有人相关的事情,因为满足了这三点,所以普遍来说,这种站会效果还可以。

关于站会,有一个典型的错误是,有些团队把站会开成了汇报会。项目负责人指定一个个轮流发言,说的人都向负责人在汇报工作,其他人自然就容易走神了,因为事情与己无关。

还有一点你可能会有疑问,我所在的团队比较大,一个人几句话时间也会很长。

当团队很大时,更应该做的是把团队拆分了,因为你不太可能与20个人紧密地工作在一起。沃顿商学院曾经做过一项研究,5-12个人是一个恰当的团队规模,每个人在其中都能发挥自己的重要作用。

总结时刻

开会是很多程序员的困扰,太多的会议甚至会影响到你工作的进展。开会的本意是为了解决问题,但实际上,大多数会议并不能很好地解决问题。因为会议是一种重量级的沟通方式,很多人参加会议时,并不能很好地参与其中。

如果你想用会议的形式与别人讨论问题,最好放弃这种打算,面对面的沟通是最好的方式。因为面对面沟通很轻,人数相对少,每个人参与度就会高很多。基于这种改进,我们可以把大部分会议都改成信息同步的会,效率就会得到提高。

我还给你介绍了一种特殊的会议:站会。之所以采用站会的方式,就是要控制时间。在站会上每个人说什么,我给了你一个建议的格式:

  • 我昨天做了什么?

  • 我今天打算做什么?

  • 我在过程中遇到了什么问题,需要请求帮助。

如果你经常组织别人开会,请你想一下,是不是自己没有利用好开会这件事;如果你经常被别人组织开会,不妨把这篇文章转发给他,让他别总是开会“讨论”问题。

如果今天的内容你只能记住一件事,那请记住:多面对面沟通,少开会

参考资料

http://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/10x%e7%a8%8b%e5%ba%8f%e5%91%98%e5%b7%a5%e4%bd%9c%e6%b3%95/17%20%e7%a8%8b%e5%ba%8f%e5%91%98%e4%b9%9f%e5%8f%af%e4%bb%a5%e2%80%9c%e7%a0%8d%e2%80%9d%e9%9c%80%e6%b1%82%e5%90%97%ef%bc%9f.md