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