原文是 how-to-learn-stuff-quickly,受益良多,故翻译出来分享给大家。
人們常說互聯網使教育變得民主化:只需要谷歌搜索一下就可以獲得人類知識的總和!然而,獲得信息只是故事的開始,之後你還需要將原始信息轉化為可用的技能。
對於我們中的很多人來說,兩者之間的差距很可能會導致 “教程地獄” —— 陷入一個又一個的教程中,卻從未感覺自己在取得實質性的進步。
了解 “如何有效地學習” 是非常重要的,尤其是作為軟件開發人員;學習新事物幾乎就是你的全部工作!如果你能學會快速掌握新的語言 / 框架 / 工具,你將能夠比一般的開發人員更有效率。這無疑是一種超能力。
在這篇博客中,我將分享我在學習方面的經驗,並向您展示我是如何快速掌握新技能的!
混合#
廣義上講,有兩類學習:
- 指導性學習: 閱讀教程,參加課程,觀看視頻。任何有指導的學習方式。
- 非指導性學習: 從頭開始創建你自己的項目,擴展一個教程,在文檔中查找東西。任何你不遵循指南的行為。
如果你只遵循指導性的資源,你就會陷入教程的地獄,你不會學到一個成功的開發者所需的解決問題的技能。當你試圖建立自己的項目時,你將不知道如何開始,你就會覺得自己花了那麼多時間練習,卻沒有學到任何切實可行的技能。
另一方面,如果你完全專注於無指導的學習,那將會花費很長時間。如果沒有一個有經驗的指導,你將需要重新發明每一個輪子,花幾天或幾周時間來解決已經解決的問題。這是一條漫長而令人沮喪的道路。在最壞的情況下,你可能會完全放棄,因為你會覺得你可能不夠聰明,不適合這個東西。
所以我們需要混合它們,在指導性資源中加入一些非指導性學習的想法。
故意犯錯#
你可能和我一樣,不喜歡犯錯誤,總是希望一切都在第一次就完美進行。
這種心態一般對生活會有幫助,對其他領域也有幫助。如果您是一名汽車修理工,錯誤的零件可能會造成數百美元的損失。如果您是一名牙醫,一個錯誤可能會毀了某人的笑容。
但是,對於軟件開發,錯誤是免費的!如果我們犯了錯誤,我們可以返回到我們的編輯器,更改代碼,然後重試。我們甚至有一些有用的錯誤信息,可以為我們指明正確的方向。這其實是一種奢侈,而且我們還沒有充分利用它。
當我在學習一個教程時,我喜歡 “玩” 代碼。與其逐字逐句地複製 / 粘貼所提供的代碼,不如嘗試一下:如果省略其中的一行,會發生什麼?或者改變其中的一些數值?
我試著像個科學家一樣行事。如果我對這段代碼應該如何工作有一個假設,我就會改變代碼來測試這個假設,看看它是否以我預期的方式中斷。當我發現我的假設有缺陷時,我可能會繞過教程,在谷歌上做一些研究。當然如果挖的 “兔子洞” 太深,我會把它添加到 "以後要探索的東西"。
這個過程可以幫助我們避免一直跟隨 “自動駕駛” 的教程,陷入 “複製 / 粘貼代碼但沒有真正理解它的作用” 或 “不知道為什麼這樣做” 的節奏。
學習應該是一個主動的過程。對代碼的探究會幫助我們建立一個心理模型,了解正在發生的事情。
淡化教程#
幾年前,當我剛開始工作時,我使用了一個過程,我稱之為 "淡化教程"。
它的原理是這樣的:
- 逐字逐句地學習教程,一步步地學習。
- 當你完成後,將代碼重置為初始狀態,並最小化教程的網頁。看一下你在不看教程的情況下能走多遠。當你被卡住時,把教程拉回來,一旦你跨過了障礙,再把它最小化。
- 重複這個過程,直到你能在不看教程的情況下從頭到尾完成它。
就像上面描述的科學家心態一樣,這個過程是有用的,因為它迫使你集中注意力。教程會逐漸消失,而你最終學會了如何在沒有指導的情況下建造這個東西。
這種方法超級有效,但不是每個人都喜歡重複建造同樣的東西。不過,如果你正在努力逃離教程地獄,這可能值得一試!
擴展教程#
假設我們正在學習 React 的官方教程 ,通過構建一個井字棋遊戲來學習 React。
完成這個教程後,您將創建一個功能齊全但非常精簡的遊戲。
我們可以給它添加各種有趣的花里胡哨的東西:
- 跟蹤每個玩家贏得了多少場比賽
- 使用更多展示組件來增強 UI
- 允許配置棋盤大小(4x4、5x5)
- 添加玩家可以對抗的 AI
- 一些奇思妙想(動畫、音效、勝利時的五彩紙屑等)
發揮創意,選擇您真正感興趣的東西!
這個策略很好,因為它使你避免了從頭開始的壓力。因為你已經有了一個功能齊全、易於理解的項目。
注:我也是這樣做的,對井字棋教程的擴展 demo
創建相關項目#
完成井字遊戲項目後,您可能有點不確定下一步該做什麼。
在跳轉到另一個教程之前,嘗試從頭開始構建一個類似的項目可能是個好主意。
例如,也許您可以製作 Bingo 遊戲(譯者注:或者換成中國人熟悉的五子棋遊戲)!您可以在略有不同的上下文中利用你的一些新技能(狀態管理、事件監聽)。您可能會遇到教程中沒有涉及所以無法解決的事情,這時你可以在谷歌上做一些搜索來嘗試找到解決方案(譯者注:現在還有 ChatGPT )!
如果實在解決不了,可以暫時搁置這個項目。多做幾個教程,然後再回來看看,是否學到了足夠多的內容來解決它。
我見過這種被描述為 “one on, one off” 的策略。按照指導資源(如教程)進行操作,然後花費相同的時間創建一個類似(但沒有指導)的項目。如果教程向您展示了如何創建一個 Instagram 的克隆,就嘗試自己創建一個 Twitter 的克隆!
尋找平衡#
當我剛開始學習時,我傾向於主要專注於引導學習。當我還在努力學習語法和基本知識時,很難以無指導的方式創建任何東西!
然而,隨著我越來越熟悉語法,平衡就發生了變化。我把越來越多的時間花在無指導的學習上,以及創建對我來說有趣的東西。當我遇到新的和不熟悉的問題時,我會尋求教程,但隨著我獲得更多的經驗,這種情況變得越來越不常見。
我的圖表如下所示:
你的圖表可能看起來有點不同,這取決於你是否能找到正確的平衡點。重要的是,我們不要只關注有指導或無指導的學習。
培養心態#
許多年前,我和一些朋友去打保齡球。
我做得很差,大部分球都掉進了排水溝。到比賽結束時,我的得分是目前小組中最低的。
有兩種不同的方式來解釋這種情況:
- 我不擅長打保齡球,而且我永遠不擅長,保齡球不是我的菜。
- 我不擅長打保齡球,但是如果我願意的話,我可以成為一名出色的投球手。
這有一個自我實現的預言:無論你選擇哪種解釋都是正確的。如果您認為自己的保齡球技術水平是固定的,那就是固定的。如果您相信自己可以進步,那麼您一定會進步!
如果您想快速學習新技能,培養正確的心態至關重要。
在軟件開發方面,事情永遠不會一帆風順。不可避免地,我們會遇到各種情況,代碼不會按照我們的預期進行。
這要麼導致惡性循環 —— 充滿挫折感、自我懷疑和冒名頂替綜合症 —— 要麼被視為絕佳的學習機會。如果有正確的心態,沒有什麼比難以理解的錯誤信息更能幫助您快速學習。
老實說,與毫不費力的成功相比,我們從奮鬥和失敗中學到的東西要多得多。有了成長心態,奮鬥可能並不完全有趣,但感覺很有成效,就像一次很好的鍛煉。
目標和動機#
我們生活在一個社交媒體炒作的世界裡,很容易感到壓力,比如要跟上潮流,學習 Twitter 上出現的每一個流行的 JS 庫。
就個人而言,每次我嘗試這樣做時,都沒有成功 😅
我沒有特別的動力去為了學習而學習。為了讓我保持動力,我需要心中有一個令人興奮和具體的目標。
例如:幾年前,我發現了一款 VR 視頻遊戲 Beat Saber。在這個遊戲中,你用光劍攻擊方塊,並伴有音樂。每首歌都有獨特的編舞。
雖然社區中存在讓用戶創建自己的編舞(在社區中稱為 “地圖”)的軟件,但我不喜歡,我想為 Beat Saber 創建自己的地圖編輯器。
經過幾個月的艱苦和偶爾令人沮喪的工作,我實現了我的目標。如果你對這個項目感興趣,你可以 查看 Github 上的代碼。
在這個項目之前,我沒有 3D 經驗,我不得不學習大量關於 WebGL、Three.js 和 react-three-fiber 的知識。學習是艱苦的,無論你的心態有多好,總會有事情進展不順利的時候。
但是因為我有一個具體的目標,我真正想要的東西,所以我能夠克服挫折並繼續取得進步。如果我只是為了好玩而學習這些東西,或者因為我認為它在我的簡歷上看起來不錯,我可能很快就會放棄它。
不同的人有不同的動機,所以我並不是說你需要創建一個小眾項目。但我確實認為,心中有一個目標很重要,一個你真正為之興奮的目標。否則,在最初的新鮮感消失後,你很難維持所需的動力。
記性#
我的記性很差。這可能有點問題;如果你不記得東西,就很難學習東西!幸運的是,我有一個記憶系統:間隔重複。
間隔重複的核心思想就是:為了加強記憶,您需要在它即將消失時立即查看它。每次你加強記憶,它只會持續更長的時間。
這聽起來很複雜,但有一些工具可以為您跟蹤這一點。就個人而言,我使用一個 leitner 盒子,一個可以容納幾百張索引卡的實體盒子。每天,我都會複習一小撮卡片。
具體可以查看 如何永遠記住任何事情 的解釋。
養成日常習慣#
假設我們承諾每週花 7 個小時學習新事物。您認為每天花一個小時進行該活動更有效,還是每個星期日花 7 小時?
有趣的是,我更頻繁地花費少量時間取得了更大的成功。
我知道不是每個人都有這樣的奢侈的時間,但如果你能做到,我強烈建議你每天花一些時間在你想學的東西上。
我有一些關於為什麼它對我更有效的假設:
- 每天晚上,大腦都會處理並提交您當天所學的知識。我想每天都利用它,而不是每週一次!
- 因為我每天都練習,所以我可以從中斷的地方繼續學習。我不必花費大量時間來刷新我的記憶並重新開始。
- 正如我們所討論的,在新鮮感消失後很難保持動力。如果你能把它融入到你的日常生活中,你就不必太擔心動力了。無論您感覺如何,它都會成為您要做的事情。
公开学习#
我是 Swyx 的 Learn in Public 哲學的忠實粉絲。
它的主要思想是,通過發布我們所學的知識,我們可以幫助未來的自己。當我們發現新事物時,我們應該創建一個文件來記錄它,例如博客文章、推文或 YouTube 視頻。
這可能有點違反直覺;為什麼要花我的 “學習時間” 寫博客文章?這不是浪費時間嗎?
公開學習有很多好處,但以下是我發現的:
- 您是否曾經嘗試向某人解釋某事,卻發現您並沒有像您認為的那樣完全理解它?寫一篇博文也有同樣的效果。這是發現心智模型中的缺陷 / 漏洞的最佳方式,因此您可以修復它們。
- 世界上最糟糕的感覺是遇到一個你知道你以前解決過的錯誤,但你不記得你是如何解決它的。如果你寫過一篇關於它的博客文章,你可以參考它!
- 通過分享您學到的知識,您將成為開發社區的積極參與者。你可以結交朋友和建立聯繫。這可以是有趣和充實的,更不用說在找新工作或創辦新企業時的好處了!
一個警告:不要陷入花費數周時間從頭開始建立一個完美博客的陷阱!首先可以在像 Dev 這樣的平台上發布,甚至只是在 Twitter 上發布!在建立博客之前,我在 Medium 上發表了數十篇博文。如果您發現自己真的很喜歡公開學習,隨時可以遷移到一個精美的自定義博客。 😄
技能網#
最近,我開始自學如何使用 Blender 創建 3D 插圖。
我還是個初學者,在這項技能上投入了大約 150 個小時,但我已經能夠創造出一些看起來不錯的藝術品。
我能夠如此快速地學習,是通過遵循這篇博文中列出的所有技術。但我還有另外一張王牌:技能互補。
3D 插圖不是一項單一的技能;它是數十種個人技能的集合。其中一些,比如創建 3D 模型,對我來說是全新的,我必須從頭開始學習。但其中一些是我經歷過的。
例如:我是一個攝影愛好者。多年前,我學習了構圖,如何在視口內安排元素以獲得引人注目的鏡頭。在渲染中定位對象時,我可以利用這些技能。
這是一個特別具體的例子,但其他的例子就比較模糊了。作為一名前端開發員,我花了很多年的時間來培養對細節的觀察力。所有這些像素化的工作都幫助我想出了合適的斜面和厚度的數值。而我的 UI 設計工作也幫助我理解了色彩理論和美學。
你不一定會認為我擁有的技能可以與 3D 插圖協作,但它確實給了我很大的優勢。
在我看來,技能就像財富。我掌握的技能越多,它們積累的速度就越快。在一個領域收集的想法和技術可以在另一個領域提供幫助。
我並不是說你應該成為一個全才 —— 擁有一些深厚的專業知識仍然是值得的!但是你的技能網發展得越大,你在學習新事物時的優勢就越大。