編程筆記丨程序員如何持續(xù)吸收知識(shí)?教你提升99%的學(xué)習(xí)效率!
在軟技能的知識(shí)體系中,對(duì)于我們程序員來說最重要的莫過于學(xué)習(xí)方法了。我們應(yīng)該如何釋放自己的內(nèi)在潛力去像海綿一樣地吸收知識(shí)呢?在本篇文章中我們將深入探討如何成為一個(gè)頂尖的學(xué)習(xí)者。

一、如何成為一個(gè)高段位的學(xué)習(xí)者?
1、建構(gòu)式的學(xué)習(xí)模式
對(duì)問題的好奇、對(duì)答案的渴望,是驅(qū)動(dòng)我們學(xué)習(xí)和探索的主要?jiǎng)恿Α?/strong>
「知識(shí)不是簡(jiǎn)單的記憶,而是由我們主動(dòng)地去建構(gòu)而來的」。我們必須充分利用現(xiàn)有的知識(shí),在主動(dòng)性目標(biāo)或核心問題的引導(dǎo)下去積極地進(jìn)行探索,只有這樣,我們才能夠把得到的新知識(shí)與舊知識(shí)糅合在一起,并在頭腦中建構(gòu)出新的知識(shí)體系。
「一個(gè)好的長時(shí)程問題,能讓我們成為“構(gòu)建者”,因?yàn)槲覀儾粌H在學(xué)習(xí)知識(shí),還在“建構(gòu)答案”,在努力回答問題的過程中,我們篩選、評(píng)判與整合新舊知識(shí),并把它們?nèi)趨R而成一個(gè)知識(shí)體系?!?/strong>
「一個(gè)好的長時(shí)程問題,能讓我們成為“探索者”,主動(dòng)地去探求未知的領(lǐng)域,擴(kuò)寬“未知的未知”的邊界,而不是僅僅滿足于對(duì)現(xiàn)成的、邊界明晰的知識(shí)的掌握。」
因此,「提出一個(gè)深入的探索性問題是一種學(xué)習(xí)效果非常好的方法」。在問題牽引下的學(xué)習(xí),會(huì)幫助我們連續(xù)不斷地構(gòu)筑著知識(shí)之間的聯(lián)系,最終便會(huì)形成針對(duì)于該問題的思維導(dǎo)圖之解。
「提問是將我們引向深度學(xué)習(xí)的起點(diǎn)。一位優(yōu)秀的學(xué)習(xí)者,一定同時(shí)也是一個(gè)優(yōu)秀的提問者,他會(huì)從閱讀、觀察、思考的過程中產(chǎn)生問題,先解答表層的、容易的那部分,留下深度的、探索式的問題給自己,并在由此問題招致的持續(xù)困擾和折磨中開啟卓越的心智旅程?!?/strong>
2、通過解碼,深入事物的深層
我們不要只做信息的搬運(yùn)工,而應(yīng)該通過解碼,去深入事物的深層。
一個(gè)高段位的學(xué)習(xí)者,通常都是一個(gè)適應(yīng)性專家,他們可以有意識(shí)地構(gòu)筑一個(gè)信息解碼與知識(shí)擴(kuò)展的良性循環(huán)—不斷地從一些高質(zhì)量的學(xué)習(xí)資料中通過「學(xué)習(xí)、思考、實(shí)踐」去獲取深度知識(shí)以擴(kuò)展與修正我們現(xiàn)有的知識(shí)體系。最常見的一些高效的解碼方式有如下三種:
1)、「不僅要去尋結(jié)論,更要去尋過程」:不言而喻,過程比結(jié)論更加重要。
2)、「不僅要去做歸納,更要去做擴(kuò)展」:歸納的同時(shí),我們應(yīng)當(dāng)注重保留其中的核心知識(shí)與關(guān)鍵細(xì)節(jié)。
3)、「不僅要去比較相似,更要去比較不同」:不同才有知識(shí),才有新意,才有新的發(fā)現(xiàn),才能實(shí)現(xiàn)真正地自我提升,在差別中我們首先應(yīng)當(dāng)選擇最受強(qiáng)調(diào)的東西,這不僅僅是因?yàn)樗鼈冏钜俗⒛?,而且是因?yàn)樗鼈円沧罡挥袉l(fā)性。
而這,大概就是解碼的要法了。

