今天的項目主要有3個:
1.極速60秒
2.海難逃生
3.電影《地球上的星星》
極速60秒
規(guī)則: 有30張圖片,他們對應(yīng)1到30的數(shù)字掀潮,在60秒內(nèi)锭弊,按順序把他們分別找出來交給教練填硕。
總結(jié): 理清需求之后,我對這個問題進(jìn)行了抽象炼吴,這其實是一個集合(圖片)到另一個集合的映射的過程(數(shù)字)本鸣,輸入是30個無序的圖片,輸出是按照對應(yīng)數(shù)字的升序排好的30個圖片硅蹦。
我們開始討論了兩種算法(方案)荣德。
- 一種是 記的過程和猜的過程分開,在60秒內(nèi)只記圖片童芹,回來后把每個人記住的圖片取并集涮瞻,之后再猜(尋找映射關(guān)系)。
- 另一種是按順序一個一個的記 + 猜假褪,找到一個再進(jìn)行下一個署咽。
理論上兩種方案都是可以完成需求的。 具體執(zhí)行的時候發(fā)現(xiàn)第一種方案,記這個過程很難宁否,因為沒有一種標(biāo)準(zhǔn)的語言來描述圖片內(nèi)容窒升,沒法完成記的過程,自然這種方案就不可行了慕匠。
最終我們隊采用的是第二種方案饱须,別的隊也是同樣的方案。
我們的成績是第二名台谊,復(fù)盤的時候發(fā)現(xiàn)獲勝的一隊除了上述方案外還有兩個優(yōu)化策略蓉媳,一個是每個人劃分一個區(qū)域來指,另一個我忘記了锅铅。
在方案相同的情況下酪呻,一隊的兩個優(yōu)化策略使得一隊更快完成了挑戰(zhàn),剩下我們兩個隊比拼因為方案和優(yōu)化策略都一樣盐须,更多的是人的比拼号杠。
這里的優(yōu)化策略帶來的性能提升,讓我想起了react vdom的diff 算法也是因為加了3條優(yōu)化策略而使得算法復(fù)雜度從o(n^3)降到了o(n)丰歌,實現(xiàn)了性能的質(zhì)的提升。
當(dāng)然除了這些抽象層次的區(qū)別之外屉凯,具體到這個問題立帖,團(tuán)隊的分工協(xié)作溝通等都會涉及到。
海難逃生
規(guī)則: 4米高的甲板悠砚,通過協(xié)作讓所有人都過去晓勇。
總結(jié): 針對這個需求,設(shè)計的方案是0~2層人梯 + 上面人拉 的方式灌旧,結(jié)合蹬 + 拉的力量绑咱。確定好了方案之后,具體分工的時候枢泰,會把第一層和第二層人梯交給男生做描融,女生和重量大的優(yōu)先上。當(dāng)?shù)搅俗詈笠粋€人的時候衡蚂,沒有人梯可蹬窿克,只能靠拉的力量,這時候會通過一個人倒掛下來拉的方式毛甲,來把最后一個人拉上去年叮。
整體邏輯用代碼描述如下:
function escapeAll(people) {
const PEOPLE_TATAL_COUNT = people.length;
function escape() {
if (people.length === PEOPLE_TOTAL_COUNT) {
通過人梯上去(people.pop());
escape(people, ++num);
} else if (num === 1) {
通過倒掛拉上去(people.pop());
} else {
通過人梯和拉上去(people.pop());
}
}
return escape();
}
const people = ['翟旭光', '沈東', '王四光'];// 共35人
escapeAll(people);
電影《地球上的星星》
規(guī)則: 看一部電影,看完之后畫出邏輯主線玻募。
總結(jié): 分析之后的邏輯如下只损。
const 尹夏 = {
status: '不會讀寫',
做考試題() {
this.status.......
}
畫畫() {
this.status.......
}
}
尹夏.做考試題()
尹夏.畫畫();
尼可.影響學(xué)生(尹夏, '會讀寫')
尹夏.做考試題()
尹夏.畫畫();
受尼可老師影響,解決了自己的問題七咧,充分發(fā)揮自己的天分跃惫,變化巨大叮叹。
復(fù)盤與提升
總結(jié)上面的經(jīng)驗和教訓(xùn),主要由以下幾條:
抽象:編程是對現(xiàn)實世界的抽象辈挂,現(xiàn)實世界的問題都能通過抽象和建模來映射到代碼的世界衬横,然后使用編程相關(guān)的理論來解釋。抽象成編程問題或者數(shù)學(xué)問題之后终蒂,很多理論和優(yōu)化方式都可以直接的套用蜂林。人的因素降到最小。
拆分與組合:完成一個功能需要組合很多的東西拇泣,需要劃分每一部分的職責(zé)噪叙,就像公司部門和崗位的職責(zé)劃分一樣,需要每個人的配合才能運轉(zhuǎn)霉翔,有的崗位職責(zé)更重要一些睁蕾,就像人梯的那兩層。但是無論職責(zé)的重要程度怎樣都應(yīng)該是可替換的债朵,不能強(qiáng)耦合子眶。不然一個人出了問題,整體都沒法往下進(jìn)行序芦。
3.通信:為了整體結(jié)構(gòu)的松散臭杰,會做很多的拆分,包括部門谚中、崗位等渴杆,拆分之后就會涉及到通信,通信就有成本的問題宪塔,就像極速60秒里需要把所有的信息匯總到一個人那里來集中處理磁奖,就像海難逃生需要一個指揮來統(tǒng)籌全局,和公司架構(gòu)同理某筐,分層次的管理比搭,溝通的方向更多的是上下級,這樣信息流動會清晰高效很多南誊。
- 追求全局最優(yōu):追求全局最優(yōu)而不是局部最優(yōu)敢辩,海難逃生的時候,確定了人梯 + 拉 的策略之后弟疆,安排逃生的順序也很重要戚长,不能簡單的先讓所有女生過去,也不能簡單的讓體重大的先過去怠苔,要結(jié)合人梯的人選以及上面拉的人選等同廉,全局的綜合考慮,類似一個動態(tài)規(guī)劃求全局最優(yōu)解的過程。正如有個老師分享的“通盤無妙手”迫肖,我們應(yīng)該從整體上去做優(yōu)化調(diào)整锅劝,去追求全局最優(yōu),而不是局部的最優(yōu)蟆湖。
5.狀態(tài):編程于我故爵,就像畫畫之于尹夏,他改變了我的狀態(tài)隅津,已經(jīng)深深潛入我的思想和潛意識诬垂,影響著我對世界的看法,緊緊耦合伦仍,不可分離结窘。