想學(xué)好編程,別背代碼!
分享我編程 “不忘” 的十幾種方法
大家好,我是魚皮。
最近私信收到最多的問題就是:我學(xué)編程的時(shí)候記不住代碼,老忘怎么辦?
比如這位小伙伴,學(xué)編程一個(gè)月了,問我咋背代碼:

其實(shí),我自己的記性是非常非常差的,所以我才在選專業(yè)的時(shí)候棄法從碼。
我在最開始學(xué)習(xí) C 語言編程的時(shí)候,也是敲一次忘一次,很痛苦。但我又不想放棄,于是強(qiáng)迫自己去記憶代碼,漸漸地把學(xué)編程變成了背單詞。但花了很多時(shí)間,好不容易把單詞背下來了,卻還是寫不出代碼,這就讓我逐漸懷疑人生。
后來和前輩們的交流中,我發(fā)現(xiàn)記不住代碼是很正常的,倒不如說能記住代碼的人不太正常(太聰明、記性好)。
于是,我改變了自己的學(xué)編程方法,不再背代碼,提高了學(xué)習(xí)編程的效率。
今天就分享下我的編程 “不忘” 大法。
魚皮編程不忘大法
分為四部分:先分享一些通用記憶方法,再是面向?qū)W編程的記憶方法,還給出了忘記代碼后的解決方法,以及一些必須要記憶的內(nèi)容。
本文大綱:

通用記憶方法
以下方法,可以幫助我們養(yǎng)成記憶的好習(xí)慣,不止編程,適用于所有知識(shí)的學(xué)習(xí)。
編故事
相對(duì)枯燥的代碼和理論,我們更喜歡看故事。試著把知識(shí)點(diǎn)編成有趣的故事,或者和某些人或事進(jìn)行關(guān)聯(lián),能夠加深印象。
比如我給大家分享編程經(jīng)驗(yàn)的時(shí)候,會(huì)提到我的老弟小阿巴,就是為了加深大家的印象,一看到熊貓頭就想到 bug,還有什么 “從前有匹馬叫代碼”,以及一些用故事講技術(shù)的文章和視頻,都能起到強(qiáng)化記憶的作用。

興趣強(qiáng)化
對(duì)于自己感興趣的事情,我們記憶會(huì)更容易。
比如我從前愛打游戲,數(shù)學(xué)公式記不住,但卻能精準(zhǔn)記憶怪物的血量傷害和裝備的爆率。
所以想更輕松地記憶,最好能培養(yǎng)自己對(duì)這件事的興趣,或者用更有趣的方式來學(xué)習(xí),比如上面說到的看故事、看圖解、看短視頻知識(shí)分享。

利用感官
我們?cè)谟洃洉r(shí)除了需要?jiǎng)幽X外,還可以利用好感官,比如搭配一些肢體動(dòng)作。
關(guān)于這點(diǎn),也不用刻意,每個(gè)人都有自己的習(xí)慣和小動(dòng)作。比如有人喜歡用手比劃,有人喜歡撫摸下巴,像我則是喜歡在背書時(shí)撓頭,有的時(shí)候把頭發(fā)撓掉了,看著這根頭發(fā),我就感覺知識(shí)記得更牢了。真就我變禿了,也變強(qiáng)了唄。

