mancuoj

mancuoj

Better late than never.
github
twitter

如何快速學習一門技術

原文是 how-to-learn-stuff-quickly,受益良多,故翻译出来分享给大家。

人們常說互聯網使教育變得民主化:只需要谷歌搜索一下就可以獲得人類知識的總和!然而,獲得信息只是故事的開始,之後你還需要將原始信息轉化為可用的技能。

對於我們中的很多人來說,兩者之間的差距很可能會導致 “教程地獄” —— 陷入一個又一個的教程中,卻從未感覺自己在取得實質性的進步。

了解 “如何有效地學習” 是非常重要的,尤其是作為軟件開發人員;學習新事物幾乎就是你的全部工作!如果你能學會快速掌握新的語言 / 框架 / 工具,你將能夠比一般的開發人員更有效率。這無疑是一種超能力。

在這篇博客中,我將分享我在學習方面的經驗,並向您展示我是如何快速掌握新技能的!

混合#

廣義上講,有兩類學習:

  1. 指導性學習: 閱讀教程,參加課程,觀看視頻。任何有指導的學習方式。
  2. 非指導性學習: 從頭開始創建你自己的項目,擴展一個教程,在文檔中查找東西。任何你不遵循指南的行為。

如果你只遵循指導性的資源,你就會陷入教程的地獄,你不會學到一個成功的開發者所需的解決問題的技能。當你試圖建立自己的項目時,你將不知道如何開始,你就會覺得自己花了那麼多時間練習,卻沒有學到任何切實可行的技能。

另一方面,如果你完全專注於無指導的學習,那將會花費很長時間。如果沒有一個有經驗的指導,你將需要重新發明每一個輪子,花幾天或幾周時間來解決已經解決的問題。這是一條漫長而令人沮喪的道路。在最壞的情況下,你可能會完全放棄,因為你會覺得你可能不夠聰明,不適合這個東西。

所以我們需要混合它們,在指導性資源中加入一些非指導性學習的想法。

故意犯錯#

你可能和我一樣,不喜歡犯錯誤,總是希望一切都在第一次就完美進行。

這種心態一般對生活會有幫助,對其他領域也有幫助。如果您是一名汽車修理工,錯誤的零件可能會造成數百美元的損失。如果您是一名牙醫,一個錯誤可能會毀了某人的笑容。

但是,對於軟件開發,錯誤是免費的!如果我們犯了錯誤,我們可以返回到我們的編輯器,更改代碼,然後重試。我們甚至有一些有用的錯誤信息,可以為我們指明正確的方向。這其實是一種奢侈,而且我們還沒有充分利用它。

當我在學習一個教程時,我喜歡 “玩” 代碼。與其逐字逐句地複製 / 粘貼所提供的代碼,不如嘗試一下:如果省略其中的一行,會發生什麼?或者改變其中的一些數值?

我試著像個科學家一樣行事。如果我對這段代碼應該如何工作有一個假設,我就會改變代碼來測試這個假設,看看它是否以我預期的方式中斷。當我發現我的假設有缺陷時,我可能會繞過教程,在谷歌上做一些研究。當然如果挖的 “兔子洞” 太深,我會把它添加到 "以後要探索的東西"。

這個過程可以幫助我們避免一直跟隨 “自動駕駛” 的教程,陷入 “複製 / 粘貼代碼但沒有真正理解它的作用” 或 “不知道為什麼這樣做” 的節奏。

學習應該是一個主動的過程。對代碼的探究會幫助我們建立一個心理模型,了解正在發生的事情。

淡化教程#

幾年前,當我剛開始工作時,我使用了一個過程,我稱之為 "淡化教程"。

它的原理是這樣的:

  1. 逐字逐句地學習教程,一步步地學習。
  2. 當你完成後,將代碼重置為初始狀態,並最小化教程的網頁。看一下你在不看教程的情況下能走多遠。當你被卡住時,把教程拉回來,一旦你跨過了障礙,再把它最小化。
  3. 重複這個過程,直到你能在不看教程的情況下從頭到尾完成它。

就像上面描述的科學家心態一樣,這個過程是有用的,因為它迫使你集中注意力。教程會逐漸消失,而你最終學會了如何在沒有指導的情況下建造這個東西。

這種方法超級有效,但不是每個人都喜歡重複建造同樣的東西。不過,如果你正在努力逃離教程地獄,這可能值得一試!

擴展教程#

假設我們正在學習 React 的官方教程 ,通過構建一個井字棋遊戲來學習 React。

完成這個教程後,您將創建一個功能齊全但非常精簡的遊戲。

