如何對待學過但容易忘記的編程知識?

看過的HTTP協議內容,JS相關書籍,很多東西看完了一時間又用不上,複習的時候感覺自己學習效率好低啊,在學習的過程中,請問大家是怎麼解決這個問題的?


忘記就忘記了,至少你知道有這麼個東西,以後需要再查也不遲。最不好的是你不知道有這個東西,遇到問題你也不知道要走什麼方向。


記住是不可能記住的

這輩子不可能記住的

背又背不下來

就去網上搜索這種

才能勉強拼湊個代碼這樣子

上網感覺像回家一樣

上了網裡個個都是人才

超喜歡在網上


謝邀!

為了一定程度的信服力,我們講的專業一點:在心理學上,人的記憶分為三種:瞬時記憶,短時記憶和長時記憶。我們看過一遍書之後,會形成短時記憶,這種記憶能夠保持的時間非常短,一般只有5~20秒,最長也不超過一分鐘。這就是為什麼我們有時候看書會出現以下情況:

翻開書:馬冬梅

關上書:馬什麼梅

翻開書:馬冬梅

關上書:什麼冬梅

翻開書:馬冬梅

關上書:馬東什麼

另一種記憶類型叫長時記憶,長時記憶能保持許多年甚至終身的永久性記憶。在有複述的情況下,保持在短時記憶中的學習材料會向長時記憶轉移。

複述是指通過語言重複剛剛識記的材料,以鞏固記憶的心理操作過程。分為保持性複述和精細複述。前者又稱簡單複述和機械複述。後者又稱整合性複述,它使短時記憶中的信息得到進一步加工和組織,使之與個體已有的知識建立聯繫,從而使信息轉入長時記憶中。

嗯,然後用人話翻譯一下就是:如果你只是簡簡單單地認了一遍字(這裡套用了牛妹曾經一位老師的名言:是讓你看書,不是讓你認字。)不總結不歸納,甚至不做任何練習,那麼遺忘在你關上書的那一瞬間就開始了。

那麼,如何讓我們的短時記憶轉化為長時記憶呢?

1、養成記筆記的習慣

從小我們就被教育:好記性不如爛筆頭。當然這裡的記筆記不是指你把書上的內容全部抄下來,而是你把你認為重要的,你不太明白的,你從中感悟到的。這就是前文所指的一種整合性複述。

當然,形式完全可以不是拿支筆拿個本兒。博客、github、牛客網發帖……各種各樣的形式都可以。僅僅是幫助你總結所學知識,順便留個底,今後遇到相關問題,可以立刻從你自己的筆記中找出來。

複習的時候,看自己的筆記總比重新翻書學習效率高得多。因為筆記總歸是自己咀嚼過一遍的東西,更易於消化吸收。當然不是說書讀過一遍就扔了,溫故知新,當你發現曾經的你學到的這些東西已經不夠用了的時候,重新回去翻書,重新整理新的筆記,這就是我們不斷進步的途徑。

2、養成學完即練的習慣

為什麼老師在上完課之後,一定要給大家留作業?因為「知道了」和「會用了」之間還有一個很大的鴻溝。

浮於理論的知識也許聽起來很高大上,但實踐的時候往往會出現很多意想不到的麻煩,比如我們都知道的著名歷史人物趙括,紙上談兵的後果是什麼也不用我在這裡多說了吧……

紙上得來終覺淺,絕知此事要躬行。相信大家在市面上購買的編程類書籍,課後都會有相關習題的,這些題目都是作者經過無數次審閱與修訂,最終決定下來的,最適合學完即練的題目,浪費可惜。

當然,如果幾道課後習題不夠做,你也可以來牛客網,智能專項練習,公司真題模考,做題也是某種意義上的整合性複述,題海戰術也許不夠聰明,但一定有它的道理。

3、多做項目

說實話,我們學習編程,到最後都是要落實在項目上的。做項目跟做題又不一樣,你需要考慮到方方面面的東西,你需要將你學過的理論知識全部賦予實踐。