除了感官外,人腦經(jīng)歷過的事物,思考過的問題,體驗(yàn)過的情感和情緒,練習(xí)過的動(dòng)作,都可以成為我們記憶的內(nèi)容,幫助我們關(guān)聯(lián)記憶碎片。
理解
記東西不能死記硬背,要思考,要理解,這點(diǎn)真的是從小聽到大,就不多說了。
體系化
我們?cè)趯W(xué)習(xí)時(shí),最好按照體系去學(xué)習(xí)記憶,而不是東瞅瞅、西瞧瞧。
可以把零碎的知識(shí)整理成大綱、學(xué)習(xí)路線、思維導(dǎo)圖等等,按序、分點(diǎn)地去記憶。
老讀者應(yīng)該發(fā)現(xiàn)了,我現(xiàn)在就經(jīng)常在自己的知識(shí)分享文章開頭放上一張思維導(dǎo)圖,就是為了幫助大家快速了解文章結(jié)構(gòu),從而加深印象。
記憶時(shí)間
一般情況下,每天早上和晚上臨睡前,是記憶的最佳時(shí)間。
我從小養(yǎng)成的一個(gè)習(xí)慣是:每天睡覺前會(huì)躺在床上回憶一遍自己今天做過的事情,的確有強(qiáng)化記憶的效果。
此外,考試周或面試前,我會(huì)把復(fù)習(xí)內(nèi)容作為文檔存到手機(jī)上,睡覺前打開 WPS Office 或者一些文檔語音朗讀軟件,讓音頻伴我入睡。第二天早上起床前,可以先打開音頻,閉上眼睛,聽到知識(shí)點(diǎn)時(shí)自己在腦海中再回想一遍,真的有奇效!

定期回憶
不知道大家有沒有聽說過遺忘曲線(艾賓浩斯曲線),就是說我們?cè)趯W(xué)習(xí)中的遺忘是有規(guī)律的,并且遺忘的速度先快后慢。

觀察曲線,我們發(fā)現(xiàn),很多短期記憶消失地很快。所以不能 光記不憶
,要趁熱打鐵,學(xué)完知識(shí)后抓緊應(yīng)用,并且按照曲線,每隔一段時(shí)間復(fù)習(xí)一遍,才能留住所學(xué)知識(shí)。
編程記憶方法
上面的方法可以幫助我們更好地記憶知識(shí),而下面的方法更聚焦于幫助我們學(xué)習(xí)編程,提高效率。
選擇性記憶
首先,對(duì)于學(xué)編程來說,千萬不要去背代碼!
本來編程知識(shí)這輩子都學(xué)不完了,背代碼的話下輩子都學(xué)不完了。

學(xué)編程時(shí),我們應(yīng)該:記住有什么,你能做什么,而不是具體怎么做 。
舉個(gè)例子,現(xiàn)在讓你設(shè)計(jì)一個(gè)電梯調(diào)度系統(tǒng)。你只需要聽說過有個(gè)東西叫 電梯調(diào)度算法
,以及它能實(shí)現(xiàn)電梯的有序調(diào)度就行了,而并不需要記住怎么寫代碼。等到要做的時(shí)候,去搜該算法具體的實(shí)現(xiàn)就行了。
再舉個(gè)例子,現(xiàn)在前端的類庫那么多,假設(shè)讓你做一個(gè)網(wǎng)頁動(dòng)畫效果,那你在此前只需要知道 Animate.css
庫可以實(shí)現(xiàn),等用的時(shí)候查文檔就好了,并不需要把它的每個(gè)類、每種用法都記下來。別忘了,代碼更新?lián)Q代很快的,即使有的東西你能記住,但它也有時(shí)效性。
尤其是對(duì)于編程的初學(xué)者,不要去背代碼,你只需要知道某個(gè)函數(shù)大概能做什么事情,我要完成某個(gè)功能時(shí)能想到它(甚至是能搜到)就可以了。
另外,刷算法題目的時(shí)候很多同學(xué)理解不了就直接死記硬背,其實(shí)記憶算法沒有問題,但你要記的不是某段代碼,而應(yīng)該是一類題目的 解題套路 。
筆記
學(xué)編程時(shí),一定要多記筆記,無論是看書、看文章還是看視頻。
但是請(qǐng)注意,筆記不是什么都記!