我們可以給它添加各種有趣的花里胡哨的東西:

  • 跟蹤每個玩家贏得了多少場比賽
  • 使用更多展示組件來增強 UI
  • 允許配置棋盤大小(4x4、5x5)
  • 添加玩家可以對抗的 AI
  • 一些奇思妙想(動畫、音效、勝利時的五彩紙屑等)

發揮創意,選擇您真正感興趣的東西!

這個策略很好,因為它使你避免了從頭開始的壓力。因為你已經有了一個功能齊全、易於理解的項目。

注:我也是這樣做的,對井字棋教程的擴展 demo

創建相關項目#

完成井字遊戲項目後,您可能有點不確定下一步該做什麼。

在跳轉到另一個教程之前,嘗試從頭開始構建一個類似的項目可能是個好主意。

例如,也許您可​​以製作 Bingo 遊戲(譯者注:或者換成中國人熟悉的五子棋遊戲)!您可以在略有不同的上下文中利用你的一些新技能(狀態管理、事件監聽)。您可能會遇到教程中沒有涉及所以無法解決的事情,這時你可以在谷歌上做一些搜索來嘗試找到解決方案(譯者注:現在還有 ChatGPT )!

如果實在解決不了,可以暫時搁置這個項目。多做幾個教程,然後再回來看看,是否學到了足夠多的內容來解決它。

我見過這種被描述為 “one on, one off” 的策略。按照指導資源(如教程)進行操作,然後花費相同的時間創建一個類似(但沒有指導)的項目。如果教程向您展示了如何創建一個 Instagram 的克隆,就嘗試自己創建一個 Twitter 的克隆!

尋找平衡#

當我剛開始學習時,我傾向於主要專注於引導學習。當我還在努力學習語法和基本知識時,很難以無指導的方式創建任何東西!

然而,隨著我越來越熟悉語法,平衡就發生了變化。我把越來越多的時間花在無指導的學習上,以及創建對我來說有趣的東西。當我遇到新的和不熟悉的問題時,我會尋求教程,但隨著我獲得更多的經驗,這種情況變得越來越不常見。

我的圖表如下所示:

image

你的圖表可能看起來有點不同,這取決於你是否能找到正確的平衡點。重要的是,我們不要只關注有指導或無指導的學習。

培養心態#

許多年前,我和一些朋友去打保齡球。

我做得很差,大部分球都掉進了排水溝。到比賽結束時,我的得分是目前小組中最低的。

有兩種不同的方式來解釋這種情況:

  1. 我不擅長打保齡球,而且我永遠不擅長,保齡球不是我的菜。
  2. 我不擅長打保齡球,但是如果我願意的話,我可以成為一名出色的投球手。

這有一個自我實現的預言:無論你選擇哪種解釋都是正確的。如果您認為自己的保齡球技術水平是固定的,那就是固定的。如果您相信自己可以進步,那麼您一定會進步!

如果您想快速學習新技能,培養正確的心態至關重要。

在軟件開發方面,事情永遠不會一帆風順。不可避免地,我們會遇到各種情況,代碼不會按照我們的預期進行。

這要麼導致惡性循環 —— 充滿挫折感、自我懷疑和冒名頂替綜合症 —— 要麼被視為絕佳的學習機會。如果有正確的心態,沒有什麼比難以理解的錯誤信息更能幫助您快速學習。

老實說,與毫不費力的成功相比,我們從奮鬥和失敗中學到的東西要多得多。有了成長心態,奮鬥可能並不完全有趣,但感覺很有成效,就像一次很好的鍛煉。

目標和動機#

我們生活在一個社交媒體炒作的世界裡,很容易感到壓力,比如要跟上潮流,學習 Twitter 上出現的每一個流行的 JS 庫。

就個人而言,每次我嘗試這樣做時,都沒有成功 😅

我沒有特別的動力去為了學習而學習。為了讓我保持動力,我需要心中有一個令人興奮和具體的目標。

例如:幾年前,我發現了一款​​ VR 視頻遊戲 Beat Saber。在這個遊戲中,你用光劍攻擊方塊,並伴有音樂。每首歌都有獨特的編舞。

雖然社區中存在讓用戶創建自己的編舞(在社區中稱為 “地圖”)的軟件,但我不喜歡,我想為 Beat Saber 創建自己的地圖編輯器。

經過幾個月的艱苦和偶爾令人沮喪的工作,我實現了我的目標。如果你對這個項目感興趣,你可以 查看 Github 上的代碼

在這個項目之前,我沒有 3D 經驗,我不得不學習大量關於 WebGL、Three.js 和 react-three-fiber 的知識。學習是艱苦的,無論你的心態有多好,總會有事情進展不順利的時候。

但是因為我有一個具體的目標,我真正想要的東西,所以我能夠克服挫折並繼續取得進步。如果我只是為了好玩而學習這些東西,或者因為我認為它在我的簡歷上看起來不錯,我可能很快就會放棄它。