3、技能—才是學(xué)習(xí)的終點(diǎn)
只有最后能夠作用于現(xiàn)實(shí)的學(xué)習(xí),才是唯一有效的學(xué)習(xí)。最有效的學(xué)習(xí)方式,即「做中學(xué)」,它是學(xué)習(xí)真正為我所用的關(guān)鍵一步。
目前「最有效的兩種通用學(xué)習(xí)方式」:
1)、「不斷地測(cè)試練習(xí)」:即高頻次的重復(fù)練習(xí)。
2)、「分散練習(xí)」:分散練習(xí)即在一個(gè)較長的時(shí)期內(nèi)使用較長時(shí)間間隔的分布式訓(xùn)練,,例如「1小時(shí)、1天、1周、1個(gè)月、3個(gè)月」的時(shí)間間隔。
獲得技能也就意味著我們擁有了改變世界的能力,哪怕一開始這種能力非常弱小。
「高效實(shí)踐的方式有三種」,如下所示:
1)、寫作式練習(xí)
寫作是一種「典型的知識(shí)建構(gòu)或重構(gòu)活動(dòng)」。一篇文章如果要被人讀懂、要把人說服,需要縝密的思維、清晰的表達(dá)和翔實(shí)的依據(jù),這些都需要我們對(duì)知識(shí)的編碼與組織達(dá)到一個(gè)相對(duì)較高的水準(zhǔn)。
而寫作的另一個(gè)優(yōu)勢(shì)在于能「獲得外界的反饋」,我們可以「根據(jù)讀者的評(píng)論去提取出對(duì)我們有用的信息,以此來完善或修正我們的知識(shí)體系」。
2)、游戲式練習(xí)
我們可以「使用“思想實(shí)驗(yàn)”來實(shí)現(xiàn)一個(gè)虛擬的游戲式練習(xí)」,思想實(shí)驗(yàn)就是構(gòu)造一個(gè)現(xiàn)實(shí)中并不存在的假想情境,然后運(yùn)用所學(xué)的知識(shí),來設(shè)想事物在這個(gè)情境中的變化。在這樣的練習(xí)中,我們往往可以得到比原先更為深刻的洞見。
3)、設(shè)計(jì)式練習(xí)
調(diào)用已有的知識(shí),「設(shè)計(jì)某一種解決方案,來解決某個(gè)特定的問題」。這種練習(xí)我們通常會(huì)在架構(gòu)與系統(tǒng)設(shè)計(jì)方面應(yīng)用的比較多。
可以看出,「知識(shí)的練習(xí)迫使我們對(duì)現(xiàn)有的知識(shí)進(jìn)行更加深入的審視,對(duì)現(xiàn)實(shí)的情境和問題進(jìn)行更加細(xì)微的觀察,并且致力于創(chuàng)造兩者之間的關(guān)聯(lián)。它使我們不再固守書本,不再去做僵化的記憶,而是讓我們賦予知識(shí)以靈性,以更好地適應(yīng)這個(gè)變化莫測(cè)的世界」。

4、調(diào)整努力的姿勢(shì)
具備成長性心智的人,會(huì)比平常人成長地更快,它們都堅(jiān)信——「只要夠努力,就能變得更好」。以大多數(shù)人的努力程度之低,根本輪不到拼天賦。根據(jù)當(dāng)前的神經(jīng)科學(xué)的研究表明,「人的大腦具有相當(dāng)大的可塑性,因此后天的努力對(duì)人的改造作用可以是驚人的」。
我們?cè)诓粩嗟貙W(xué)習(xí)和思考的過程中,其大腦內(nèi)部會(huì)產(chǎn)生劇烈的神經(jīng)活動(dòng),這迫使腦神經(jīng)之間建立了更多的連接。隨著神經(jīng)元之間連接越來越多,我們對(duì)問題的認(rèn)識(shí)也就越來越深刻,遇到類似的問題反應(yīng)也會(huì)越來越快。不僅如此,甚至還能觸類旁通,舉一反三,乃至和其他的領(lǐng)域結(jié)合,產(chǎn)生創(chuàng)新性的想法。
「努力,不是一場(chǎng)意志力的較量,而是一種需要學(xué)習(xí)的策略」。努力本身是一種具有策略性的活動(dòng),這體現(xiàn)在如下「三個(gè)方面」:
1)、「?jìng)€(gè)人資源的調(diào)配。」
2)、「行動(dòng)方向的選擇?!?/strong>
3)、「執(zhí)行進(jìn)度的把控和調(diào)適?!?/strong>
而這種策略是需要我們不斷地學(xué)習(xí)與優(yōu)化的。
5、專注在一個(gè)領(lǐng)域走到最后
在這個(gè)互聯(lián)網(wǎng)上,信息是爆炸的,知識(shí)是過載的,觀點(diǎn)是鼓噪的,熱點(diǎn)是速朽的。而反過來,「專注在一件事上,精益求精、持之以恒的態(tài)度和行動(dòng),則是最為稀少與珍貴的?!?/strong>
我一直都相信一句話——「具備突出的優(yōu)點(diǎn)比沒有明顯的弱點(diǎn)要重要的多」。對(duì)此,我自然而然地就想到了業(yè)界常說的“T”型人才,要高效地成長為“T”型人才,我們得先做出那一豎,即「應(yīng)先在某一領(lǐng)域深入鉆研后再去涉獵其他領(lǐng)域,這樣更能觸類旁通,對(duì)提升那一橫的含金量也很有好處?!?/strong>
而不少事實(shí)也證明了,「淺嘗輒止的人很可能將一無所獲,而專注投入走到最后的人將會(huì)獲得超額收益。并且,每個(gè)人的精力都是有限的,如果你不專注,就很有可能永遠(yuǎn)在多個(gè)“緩慢起步期”徘徊?!?/strong>
并且,人是無法做到十全十美的,因?yàn)榭商嵘姆矫鎸?shí)在太多,在有限的精力與時(shí)間之下,我們只能竭力發(fā)揮自己的優(yōu)勢(shì),將其發(fā)揮到淋漓盡致。對(duì)此,我們需要「學(xué)習(xí)齊白石先生那種長期專注和一絲不茍的精神,去把一件事情做到極致?!?/strong>
6、花費(fèi)20%的時(shí)間去涉獵不同領(lǐng)域的知識(shí)
「學(xué)習(xí)高手通常都會(huì)有意識(shí)地把不同領(lǐng)域甚至不同學(xué)科的知識(shí)擺放在一起,然后嘗試去分析、比對(duì)它們之間的潛在關(guān)聯(lián),甚至當(dāng)那異質(zhì)的素材堆疊在一起時(shí),僅僅是潛意識(shí)的推動(dòng),就可以讓這種隱藏的關(guān)系浮出水面?!?/strong>
在當(dāng)今,有很多醫(yī)學(xué)的難題長期無法解決或者沒有進(jìn)展的一個(gè)主要原因就由于大多數(shù)的醫(yī)學(xué)研究者因?yàn)槎嗄陮I(yè)教育塑造的知識(shí)壁壘導(dǎo)致缺乏足夠的知識(shí)廣度而造成的。
因此,我們需要需要去花費(fèi)20%的時(shí)間去涉獵不同領(lǐng)域的知識(shí)。在學(xué)習(xí)時(shí)間的分配上,我通常會(huì)采用「二八分配」的原則,即把80%的時(shí)間專注在主業(yè)上,把剩余的20%的時(shí)間用來去接觸各種不同領(lǐng)域的知識(shí)或補(bǔ)足自己的知識(shí)短板。
知識(shí)短板會(huì)嚴(yán)重阻礙我們進(jìn)步。準(zhǔn)確識(shí)別它們的最佳方式之一就是「看看自己在哪些工作上花費(fèi)了大量時(shí)間,或者一直進(jìn)行重復(fù)性的勞動(dòng)」。例如沒有掌握鍵盤快捷鍵可能就是一個(gè)知識(shí)短板。
7、構(gòu)建呈階梯式難度的關(guān)卡
人是需要一些挫折、失敗或者高難度的挑戰(zhàn)來刺激的。如果總是一帆風(fēng)順,就會(huì)一直待在自己的“舒適區(qū)”里不肯出來,潛能就無法被充分地激發(fā)。
因此,我們應(yīng)該「為自己的學(xué)習(xí)適當(dāng)?shù)卦黾颖匾碾y度,例如在學(xué)完知識(shí)后延遲一段時(shí)間再做練習(xí),而這種稍難得考驗(yàn)正好能強(qiáng)化我們對(duì)這些知識(shí)的存儲(chǔ)和構(gòu)建?!?/strong>
我們應(yīng)該學(xué)會(huì)去「構(gòu)建適合自己的“個(gè)人挑戰(zhàn)階梯”」,拿學(xué)英語來說,一個(gè)比較好的”英語學(xué)習(xí)挑戰(zhàn)階段“如下所示:
背單詞 => 考托福 => 考 GRE => 聽英語電臺(tái)(VOA、BBC)=> 聽各種地方口音的英文 => 英語脫口秀復(fù)制代碼
遇到的挑戰(zhàn)越大,獲得的快感也越強(qiáng)。好的挑戰(zhàn)階梯的設(shè)計(jì)能夠給與我們足夠的挫折與失敗,而這將會(huì)大大加速我們的成長速度。
「我們應(yīng)該做一個(gè)主動(dòng)探索的學(xué)習(xí)者,不斷地為自己設(shè)計(jì)出有難度的”非標(biāo)準(zhǔn)動(dòng)作“,在挑戰(zhàn)中獲得才能的提升與飛躍?!?/strong>