有些同學(xué)怕自己忘記視頻中老師講的知識(shí),直接把老師的原話一句句地敲下來,一個(gè)視頻暫停幾十次。看似筆記上內(nèi)容很多,但其實(shí)真正有用的、你能記住的東西很少,而且很浪費(fèi)時(shí)間,大可不必。
不要忘了,筆記是 給你自己看的 ,是為了幫助自己復(fù)習(xí)的。我記筆記時(shí),重點(diǎn)在于記思路、記流程、記關(guān)鍵節(jié)點(diǎn)。
比如我看一個(gè)前端項(xiàng)目實(shí)戰(zhàn)教程時(shí),我會(huì)記錄老師設(shè)計(jì)系統(tǒng)的思路、以及實(shí)現(xiàn)系統(tǒng)的關(guān)鍵操作步驟,并且在看完視頻后自己按照筆記的步驟去回想、去操作,而不是把老師寫的每一行代碼都記下來。還有就是記錄老師重點(diǎn)強(qiáng)調(diào)的細(xì)節(jié),尤其是一些坑。
記筆記還有個(gè)好處就是記錄自己的學(xué)習(xí)過程和進(jìn)度,雖然會(huì)花一些時(shí)間,但性價(jià)比是很高的。
多寫代碼
想學(xué)好編程,一定要多寫代碼多實(shí)踐。很多同學(xué)理論玩的很 6、視頻看的又多又快,但看完視頻后還是不會(huì)寫代碼、沒思路,大概率是因?yàn)榍玫纳倭耍际羌埳险劚?/p>
像我初學(xué)編程的時(shí)候,就是只看不寫,最后約等于沒看。

后來,我修改了自己學(xué)習(xí)的節(jié)奏,一般看視頻學(xué)技術(shù)時(shí):先看理論部分,了解某項(xiàng)技術(shù)它是做什么的、有什么功能;然后看實(shí)戰(zhàn),跟著老師看一集寫一集,并且看完一套視頻后,一定要對(duì)照筆記自己再做一個(gè)項(xiàng)目,把視頻中講到的重點(diǎn)技術(shù)進(jìn)行綜合運(yùn)用。
不要覺得寫項(xiàng)目浪費(fèi)時(shí)間,想要學(xué)好編程,就一定要多做項(xiàng)目,可以幫助你更好地理解技術(shù)、加深印象。
另外,通過實(shí)踐,可以幫助你理解很多枯燥的理論。比如當(dāng)時(shí)我們上計(jì)算機(jī)組成原理這門課,基本全是理論,上課聽的一知半解、昏昏欲睡,也根本記不住。
直到后來老師帶我們到實(shí)驗(yàn)室,使用開發(fā)箱實(shí)際操作,通過接線點(diǎn)亮電路小燈,實(shí)現(xiàn)指令集運(yùn)算,才真正幫助我記住了課堂上講到的知識(shí)。
卡塔練習(xí)
我是從一本程序員修養(yǎng)類書籍接觸到的 卡塔
,官方的解釋是:卡塔是指 “形”,即招式套路,練習(xí)時(shí)必須按形進(jìn)行。
簡(jiǎn)單來說,就是每日練習(xí)。
想要學(xué)好編程,每天都要寫一些代碼,做一些訓(xùn)練。比如學(xué)前端的同學(xué)可以每天用 JS 來實(shí)現(xiàn)一個(gè)小功能,學(xué)后端的朋友的可以每天書寫幾條 SQL 語句,鞏固 SQL 語法。此外,現(xiàn)在程序員找工作非??粗鼗A(chǔ)算法和數(shù)據(jù)結(jié)構(gòu),想要學(xué)好這些,我們也應(yīng)該堅(jiān)持每天刷 1 - 3 道題,堅(jiān)持過就知道這到底有多重要了。

