编程哲理小故事:Tina的运动会方阵

自从接到任务后,Tina一直 烦恼着如何让这群繁忙又缺乏才艺的程序员在运动会开幕式上做出一个有趣的方阵表演。

 

接到了运动会的方阵表演的任务

时间回到1个月前。

Tina正在工位上繁忙地进行着下一期准备上线系统的测试,这时候老大跑了过来

“Tina,我们公司要举行运动会,开幕式时有方阵的表演,你帮忙组织下?”

Tina心里咯噔一下,来了一个苦差。

“方阵?就是像奥运会开幕的时候,运动员在体育场跑道上走,展示风采的那种?”

“对,到时要一个6*6共36人的方阵,到时会在市里最好的体育馆进行,公司的大领导会在主席台看我们表演,为了我们部门,你要加油呀”

“嗯,我会加油的,但36个人不少呀,大家最近都挺忙的,感觉我拉不动他们参加呀”,Tina苦笑道。

“怎么会呢,我看你在男生中还挺有人气的,不过你不好意思拉人的话,人的问题我解决,你策划组织好表演就行”

 

 

 

进展缓慢的方阵表演

方阵的排练一周一次,一周一周的过去了,但整体的效果并没有得到质的提升,排练时总是凑不齐人,舞蹈也相对复杂,交互很多,大家也没能很好的磨合,方阵表演这件事几乎成了Tina的心病

“万一到时我们成了最差的方阵怎么办?我会让老大很失望的”

今天还没到排练的时间,但她提前到了场地,担心着,纠结着。

“方阵排练成怎样啦?”今天老大居然亲自过来了。

“我们今晚继续排练,但效果还不太理想”

“有遇到什么困难么?”

“唉,一言难尽,待会你看下把,也提一下意见,这个是我们排练模仿的视频,你也可以看下”

老大把脉

老大在旁边看着大伙排练,没有做任何评价与指导,只是在久不久时用言语激励一下大家。

今天的排练结束了,大伙都散去,Tina和老大留了下来。

“今天的排练我看了,我们的整齐度还略有欠缺,我们的队伍就像你描述的一样,经常会有人临时有事,没办法很好的达到一个整体的效果,磨合度有待提升”

“嗯,对呀,但我已经尽力选择大家都有空的时间了,但要每个人都有空是在是太难了”

“对,这是一个问题,人越多越难协调与同步,我们通过初中数学就可以知道,协调的难度是随着人数的增加指数级上涨的”

“嗯嗯,但也没办法呀,表演方阵要求就是要这么多人”,Tina应答着,心里倒翻了个白眼,好好的干嘛突然扯上数学

“对,总人数是没办法减少,但如果分成多个小组,小组人数比较小,是不是集齐一个小组的人更为简单点?我们可以让各个小组各自排练,然后每周一次像现在这样合起来排练。对于类似规模导致的问题,我们大多都可以用分而治之的策略解决,就像公司里把我们的软件分成了很多子系统一样”

“啊?那这样子要怎么分组,这是一只完整的舞蹈呀”

“一个完整的舞蹈必然是每个人的交互的有机结合,但舞蹈里必然会有一群人之间的交互更为密切,我们可以把这群人合成一组,那只涉及他们内部的舞蹈叫可以他们内部自行排练了。”

“但这个界限不是很清晰把?”

“对,更为密切这个概念确实不是很清晰,所以这也是组织设计的艺术之一,甚至于这是一个需要试错的过程。我们的软件编码一样,强调高内聚低耦合,让通讯交互成本降到最低的理念是一致的。但我们不能因为无法达到最优的设计而不去分组,分组可能不是最优,但进行了分组就已经在进步了,我们可以在继续排练的过程中继续优化”

“嗯嗯,想不到编码与方阵排练还有这样类似的东西,哈哈”

“嗯,世界有很多东西是相似的,像公司的组织架构、各种天体系统、人类的各种器官组成等等都有类似高内聚低耦合的特性存在,所以在我看来一个优秀的有悟性的码农能将其知识迁移到很多领域”

“好,那我认真研究下视频,然后对团队进行分组,一个分组的大小多少合适呢?”

“太阳系有8个行星,地球只有1个月球卫星,这都是由于它们质量决定的。一个分组最大能有多少人这实质是由组长的个人能力决定的,组长能协调的人数就是这个组人数的上限,但当然啦,具体人数要和舞蹈自身的需要相结合。组的大小可以取‘舞蹈分组所需人数’和‘组长最大可管理人数’的较小值。”

“这是让一个组尽可能大的意思么?”

“对的,一个组应该在可控范围内尽可能的大,因为分组小意味着分组多,而分组多,协调多个分组就会产生更大的成本。当分组很多,甚至于把一个人看成一个组的时候,就跟你当前面临的情况一样。对应于我们软件领域也是一样的,对于微服务/组件应该拆成多大这个问题,个人理解组件的大小应该在一个普通程序员能理解、控制的复杂度范围内,程序员就是这个微服务的类、模块的组长”

“嗯,明白了。我尽量将其分组大小控制在合适范围内”

“还有一件事就是,每个小组指定了组长之后,之后组内的排练可以适当程度的放权,这样的话,你才有更多的精力去考虑我们组与组之间的交互应该怎么进行。但当然啦,如果你得精力足够的话,去了解和支持某些个特别舞蹈特别复杂的小组的进展也是挺好的。对于人的能力来说,能做高层设计同时也能做底层执行当然是最理想的,但在程序代码里,一个模块既处理高层逻辑又处理底层逻辑的话,是一个不好的表现,这会让我们的代码更难以理解”

“哈哈,我本来只想看下怎么排练好方阵,想不到还顺便学习了这么多编码知识,感谢老大呀!”

“嗯,刚刚的说的都是些简单的理论,至于落地到实践还会复杂的多,细节的处理还是得靠你呀,加油~”

最后的展示

有了一些基础理论的指导,Tina的方阵队伍的组织架构在排练中演进,各个小组有了组长能自发的组织组内的训练,各组的表演水平得到了很大的提升。到集体汇总排练的时候,实际上就是以组的维度进行交互,而非之前的以人维度的磨合,因此集体汇总排练的效率也得到了提升。

“起步走!”,方阵前进的音乐和口令在体育馆正式响起,方阵迈着整齐的步伐往主席台走去。Tina看着队伍,再回头看来下老大,嘴角泛起了自信的微笑。

 

(最近看了本如何写小说的书,实践一下小说风格,哈哈,若本文有错误缺陷,请批评负责帮助我进步。若本文对你有所启发和帮助请不吝点赞转发。这对我真的很重要,拜托了~)

 

作者简介

多年金融行业经验,现为某Top2互联网银行高级搬砖工,曾在两家TOP3股份制商业银行及一家互金创业公司工作(架构、核心业务主程),EasyTransaction作者,欢迎关注个人公众号,在这里我会分享日常工作、生活中对于架构、编码和业务的思考

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!