這時候你會發現:根本沒有人能記住所有的演算法。甚至根本無法記住所有的基礎語法。

但在認真進行過上述學習過程後,你會發現:你知道這件事如何解決,知道這個項目需要什麼樣的演算法才能解決。也許你已經記不清這個演算法是如何具體實現的,但是你知道在哪兒能夠找到它。

其實到了這一步,你已經是一位大神了,就像樓上有人說的,也許你並不能一口背出7大排序演算法,但是通過學習的過程,你記住了在什麼情境下應該用什麼樣的方法解決。

這時候你再回到你曾做過的筆記,曾做過的題目中找到解決辦法,並用以當前的項目。用多了之後,有些東西可能就像1+1=2一樣深深紮根在你的腦子裡了。


上小學的時候老師就告訴了我們 "好記心不如爛筆頭"。

做筆記、寫博客是我解決容易忘記的一種主要方法,學習一個新技術,我的習慣的是把核心的東西記下來寫成博客,下次遇到的時候不一定能完整的想出來,但至少感覺似曾相識,於是你就可以迅速打開你的博客定位到該問題涉及的知識點。


問題寫的太不通順了,我給修改了一下: 「如何對待學過但容易忘記的編程知識?」

下面是回答:——————————————————

學習編程,不需要死記硬背,而在於消化理解。

消化理解是什麼意思?就是知識的內化。如何內化你的知識?這取決於你是否有構建自己的系統化的知識體系結構,也就是心智模型。

忘記,也是一門學問。你是完全忘的一乾二淨,下次再看一遍跟第一次看一樣呢?還是只忘了細節,如果問你這是什麼,解決了什麼問題,哪裡可以用到,你還可以說的上來?

如果是忘的一乾二淨,那你就是完全沒理解,沒有消化。你沒有構建好自己的系統化的知識體系結構。你學習的方嚮應該放在構建知識體系上面。

還可能是你看的東西太零碎了,知識點串不起來,你應該知道,知識是分層次的,我一般用「道」「術」「器」來區分不同的知識。著重於「道」的知識,更容易幫助你構建知識體系。對於「術」和「器」來說,需要你動手實踐,但是最好遵循「道」的路線來實踐,不要太散。

比如HTTP協議就是屬於「道」的層面,學習js的新手多半在學習js怎麼用,這屬於「術」,像你用的IDE,編輯器之類屬於「器」。所以你該如何把知識串起來?遵循HTTP協議「道」的層面,可以從瀏覽器的工作原理出發,當你從瀏覽器地址按下回車的時候,瀏覽器發生了什麼?學習這個過程,你就能構建一套從js到HTTP協議的系統化的心智模型,因為你把這些知識通過瀏覽器如何工作而串了起來。

如果是只忘記了細節,那沒有什麼關係,只要理解了相關知識,構建好自己的知識體系,到具體使用的時候,再回來查查細節就行了。


這個問題我可以回答。

我本人的性格比較懶惰,不是擅長記憶的人。我可以明確地告訴你,我現在腦子裡面連JAVA的基礎語法都不會100%記住,比如到底哪個是和,哪個是與 , ||等等。一方面是我會用5,6種語言,常常搞混,一方面是性格使然。

所以我基本上保證幾點來讓我能順利開展工作

1, 24小時互聯網連接,這在物理上保證我能隨時連接到知識庫。

2,經過嚴格訓練的搜索能力。我保證我能在幾分鐘內搜索到80%的情況的下需要的知識,在十幾分鐘內能搜索到99%需要的知識,並且確保正確。

3,自上而下的知識體系。大部分理工科的人,由於理工科是個經驗科學,他的知識體系都是自下而上的,而我不同,我其實年輕的時候的志向是作家,所以我練習了top down的知識體系。在我處理任何編程問題的時候,先處理高層的,概要的,設計的,方向性的問題。先搭建框架。形象的比喻,普通人做程序的事情,無論大小,是農村建房子,一塊磚一塊磚壘,一面牆一面牆砌,這是人之常情。我做事,是造摩天樓,先設計,仔仔細細地設計,等到設計完成了,具體細節是請這個民工刷這捅油漆,其實只是旁枝末節,無論你有多不知道,範圍也有限,很容易能查到。

