作為一個 終身學習 的實踐者,我經常有學習一些新技術的需求。如何學習這些新技術不同人有不同的做法,早前我也寫過一篇 如何快速學習一項新技能? 的文章分享我學習的理論框架,但這篇文章我會以我學習 WebRTC 這個技術為例分享我在學習新技術時用的一些方法。
如何學習某個知識,在我看來,主要矛盾在于解決這三個問題。
要學否
在學習一門新技術前需要解決的第一個問題是要不要投資時間去學這門技術。就像買書最大的成本并不是買書的價格,而是看書的時間。花費大量的時間去看一本沒有價值的書,無異于浪費生命。正是方向搞錯了,越努力越尷尬。
怎么確定一門技術的價值,可以從以下兩個方面來考慮:
從知識體系出發(fā):某門技術經常不是孤立存在的,而是一個積木般搭建的大廈的一部分。要學習頂部的技術,就需要掌握一定的底部技術。如果一個技術很基礎很底層,被很多高層的技術所依賴,那學習這門技術就很有價值。
從應用前景出發(fā):如果一門技術很有市場“錢景”,或者有潛在的市場需求,那學習這門技術就很有價值。畢竟我們學習目的很大的一部分在于賺錢解決自己的生活問題。
不過這里的難點在于從我們已知的信息來分析,很難判斷某門技術的市場前景。如果分析判斷錯誤,很可能會導致我們學習這門技術的時間被浪費。那最佳的選擇的就是盡可能讓自己所學的技術都滿足這兩點,哪怕最后沒有市場前景,但如能成為我們知識體系的基礎,也值得投入時間去學習。
基于這兩方面的考慮,我開始學習了分布式系統(tǒng)的一些底層知識:

之后通過搜索間接找到了基于 WebRTC 技術的語音聊天網站 speakrandom,在分析這個網站技術棧的時候找到了 pion/webrtc 這個框架,最終決定從這個框架入手開始學習 WebRTC。
怎么學
在制定了學習目標之后,剩下的問題是怎么怎么學?學習方法千萬條,重要的是找到適合自己的學習方法。
我的方法是善用搜索,找到對的資料和對的人。學習本身不應是一件復雜的事情,因為它不是做研究,不是探索未知的東西,只是站在巨人的肩膀上把已經被解決的問題學習一遍。
但這里的難點在于資料千萬份,一不小心就找到錯誤的資料,讓本來簡單的學習變得復雜,這就像天龍八部鳩摩智學了段譽給的錯誤的六脈神劍劍訣,很容易學的走火入魔。
主動搜索
主動獲取資料 方式的要點在于從錯誤少的信息庫篩選、交叉對比選擇要看的資料。由于很多技術資料都是用英文寫的,用 Google 英文搜索更容易獲取高質量的資料。另外使用 Google 圖片關鍵詞搜索可以快速獲得架構方面的資料,方便從高層次理解這個技術。
一般我會從 Google、YouTube 和 GitHub 上搜索某個技術相關的資料、視頻教程和開源庫。以搜索切入,找到合適的開源項目或者技術標準,然后制定學習計劃。很容易通過 webrtc
關鍵詞在這些平臺上搜索得到這些資料和教程:
GitHub
- https://github.com/pion/webrtc
YouTube
- WebRTC Crash Course
- Build the backend services needed for a WebRTC app: STUN, TURN, and signaling - HTML5 Rocks
從 pion/webrtc 這個庫上了解到作者是 @Sean DuBois,GitHub 關注一波然后去 YouTube 搜索下他的演講,又收獲了一波高質量的教程:

技術標準
另外一個高質量的資料是協(xié)議標準,比如 IETF RFC 文檔。搜索一番后找到 WebRTC 相關的標準:
- https://www.w3.org/TR/webrtc/
從這個 W3C 制定的標準里又可以看到很多 IETF RFC 的資料。了解這些技術標準有助于我從高層次理解這個技術的一些特性。當然這些標準的細節(jié)我暫時不會去看,等到需要了解細節(jié)的時候再去看。
另外還可以從標準中梳理出這個技術的一些歷史背景知識。
技術歷史
復雜的技術不是橫空出世的,而是從簡單的技術逐漸根據(jù)需求而演變來的。很多時候一個技術的復雜是因為其有很多歷史性而導致的,比如 Java 的范型之所以使用復雜并具備很多限制性是因為其為兼容老的庫而妥協(xié)設計出的產物。了解這個技術的歷史背景有助于降低理解這個技術的復雜度。
做好筆記
搜索而來的資料如果不做整理和記錄的話,時間久了就全忘了。我把這些資料整理到了 Logseq 這個雙鏈筆記中。

