<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何高效地學習新技術?

          共 11574字,需瀏覽 24分鐘

           ·

          2021-06-21 03:37

          許多同學好奇,私信問我是如何學習技術的。正好最近在學習 Rust 語言,趁著記憶猶新,便以 Rust 為例,談談我的學習方式。


          對 Rust 不感興趣也沒關系,其中包含的學習動機、學習素材、時間規(guī)劃、訓練項目、心態(tài)建設等理念,也適用于學習其它技術。


          提前聲明:本文分享的只是我個人的學習策略,僅供參考。


          一、充分的學習動機是持續(xù)學習的源動力


          學習技術,特別是學習新的技術,是一個高失敗率的活動。


          不知道多少次,我們停在安裝項目依賴上,停在 Hello World 級別的嘗鮮上。


          很多同學把這些失敗,歸結為自己不夠聰明,或者是不夠堅持,或者沒有一起學習的伙伴等原因。但是,大家忽略了一個很重要的核心因素——學習動機。


          學習動機不是一個縹緲虛無的概念,最常見、最顯著的一個學習動機就是——工作需求。


          工作需求,是一個強烈的、持續(xù)性的、外部驅(qū)動的學習動機。那些跟工作關聯(lián)起來的技術,通常就是我們掌握得最扎實、構成我們核心技術能力的部分。而那些跟工作關聯(lián)程度弱的技術,則是最容易中途放棄的部分。


          學習動機不夠充分而過早放棄,是導致學習失敗的重要誘因。


          除了工作需求以外,個人興趣是學習動機的另一大來源。大部分技術崗位的工作需求,可能沒有那么多,甚至掌握陳舊的技術棧也能應付好多年。等到突然被輸送到社會,才發(fā)現(xiàn)自己的技術競爭力不足。我們需要發(fā)掘出新的學習動機,去支撐我們不斷地擴張技術廣度和深度。


          學習動機,跟感情一樣,也需要培養(yǎng)?;燠E于各個技術社區(qū),聽聽其他人如何宣傳不同的技術,我們可以看到那些技術分別做出的承諾,如內(nèi)存安全、類型安全、跨平臺、高性能、易用性、可維護性等等。漸漸的,某些技術就在我們的心里種下了興趣的種子。


          得到種子以后,我們需要親自澆灌培育這些興趣,讓它們更加充沛。在所有感興趣的技術中,去挖掘它們對我們現(xiàn)有工作的潛在價值。即便只是啟發(fā)價值也好,我們需要讓個人興趣跟工作需求關聯(lián)起來,如此可以得到更加持久的學習動機。


          以我對 Rust 的動機澆灌為例:


          我的本職工作是前端開發(fā),涉及許多前端框架設計和前端基礎設施建設等工作。


          當前的前端架構,只用 JavaScript/TypeScript 和 Node.js 等技術棧,已經(jīng)有點捉襟見肘。比如,用 JavaScript 實現(xiàn)的 Webpack 在應付大型前端項目的編譯和構建,性能達不到要求。Vue 作者尤小右嘗試借助瀏覽器原生的模塊加載管理去優(yōu)化這個問題,即最近熱門的 Vite。其中 Vite 就選擇了 Figma CTO 用 Go 實現(xiàn)的高性能 JavaScript bundler and minifier——esbuild。

          未來前端開發(fā)基礎設施里將包含越來越多系統(tǒng)級編程語言加持的工具。畢竟 V8,Node.js,Deno 就包含大量 C/C++ 和 Rust 語言實現(xiàn)代碼。一切能用 JS 實現(xiàn)的,就算終將用 JS 實現(xiàn),那些性能敏感的部分,也會更晚用 JS 實現(xiàn)。


          也就是說,純 JavaScript/TypeScript/Node.js/Deno 的前端架構師,將來的崗位勝任力和技術競爭力,很可能弱于掌握了一門或多門系統(tǒng)級編程語言及其生態(tài)的同行。因此,有志于前端架構方向的同學,在 C/C++, Go, Rust 等語言中選一門或多門進行持續(xù)學習,對將來或有幫助。(看到這里,不知道有沒有埋下興趣的種子呢?)


          用系統(tǒng)級編程語言可以優(yōu)化前端基礎設施,但是要設計一個好用的前端框架,還需要學習其它知識。特別是函數(shù)式編程(FP)、編程語言理論(PLT)和類型論(Type Theory)等。比如學習 Haskell,理解 Monad,掌握 Algebraic-Effects,熟悉 Codata 等概念。


          基于上述工作背景,Rust 相比 Go 等語言的學習優(yōu)先級得以凸顯。


          1、Rust 語言設計更加現(xiàn)代,它很好地吸收了函數(shù)式編程特性,如模式匹配,代數(shù)數(shù)據(jù)類型,Trait,默認 Immutable 等


          2、Rust 團隊來自 Mozilla,對  WebAssembly 相對來說有更友好的支持和更多的投入,在 現(xiàn)代瀏覽器上通過 Wasm 去運行 Rust 代碼提升性能,對于特定的、復雜的 Web App 很有幫助。在《Rust and WebAssembly》一書中可以看到更多相關內(nèi)容:


          Rust and WebAssembly 

          https://rustwasm.github.io/docs/book/why-rust-and-webassembly.html


          3、Rust 在 Safe 和 Useful 上取得了更好的平衡


          Haskell 的核心開發(fā)之一 Simon Peyton-Jones 在 2017 年的一個分享《Escape from the ivory tower: the Haskell journey》中,描繪了一個有趣的坐標圖:



          安全性和實用性坐標。有的語言(如 Haskell)是從安全性出發(fā),在保證安全的情況下,增加 IO 能力,向?qū)嵱眯钥繑n。而我們使用的大部分主流語言,則是從實用性出發(fā),在保證足夠的實用性的情況下,通過 Type System 等的約束方式,增加安全性。 


          安全但不實用 vs 實用但很危險。最終大家的目標都是,既安全又實用


          而 Rust 既比大多數(shù)主流語言更加安全,又比 Haskell 等偏學術的語言更實用,處于一個非常良好的位置。


          此外,值得一提的是,安全性和實用性并不完全是對立的關系。一門 100 分實用性但不夠安全的語言,普通開發(fā)者可能只能有效發(fā)揮出該語言 60 分的實用部分,只有少數(shù)高手才知道如何發(fā)揮出 100% 的實用價值。隨著安全性的增加,普通開發(fā)者能落地的實用能力比率也將增加。


          簡單地說,Rust 編譯器可以讓我們對代碼的內(nèi)存安全、類型安全更加放心,從而敢于并且可以編寫出功能更復雜的代碼,而不必疲于跟內(nèi)存問題做斗爭,或者浪費大量時間去 debug。

          通過以上分析,我為自己澆灌了學習 Rust 的強烈動機。通過 Rust,我有望獲得更相比在 JavaScript/TypeScript 里更充沛的函數(shù)式特性實踐經(jīng)驗,有機會編寫高性能的前端基礎設施去優(yōu)化開發(fā)效率,有機會編寫高性能的 wasm 模塊優(yōu)化 Web App 性能,有機會借鑒 Rust 語言設計思路去實現(xiàn) runtime 小,無需 GC 的前端 DSL 等的各種可能性。


          如此,學習 Rust 就跟我的工作內(nèi)容產(chǎn)生了微妙的關聯(lián),創(chuàng)造了一個持續(xù)的學習動機來源。如果大家愿意,也可以通過類似的方式,去挖掘出學習一門新技術的強烈動機所在。
           

          二、嚴肅學習是有效學習的核心部分


          培養(yǎng)學習動機的根本目的,是為了讓我們進入嚴肅學習的階段。


          很多同學的學習方式有一個重大問題,就是一直停留在培養(yǎng)學習動機的階段。什么意思?


          就是一直在看技術問答、小文章、技術視頻以及參與一些線下聚會等,卻沒有考慮去官方網(wǎng)站里安裝工具、下載依賴、閱讀文檔、編寫代碼、調(diào)試問題、搜索答案等。


          技術社區(qū)是為了讓我們從他人的技術宣傳中獲得學習的興趣,獲得學習的素材,但它們自身不等于嚴肅學習。


          那么何謂嚴肅學習?


          嚴肅學習是指通過權威的、一手的、經(jīng)典的、系統(tǒng)化的學習材料進行學習的過程。


          以 Rust 為例,入門 Rust 的嚴肅學習過程是,進入 rust-lang.org 官網(wǎng),閱讀首頁里的基本信息,了解 Rust 給出的介紹和承諾,通過 GET STARTED 安裝 Rust 和新建 hello world 項目,運行起來。


          然后進入 LEARN MORE,官方文檔指引我們?nèi)ラ喿x 《The Rust Programming Language》書籍,于是我們乖乖閱讀,做書里的練習題。不用等到看完這本書,我們又發(fā)現(xiàn)了的另一本書《Rust By Example,放到閱讀列表里。讀完第一本,讀第二本,以此類推。


          這是屬于嚴肅學習的過程,我們使用的材料,是官方權威發(fā)布的,是一手的,是系統(tǒng)化的,也是 Rust 當前的入門經(jīng)典。而我們在技術社區(qū)里看到的,許多是其他開發(fā)者基于這些嚴肅材料而產(chǎn)出的技術文章,性質(zhì)上屬于讀后感。讀后感不是一手的,不是權威的,不是體系化的,不是經(jīng)典的,不屬于嚴肅學習的材料。


          讀后感/學習心得相比嚴肅材料,更簡單和輕松一點,可以幫助我們建立對 Rust 等技術的初步印象和學習信心,但難以作為入門 Rust 的充分材料。包括這篇文章本身,也不屬于嚴肅學習的范疇,而是一個激發(fā)學習動機的材料。


          人腦是一個對信息來源很挑剔的器官,技術社區(qū)里混雜了很多八卦信息,它會輕視其中的少量干貨。而讀教科書、經(jīng)典著作和論文等嚴肅內(nèi)容時,大腦對信息的處理模式會切換成嚴肅學習的狀態(tài),更容易記住內(nèi)容,并嘗試去關聯(lián)知識點。


          那些停留在收藏夾里的嚴肅材料鏈接,是開啟我們有效學習大門的鑰匙,而在技術社區(qū)搜羅和收藏它們的過程,則是培養(yǎng)學習動機的階段。


          讀了100篇讀后感,起碼要配合一篇相關的嚴肅材料去升華和沉淀,去聚攏離散的知識點。


          三、高強度間歇性是高效學習的秘訣


          在具備了學習動機、準備好了嚴肅學習材料之后,下一步就是規(guī)劃學習時間了。


          我個人總結了一個學習技巧,分享給大家。


          高強度間歇性訓練方法,原本是用以健身,現(xiàn)在我們借用來描述知識學習的一種時間規(guī)劃策略。


          讓學習更高效,本質(zhì)上是讓大腦非理性部分去重視理性認知的成果。人類的理性認知能力,相比大腦的其它功能,比如視覺加工、記憶、語言等,是更晚演化出來的部分。因此,人類記憶的工作機制很大程度上是相對獨立的,不是我們想記住什么就記住什么,想忘記什么就忘記什么。在我們具備理性思考的能力之前,我們已經(jīng)具備記住信息的能力了。


          因此,我們需要利用人類的記憶偏好、對信息加工的偏好等各種既定特性,去讓大腦記住我們理性上認定是重要的知識點。通過嚴肅材料進行學習,一方面是保證內(nèi)容的正確性和系統(tǒng)性,另一方面也是誘導大腦去做深刻加工。


          嚴肅材料對我們的大腦來說,有兩重意義。一個是客觀層面,學習材料由權威人士編寫,經(jīng)過了層層的檢驗和時間的考驗。一個是主觀層面,學習材料對我很重要,很有意義,關系很大。


          找到嚴肅材料之后,只達成了第一個層面的嚴肅性。第二層面的嚴肅性,需要我們自我建設。世界上的嚴肅材料這么多,如何向我們的大腦證明眼前這一堆確實是嚴肅的、重要的材料呢?


          一個有效途徑是,讓這些材料反復出現(xiàn),即高頻次、高密度、高強度地出現(xiàn)。


          每天規(guī)劃出一段時間,半小時到兩小時左右,比如我規(guī)劃出晚上10點到12點之間學習 Rust 嚴肅材料。讓 Rust 每天都出現(xiàn)在我面前,每天都暴露在我的腦海里,隨著它出現(xiàn)時間和頻次的增加,大腦自動會逐漸認可 Rust 對我的生活的重要性。特別是,學習 Rust 過程中會遇到很多問題及其解決方案。它們會啟動大腦的另一個認知偏好——對負面內(nèi)容更敏感。也就是說,對我的大腦來說,每天都有 Rust 相關的問題在不斷產(chǎn)生和解決,它會分配更多認知資源去處理和消化 Rust 知識,它會激發(fā)我們對 Rust 更有興趣,因為它會想要獲取更多 Rust 信息去加工。主觀體驗就是,我們會感到 Rust 越來越好玩。


          高強度的持續(xù)信息暴露是必要的,三天打魚兩天曬網(wǎng)的學習方式,難以有效的激活大腦對 Rust 或其它技術的嚴肅定位。


          除了高強度部分以外,間歇性的部分也很重要。它是指,我們必須適時停下來,娛樂、休息和睡眠。盡量不要廢寢忘食地啃學習材料,仿佛一天要學完整本書。這是不現(xiàn)實的,一天強行看完整本書,不代表學習了整本書。大腦需要在睡眠階段對當天所學習的內(nèi)容進行加工和整合。不停下來提供消化知識的機會,對身體健康和學習質(zhì)量都沒有幫助。


          用權威學習材料達成客觀上的嚴肅性,用高強度間歇性訓練思路達成主觀上的嚴肅性,兩者結合起來,我們學到了主客觀層面都靠得住的嚴肅知識。


          即便不了解上述嚴肅學習策略,其實很多同學也已有意或無意的通過增加嚴肅性來優(yōu)化學習過程。只不過其中很多策略,可能不太經(jīng)得起推敲。比如報一個培訓班,增加老師和同學的監(jiān)督角色,來提升學習的嚴肅性;比如去自習室、星巴克等地方增加學習氛圍的嚴肅性;比如購買實體書籍,布置一個富有儀式感的環(huán)境去學習等。


          在短時間內(nèi),這些做法固然是提升了學習的嚴肅性和質(zhì)量;但這不是免費的。這些形式上、氛圍上的嚴肅性,可能是成本高昂的。比如,當我們購買了 Rust 實體書回來后,很直觀的看到,它像磚頭一樣厚。



          可能每次學習時,都得鼓起莫大的勇氣,把厚厚的書籍翻出來。每次都要洗漱打扮,出門去自習室占座,或者去星巴克占座,然后才開啟學習之旅。這種啟動學習的成本了,很可能導致我們學不起來,大磚頭書籍最后墊顯示器去了。


          我個人的選擇是,在線學習。我的 Chrome 設置為每次打開都還原上一次關閉時打開的鏈接。Rust 材料的 Tab 標簽頁在我完成學習之前,會一直出現(xiàn)在我的瀏覽器中,只要我有了心思,可以迅速地切換 Tab 進入學習,迅速的啟動 VSCode 編寫和運行代碼。


          學習材料的嚴肅性,包含了真正的知識。而學習環(huán)境和學習氛圍包含的嚴肅性,并不包含知識。假設培訓班老師自身水平也不過硬,所選教材既不系統(tǒng)也不權威,再嚴肅的學習氛圍下我們也可能吸收不到可靠的知識。而不管身處什么環(huán)境,什么氛圍,只要我們能沉浸到嚴肅知識材料中,有效的學習就發(fā)生了。

          在制定學習規(guī)劃時,我們需要明確有效學習的干貨部分是否得到最優(yōu)化:1)我們找的學習材料里包含嚴肅的知識;2)我們成功讓我們大腦認可了這些知識的嚴肅性,使我們能長時間記住它們。即嚴肅性的知識得到主客觀的統(tǒng)一。


          盡可能低成本地啟動嚴肅學習,可能是更好的途徑。


          四、超綱訓練是鞏固知識的可靠方式


          找到嚴肅的學習材料,扎實且認真地學習了這些材料之后,下一個階段是——超綱訓練。


          看過一遍書,不代表充分理解了書里的知識。我們要去證明自己確實在一定程度上領會了知識。


          如何證明?


          做那些沒有參考答案的訓練,即超綱訓練。


          以我學習 Rust 為例,《The Rust Programming Language》帶領我們實現(xiàn)了一個簡單的 grep cli 程序,一個簡單的多線程 web server。但是,我們的代碼實現(xiàn),跟書里的答案太像了。即便我們能默寫答案,也無法勸服我們的大腦,這些代碼是我們的自主產(chǎn)出。


          因此,在看完The Rust Programming Language和《Rust By Example》,我給自己安排了新的訓練項目——光線追蹤。

          Ray Tracing in One Weekend

          https://raytracing.github.io/books/RayTracingInOneWeekend.html

          《Ray Tracing in One Weekend》是一本循序漸進的小書,里面的代碼實現(xiàn)用的是 C++,我們可以用 Rust 做一個重新的實現(xiàn)。如此構成一個超綱訓練,我們的代碼有參考,但不是 Rust 代碼,而是 C++ 代碼。我們需要完成三個層次的理解:1)理解光線追蹤算法;2)理解 C++實現(xiàn)方式;3)使用 Rust 實現(xiàn)。


          光線追蹤是一個學習新語言特別好的訓練項目,它能囊括多種語言特性,又有性能要求,而且主要是數(shù)學計算,最后輸出的是數(shù)字構成的列表/數(shù)組,幾乎不需要使用其它 API,可以在多種環(huán)境里使用。  


          用 Rust 實現(xiàn)光線追蹤時用到的功能大致如下: 


          0)基礎特性:變量,循環(huán),基本控制流,模式匹配,數(shù)據(jù)結構,數(shù)值計算,模塊,文件系統(tǒng)接口等

          1)操作符重載:Vec3 向量數(shù)據(jù)結構的 +-*/ 等運算需要重載。

          2)Trait objects:多種類型的幾何體,多種類型的材質(zhì),需要能夠放到一個列表或者一個字段里做統(tǒng)一處理。

          3)遞歸函數(shù):光線追蹤算法是一個在遞歸函數(shù)里不斷產(chǎn)生新的光線路徑的算法

          4)包/crate 的使用:rand 和 threadpool

          5)性能優(yōu)化:使用多線程優(yōu)化光線追蹤算法性能

          6)單元測試

          7)cli 參數(shù)讀取

          8)代碼組織結構設計

          9)……

          基本上覆蓋到了 Rust 核心語言特性的一大部分。



          如上圖所示,我們跟著《Ray Tracing in One Weekend》,用 Rust 實現(xiàn)了十幾個從簡單到相對復雜的圖形渲染,完成了 1000 行以上的有效代碼量(已剔除demo之間重復部分)。


          如此,我們完成了一個超綱訓練,這個過程肯定會遇到很多困惑和問題,我們會反復翻看《The Rust Programming Language》和《Rust By Example》里的相關部分,查看 Rust 標準庫文檔,查看 crate 文檔,Google 搜索其它問題等等。正是這些問題以及我們追索答案的過程,鞏固了我們看書時有意無意疏漏的部分。


          超綱訓練是可以不斷升級的,升級越多的層次,完成度和質(zhì)量越高,訓練效果則越好。當然訓練難度也會不斷增加,到某個程度后,我們自然會停下來。比如前面用多線程優(yōu)化光線追蹤的部分,就算一次升級,它是在《Ray Tracing in One Weekend》沒有包含的部分。


          另一個升級是,我們可以將 Rust 通過 Wasm 運行到瀏覽器上,然后對比 JavaScript 實現(xiàn)的光線追蹤算法,看看兩者的性能差異。這正符合我對 Rust 的學習動機之一:用 Rust + Wasm 優(yōu)化瀏覽器里特定任務的性能表現(xiàn)。


          因此,我開始閱讀 Rust 官網(wǎng)里指引的另一本書《Rust and WebAssembly》,學習如何在瀏覽器里運行 Rust 代碼,然后將我們的 Rust 光線追蹤調(diào)整成 library crate。



          如上圖,Rust + Wasm 實現(xiàn)的 Ray Tracing 渲染到瀏覽器的 Canvas 上。第一張圖片是渲染結果,第二張圖片是呈現(xiàn)各個像素點的渲染次數(shù)(次數(shù)越多越白)。


          值得一提的是,頂部導航欄還有 JavaScript 和 Rust: Small Image 的模塊。其中 JavaScript 版本是我一年多前學習光線追蹤算法時,所做的超綱訓練項目。為此我還寫了 3 篇文章,描述如何優(yōu)化光線追蹤的渲染表現(xiàn):《React 優(yōu)化技巧在 Web 版光線追蹤里的應用:、》,恰好可以拿來跟 Rust 對比性能表現(xiàn)。


          Rust: Small Image 模塊則是另一個超綱升級。之前的渲染都是靜態(tài)的一張圖片,因為目前的實現(xiàn)無法支撐實時光線追蹤的性能要求。但是,既然我們都在瀏覽器上了,綁定一些用戶交互,切換觀察視角之類的,總是更有趣的吧?而且,Rust + Wasm 比純 JavaScript 實現(xiàn)確實性能好很多。我們將圖片的分辨率調(diào)低,將物體的數(shù)量減少,然后實現(xiàn)了一個簡陋的、可交互的實施光線追蹤效果。


          如上所示,盡管體驗上不是特別好,但能夠調(diào)整視角,還是不錯的感覺。感興趣的同學,可以訪問下方 Demo 地址,在 PC 上體驗一下噢。

          Rust Ray Tracing Demo

          https://lucifier129.github.io/rust-ray-tracing-demo/ray-tracing-web/build/index.html

          目前我所做的超綱訓練,就到上面為止了。其實還可以做更多升級,《Ray Tracing in One Weekend》的作者寫的相關系列,一共有 3 本,還有另外兩本的練習沒有去做呢。即便都做完了,還是可以繼續(xù)升級,將練習項目變成更加嚴肅的開源項目,成為一個 Rust 生態(tài)里的光線追蹤 crate。都是可以的,但這不是我當前的目標,因此我還沒有往這個方向努力的??偠灾?,光線追蹤作為我學習 Rust 的超綱訓練,已經(jīng)完成了它的使命。


          超綱訓練之所以重要,是因為一旦我們將學習到的技術,投入生產(chǎn)。我們所面對的各種問題,幾乎都是超綱的,再沒有書里的參考答案讓我們照抄了。因此,在跟著官方書籍和教程學習完畢之后,立刻啟動一個超綱項目加以鞏固,可以有效提升學習的質(zhì)量。


          五、成果積累是獲得技術自信的必要條件


          一場學習之旅的最后一步,也是最容易被忽視的一步,就是將這次學習之旅匯聚成一個標志性的成果。


          成果,可大可小。小到練習成果,大到科研成就。它是一個里程碑,昭示著某段時間的努力的價值。


          它可以是一個具體的產(chǎn)物,也可以是一篇總結文章。當我們完成超綱訓練時,其實已經(jīng)自然而然得到了一個學習成果,當我們寫成一篇文章時,又產(chǎn)生了另一個成果。盡管在將來的我們看來,這些成果實在微不足道,但是我們現(xiàn)在仍然需要一個成果。


          我們的大腦需要一個成果性質(zhì)的刺激。


          是什么,區(qū)分了一次成功的學習和中途放棄的失敗學習?是成果。


          如前面所言,Rust 光線追蹤還可以無限升級,根本學不到頭。不管我做成怎樣,本質(zhì)上都是中途放棄了去無限升級難度。因此,我們要創(chuàng)造一個階段性成果,去明確定義這次學習之旅是成功的,是達到預期的。上面那個托管在 Github 的 Demo 項目,以及這篇文章,都屬于我這次學習 Rust 的階段性成果。


          隨著我們學習的技術越來越多,我們累計的階段性成果和文章也越來越多。我可以在 Rust 學習成果中,援引上次學習光線追蹤的 JavaScript 版本的代碼;可以在這篇文章中,援引上次我寫的 3 篇文章。這些在時間長河中層疊和交織在一起的階段性成果,可以告訴我們的大腦,它們真的很有用,很有價值,它們值得被銘記。


          不斷積累的成果,有大有小,有的可能已經(jīng)被繼續(xù)升級,甚至得到其他人的廣泛認可,它們構成了你的成就。隨著我們擁有的成果和成就的增加,我們的技術自信心也會增加,更容易啟動去學習新的技術,去創(chuàng)造新的階段性成果。


          我們需要去保留成果,讓它們留下痕跡,可舉證。一旦我們知道,再也沒有什么東西,可以證明我曾經(jīng)學過和達成過某些目標和成果,我們的大腦可能不再認為它們對我們的生活是息息相關的。而如果我們一直記得,可以從哪里拿出某個材料,作為證據(jù),昭示我們曾經(jīng)的努力及其價值,我們的大腦會更樂意長時間的記住跟這個功勛章有關的知識。


          對于技術學習而言,放在 Github 里的倉庫,是一個很好的成果儲存媒介。


          六、心態(tài)建設是快樂學習的關鍵


          學習技術,是一個長期的,甚至可能是終身學習的活動。在這個過程中,我們會碰到很多迷思,它們可能降低了我們學習的樂趣,可能打擊了我們學習的自信心。如何抗住這些負面思緒,正確的看待學習中遇到的各種困惑,是我們需要長期努力的方向。


          在此討論幾個迷思,希望可以帶來一些啟發(fā)。


          6.1、失敗是學習的常態(tài),成功才是罕見的


          開啟一次學習之旅,最后卻不得不宣告失敗。這是很正常的現(xiàn)象,所有人都會經(jīng)常碰到。


          難道我現(xiàn)在收集量子力學的教科書,進行嚴肅學習,我就能學成嗎?概率太低了。


          很多學習是有前置知識要求的,在滿足這些要求之前,越級去攻克某些知識,事倍功半,失敗是很顯然的。但是,很多時候,我們實在是不知道我們要學習的內(nèi)容,究竟有什么前置要求,我究竟是否具備這些條件。我們只能親自學上一學,用實際行動去檢驗我現(xiàn)在究竟有沒有學會這些技術的資質(zhì)。


          也就是說,開啟學習之旅,本身就是一場未知的冒險。學習失敗,不完全是負面信號,不是指我們徹底完蛋了,它反而提供了很多正面線索:1)這些材料不適合我的情況;2)我需要尋找其它材料;3)我需要過一段時間,有了其它積累,再試試。


          及時停止低質(zhì)量的,甚至無效的學習,是在止損,是在保留精力,投資在更有回報的學習中去。不必氣餒,來日方長。下一回,我們卷土重來時,勝算更高。


          我們?nèi)シe累成功,但不必去細數(shù)失敗,徒增傷心,打擊士氣。


          6.2、不必盲目攀比學習效率


          在學習時,我們有時會忍不住跟其他人攀比學習效率,恨不得定下 1 天學會 XXX 技術的豪言。一旦在學習過程中卡住,特別是卡在基礎概念上時,我們會感到焦急,認為我們學得不夠順暢,拖慢了學習的效率。


          然而,仔細一想,我們會發(fā)現(xiàn)這些小心思是站不住腳的。首先,我們在學習,也就是在面對我們未知的事物,我們憑什么知道花多少天自己就能掌握呢?即便我們準確的說對了學習時間,那也是無根據(jù)的猜測,實屬巧合。在沒有外部時間壓力的情況下,我們?yōu)槭裁匆拗埔粋€學習時間?如果我們的目的是學會這門技術,那么保持自己喜歡的學習節(jié)奏,默默前行,直到學完即可。時間長短,因人而異,不必攀比。


          其次,遇到問題被卡住,也沒什么值得煩惱的。所謂順暢的學習,如果是指不被問題卡住的話,說明也沒學習到什么,都是一些本質(zhì)上已經(jīng)知道和解決的問題??ㄗ。f明我們碰到了學習要點,在某種程度上是值得高興的事情。


          如果我們在卡住時,為了追求閱讀進度這種百分比,而選擇跳過問題,直奔后面的內(nèi)容,可能帶來我們無法想象的代價。在我們啃完大部頭后,我們會認為自己已經(jīng)掌握了基礎知識,已經(jīng)過了從頭學習基礎知識的階段,到了實戰(zhàn)或者進階的時刻。


          然而,其實我們基礎知識并不扎實,我們跳過了自己當時不太理解的基礎概念,它會反復困擾我們,成為我們進階的瓶頸。我們以為自己是因為不夠聰明,因此水平才一直沒有質(zhì)的提升,我們可能永遠不知道,根源在當時我們跳過的基礎知識上,我們不知道我們錯過的是什么。


          因此,在嚴肅學習時,除非是投入了足夠的努力,證明繼續(xù)糾結下去也是無益,否則輕易不跳過任何內(nèi)容。


          在學習 Rust 之前,我已經(jīng)具備 JavaScript/TypeScript, Node.js/Npm/Webpack,Haskell 等語言、運行時和工具的學習和使用經(jīng)驗。Rust 很多語法、特性、概念對我而言,已經(jīng)不算新穎,我仿佛可以跳過很多內(nèi)容,通過 Examples 和 Cheat Sheet 等方式,邊查邊寫,也能寫出代碼。


          但是我沒有。


          我選擇忍住沖動,默默一點點看,扎實的閱讀,去培養(yǎng)自己 Thinking in Rust 的心智模型。一旦我們選擇用 Haskell 的概念去理解 Rust 的特性,那么 Rust 就難以被我們的大腦認為是一等的事物,它可能被認為是衍生的、次要的,我們只要記住 Haskell 就好了。寫出 Haskell 味道的 Rust 代碼,讓其他人難以適應,讓自己也難以適應 Rust 里代碼習俗。


          嚴肅學習需要減少偷懶成分,去扎實的、誠懇的、謙卑的閱讀系統(tǒng)化的材料吧,最后它們會給我們帶來不可估量的價值。


          不要去思考我是不是足夠有學習效率,是否比別人學習效率高,轉(zhuǎn)而思考,我是否在忠實地學習?


          學習效率是一個客觀統(tǒng)計,是我們扎實的學習完畢之后計算出來的,當我們走捷徑,不求甚解的快速瀏覽內(nèi)容,加快進度時,我們的學習效率并沒有提升,只是它無法被正確統(tǒng)計了。只有當我們的學習處處是誠懇的、扎實的,我們閱讀速度才反映了學習效率。否則閱讀速度只是閱讀速度而已,不代表我的學習速度,不代表我充分理解了內(nèi)容。


          我們不知道在學習初期的加速行為,是否導致了后續(xù)學習效率的變慢。我們不能盲目的加快入門速度,因為對于我們還不了解的技術,我們實在難以評估后果。有時看似愚笨的默默學習,或許反倒讓我們后續(xù)的學習之路更加通暢。


          嚴肅而誠懇地學習,即便不是最佳學習策略,也是一個明顯不壞的選擇。


          6.3、不必成為焦慮的學習機器


          學習可以是快樂的事情,我們不必追求每天都要有學習進展,不用覺得一天不學習,就落后于人。


          人的成長曲線,可能是間歇性的突飛猛進,加上長時間的停滯甚至退步,構成的漲落。一年能完成一兩次高質(zhì)量的嚴肅學習,已經(jīng)非??捎^了。


          去安然地享受看似不思進取的娛樂時光吧,然后認真對待每一次嚴肅學習的機遇。


          七、總結與回顧


          人類是故事動物,而學習,是我們對自己的大腦講述的英雄冒險故事。

          在技術社區(qū)里搜索有趣的內(nèi)容,培養(yǎng)學習動機,是在為我們的大腦尋找寶藏的線索。


          在技術社區(qū)里挖掘到的嚴肅學習材料,是獻給我們的大腦的藏寶圖。


          開啟嚴肅學習之旅,是我們的大腦正式邁上尋寶的腳步。


          誠懇而忠實的學習,是讓我們的大腦不錯過任何知識寶藏。


          而確立學習成果,則是讓我們的大腦相信,我們終于獲得了這次探險的目標——知識寶藏。


          以上,就是這篇文章的全部內(nèi)容,希望這篇文章可以帶給大家學習新技術的啟發(fā)。


          瀏覽 87
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲三级天天影院 | 黄色小电影在线观看 | 中文字幕视频在线 | 日韩欧美国产A片 | 日本乱婬妺妺躁爽A片 |