====

問搜索能力如何訓練的各位,的確是需要提高搜索能力。

比如我在網上看一個人的東西,無論知乎,微博。這個人在同一平台有很多回答/post,那麼我就會橫向地去看這個人的各個post。人總是有局限性的,他的回答/post,一定在某些地方有交集,比如這個蘿魏紫,他在這個回答里提到了搜索能力很重要,他很可能在別的回答里又BB過搜索能力。


不怎麼用,自然會忘記。

但別擔心,工作不是閉卷考試,編程是開卷考試,我們只要知道從那裡可把遺忘的知識找回來就行了。

再次安利下

VS Code插件介紹(五)Dash,超贊的開發文檔查詢插件

七種嘗試解決技術問題的方法-送給單打獨鬥的程序員

最後,我的問題是,題主為什麼要提複習?難道真的要去考試嘛?


之前無論是學數學還是弄機器學習,都發現自己會有忘記的時候。後來逐漸發現,通過寫博客和讀書筆記是一個不錯的方法。寫讀書筆記不是為了給別人看,更多的是給自己看,為了在自己忘記的時候能夠及時的把之前所學的知識找回來。

貼上一份自己2016-2017兩年所寫的公眾號和知乎文章:


  1. 記住大概的功能效果即可,比如 CSS 可以實現什麼效果、JS 實現某些功能可以通過哪些 API 實現?
  2. 真正需要用到的時候,學會搜索,學會尋找最好的資料,快速開始應用。第一次很慢,第二次快一些,四五次之後,這個能力就固化到你身上了。就像寫 CSS 比較多的人,屬性從來不背也不查詢。

所以忘了具體的協議內容沒關係,但知道大概的流程和能力,知道問題或者需求要怎麼解,能快速定位到就好了,常用的東西,定位的多了,就熟練掌握了。


不用解決,記關鍵字,用到時搜谷歌查文檔。記住原理,不要記細節。


左右百度

右手谷歌

時不時看看github

時不時觀光各大博客

不懂就查

代碼出錯就改

不要擔心其他問題

只要有網路就沒有解決不了的問題,如果有換個關鍵詞繼續檢索.

我一個list列表裡面的pop() 我都檢索了不下十次....


遺忘是必然的,一個東西不經常用的話,早晚都會遺忘,腦子的容量是有限的,問題在於應該如何充分利用這有限的容量?

我認為,最關鍵的東西,是一個問題到底有沒有解決方案,只要你能記住這個結論性的東西就夠了,就足以讓你避免下一次在同一個陰溝裡翻船兩次。其它的那些細節,例如這個解決方案到底是怎樣的,即使忘記了也沒有太大的關係,搜索引擎可以解決一切問題。


忘記很正常吧,因為沒有真正的學以致用。

在學習了一個知識點之後,一定要對其概念十分的理解。甚至可以背下它的概念。

將概念背的滾瓜爛熟之後,再繼續往下看。

你會發現,針對這個名詞下的所有知識點基本上都是根據概念來進行分析和講解的。

讀一遍是肯定不夠的,所以反覆讀概念,然後根據概念看其他延伸知識。

隔天,再把知識點看一遍,你會發現,或許會在昨天的理解上又有了新的領悟。

接著可以嘗試自己去梳理這個知識點,不要看書的情況下自己整理一遍。

如果能夠做到這些之後,說明你對知識點掌握的已經八九不離十了..

這樣做至少在短期內不會遺忘,因為你真正的掌握了一個知識點: )


印象筆記。


秘笈 ? 反覆記憶

開個玩笑,忘了就完了唄,你處在互聯網時代,很多東西你只需要知道一個大概就行了。