8、如何更加高效地讀書?
要想真正掌握一本書的核心內(nèi)容,需要讀三遍。
第一遍:「細(xì)讀,目的在于完整閱讀全書,并且劃出重點(diǎn),寫上讀書筆記?!?/strong>
一個(gè)月后讀第二遍:「掃讀,主要快速翻閱第一遍閱讀時(shí)做的筆記和劃的重點(diǎn),目的在于加深記憶?!?/strong>
半年后第三遍:「憶讀,讀的時(shí)候只看目錄,然后去回想內(nèi)容,如果回想不起來,再去進(jìn)行掃讀。這樣三遍下來,基本上一本書的核心內(nèi)容就能夠很好的吸收?!?/strong>
9、切忌完美主義
學(xué)習(xí)不是要么0分,要么100分的。80分是收獲,60分是收獲,20分也是收獲,「有收獲才是最重要」。但是因?yàn)橹塾谧约旱牟煌昝?,最終放棄了,那就是徹底的0分了。
「不完美其實(shí)是常態(tài),根本不會(huì)影響我們學(xué)習(xí)更多更深入的內(nèi)容」。但是在自學(xué)過程中,很多同學(xué)卻要求自己在自己制定的每一步計(jì)劃中都達(dá)到“完美”,才進(jìn)行下一步。最終結(jié)果,通常都是“放棄”。
而不要“完美主義”,不代表學(xué)習(xí)可以草率前行。「每個(gè)人都必須要找到適合自己的學(xué)習(xí)節(jié)奏」。如果在自己又因?yàn)樽约旱膶W(xué)習(xí)進(jìn)度而沮喪的時(shí)候,問自己一句:是不是自己又犯“完美主義”的毛病了。
10、不要過度“學(xué)習(xí)路徑依賴”,學(xué)習(xí)要沖著自己的目標(biāo)去。
例如想學(xué)機(jī)器學(xué)習(xí),就去直接學(xué)習(xí)機(jī)器學(xué)習(xí)。學(xué)習(xí)過程中發(fā)現(xiàn)自己的數(shù)學(xué)不夠用,再回頭補(bǔ)數(shù)學(xué)即可。
11、不要迷信權(quán)威的“好”教材、不要看不起“薄薄”的“傻”教材
每個(gè)人必須要去探索學(xué)習(xí)如何尋找適合自己的學(xué)習(xí)材料。適合你的教材不一定是權(quán)威的,「可能有一些你看不起的學(xué)習(xí)材料,就是是你入門某個(gè)領(lǐng)域的關(guān)鍵?!?/strong>
「先用薄教材入門,再找“厚”教材,是我百試不爽的學(xué)習(xí)方法。因?yàn)椤氨 钡慕滩哪茏屇阋宰羁斓乃俣瓤赐?,?duì)整個(gè)學(xué)科有一個(gè)全盤的認(rèn)識(shí),薄會(huì)將你入門這個(gè)領(lǐng)域的難度降至最低,短期學(xué)習(xí)完之后會(huì)讓你產(chǎn)生更多的興趣與成就感。這一點(diǎn)往往更加重要,因?yàn)閷W(xué)習(xí),不是100m短跑,而是加長版的馬拉松。」
12、不要迷信單一教材。
在大多數(shù)情況下,學(xué)習(xí)不是一本固定教材可以搞定的。非要找到一本“最適合自己的”教材,然后就一頭扎進(jìn)去,其實(shí)是不科學(xué)的。
建議每一個(gè)技術(shù)點(diǎn)都需要「篩選多個(gè)優(yōu)秀資源去進(jìn)行 學(xué)習(xí)、實(shí)踐、思考、總結(jié)。因?yàn)椴煌淖髡邔?duì)同一個(gè)事物會(huì)從不同的角度做解讀,這能夠幫助你更深刻的認(rèn)識(shí)一個(gè)概念?!?/strong>
13、學(xué)會(huì)復(fù)盤
「在每天晚上睡覺的前半小時(shí)之內(nèi),我們需要復(fù)盤當(dāng)天的學(xué)習(xí)情況,哪些完成哪些沒完成的需要記錄,為明天做一個(gè)銜接的準(zhǔn)備,以確保當(dāng)前的學(xué)習(xí)進(jìn)度是可控的?!?/strong>
14、量變到質(zhì)變
僅僅對(duì)著一個(gè)問題思考,很多時(shí)候都是死胡同。因?yàn)槲覀円娮R(shí)的還不夠多,就不足以幫助我們?nèi)タ偨Y(jié)出更加“普遍”問題解決的規(guī)律。
我們不要企圖通過一個(gè)問題就理解問題的本質(zhì),這其實(shí)和企圖通過一本教材就精通一個(gè)領(lǐng)域的想法是一樣的,是不現(xiàn)實(shí)的。
其實(shí)大多數(shù)問題,都是需要“回頭看”的。對(duì)一個(gè)領(lǐng)域理解的越深入,回頭再去看那些曾經(jīng)的問題,都會(huì)產(chǎn)生新的視角,對(duì)于很多曾經(jīng)想不明白的問題也豁然開朗。這也是“進(jìn)步”的根源。「很多時(shí)候,你發(fā)現(xiàn)對(duì)一些問題“百思不得其解”,或許不是因?yàn)樽约骸氨俊?,而是因?yàn)椤斑€不夠努力”?!?/strong>
二、如何分析問題?
1、分析問題的重要性
只有「挖掘出問題的核心和根本」,才能針對(duì)性地剔除改進(jìn)或者完善流程,來避免類似的問題再次出現(xiàn)。
2、5WHY 分析法
核心是「追究根本原因」。例如針對(duì)線上的屏幕適配問題,我們可以提出五種對(duì)應(yīng)的改進(jìn)方案:
1)、開發(fā)者要吸取經(jīng)驗(yàn),盡量采用普適性較強(qiáng)的寫法。
2)、對(duì)一些組件進(jìn)行封裝,避免類似的適配問題。
3)、有新設(shè)備上市,要盡早采購。
4)、QA 的測(cè)試用例要多人評(píng)審,盡量保證用例覆蓋全面。
5)、通過一些自動(dòng)化檢測(cè)手段,對(duì)適配問題進(jìn)行檢測(cè)。
3、第一性原理
有問題時(shí),運(yùn)用第一性原理,多讀官方文檔或源碼。閱讀源碼的本質(zhì):優(yōu)秀框架背后的「設(shè)計(jì)模式與架構(gòu)」。
此外,對(duì)于一些難以用技術(shù)解決的問題,可以從需求的角度去解決。

