程式設計哲理小故事:Tina的運動會方陣
自從接到任務後,Tina一直 煩惱著如何讓這群繁忙又缺乏才藝的程式設計師在運動會開幕式上做出一個有趣的方陣表演。
接到了運動會的方陣表演的任務
時間回到1個月前。
Tina正在工位上繁忙地進行著下一期準備上線系統的測試,這時候老大跑了過來
“Tina,我們公司要舉行運動會,開幕式時有方陣的表演,你幫忙組織下?”
Tina心裡咯噔一下,來了一個苦差。
“方陣?就是像奧運會開幕的時候,運動員在體育場跑道上走,展示風采的那種?”
"對,到時要一個6*6共36人的方陣,到時會在市裡最好的體育館進行,公司的大領導會在主席臺看我們表演,為了我們部門,你要加油呀"
“嗯,我會加油的,但36個人不少呀,大家最近都挺忙的,感覺我拉不動他們參加呀”,Tina苦笑道。
“怎麼會呢,我看你在男生中還挺有人氣的,不過你不好意思拉人的話,人的問題我解決,你策劃組織好表演就行”
進展緩慢的方陣表演
方陣的排練一週一次,一週一週的過去了,但整體的效果並沒有得到質的提升,排練時總是湊不齊人,舞蹈也相對複雜,互動很多,大家也沒能很好的磨合,方陣表演這件事幾乎成了Tina的心病
“萬一到時我們成了最差的方陣怎麼辦?我會讓老大很失望的”
今天還沒到排練的時間,但她提前到了場地,擔心著,糾結著。
“方陣排練成怎樣啦?”今天老大居然親自過來了。
“我們今晚繼續排練,但效果還不太理想”
“有遇到什麼困難麼?”
“唉,一言難盡,待會你看下把,也提一下意見,這個是我們排練模仿的視訊,你也可以看下”
老大把脈
老大在旁邊看著大夥排練,沒有做任何評價與指導,只是在久不久時用言語激勵一下大家。
今天的排練結束了,大夥都散去,Tina和老大留了下來。
“今天的排練我看了,我們的整齊度還略有欠缺,我們的隊伍就像你描述的一樣,經常會有人臨時有事,沒辦法很好的達到一個整體的效果,磨合度有待提升”
“嗯,對呀,但我已經盡力選擇大家都有空的時間了,但要每個人都有空是在是太難了”
“對,這是一個問題,人越多越難協調與同步,我們通過初中數學就可以知道,協調的難度是隨著人數的增加指數級上漲的”
“嗯嗯,但也沒辦法呀,表演方陣要求就是要這麼多人”,Tina應答著,心裡倒翻了個白眼,好好的幹嘛突然扯上數學
“對,總人數是沒辦法減少,但如果分成多個小組,小組人數比較小,是不是集齊一個小組的人更為簡單點?我們可以讓各個小組各自排練,然後每週一次像現在這樣合起來排練。對於類似規模導致的問題,我們大多都可以用分而治之的策略解決,就像公司裡把我們的軟體分成了很多子系統一樣”
“啊?那這樣子要怎麼分組,這是一隻完整的舞蹈呀”
“一個完整的舞蹈必然是每個人的互動的有機結合,但舞蹈裡必然會有一群人之間的互動更為密切,我們可以把這群人合成一組,那隻涉及他們內部的舞蹈叫可以他們內部自行排練了。”
“但這個界限不是很清晰把?”
“對,更為密切這個概念確實不是很清晰,所以這也是組織設計的藝術之一,甚至於這是一個需要試錯的過程。我們的軟體編碼一樣,強調高內聚低耦合,讓通訊互動成本降到最低的理念是一致的。但我們不能因為無法達到最優的設計而不去分組,分組可能不是最優,但進行了分組就已經在進步了,我們可以在繼續排練的過程中繼續優化”
“嗯嗯,想不到編碼與方陣排練還有這樣類似的東西,哈哈”
“嗯,世界有很多東西是相似的,像公司的組織架構、各種天體系統、人類的各種器官組成等等都有類似高內聚低耦合的特性存在,所以在我看來一個優秀的有悟性的碼農能將其知識遷移到很多領域”
“好,那我認真研究下視訊,然後對團隊進行分組,一個分組的大小多少合適呢?”
“太陽系有8個行星,地球只有1個月球衛星,這都是由於它們質量決定的。一個分組最大能有多少人這實質是由組長的個人能力決定的,組長能協調的人數就是這個組人數的上限,但當然啦,具體人數要和舞蹈自身的需要相結合。組的大小可以取‘舞蹈分組所需人數’和‘組長最大可管理人數’的較小值。”
“這是讓一個組儘可能大的意思麼?”
“對的,一個組應該在可控範圍內儘可能的大,因為分組小意味著分組多,而分組多,協調多個分組就會產生更大的成本。當分組很多,甚至於把一個人看成一個組的時候,就跟你當前面臨的情況一樣。對應於我們軟體領域也是一樣的,對於微服務/元件應該拆成多大這個問題,個人理解元件的大小應該在一個普通程式設計師能理解、控制的複雜度範圍內,程式設計師就是這個微服務的類、模組的組長”
“嗯,明白了。我儘量將其分組大小控制在合適範圍內”
“還有一件事就是,每個小組指定了組長之後,之後組內的排練可以適當程度的放權,這樣的話,你才有更多的精力去考慮我們組與組之間的互動應該怎麼進行。但當然啦,如果你得精力足夠的話,去了解和支援某些個特別舞蹈特別複雜的小組的進展也是挺好的。對於人的能力來說,能做高層設計同時也能做底層執行當然是最理想的,但在程式程式碼裡,一個模組既處理高層邏輯又處理底層邏輯的話,是一個不好的表現,這會讓我們的程式碼更難以理解”
“哈哈,我本來只想看下怎麼排練好方陣,想不到還順便學習了這麼多編碼知識,感謝老大呀!”
“嗯,剛剛的說的都是些簡單的理論,至於落地到實踐還會複雜的多,細節的處理還是得靠你呀,加油~”
最後的展示
有了一些基礎理論的指導,Tina的方陣隊伍的組織架構在排練中演進,各個小組有了組長能自發的組織組內的訓練,各組的表演水平得到了很大的提升。到集體彙總排練的時候,實際上就是以組的維度進行互動,而非之前的以人維度的磨合,因此集體彙總排練的效率也得到了提升。
“起步走!”,方陣前進的音樂和口令在體育館正式響起,方陣邁著整齊的步伐往主席臺走去。Tina看著隊伍,再回頭看來下老大,嘴角泛起了自信的微笑。
(最近看了本如何寫小說的書,實踐一下小說風格,哈哈,若本文有錯誤缺陷,請批評負責幫助我進步。若本文對你有所啟發和幫助請不吝點贊轉發。這對我真的很重要,拜託了~)
作者簡介
多年金融行業經驗,現為某Top2網際網路銀行高階搬磚工,曾在兩家TOP3股份制商業銀行及一家互金創業公司工作(架構、核心業務主程),EasyTransaction作者,歡迎關注個人公眾號,在這裡我會分享日常工作、生活中對於架構、編碼和業務的思考
&n