打個比方,7大排序演算法,有多少人可以背下來?背下來有什麼用嗎?你第一次看完這些內容,我猜大部分的人基本只能記住1個冒泡排序,但是沒關係,接下來的項目中,如果真的用的到,你自然會想起你曾經看過有別的排序,或許更加的高效,然後這個時候你再來學習。如此反覆,一遍又一遍,用的多了就記住了。

不要為了記憶而去記憶,這樣你學編程的過程會非常的痛苦~


記住一個粗中帶細的知識框架,框架不能太廣、太窄,可以詳細一些不能過於詳細

按著知識大綱或者視頻(視頻不需要按著一個不漏,有個大致框架OK,詳細什麼知識點可以暫時不學可以逛csds或者谷歌你所學的語言)過一遍,敲代碼,能記住多少算多少,重要的知識點也一視同仁。

有了一個框架後針對重點知識點開小灶,重點細化。

模仿,照抄類型不同的項目,加深框架記憶和知識點使用以及非重點知識細化,並且會給你帶來一些成就感,精神上的激勵。

不管這門編程語言,你是打算髮展成為職業,愛好或者是為了學分都建議你買一本適合查閱的書,盡量每天都翻翻不管幾十頁或者幾頁,養成習慣最好,用處你連續照著辦一個月就好了,記住帶腦子思考,如果目的就是翻書的話當我沒說。

遇到問題,不是太緊急的話,建議翻書,查官方文檔,實在不行再谷歌,這樣記憶會比谷歌來的深。

實在有些理解不了,就空掉。過一段時間就自動會了,這就屬於玄學了,親自體會過。

這個方法學習效果挺好的,就是我目前在用的,對心急的人也很不錯。


首先聲明,我目前也是菜鳥。但是之前我也有和題主一樣的困惑。但是現在感覺找到了方法,所以想與大家交流一下。大牛勿噴。

比如說 JDBC 的開發?

如果按照我之前的學習方法,肯定是看書,然後寫一遍代碼。然後過一段時間就忘了。然後又看書。這樣的學習過程,使我非常沮喪,差點懷疑人生了。於是研究各種高效學習方法。還是不得其法。

經過漫長的摸索,終於找到了突破口。也就是問題驅動,從整體到局部的學習方法。首先我會問自己 JDBC 的開發步驟是怎樣的? 這個時候只需要用文字描述出來即可:1.註冊驅動。2.獲得連接。3編寫SQL語句。4.進行查詢。5.處理結果。6.釋放資源。在你自己用語音描述上面的步驟的時候,要做到理解自己說的每一個步驟。腦海中自動浮現相關代碼和相關的問題,甚至相關的注意事項。

先到這,之後再詳細的寫。


所以你是覺得程序員的技術博客和代碼注釋都是無私奉獻的寫給別人看的嗎…

上學期學網路編程,期末時靠著一腔熱血花了一禮拜連夜寫了個公眾號的大作業,伺服器加客戶端差不多4000行一行注釋都沒有,中途問題多多…這個項目寫進了簡歷,面試前一晚打開來看,別說什麼完成埠io操作了,連句柄是什麼我特么都得百個度才回想的起來…

基本上狀態就是,咦?這裡怎麼又來了個socket…線程數設這個數啥意思…這裡轉成網路位元組序好像有個什麼問題當時怎麼解決的來著…粘包時前面加的這段空間是啥組成的…

看自己寫的代碼看到懷疑人生就是這種體驗…畢設選了個類似的課題,估計過一陣子又要重新學了…


大部分時候大家只是記住了這個知識 「可以從哪裡找到」 而不是這個 「知識本身」


不僅要輸入,還要輸出啊。


推薦閱讀:

為什麼有人可以打一天的遊戲看一天的電影卻不肯每天花半個小時堅持學習一門外語?該怎樣提高自己的學習熱情?
程序員如何深入學習計算機工作的原理 (而不是忙於解決問題)?
Microsoft Word 排版書籍哪本好些?
作為一個壓線的進入重點學校感到自卑怎麼辦?
請教一下學習製作編譯器後端的方法?

TAG:學習 | 編程 | 前端工程師 |