多踩坑
相比快樂,我們更容易記住痛苦。所以學(xué)編程的時(shí)候,一定要多寫代碼,尤其是要多遇到 Bug,多解決 Bug。摔得越痛,飛的越高。
比如我曾經(jīng)經(jīng)歷過一個(gè)線上事故,因?yàn)橘Y源未釋放導(dǎo)致服務(wù)停機(jī),直接影響了現(xiàn)金收益!所以直到今天,我時(shí)刻記得要釋放資源,不要再翻車了。
除了不經(jīng)意間寫 Bug 外,我還會(huì) 主動(dòng)試坑 。就寫代碼的時(shí)候故意去嘗試一些可能出現(xiàn)的操作,比如把函數(shù)參數(shù)的類型從 A 改為 B,然后分析對(duì)函數(shù)的影響,很多情況下,會(huì)有意想不到的收獲,說不定就發(fā)現(xiàn)了一個(gè)知名框架的 Bug 呢?

激勵(lì)
和上面提到的興趣一樣,如果寫程序能給我們帶來激勵(lì)和正反饋,我們就更樂意、更主動(dòng)地去完成它。
對(duì)我來說,自己主動(dòng)去做的項(xiàng)目更容易記住,比如我至今都能想起大一時(shí)主動(dòng)做的國(guó)家級(jí)創(chuàng)新創(chuàng)業(yè)項(xiàng)目用到了哪些技術(shù)、有哪些不足;但卻想不起來大四時(shí)被要求做的圖像處理畢業(yè)設(shè)計(jì)都有哪些功能了。
外力
除了主動(dòng)之外,壓力也能幫助我們提高編程學(xué)習(xí)效率,加深記憶。
比如我在騰訊實(shí)習(xí)期間,有一周上線時(shí)間很緊張,那一周基本每天工作到凌晨,所以印象尤為深刻。

分享
有的知識(shí)你以為自己會(huì)了,但沒辦法把它講出來,就是不理解,這樣很快就會(huì)遺忘,面試時(shí)還會(huì)吃大虧!
所以最好能把自己寫過的代碼、學(xué)到的知識(shí)分享給他人,能夠極大地加深對(duì)知識(shí)的理解和印象,還能幫助自己發(fā)現(xiàn)不足。
分享的途徑多種多樣,比如寫文檔、寫博客、對(duì)著小黃鴨去講、參與演講、錄制視頻等。
像我剛開始學(xué)編程大概半年多的時(shí)候,就建立了自己的個(gè)人博客,在上面記錄自己學(xué)到的知識(shí)?,F(xiàn)在來看,雖然當(dāng)時(shí)寫的真的是太爛了!但也為我如今做知識(shí)分享做了鋪墊。
我真的是很享受學(xué)習(xí)知識(shí)并且對(duì)外輸出的過程的,持續(xù)學(xué)習(xí),持續(xù)輸出。說個(gè)好玩的事,大學(xué)的時(shí)候騎著我小電動(dòng)車帶室友一起上課的路上,我都會(huì)跟他扯一通技術(shù)。分享真的是可以激勵(lì)自己不斷進(jìn)步,并且?guī)椭礁嗳说模?/p>
復(fù)盤總結(jié)
這也是很多同學(xué)忽略的一點(diǎn),學(xué)了一個(gè)技術(shù)、做了一個(gè)項(xiàng)目后,就趕緊把他們像炸彈一樣丟掉了。其實(shí),你自己學(xué)過的、實(shí)踐過的知識(shí)都是值得珍藏的寶藏。
我在學(xué)校時(shí),每做完一個(gè)項(xiàng)目,都會(huì)展開回憶,從當(dāng)初想做這個(gè)項(xiàng)目開始、到當(dāng)時(shí)的思路、實(shí)現(xiàn)過程、遇到的坑等,并且還會(huì)分析自己做的好或不好的地方,再加上一些心得感悟,整理匯總成一篇博客文章。
同理,學(xué)完一門技術(shù)時(shí),我也會(huì)把這個(gè)技術(shù)的關(guān)鍵知識(shí)點(diǎn)匯總成博客。
現(xiàn)在工作了,我依然保持總結(jié)的好習(xí)慣,自己會(huì)寫日?qǐng)?bào)、周報(bào)、月報(bào)、年報(bào)等。現(xiàn)在回過頭來看,也是一筆不小的成就,要不然誰還記得自己一年前干了啥呢?