三、學(xué)習(xí)十步法
對(duì)技術(shù)人成長最重要的三個(gè)因素通常都包含如下三個(gè)要點(diǎn):
1)、「學(xué)習(xí)-不斷提升自身深度與廣度的能力」。
2)、「思考-即解決問題的能力」。
3)、「實(shí)踐-大量的實(shí)踐能讓我們真正地理解一個(gè)技術(shù)的本質(zhì)」。
而學(xué)習(xí)十步法的精髓就在于「學(xué)習(xí)-實(shí)踐-(思考出問題-學(xué)習(xí)-實(shí)踐)-掌握-教授」這一系列過程。注意()內(nèi)的過程(這個(gè)過程也被稱為探索)通常需要多次反復(fù)進(jìn)行直到最終掌握這個(gè)技術(shù)點(diǎn)。
「學(xué)習(xí)十步法充分利用了人天生的好奇心來幫助我們吸收更多的知識(shí),這將會(huì)持續(xù)不斷的激勵(lì)我們通過實(shí)踐向著目標(biāo)前進(jìn),而不僅僅是讀書或者聽教學(xué)視頻?!?/strong>
在開始使用學(xué)習(xí)十步法之前,首先需要明確的是,「學(xué)習(xí)計(jì)劃最好能結(jié)合工作計(jì)劃,理論結(jié)合實(shí)際,快速學(xué)以致用」。因此我們應(yīng)該「優(yōu)先學(xué)習(xí)的是工作中會(huì)用到的或?qū)?huì)用到的技能」。在完成了自己的本職工作之后,我們應(yīng)該去盡量地考量公司中各個(gè)系統(tǒng)和業(yè)務(wù)模塊,看看有哪些不合理和可以改進(jìn)的地方,然后盡力地提升自己相關(guān)方面的技術(shù),并去識(shí)別和優(yōu)化它們,在優(yōu)化的過程中我們可以優(yōu)先參考其它公司的技術(shù)方案。
1、了解全局
了解全局的作用在于我們可以「快速甄別,決定哪些事情值得花費(fèi)時(shí)間」,例如「做一些基礎(chǔ)性的研究,例如網(wǎng)絡(luò)搜索、查閱一下該主題的書的介紹性章節(jié)?!?/strong>
2、確定范圍
我們應(yīng)該「聚焦學(xué)習(xí)范圍,關(guān)注重點(diǎn)內(nèi)容」。這兒需要充分利用自己在第1步中收集到的信息,找出自己的學(xué)習(xí)范圍,也可以借助自己的學(xué)習(xí)理由來決定學(xué)習(xí)的范圍。
選擇一個(gè)專注而聚焦的范圍,「明確學(xué)習(xí)范圍的時(shí)候需要盡可能地充分考慮時(shí)間因素與衡量時(shí)間成本的性價(jià)比?!?/strong>
那么,如何衡量時(shí)間成本的性價(jià)比呢?
1)、「評(píng)估掌握一項(xiàng)技能在短期和長期內(nèi)對(duì)我們的重要性。」
2)、「我們應(yīng)該對(duì)需求和時(shí)間成本評(píng)估,決定需不需要學(xué),以此確定學(xué)習(xí)的目標(biāo)。」
3)、「一些簡(jiǎn)單、僅僅需要了解的知識(shí)點(diǎn)利用碎片時(shí)間去完成即可,但如果是需要掌握甚至“精通”的一些知識(shí)點(diǎn),我們需要為它劃分出一整段的時(shí)間?!?/strong>
此外,在這一步中,有兩個(gè)點(diǎn)需要注意:
1)、有些知識(shí)的獲取是需要「循環(huán)漸進(jìn)」的,除非你已經(jīng)有了非常扎實(shí)的基礎(chǔ),否則跳級(jí)進(jìn)階只能是吃力不討好。
2)、有些知識(shí)點(diǎn)例如「源碼、晦澀的一些概念」等等,只要它們是足夠「重要」的,弄明白它們就是「非常值得」的。
3、定義目標(biāo)
好的成功目標(biāo)應(yīng)該是「具體的、無二義性」的。例如在學(xué)習(xí) ASM + Gradle 時(shí),我定義的目標(biāo)是:使用 ASM + Gradle 完成一個(gè)全局的 Bitmap 監(jiān)控組件。
4、尋找資源
目前,我學(xué)習(xí)的主要信息來源包括如下「九個(gè)渠道」:
1、「官方文檔」:第一手資料。
2、「源碼」:第一手資料。
3、「Github 開源項(xiàng)目」:定期查看 GitHub 的熱門榜,看有沒有需要的優(yōu)質(zhì)項(xiàng)目(至少每周一次)。
4、「Awesome-Android-NoteBook &&豆瓣讀書 - 計(jì)算機(jī)科學(xué)經(jīng)典書籍」。
5、「開源的權(quán)威資料」
6、「極客時(shí)間」
7、「慕課網(wǎng)」
8、「百度云盤」
9、「WanAndroid 優(yōu)秀文章」
在這一步,記得也要尋求一些好的薄教材/入門文章,在我們剛開始學(xué)習(xí)這個(gè)主題時(shí),便會(huì)從它們開始。
5、創(chuàng)建學(xué)習(xí)計(jì)劃
我們需要「根據(jù)自己個(gè)人的時(shí)間去制定適合自己的學(xué)習(xí)計(jì)劃」。這一步我們可以把它看作自己寫書時(shí)候的大綱,這里通??梢酝ㄟ^查閱圖書的目錄進(jìn)行。
6、篩選資源
計(jì)劃學(xué)習(xí)前要考慮清楚,一旦開始執(zhí)行學(xué)習(xí)計(jì)劃,就應(yīng)盡量保持少的變更,除非后續(xù)發(fā)現(xiàn)計(jì)劃有問題。因此這里我們需要多加一步去「選取品質(zhì)最高的資源覆蓋學(xué)習(xí)計(jì)劃,對(duì)于一些購買性的資源可以通過查看評(píng)論的方式進(jìn)行評(píng)估?!?/strong>
7、開始學(xué)習(xí),淺嘗輒止
這一步的關(guān)鍵在于「過猶不及」。你會(huì)很容易就失去自控力,開始消化計(jì)劃學(xué)習(xí)中列出的所有資源。但是,你會(huì)發(fā)現(xiàn),如果你能經(jīng)受住這樣的誘惑,你會(huì)取得更大的成就。我們應(yīng)該要「專注于掌握自己所需的、能在下一步動(dòng)手操作的最小量的知識(shí)?!?/strong>
「好記性不如爛筆頭」,在學(xué)習(xí)的過程中,學(xué)習(xí)的東西至少要做好筆記(印象筆記、有道云筆記),并且后續(xù)需要「按照一定的間隔時(shí)間去反復(fù)復(fù)習(xí)」。
8、動(dòng)手操作,邊玩邊學(xué)
萬事無他,唯手熟爾。教育的首要目標(biāo),并不在于”知“,而在于”行“。
對(duì)于計(jì)算機(jī)領(lǐng)域的學(xué)習(xí)來說,教材的意義其實(shí)遠(yuǎn)遠(yuǎn)小于實(shí)踐的意義。真正動(dòng)手實(shí)踐去編程是異常重要的。這就好比學(xué)游泳,必須下水去游泳;或者學(xué)開車,必須親自上路。否則你說的再頭頭是道,一個(gè)小學(xué)生文化水平的人,只要他開過車,游過泳,都能在這兩個(gè)領(lǐng)域瞬間秒殺你。
真正的學(xué)習(xí)上的提高,就發(fā)生在實(shí)踐的過程之中。例如,「debug 就是一種高效的實(shí)踐方式。它不僅僅是找到代碼錯(cuò)誤,解決錯(cuò)誤的手段,其實(shí)更是一個(gè)重要的學(xué)習(xí)手段?!?/strong>
因此,我們應(yīng)該「通過探索和實(shí)踐進(jìn)行學(xué)習(xí),在實(shí)踐中碰到的問題會(huì)引導(dǎo)著我們走向真正重要的方向。當(dāng)回過頭尋找問題的答案時(shí),不只是這些問題迎刃而解,而且你記得的東西比你學(xué)習(xí)到的東西多得多,因?yàn)槟闼鶎W(xué)到的都是對(duì)你很重要的東西?!?/strong>
此外,在實(shí)踐中,「在某些關(guān)鍵動(dòng)作上刻意練習(xí),也會(huì)取得事半功倍的效果」。因?yàn)椴煌5木毩?xí)和思考可以改變大腦結(jié)構(gòu),大腦像肌肉一樣,挑戰(zhàn)越大,影響越大,學(xué)習(xí)更高效,并且也會(huì)產(chǎn)生突破性。
9、全面掌握,學(xué)以致用
我們「沒有必要吧收集到的所有資源全部仔細(xì)看一遍,而應(yīng)該以解決在動(dòng)手操作中發(fā)現(xiàn)的問題為主要目的」。試著把自己正在學(xué)習(xí)的內(nèi)容與最終目標(biāo)關(guān)聯(lián)起來。「你掌握的每個(gè)模塊,都應(yīng)該以某種方式推動(dòng)著你向著終極目標(biāo)前進(jìn)。」
在這一步中,我們可以將測(cè)試練習(xí)與分散練習(xí)這兩種學(xué)習(xí)方式結(jié)合起來使用,以達(dá)到最佳的學(xué)習(xí)效果。同時(shí),我們最好能給自己設(shè)置一系列的挑戰(zhàn)階梯,例如對(duì)于學(xué)習(xí)音視頻的同學(xué)可以給自己設(shè)置如下的挑戰(zhàn)階梯:
使用 Android 音視頻 API實(shí)現(xiàn)一個(gè)播放器 => 使用 FFmpeg 與 OpenGL 實(shí)現(xiàn)一個(gè)播放器 => 定制 FFmpeg 的源碼、掌握 OpenGL/Vulkan 的高階用法實(shí)現(xiàn)功能更加強(qiáng)大的播放器復(fù)制代碼
學(xué)習(xí)某一個(gè)技術(shù)其實(shí)到最后會(huì)形成一顆「技術(shù)樹」,我們可以使用「思維導(dǎo)圖 => XMind || 幕布」進(jìn)行描述。而對(duì)于一些涉及「流程」相關(guān)的技術(shù)點(diǎn),我們可以使用「ProcessOn」來畫流程圖。
10、樂為人師,融合貫通
如果你能將自己所學(xué)的東西都教給別人,那么你不僅能夠記住,而且還能夠理解得更加深刻。
重點(diǎn)在于,我們需要花時(shí)間將自己所學(xué)到的東西從大腦中提取出來,以別人能夠理解的方式組織起來。「在經(jīng)歷了這整個(gè)過程之后你會(huì)發(fā)現(xiàn),有很多你以為自己明白了的知識(shí)點(diǎn),其實(shí)并沒有摸透。這一步對(duì)保持信息以及深入理解知識(shí)而不僅僅只是流于表面至關(guān)重要?!?/strong>
在教學(xué)的過程中,有一些內(nèi)容是必不可少的,例如:
「是什么?」
「為什么?即它解決了什么問題?!?/strong>
「優(yōu)缺點(diǎn)?!?/strong>
「對(duì)比同類技術(shù)的不同/相同點(diǎn)?!?/strong>
「如何使用?」
「如何解決問題的?即內(nèi)部的實(shí)現(xiàn)原理?!?/strong>
「歸納時(shí)注重核心知識(shí)與關(guān)鍵細(xì)節(jié),并嘗試去類比不同領(lǐng)域或不同學(xué)科之間的知識(shí)?!?/strong>
「重要的過程、結(jié)論。」
分享就是一種很好的教學(xué)方式,而且它的時(shí)間成本也相對(duì)較低,目前常見的有「三種分享方式」:
1)、「博文文章/專欄」
2)、「慕課網(wǎng)技術(shù)視頻」
3)、「部門/社區(qū)內(nèi)的技術(shù)分享」
技術(shù)分享的真正意義在于,「總有一部分知識(shí)我們并沒有真正理解透徹到可以向別人解釋,而”教“的過程能夠迫使你面對(duì)這一部分。在教別人的時(shí)候,我們迫使自己面對(duì)課題中的難點(diǎn),深入探索,從只知皮毛變成完全理解。學(xué)習(xí)知識(shí)暫時(shí)的,而理解是永久性的?!?/strong>
「在我們?cè)噲D教別人的時(shí)候,會(huì)強(qiáng)迫自己重新組織大腦中的資料」。最好的思維方法就是解釋某樣?xùn)|西并將其記錄在紙上,或者記錄到 Word 文件或者幻燈片中,使你可以將這些互不連貫的碎片信息收集起來,并以一種有效的方法重新組織起來。「要想教人,我們得先把自己教會(huì)?!?/strong>
而在教別人的過程中,最好的教學(xué)方式就是「心態(tài)謙卑,信心滿滿——以謙虛的視角來觀察問題,以權(quán)威的口吻去詮釋問題?!?/strong>
最后,不要忘記進(jìn)行隔期復(fù)習(xí),對(duì)于一篇文章來說,可以「先擴(kuò)展出它的知識(shí)樹,然后再嘗試去描述其中每一個(gè)知識(shí)節(jié)點(diǎn)的核心內(nèi)容與關(guān)鍵細(xì)節(jié)?!?/strong>
開源自己造的輪子也是一種很好的分享方式,我們應(yīng)該學(xué)會(huì)造輪子,去寫一些框架或組件,建議設(shè)置簡(jiǎn)單到復(fù)雜的挑戰(zhàn)階梯。
最后,我就以最近正在學(xué)習(xí)的 Android 網(wǎng)絡(luò)優(yōu)化為例來實(shí)踐一下十步學(xué)習(xí)法,其思維導(dǎo)圖如下所示:

