作為一個 終身學(xué)習(xí) 的實踐者,我經(jīng)常有學(xué)習(xí)一些新技術(shù)的需求。如何學(xué)習(xí)這些新技術(shù)不同人有不同的做法,早前我也寫過一篇 如何快速學(xué)習(xí)一項新技能? 的文章分享我學(xué)習(xí)的理論框架,但這篇文章我會以我學(xué)習(xí) WebRTC 這個技術(shù)為例分享我在學(xué)習(xí)新技術(shù)時用的一些方法。
如何學(xué)習(xí)某個知識,在我看來,主要矛盾在于解決這三個問題。
要學(xué)否
在學(xué)習(xí)一門新技術(shù)前需要解決的第一個問題是要不要投資時間去學(xué)這門技術(shù)。就像買書最大的成本并不是買書的價格,而是看書的時間。花費大量的時間去看一本沒有價值的書,無異于浪費生命。正是方向搞錯了,越努力越尷尬。
怎么確定一門技術(shù)的價值,可以從以下兩個方面來考慮:
從知識體系出發(fā):某門技術(shù)經(jīng)常不是孤立存在的,而是一個積木般搭建的大廈的一部分。要學(xué)習(xí)頂部的技術(shù),就需要掌握一定的底部技術(shù)。如果一個技術(shù)很基礎(chǔ)很底層,被很多高層的技術(shù)所依賴,那學(xué)習(xí)這門技術(shù)就很有價值。
從應(yīng)用前景出發(fā):如果一門技術(shù)很有市場“錢景”,或者有潛在的市場需求,那學(xué)習(xí)這門技術(shù)就很有價值。畢竟我們學(xué)習(xí)目的很大的一部分在于賺錢解決自己的生活問題。
不過這里的難點在于從我們已知的信息來分析,很難判斷某門技術(shù)的市場前景。如果分析判斷錯誤,很可能會導(dǎo)致我們學(xué)習(xí)這門技術(shù)的時間被浪費。那最佳的選擇的就是盡可能讓自己所學(xué)的技術(shù)都滿足這兩點,哪怕最后沒有市場前景,但如能成為我們知識體系的基礎(chǔ),也值得投入時間去學(xué)習(xí)。
基于這兩方面的考慮,我開始學(xué)習(xí)了分布式系統(tǒng)的一些底層知識:
之后通過搜索間接找到了基于 WebRTC 技術(shù)的語音聊天網(wǎng)站 speakrandom,在分析這個網(wǎng)站技術(shù)棧的時候找到了 pion/webrtc 這個框架,最終決定從這個框架入手開始學(xué)習(xí) WebRTC。
怎么學(xué)
在制定了學(xué)習(xí)目標(biāo)之后,剩下的問題是怎么怎么學(xué)?學(xué)習(xí)方法千萬條,重要的是找到適合自己的學(xué)習(xí)方法。
我的方法是善用搜索,找到對的資料和對的人。學(xué)習(xí)本身不應(yīng)是一件復(fù)雜的事情,因為它不是做研究,不是探索未知的東西,只是站在巨人的肩膀上把已經(jīng)被解決的問題學(xué)習(xí)一遍。
但這里的難點在于資料千萬份,一不小心就找到錯誤的資料,讓本來簡單的學(xué)習(xí)變得復(fù)雜,這就像天龍八部鳩摩智學(xué)了段譽給的錯誤的六脈神劍劍訣,很容易學(xué)的走火入魔。
主動搜索
主動獲取資料 方式的要點在于從錯誤少的信息庫篩選、交叉對比選擇要看的資料。由于很多技術(shù)資料都是用英文寫的,用 Google 英文搜索更容易獲取高質(zhì)量的資料。另外使用 Google 圖片關(guān)鍵詞搜索可以快速獲得架構(gòu)方面的資料,方便從高層次理解這個技術(shù)。
一般我會從 Google、YouTube 和 GitHub 上搜索某個技術(shù)相關(guān)的資料、視頻教程和開源庫。以搜索切入,找到合適的開源項目或者技術(shù)標(biāo)準(zhǔn),然后制定學(xué)習(xí)計劃。很容易通過 webrtc
關(guān)鍵詞在這些平臺上搜索得到這些資料和教程:
GitHub
- https://github.com/pion/webrtc
YouTube
- WebRTC Crash Course
從 pion/webrtc 這個庫上了解到作者是 @Sean DuBois,GitHub 關(guān)注一波然后去 YouTube 搜索下他的演講,又收獲了一波高質(zhì)量的教程:
技術(shù)標(biāo)準(zhǔn)
另外一個高質(zhì)量的資料是協(xié)議標(biāo)準(zhǔn),比如 IETF RFC 文檔。搜索一番后找到 WebRTC 相關(guān)的標(biāo)準(zhǔn):
- https://www.w3.org/TR/webrtc/
從這個 W3C 制定的標(biāo)準(zhǔn)里又可以看到很多 IETF RFC 的資料。了解這些技術(shù)標(biāo)準(zhǔn)有助于我從高層次理解這個技術(shù)的一些特性。當(dāng)然這些標(biāo)準(zhǔn)的細(xì)節(jié)我暫時不會去看,等到需要了解細(xì)節(jié)的時候再去看。
另外還可以從標(biāo)準(zhǔn)中梳理出這個技術(shù)的一些歷史背景知識。
技術(shù)歷史
復(fù)雜的技術(shù)不是橫空出世的,而是從簡單的技術(shù)逐漸根據(jù)需求而演變來的。很多時候一個技術(shù)的復(fù)雜是因為其有很多歷史性而導(dǎo)致的,比如 Java 的范型之所以使用復(fù)雜并具備很多限制性是因為其為兼容老的庫而妥協(xié)設(shè)計出的產(chǎn)物。了解這個技術(shù)的歷史背景有助于降低理解這個技術(shù)的復(fù)雜度。
做好筆記
搜索而來的資料如果不做整理和記錄的話,時間久了就全忘了。我把這些資料整理到了 Logseq 這個雙鏈筆記中。
從下面這個筆記拓?fù)鋱D中可以看出我記錄的分布式知識(Distributed System)和 WebRTC 間的關(guān)聯(lián)關(guān)系。眾所周知,學(xué)習(xí)在大腦的體現(xiàn)就是神經(jīng)元突觸之間建立新的連接,筆記間的知識通過這種方式也能幫助我們快速建立知識間的聯(lián)系。
學(xué)習(xí)計劃
記錄完筆記后,我要做的就是規(guī)劃時間把整理得來的資料學(xué)習(xí)消化。在這個環(huán)節(jié)可用 時間管理 的方法制定該項技術(shù)的學(xué)習(xí)計劃。
學(xué)習(xí)技巧
學(xué)習(xí)技巧千萬條,但有一條是我覺得很重要的,那就是把你所學(xué)的說給別人聽,從別人的反饋中了解自己對該知識掌握薄弱的點。很多時候大腦在學(xué)習(xí)的過程中會有很多模糊不清的點,如果不說出來的話,這些不清楚的點會被忽略掉,但如果要讓別人聽得懂,那需要我們懂的更多才行。
寫文章其實也是說給別人聽,只不過比單純的說要更為系統(tǒng)。所以我一般在學(xué)習(xí)某個技術(shù)的時候會去寫文章分享。一方面讓自己的知識梳理的更清晰,另外一方面可以與讀者交流,掌握更多的知識,這也可以解決掉那個經(jīng)典的我不知道我不知道的知識,當(dāng)我寫出來時,會有看到的人幫我發(fā)現(xiàn)我不知道的知識。
當(dāng)然也可以在社交網(wǎng)站上分享一些學(xué)習(xí)中梳理的知識點,之后方便整合成文章:
尋求幫助
找對的人解決學(xué)習(xí)中的困惑無異于能加速整個學(xué)習(xí)過程。這方面很多開源項目都有自己的討論區(qū),比如我在理解 WebRTC SFU 的過程中就有很多困惑甚至錯誤的理解,在社區(qū)中與作者溝通后才得到了正確的答案:
當(dāng)然我們還可以在論壇、GitHub Issue、郵件組或交流群等地方中尋求幫助。
心理建設(shè)
學(xué)習(xí)里的一大難點可能是不好意思說出自己不懂的點,尤其是工作多年后,要承認(rèn)自己不懂是件困難的事情。但如果你以終身學(xué)習(xí)為目標(biāo),那么這方面就沒什么障礙。不懂就去學(xué),不懂就去問。無知并不可怕,年齡大不懂也不可怕,可怕的是不懂卻隱藏這一點。
怎么用
在掌握了技術(shù)的理論后,可以通過技術(shù)的實踐來提高自己的技術(shù)水平,比如做一個開源項目。對技術(shù)的應(yīng)用有兩種方式:
從零開始,一步步實現(xiàn)自己的系統(tǒng)。這種方式的問題在于,剛開始我們對技術(shù)的應(yīng)用不是很熟悉,完全自己做可能無法應(yīng)用一些最佳實踐,摸著石頭過河的成本比較高。
從現(xiàn)有的應(yīng)用中改造。開源項目有很多好的應(yīng)用,可以直接用來學(xué)習(xí)并改造。一方面可以加速應(yīng)用的開發(fā),另外還可以學(xué)習(xí)別人成熟的經(jīng)驗。
通過一番搜索,我找到了兩個不錯的學(xué)習(xí)項目:
- webtrc-voice-chat
- kraken
這兩個都是基于 pion/webrtc 庫開發(fā)的語音聊天網(wǎng)站。基于這兩個開源項目,我可以逐漸學(xué)習(xí)并開發(fā)自己的開源項目。
在學(xué)習(xí)完這兩個開源項目(讀完源碼)后,我制定了基于 WebRTC 的應(yīng)用開發(fā)目標(biāo):做一個隱私與本地優(yōu)先的語音聊天的網(wǎng)站 Free for Chat。
這個目標(biāo)有點大,我會把這個業(yè)余項目作為技術(shù)試驗田,把需要學(xué)習(xí)應(yīng)用的技術(shù)都應(yīng)用到這里。
學(xué)以致用,是學(xué)習(xí)的最終目的。只有真正去用這個技術(shù),才能真正掌握它。否則花費時間去學(xué)習(xí),不用的話很快就忘了。
最后,能看到這里的話,希望這篇文章里提到的一些方法能讓你更快速的學(xué)習(xí)某個領(lǐng)域的技術(shù)。
審核編輯:符乾江
-
技術(shù)
+關(guān)注
關(guān)注
0文章
431瀏覽量
58478 -
開源
+關(guān)注
關(guān)注
3文章
3309瀏覽量
42471 -
源碼
+關(guān)注
關(guān)注
8文章
639瀏覽量
29185
發(fā)布評論請先 登錄
相關(guān)推薦
評論