不同的人有不同的動機,所以我並不是說你需要創建一個小眾項目。但我確實認為,心中有一個目標很重要,一個你真正為之興奮的目標。否則,在最初的新鮮感消失後,你很難維持所需的動力。

記性#

我的記性很差。這可能有點問題;如果你不記得東西,就很難學習東西!幸運的是,我有一個記憶系統:間隔重複。

間隔重複的核心思想就是:為了加強記憶,您需要在它即將消失時立即查看它。每次你加強記憶,它只會持續更長的時間。

這聽起來很複雜,但有一些工具可以為您跟蹤這一點。就個人而言,我使用一個 leitner 盒子,一個可以容納幾百張索引卡的實體盒子。每天,我都會複習一小撮卡片。

具體可以查看 如何永遠記住任何事情 的解釋。

養成日常習慣#

假設我們承諾每週花 7 個小時學習新事物。您認為每天花一個小時進行該活動更有效,還是每個星期日花 7 小時?

有趣的是,我更頻繁地花費少量時間取得了更大的成功。

我知道不是每個人都有這樣的奢侈的時間,但如果你能做到,我強烈建議你每天花一些時間在你想學的東西上。

我有一些關於為什麼它對我更有效的假設:

  1. 每天晚上,大腦都會處理並提交您當天所學的知識。我想每天都利用它,而不是每週一次!
  2. 因為我每天都練習,所以我可以從中斷的地方繼續學習。我不必花費大量時間來刷新我的記憶並重新開始。
  3. 正如我們所討論的,在新鮮感消失後很難保持動力。如果你能把它融入到你的日常生活中,你就不必太擔心動力了。無論您感覺如何,它都會成為您要做的事情。

公开学习#

我是 Swyx 的 Learn in Public 哲學的忠實粉絲。

它的主要思想是,通過發布我們所學的知識,我們可以幫助未來的自己。當我們發現新事物時,我們應該創建一個文件來記錄它,例如博客文章、推文或 YouTube 視頻。

這可能有點違反直覺;為什麼要花我的 “學習時間” 寫博客文章?這不是浪費時間嗎?

公開學習有很多好處,但以下是我發現的:

  • 您是否曾經嘗試向某人解釋某事,卻發現您並沒有像您認為的那樣完全理解它?寫一篇博文也有同樣的效果。這是發現心智模型中的缺陷 / 漏洞的最佳方式,因此您可以修復它們。
  • 世界上最糟糕的感覺是遇到一個你知道你以前解決過的錯誤,但你不記得你是如何解決它的。如果你寫過一篇關於它的博客文章,你可以參考它!
  • 通過分享您學到的知識,您將成為開發社區的積極參與者。你可以結交朋友和建立聯繫。這可以是有趣和充實的,更不用說在找新工作或創辦新企業時的好處了!

一個警告:不要陷入花費數周時間從頭開始建立一個完美博客的陷阱!首先可以在像 Dev 這樣的平台上發布,甚至只是在 Twitter 上發布!在建立博客之前,我在 Medium 上發表了數十篇博文。如果您發現自己真的很喜歡公開學習,隨時可以遷移到一個精美的自定義博客。 😄

技能網#

最近,我開始自學如何使用 Blender 創建 3D 插圖。

我還是個初學者,在這項技能上投入了大約 150 個小時,但我已經能夠創造出一些看起來不錯的藝術品。

image

我能夠如此快速地學習,是通過遵循這篇博文中列出的所有技術。但我還有另外一張王牌:技能互補。

3D 插圖不是一項單一的技能;它是數十種個人技能的集合。其中一些,比如創建 3D 模型,對我來說是全新的,我必須從頭開始學習。但其中一些是我經歷過的。

例如:我是一個攝影愛好者。多年前,我學習了構圖,如何在視口內安排元素以獲得引人注目的鏡頭。在渲染中定位對象時,我可以利用這些技能。

這是一個特別具體的例子,但其他的例子就比較模糊了。作為一名前端開發員,我花了很多年的時間來培養對細節的觀察力。所有這些像素化的工作都幫助我想出了合適的斜面和厚度的數值。而我的 UI 設計工作也幫助我理解了色彩理論和美學。

你不一定會認為我擁有的技能可以與 3D 插圖協作,但它確實給了我很大的優勢。

在我看來,技能就像財富。我掌握的技能越多,它們積累的速度就越快。在一個領域收集的想法和技術可以在另一個領域提供幫助。

我並不是說你應該成為一個全才 —— 擁有一些深厚的專業知識仍然是值得的!但是你的技能網發展得越大,你在學習新事物時的優勢就越大。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。