四、重要問題解答專區(qū)
1、怎樣由淺入深地學(xué)習(xí)一個(gè)技術(shù)點(diǎn)?
建議大家先選定一個(gè)自己最感興趣的方向,后面一段時(shí)間就專攻這一個(gè)方向,拿 Flutter 做例子,可以先將所有 Flutter 相關(guān)的專業(yè)文檔、優(yōu)秀書籍、視頻教程、文章等搜集起來,將其中涉及的知識(shí)大綱列出來,對(duì)其中涉及到的每一個(gè)知識(shí)點(diǎn)(如今天或這幾天要學(xué)的是布局類組件)需要的對(duì)應(yīng)資料列出來。然后去學(xué)習(xí)、實(shí)踐它的基本用法,接著可以再深入一層看這個(gè)知識(shí)點(diǎn)涉及到的內(nèi)部原理(如 Flutter 中常用布局的實(shí)現(xiàn)原理),最后總結(jié)出對(duì)應(yīng)的學(xué)習(xí)筆記(供以后復(fù)習(xí))。這樣學(xué)習(xí)起來就比較有效果,而且剛開始可以根據(jù)自身的狀態(tài)去調(diào)節(jié)計(jì)劃時(shí)間的長短,建議開始計(jì)劃定松一點(diǎn),確保每天都能完成。養(yǎng)成習(xí)慣并完全適應(yīng)后,可以加大學(xué)習(xí)量。這就跟健身的原理一樣,剛開始鍛煉的人一般都體質(zhì)比較差,所以需要從最基礎(chǔ)的動(dòng)作開始練,等將基礎(chǔ)打好了,體質(zhì)提升上來了,才能去適當(dāng)?shù)刈鲆恍┝α坑?xùn)練,增加肌肉。
2、怎樣才能很好地把安卓零碎的知識(shí)點(diǎn)串起來?
這可能說明學(xué)習(xí)的時(shí)候沒有注重體系化地學(xué)習(xí)與思考,而是東學(xué)一點(diǎn)西學(xué)一點(diǎn),那這些知識(shí)自然而然地會(huì)零散地遍布在我們腦海的各處。為了解決這個(gè)問題,我們需要首先需要把目前所學(xué)的知識(shí)列出來,然后可盡可能地找到這些知識(shí)點(diǎn)的聯(lián)系,把它做成思維導(dǎo)圖。由于可能有很多聯(lián)系點(diǎn)我們之前學(xué)習(xí)的疏漏而沒有把它納入我們的腦海中,但是,這并無大礙,后面我們可以圍繞這張 1.0版本的安卓知識(shí)思維導(dǎo)圖 不斷迭代,最終,它就會(huì)日漸完善,發(fā)揮出想象不到的威力~
3、對(duì)未來很迷茫,天天都在學(xué)習(xí)但是技術(shù)就是提升不上去?
其實(shí),對(duì)于大家來說,最重要的事情就是 如何去從最本質(zhì)、最底層的層面去打磨自己? 如何培養(yǎng)興趣、深入鉆研某一個(gè)領(lǐng)域從而成為專家?如何具備快速、高效、不斷深挖某一技術(shù)的核心能力(即一通百通的能力)?這些問題的答案很難在短時(shí)間讓大家去明白、理解。其實(shí),我「今年的整個(gè)文章路線」就是圍繞這些內(nèi)容而定制的,其共分為幾個(gè)核心路線:「軟技能、高效構(gòu)建算法知識(shí)地圖、性能優(yōu)化領(lǐng)域?qū)<?、NDK 高手之路(偏向于 Native 層的性能優(yōu)化、Hook 實(shí)現(xiàn))、Flutter(從最重要的核心點(diǎn) 自上而下打通 Flutter 的整個(gè)架構(gòu)體系)」,明年上半年的路線:架構(gòu)師成長之路(從易到難具備強(qiáng)大的架構(gòu)設(shè)計(jì)能力) 。可能有的同學(xué)認(rèn)為我學(xué)的好像很雜,其實(shí)不然,我一直都專注于一條路線,就是「基礎(chǔ)架構(gòu)研發(fā)」,它涉及的主要工作內(nèi)容就是「架構(gòu)設(shè)計(jì)、性能優(yōu)化、前沿新技術(shù)預(yù)研(Flutter、JetPack」)。建議大家選定一條路線,也不一定要是上面的路線,專注于音視頻、圖形處理 或 AI 移動(dòng)、大前端 的路線都可以,今年大家一起加油,希望年底能給自己一份滿意的答卷~
4、如何更高效地學(xué)習(xí)技術(shù)視頻?
學(xué)習(xí)視頻的時(shí)候建議「開 2 倍速看,對(duì)于 不熟悉/偏難 的知識(shí),每看一個(gè)小的技術(shù)點(diǎn)之后,就實(shí)踐一遍,然后把實(shí)踐的成果寫入 筆記/你的初稿博客 中,對(duì)于 比較熟悉/簡(jiǎn)單 的知識(shí),一般是看一小節(jié)/兩三個(gè)技術(shù)點(diǎn)之后再實(shí)踐、寫入 筆記/你的初稿博客?!?/strong>
5、如何選擇第三方庫?
1)、確定這個(gè)庫是否是必需的。
2)、這個(gè)庫能否帶來開發(fā)效率的提升,降低代碼的維護(hù)成本。
3)、這個(gè)庫的學(xué)習(xí)成本如何 比如 rxjava 其實(shí)學(xué)習(xí)成本會(huì)相對(duì)高一些。
4)、這個(gè)庫的質(zhì)量如何,不要僅僅看 star,更要看 issue 的處理情況。
6、怎樣練習(xí)算法題?
1)、每道算法題都先自己去實(shí)現(xiàn),理清思路后自己去實(shí)現(xiàn)一遍。(超過5分鐘沒思路跳下一步)
2)、然后再看看答案,記住答案的思路,手寫一遍。
3)、第二天再重新按照答案的思路再手寫一遍。
4)、等到要面試的時(shí)候再系統(tǒng)地將所有的題型按類別進(jìn)行手寫即可。
7、如何閱讀源碼?
1)、準(zhǔn)備
1、Java設(shè)計(jì)模式(模板方法,單例,觀察者,工廠方法,代理,策略,裝飾者)。
2、Java高級(jí)相關(guān)(泛型、反射、IO)。
3、在官方文檔上了解軟件的整體架構(gòu)設(shè)計(jì)、主要功能。
4、熟練掌握這個(gè)庫。
5、搭建系統(tǒng),把源碼跑起來。
2)、開始閱讀
1、根據(jù)你對(duì)系統(tǒng)的理解,設(shè)計(jì)幾個(gè)主要的測(cè)試案例,定義好輸入,輸出。(Debug一
遍肯定是不行的,需要Debug很多遍)
2、第一篇拋棄細(xì)節(jié),抓住主要流程,第二篇,第三篇,再去看各個(gè)部分的細(xì)節(jié)。
3、閱讀的時(shí)候同時(shí)使用 UML 畫出系統(tǒng)的類圖。主要的測(cè)試案例明白了,豐富測(cè)試案例,考慮一些分支。
4、這一步會(huì)非常非常地花費(fèi)時(shí)間,但是你做完了,對(duì)系統(tǒng)的理解絕對(duì)有質(zhì)的飛躍。
3)、流程小結(jié)
1、準(zhǔn)備。
2、網(wǎng)上搜索針對(duì)該開源項(xiàng)目進(jìn)行分析的優(yōu)秀文章。
3、對(duì)開源項(xiàng)目提出自己的疑問,并帶著疑問閱讀源碼。
4、閱讀源碼過程中多添加注釋、筆記.
5、做閱讀總結(jié)/寫文章,吸收和再創(chuàng)造
8、新技術(shù)頻繁出現(xiàn),我們應(yīng)該采取有效的針對(duì)性措施?
一項(xiàng)新技術(shù)的出現(xiàn),我們應(yīng)該先去了解它,看它是否對(duì)自身的技術(shù)成長有比較大的幫助,有的話按優(yōu)先級(jí)加入學(xué)習(xí)計(jì)劃表,而不是立馬去學(xué)習(xí)或否定它。

