大家好,我是魚皮。
最近私信收到最多的問題就是:我學編程的時候記不住代碼,老忘怎么辦?
比如這位小伙伴,學編程一個月了,問我咋背代碼:
頭像不錯
其實,我自己的記性是非常非常差的,所以我才在選專業的時候棄法從碼。
我在最開始學習 C 語言編程的時候,也是敲一次忘一次,很痛苦。但我又不想放棄,于是強迫自己去記憶代碼,漸漸地把學編程變成了背單詞。但花了很多時間,好不容易把單詞背下來了,卻還是寫不出代碼,這就讓我逐漸懷疑人生。
后來和前輩們的交流中,我發現記不住代碼是很正常的,倒不如說能記住代碼的人不太正常(太聰明、記性好)。
于是,我改變了自己的學編程方法,不再背代碼,提高了學習編程的效率。
今天就分享下我的編程 “不忘” 大法。
魚皮編程不忘大法
分為四部分:先分享一些通用記憶方法,再是面向學編程的記憶方法,還給出了忘記代碼后的解決方法,以及一些必須要記憶的內容。
本文大綱:
思維導圖
通用記憶方法
以下方法,可以幫助我們養成記憶的好習慣,不止編程,適用于所有知識的學習。
編故事
相對枯燥的代碼和理論,我們更喜歡看故事。試著把知識點編成有趣的故事,或者和某些人或事進行關聯,能夠加深印象。
比如我給大家分享編程經驗的時候,會提到我的老弟小阿巴,就是為了加深大家的印象,一看到熊貓頭就想到 bug,還有什么 “從前有匹馬叫代碼”,以及一些用故事講技術的文章和視頻,都能起到強化記憶的作用。
興趣強化
對于自己感興趣的事情,我們記憶會更容易。
比如我從前愛打游戲,數學公式記不住,但卻能精準記憶怪物的血量傷害和裝備的爆率。
所以想更輕松地記憶,最好能培養自己對這件事的興趣,或者用更有趣的方式來學習,比如上面說到的看故事、看圖解、看短視頻知識分享。
利用感官
我們在記憶時除了需要動腦外,還可以利用好感官,比如搭配一些肢體動作。
關于這點,也不用刻意,每個人都有自己的習慣和小動作。比如有人喜歡用手比劃,有人喜歡撫摸下巴,像我則是喜歡在背書時撓頭,有的時候把頭發撓掉了,看著這根頭發,我就感覺知識記得更牢了。真就我變禿了,也變強了唄。
除了感官外,人腦經歷過的事物,思考過的問題,體驗過的情感和情緒,練習過的動作,都可以成為我們記憶的內容,幫助我們關聯記憶碎片。
理解
記東西不能死記硬背,要思考,要理解,這點真的是從小聽到大,就不多說了。
體系化
我們在學習時,最好按照體系去學習記憶,而不是東瞅瞅、西瞧瞧。
可以把零碎的知識整理成大綱、學習路線、思維導圖等等,按序、分點地去記憶。
老讀者應該發現了,我現在就經常在自己的知識分享文章開頭放上一張思維導圖,就是為了幫助大家快速了解文章結構,從而加深印象。
記憶時間
一般情況下,每天早上和晚上臨睡前,是記憶的最佳時間。
我從小養成的一個習慣是:每天睡覺前會躺在床上回憶一遍自己今天做過的事情,的確有強化記憶的效果。
此外,考試周或面試前,我會把復習內容作為文檔存到手機上,睡覺前打開 wps office 或者一些文檔語音朗讀軟件,讓音頻伴我入睡。第二天早上起床前,可以先打開音頻,閉上眼睛,聽到知識點時自己在腦海中再回想一遍,真的有奇效!
定期回憶
不知道大家有沒有聽說過遺忘曲線(艾賓浩斯曲線),就是說我們在學習中的遺忘是有規律的,并且遺忘的速度先快后慢。
遺忘曲線
觀察曲線,我們發現,很多短期記憶消失地很快。所以不能 光記不憶 ,要趁熱打鐵,學完知識后抓緊應用,并且按照曲線,每隔一段時間復習一遍,才能留住所學知識。
編程記憶方法
上面的方法可以幫助我們更好地記憶知識,而下面的方法更聚焦于幫助我們學習編程,提高效率。
選擇性記憶
首先,對于學編程來說,千萬不要去背代碼!
本來編程知識這輩子都學不完了,背代碼的話下輩子都學不完了。
學編程時,我們應該:記住有什么,你能做什么,而不是具體怎么做 。
舉個例子,現在讓你設計一個電梯調度系統。你只需要聽說過有個東西叫 電梯調度算法 ,以及它能實現電梯的有序調度就行了,而并不需要記住怎么寫代碼。等到要做的時候,去搜該算法具體的實現就行了。
再舉個例子,現在前端的類庫那么多,假設讓你做一個網頁動畫效果,那你在此前只需要知道 Animate.css 庫可以實現,等用的時候查文檔就好了,并不需要把它的每個類、每種用法都記下來。別忘了,代碼更新換代很快的,即使有的東西你能記住,但它也有時效性。
尤其是對于編程的初學者,不要去背代碼,你只需要知道某個函數大概能做什么事情,我要完成某個功能時能想到它(甚至是能搜到)就可以了。
另外,刷算法題目的時候很多同學理解不了就直接死記硬背,其實記憶算法沒有問題,但你要記的不是某段代碼,而應該是一類題目的 解題套路 。
筆記
學編程時,一定要多記筆記,無論是看書、看文章還是看視頻。
但是請注意,筆記不是什么都記!
有些同學怕自己忘記視頻中老師講的知識,直接把老師的原話一句句地敲下來,一個視頻暫停幾十次。看似筆記上內容很多,但其實真正有用的、你能記住的東西很少,而且很浪費時間,大可不必。
不要忘了,筆記是 給你自己看的 ,是為了幫助自己復習的。我記筆記時,重點在于記思路、記流程、記關鍵節點。
比如我看一個前端項目實戰教程時,我會記錄老師設計系統的思路、以及實現系統的關鍵操作步驟,并且在看完視頻后自己按照筆記的步驟去回想、去操作,而不是把老師寫的每一行代碼都記下來。還有就是記錄老師重點強調的細節,尤其是一些坑。
記筆記還有個好處就是記錄自己的學習過程和進度,雖然會花一些時間,但性價比是很高的。
多寫代碼
想學好編程,一定要多寫代碼多實踐。很多同學理論玩的很 6、視頻看的又多又快,但看完視頻后還是不會寫代碼、沒思路,大概率是因為敲的少了,都是紙上談兵。
像我初學編程的時候,就是只看不寫,最后約等于沒看。
后來,我修改了自己學習的節奏,一般看視頻學技術時:先看理論部分,了解某項技術它是做什么的、有什么功能;然后看實戰,跟著老師看一集寫一集,并且看完一套視頻后,一定要對照筆記自己再做一個項目,把視頻中講到的重點技術進行綜合運用。
不要覺得寫項目浪費時間,想要學好編程,就一定要多做項目,可以幫助你更好地理解技術、加深印象。
另外,通過實踐,可以幫助你理解很多枯燥的理論。比如當時我們上計算機組成原理這門課,基本全是理論,上課聽的一知半解、昏昏欲睡,也根本記不住。
直到后來老師帶我們到實驗室,使用開發箱實際操作,通過接線點亮電路小燈,實現指令集運算,才真正幫助我記住了課堂上講到的知識。
卡塔練習
我是從一本程序員修養類書籍接觸到的 卡塔 ,官方的解釋是:卡塔是指 “形”,即招式套路,練習時必須按形進行。
簡單來說,就是每日練習。
想要學好編程,每天都要寫一些代碼,做一些訓練。比如學前端的同學可以每天用 JS 來實現一個小功能,學后端的朋友的可以每天書寫幾條 SQL 語句,鞏固 SQL 語法。此外,現在程序員找工作非常看重基礎算法和數據結構,想要學好這些,我們也應該堅持每天刷 1 - 3 道題,堅持過就知道這到底有多重要了。
每日一題
多踩坑
相比快樂,我們更容易記住痛苦。所以學編程的時候,一定要多寫代碼,尤其是要多遇到 Bug,多解決 Bug。摔得越痛,飛的越高。
比如我曾經經歷過一個線上事故,因為資源未釋放導致服務停機,直接影響了現金收益!所以直到今天,我時刻記得要釋放資源,不要再翻車了。
除了不經意間寫 Bug 外,我還會 主動試坑 。就寫代碼的時候故意去嘗試一些可能出現的操作,比如把函數參數的類型從 A 改為 B,然后分析對函數的影響,很多情況下,會有意想不到的收獲,說不定就發現了一個知名框架的 Bug 呢?
激勵
和上面提到的興趣一樣,如果寫程序能給我們帶來激勵和正反饋,我們就更樂意、更主動地去完成它。
對我來說,自己主動去做的項目更容易記住,比如我至今都能想起大一時主動做的國家級創新創業項目用到了哪些技術、有哪些不足;但卻想不起來大四時被要求做的圖像處理畢業設計都有哪些功能了。
外力
除了主動之外,壓力也能幫助我們提高編程學習效率,加深記憶。
比如我在騰訊實習期間,有一周上線時間很緊張,那一周基本每天工作到凌晨,所以印象尤為深刻。
分享
有的知識你以為自己會了,但沒辦法把它講出來,就是不理解,這樣很快就會遺忘,面試時還會吃大虧!
所以最好能把自己寫過的代碼、學到的知識分享給他人,能夠極大地加深對知識的理解和印象,還能幫助自己發現不足。
分享的途徑多種多樣,比如寫文檔、寫博客、對著小黃鴨去講、參與演講、錄制視頻等。
像我剛開始學編程大概半年多的時候,就建立了自己的個人博客,在上面記錄自己學到的知識。現在來看,雖然當時寫的真的是太爛了!但也為我如今做知識分享做了鋪墊。
我真的是很享受學習知識并且對外輸出的過程的,持續學習,持續輸出。說個好玩的事,大學的時候騎著我小電動車帶室友一起上課的路上,我都會跟他扯一通技術。分享真的是可以激勵自己不斷進步,并且幫助到更多人的!
復盤總結
這也是很多同學忽略的一點,學了一個技術、做了一個項目后,就趕緊把他們像炸彈一樣丟掉了。其實,你自己學過的、實踐過的知識都是值得珍藏的寶藏。
我在學校時,每做完一個項目,都會展開回憶,從當初想做這個項目開始、到當時的思路、實現過程、遇到的坑等,并且還會分析自己做的好或不好的地方,再加上一些心得感悟,整理匯總成一篇博客文章。
同理,學完一門技術時,我也會把這個技術的關鍵知識點匯總成博客。
現在工作了,我依然保持總結的好習慣,自己會寫日報、周報、月報、年報等。現在回過頭來看,也是一筆不小的成就,要不然誰還記得自己一年前干了啥呢?
記錄工作
忘了怎么辦?
我知道很多同學追求完美,想把什么都記住,害怕今后忘記重要的知識。
其實對學編程來講,忘記是很正常的,而且完全不可怕!
我建議大家索性少記一點,不要給自己太大的記憶負擔,即使忘了,我們也有下面的方式來解決。
積累
首先,一定要注重積累,整理自己做過的事。
像我會整理自己寫過的代碼,這樣等要用的時候,直接去找,然后 CV(復制粘貼)大法好。
我會整理自己寫過的文章、看過的好文、好句子、好表情,打造自己的語料庫、素材庫,隨用隨搜,省去了大量記憶量。
我還會整理自己踩過的坑、寫過的 bug,并且將解決方案也一同整理,即使下次再遇到同樣問題,也能高效解決。
整理 Bug 及解決
利用搜索和文檔
忘了某段代碼怎么寫、沒有思路、或者遇到問題了,那就去網上搜索一下;忘了某個框架的特性、函數的參數、用法,那就去看框架的官網文檔就行了。
難道還要別人幫你搜索嘛?
多寫注釋和文檔
程序圈里有個梗:有位程序員罵一段代碼特別辣雞,結果最后發現是自己寫的。
這是每位程序員都會遇到的事:
- 看不懂自己寫的代碼
- 不認識自己寫的代碼
為了防止此類沙雕事件的發生,我們應該適當地給代碼添加注釋,像我的話經常會放一些設計思路、設計文檔鏈接、作者等等:
/*
* 功能:三連
* 思路:請參照文檔 xx.cn
* 作者:狗魚皮
*/
function sanLian() {
console.log('感謝三連')
}
還可以適當回顧下自己寫的爛代碼,說不定就有什么優化靈感了呢?
除了注釋外,做項目一定要寫文檔,把項目背景、選型過程、設計思路、實現方案都寫清楚。不僅可以幫助自己總結工作,還能給其他項目的參與者指引和幫助。
最好把產品說過的一些話也記錄上,防止日后產品改需求。
不得不背?
最后,雖然說學編程不靠背代碼,但等到找工作的時候,一些面試的考點還是必須要記住的。不過在背面經、背考點時也不要像背課文一樣死板,還是要加上自己的理解,多實踐。
比如經典面試題:MySQL 如何性能優化?
死記硬背當然可以,但有時間的話,更好的做法是自己實踐一下 MySQL 的優化手段,并且記錄優化的效果,比如性能提升了百分之幾等等,這樣自然就能記住,跟面試官聊的時候也更有底氣。
以上就是本期分享,希望大家能養成好習慣,多敲多練,別再強迫自己背代碼了!
最后再送大家一些 幫助我拿到大廠 offer 的學習資料:
指路:https://t.1yb.co/qOJG
我是如何從零開始通過自學,拿到騰訊、字節等大廠 offer 的,可以看這篇文章,不再迷茫!
指路:https://t.1yb.co/q0mS
我是魚皮,點贊 還是要求一下的,祝大家都能心想事成、發大財、行大運。