忘了怎么辦?
我知道很多同學(xué)追求完美,想把什么都記住,害怕今后忘記重要的知識(shí)。
其實(shí)對(duì)學(xué)編程來講,忘記是很正常的,而且完全不可怕!
我建議大家索性少記一點(diǎn),不要給自己太大的記憶負(fù)擔(dān),即使忘了,我們也有下面的方式來解決。
積累
首先,一定要注重積累,整理自己做過的事。
像我會(huì)整理自己寫過的代碼,這樣等要用的時(shí)候,直接去找,然后 CV(復(fù)制粘貼)大法好。
我會(huì)整理自己寫過的文章、看過的好文、好句子、好表情,打造自己的語料庫、素材庫,隨用隨搜,省去了大量記憶量。
我還會(huì)整理自己踩過的坑、寫過的 bug,并且將解決方案也一同整理,即使下次再遇到同樣問題,也能高效解決。

利用搜索和文檔
忘了某段代碼怎么寫、沒有思路、或者遇到問題了,那就去網(wǎng)上搜索一下;忘了某個(gè)框架的特性、函數(shù)的參數(shù)、用法,那就去看框架的官網(wǎng)文檔就行了。
難道還要?jiǎng)e人幫你搜索嘛?

多寫注釋和文檔
程序圈里有個(gè)梗:有位程序員罵一段代碼特別辣雞,結(jié)果最后發(fā)現(xiàn)是自己寫的。
這是每位程序員都會(huì)遇到的事:
看不懂自己寫的代碼
不認(rèn)識(shí)自己寫的代碼
為了防止此類沙雕事件的發(fā)生,我們應(yīng)該適當(dāng)?shù)亟o代碼添加注釋,像我的話經(jīng)常會(huì)放一些設(shè)計(jì)思路、設(shè)計(jì)文檔鏈接、作者等等:
/*
?*?功能:三連
?*?思路:請(qǐng)參照文檔?xx.cn
?*?作者:狗魚皮
?*/
function?sanLian()?{
??console.log('感謝三連')
}
還可以適當(dāng)回顧下自己寫的爛代碼,說不定就有什么優(yōu)化靈感了呢?
除了注釋外,做項(xiàng)目一定要寫文檔,把項(xiàng)目背景、選型過程、設(shè)計(jì)思路、實(shí)現(xiàn)方案都寫清楚。不僅可以幫助自己總結(jié)工作,還能給其他項(xiàng)目的參與者指引和幫助。
最好把產(chǎn)品說過的一些話也記錄上,防止日后產(chǎn)品改需求。
不得不背?
最后,雖然說學(xué)編程不靠背代碼,但等到找工作的時(shí)候,一些面試的考點(diǎn)還是必須要記住的。不過在背面經(jīng)、背考點(diǎn)時(shí)也不要像背課文一樣死板,還是要加上自己的理解,多實(shí)踐。
比如經(jīng)典面試題:MySQL 如何性能優(yōu)化?
死記硬背當(dāng)然可以,但有時(shí)間的話,更好的做法是自己實(shí)踐一下 MySQL 的優(yōu)化手段,并且記錄優(yōu)化的效果,比如性能提升了百分之幾等等,這樣自然就能記住,跟面試官聊的時(shí)候也更有底氣。
以上就是本期分享,希望大家能養(yǎng)成好習(xí)慣,多敲多練,別再?gòu)?qiáng)迫自己背代碼了!
最后再送大家一些 幫助我拿到大廠 offer 的學(xué)習(xí)資料:
指路:https://t.1yb.co/qOJG
我是如何從零開始通過自學(xué),拿到騰訊、字節(jié)等大廠 offer 的,可以看這篇文章,不再迷茫!
指路:https://t.1yb.co/q0mS
我是魚皮,點(diǎn)贊 還是要求一下的,祝大家都能心想事成、發(fā)大財(cái)、行大運(yùn)。
歡迎關(guān)注俺,一起學(xué)好編程~
