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

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

时间回到1个月前。

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

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

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

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

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

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

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

进展缓慢的方阵表演

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

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

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

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

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

“有遇到什么困难么?”

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

老大把脉

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后的展示

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

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

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

作者简介

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

编程哲理小故事:Tina的运动会方阵的更多相关文章

  1. 生活沉思录 via 哲理小故事

    本文转载:http://www.cnblogs.com/willick/p/3174803.html 1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛, ...

  2. 生活沉思录 via 哲理小故事(一)

    1.小托蒂的悲剧 意大利小男孩托蒂,有一只十分奇怪的眼睛,因为从生理上看,这是一只完全正常的眼睛,但却是失明的. 原来,托蒂刚出生时,这只眼睛轻度感染,曾用绷带缠了两个星期.这对常人来说几乎没有人任何 ...

  3. 生活沉思录 via 哲理小故事(四)

    1.围墙里的墓碑 第一次世界大战期间,驻守意大利某小镇的年轻军官结识了镇上的牧师.虽然军官信仰信教,而牧师是天主教牧师,但两人一见如故. 军官在一次执行任务中身负重伤,弥留之际嘱托牧师无论如何要把自己 ...

  4. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...

  5. 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事

    点这里 来自法国南特(Nantes)的 Guillaume Kurkdjian 目前还是个学生.Kurkdjian 擅长创作一些平面动态图像,这些有趣的小动图仿佛每张都诉说了一个小笑话或者小故事,像个 ...

  6. Java反射的小故事

    Java反射的小故事: 首先定义一个Java类 package com.xiaoysec.test; public class Person { private String name; privat ...

  7. 小故事理解TCP/IP连接时的三次握手

    在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,示意图如下: 下面通过一个小故事简单理解一下这三次握手的具体含义: 一天,快递员小客(客户端)准备去小服(服务器)家去送快递(准备与服务 ...

  8. 记录这段时间java编程的小知识点

    记录这段时间java编程的小知识点 eclipse项目导入中文乱码 eclipse左侧目录结构变动 eclipse代码段左右移动 按tal键,是整体右移. 按shift  table 同时按,是整体左 ...

  9. (python爬取小故事网并写入mysql)

    前言: 这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手 ...

随机推荐

  1. Netty中FastThreadLocal源码分析

    Netty中使用FastThreadLocal替代JDK中的ThreadLocal[JAVA]ThreadLocal源码分析,其用法和ThreadLocal 一样,只不过从名字FastThreadLo ...

  2. 阿里云(百度云)Linux系统挂载磁盘

    阿里云(百度云)Linux系统挂载磁盘

  3. 升级GCC

    1. wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.gz 2. tar -zxvf gcc-4.9.4.tar.gz 3. cd gc ...

  4. Winform中设置ZedGraph多条Y轴时与多条曲线一一对应

    场景 Winform中实现ZedGraph的多条Y轴(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1001322 ...

  5. LinuxShell——变量

    LinuxShell——变量 摘要:本文主要学习了Shell命令中的变量. 什么是变量 简单的说,变量就是让某一个特定字串代表不固定的内容. 变量是计算机内存的单元,其中存放的值可以改变.当Shell ...

  6. Java生鲜电商平台-商品的spu和sku数据结构设计与架构

    Java生鲜电商平台-商品的spu和sku数据结构设计与架构 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商品的属性和商品的基本信息分离,分开维护 ...

  7. mvc 返回json格式时间格式化

    protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEnco ...

  8. SAP MM Purchase Order History Category

    SAP MM Purchase Order History Category 1) ,These are different categories of PO history which is con ...

  9. iOS开发之--隐藏状态栏

    1,全局隐藏 在Targets->General->勾选中Hide status bar .,如下图: 2.单个页面隐藏/展示状态栏 1).首先在info.plist里面View cont ...

  10. CATransform3D 特效详解

    http://blog.sina.com.cn/s/blog_8f5097be0101b91z.html