五、總結(jié)
對(duì)于大多數(shù)人來說,可能關(guān)鍵不在于學(xué)習(xí)方式的優(yōu)劣,而在于「如何不痛苦地堅(jiān)持下去」。而要解決這個(gè)問題,最大的利器便是興趣。「只有真正深入到一個(gè)領(lǐng)域,才能培養(yǎng)出對(duì)其的真正興趣。如果對(duì)一件事的了解不深、不透,總是淺嘗輒止,那自然體會(huì)不到這件事的妙處,也自然不會(huì)產(chǎn)生持久的興趣。這讓人容易滑入一個(gè)死循環(huán):了解不夠?qū)е屡d趣不足,而興趣不足又無法加深對(duì)它的了解?!?/strong>
「如果我能長期地堅(jiān)持去做一件事,一定是這件事帶給我的豐盈感和滿足感超過了我的所有付出,一定是這件事日日夜夜縈繞在我的心頭讓我欲罷不能,一定是這件事喚起了我內(nèi)心深處最強(qiáng)烈的興趣」。也就是說,賜予我力量的,是激情的驅(qū)動(dòng),而不是意志力的鞭策。但是,熱情很難一直存在,因此,在熱情黯淡的時(shí)期,需要我們有一定的自控力去做支撐過渡。因此,如何練就強(qiáng)大的自控力也是需要我們?nèi)ゲ粩嗌钊胩剿鞯囊粋€(gè)問題。
作者:掘金丨jsonchao
原文鏈接:https://juejin.im/post/5eb168e9f265da7bb65fb27a

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來成長!
另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~