從下面這個筆記拓撲圖中可以看出我記錄的分布式知識(Distributed System)和 WebRTC 間的關聯(lián)關系。眾所周知,學習在大腦的體現(xiàn)就是神經元突觸之間建立新的連接,筆記間的知識通過這種方式也能幫助我們快速建立知識間的聯(lián)系。
學習計劃
記錄完筆記后,我要做的就是規(guī)劃時間把整理得來的資料學習消化。在這個環(huán)節(jié)可用 時間管理 的方法制定該項技術的學習計劃。
學習技巧
學習技巧千萬條,但有一條是我覺得很重要的,那就是把你所學的說給別人聽,從別人的反饋中了解自己對該知識掌握薄弱的點。很多時候大腦在學習的過程中會有很多模糊不清的點,如果不說出來的話,這些不清楚的點會被忽略掉,但如果要讓別人聽得懂,那需要我們懂的更多才行。
寫文章其實也是說給別人聽,只不過比單純的說要更為系統(tǒng)。所以我一般在學習某個技術的時候會去寫文章分享。一方面讓自己的知識梳理的更清晰,另外一方面可以與讀者交流,掌握更多的知識,這也可以解決掉那個經典的我不知道我不知道的知識,當我寫出來時,會有看到的人幫我發(fā)現(xiàn)我不知道的知識。
當然也可以在社交網站上分享一些學習中梳理的知識點,之后方便整合成文章:

尋求幫助
找對的人解決學習中的困惑無異于能加速整個學習過程。這方面很多開源項目都有自己的討論區(qū),比如我在理解 WebRTC SFU 的過程中就有很多困惑甚至錯誤的理解,在社區(qū)中與作者溝通后才得到了正確的答案:

當然我們還可以在論壇、GitHub Issue、郵件組或交流群等地方中尋求幫助。
心理建設
學習里的一大難點可能是不好意思說出自己不懂的點,尤其是工作多年后,要承認自己不懂是件困難的事情。但如果你以終身學習為目標,那么這方面就沒什么障礙。不懂就去學,不懂就去問。無知并不可怕,年齡大不懂也不可怕,可怕的是不懂卻隱藏這一點。
怎么用
在掌握了技術的理論后,可以通過技術的實踐來提高自己的技術水平,比如做一個開源項目。對技術的應用有兩種方式:
從零開始,一步步實現(xiàn)自己的系統(tǒng)。這種方式的問題在于,剛開始我們對技術的應用不是很熟悉,完全自己做可能無法應用一些最佳實踐,摸著石頭過河的成本比較高。
從現(xiàn)有的應用中改造。開源項目有很多好的應用,可以直接用來學習并改造。一方面可以加速應用的開發(fā),另外還可以學習別人成熟的經驗。
通過一番搜索,我找到了兩個不錯的學習項目:
- webtrc-voice-chat
- kraken
這兩個都是基于 pion/webrtc 庫開發(fā)的語音聊天網站。基于這兩個開源項目,我可以逐漸學習并開發(fā)自己的開源項目。
在學習完這兩個開源項目(讀完源碼)后,我制定了基于 WebRTC 的應用開發(fā)目標:做一個隱私與本地優(yōu)先的語音聊天的網站 Free for Chat。

這個目標有點大,我會把這個業(yè)余項目作為技術試驗田,把需要學習應用的技術都應用到這里。
學以致用,是學習的最終目的。只有真正去用這個技術,才能真正掌握它。否則花費時間去學習,不用的話很快就忘了。
最后,能看到這里的話,希望這篇文章里提到的一些方法能讓你更快速的學習某個領域的技術。
審核編輯:符乾江
-
技術
+關注
關注
0文章
432瀏覽量
58768 -
開源
+關注
關注
3文章
3582瀏覽量
43459 -
源碼
+關注
關注
8文章
667瀏覽量
30134
發(fā)布評論請先 登錄
評論