task5做的時(shí)間很久了,今天下午才把代碼提交上去。做的這么慢的原因,其一是,經(jīng)過task4 80個(gè)代碼的轟擊,身體上進(jìn)入了疲憊期,心理上也進(jìn)入了厭學(xué)期,效率很低;其二是,對于要求看的那幾篇博大精深的文章,我始終感覺云里霧里,不能get到重點(diǎn)。我是那種如果有些東西沒搞清楚的話,不會(huì)輕易開始去做的那種人,我需要理解它并且有80%的把握的時(shí)候,才會(huì)去動(dòng)手開始做,所以直到昨天晚上開了線下聚會(huì),被助教那么一點(diǎn)就突然恍然大悟了,晚上回來就把圖畫好框架搭好了,今天完成了整個(gè)代碼。一旦弄清楚后,做事的效率就會(huì)高很多,那么前面自己一個(gè)人探索的時(shí)間還是值得的,有思考有困難,才能在困難得到解決的時(shí)候有一種撥開云霧的感覺,那種感覺大概會(huì)比在只有20%理解的時(shí)候就開始做這件事,在做它的時(shí)候再邊建立模型邊做要好的多,效率也會(huì)高的多。
要點(diǎn)一:任務(wù)列表法
1 原則:
- 完全窮盡:
完全窮盡是什么意思呢?
當(dāng)我開始做事情的時(shí)候,我不能把所有的事情窮盡,我列出的列表跟我做的事情是不完全等價(jià)的,這說明我們的工作行為是非常混沌不可視的,哪怕是對自己。
有時(shí)事情看起來在大面上是窮盡了,但是做的時(shí)候,發(fā)現(xiàn)又出現(xiàn)了新的任務(wù)。那說明每一項(xiàng)任務(wù)的輸入和輸出沒有想清楚,所以當(dāng)發(fā)現(xiàn)輸入輸出有欠缺的時(shí)候(主要是輸入,輸出欠缺的結(jié)果也是要補(bǔ)輸入),就需要新的任務(wù)來準(zhǔn)備輸入,于是任務(wù)列表就增加了,這也是一種沒有窮盡。 - 各自獨(dú)立
各自獨(dú)立又是什么意思呢?
意味著,每一項(xiàng)任務(wù)都可以單獨(dú)做完,而不需要先做完其中一項(xiàng)任務(wù),才能做完另一項(xiàng)。
所以我們在做任務(wù)列表和畫結(jié)構(gòu)模塊圖的時(shí)候可以用上面兩點(diǎn)來審視自己,看看自己究竟有沒做到完全窮盡和各自獨(dú)立兩個(gè)原則,如果沒有做到的話,就需要思考自己是為什么沒有做到,少考慮了哪些要素?要做到這兩點(diǎn)一定很難,需要不斷地實(shí)踐然后反思再實(shí)踐再反思,也就是會(huì)不斷地用到下面的PDCA模型。
2 戴明環(huán)PDCA
- PDCA即Plan - Do - Check - Action。
- 它講究從計(jì)劃開始,經(jīng)過實(shí)踐,再反思,產(chǎn)生的改進(jìn)行動(dòng)再納入下一輪計(jì)劃的持續(xù)改進(jìn)過程。
- 要通過反思來發(fā)現(xiàn)自己的問題,比如自己不熟悉的知識(shí)點(diǎn),不熟悉的方法甚至于不熟悉的業(yè)務(wù)知識(shí),最后的action也往往是刻意練習(xí)來提升生產(chǎn)效率的。
- 如何Check?
一般兩方面考慮:一是從完成時(shí)間來考慮,是否在Plan的時(shí)間內(nèi)做完了?產(chǎn)生20%明顯差距的時(shí)候就需要反思了,并納入到將來的Plan中;二是從任務(wù)列表的數(shù)量來考慮,估計(jì)的任務(wù)列表是否和實(shí)際做的任務(wù)列表一樣多?往往是會(huì)多出來的,這時(shí)就需要反思,自己是那里不足導(dǎo)致了這個(gè)差別?
要點(diǎn)二:機(jī)器是如何思考的?
大體就是這個(gè)樣子。那么輸入輸出的是什么?
-
輸入輸出的是數(shù)據(jù),中間處理的就是過程。
所以,兩個(gè)要點(diǎn):一是數(shù)據(jù),二是過程
對于數(shù)據(jù)來說,要做的就是:將數(shù)據(jù)結(jié)構(gòu)化,也就是說你要把非結(jié)構(gòu)化的數(shù)據(jù)變得結(jié)構(gòu)化一點(diǎn),簡單點(diǎn)說買就是需要把它變成你的代碼可操控的數(shù)據(jù)。
那么,遇到一個(gè)需求的時(shí)候,思考問題的過程大致以下幾個(gè)階段:
- 分解問題,一小步一小步地來,尤其對于初學(xué)者來說,不要害怕問題細(xì)化了會(huì)更費(fèi)時(shí)間,將問題細(xì)化會(huì)讓你更容易看懂整個(gè)問題,不積跬步無以至千里大概就是這個(gè)意思;
- 找到子問題之間的關(guān)聯(lián)(通過輸入輸出關(guān)聯(lián)起來);
- 找到問題的邊界,明確假設(shè)和結(jié)果。
要點(diǎn)三:我腦中的重構(gòu)
學(xué)會(huì)概念性地思考:
- 看到復(fù)雜場景背后的核心本質(zhì)
- 識(shí)別到兩個(gè)不相關(guān)的情景的相似之處
- 用比喻或類比來解釋場景
- 用一個(gè)框架去解決問題
題外話:關(guān)于函數(shù)及變量的命名
函數(shù)命名原則:
函數(shù)命名一般是“動(dòng)詞+名詞”組合,你所命名的函數(shù)要讓讀你的代碼的人一眼明白你的這段函數(shù)是用來做什么的,程序代碼寫的好不好,與代碼的可讀性強(qiáng)不強(qiáng)有著很大的關(guān)系,畢竟對于一個(gè)龐大的項(xiàng)目來說,每人做的部分是有限的,這時(shí)互相能夠配合好就很大程度地決定了整個(gè)項(xiàng)目的進(jìn)度快慢,而讓別人能夠輕松讀懂你的代碼是其中很重要的一件事。變量命名原則:
給變量命名一般是用“名詞”來命名,比如sum,result,count等常見功用的變量名字。
參考文章:
編程的精進(jìn)之法
像機(jī)器一樣思考系列文章