學(xué)新技術(shù)的6大問題及應(yīng)對(duì)策略
“有問有答”欄目,是程序視界提供的免費(fèi)咨詢?nèi)肟?。想?yún)⑴c,可以這樣:
公眾號(hào)后臺(tái)留言,以“有問有答”開頭。
描述你的困惑或者問題。
我每周會(huì)慎重回答一個(gè)問題并整理成文章,周四發(fā)布在訂閱號(hào)程序視界內(nèi)。
如果覺得這種方式較為麻煩,或者你的問題較為復(fù)雜,可以使用“在行”小程序,搜索“安曉輝”,付費(fèi)約我一對(duì)一咨詢。

我是一個(gè)C++開發(fā),現(xiàn)在在學(xué)音視頻,但是現(xiàn)在遇到一個(gè)問題,發(fā)現(xiàn)學(xué)不下去了,剛開始學(xué)基礎(chǔ)還好,到了一定程度,就發(fā)現(xiàn)自己遇到問題,還不懂,網(wǎng)上又沒有資料,也沒有人可以請(qǐng)教,現(xiàn)在很苦惱,所以想向老師請(qǐng)教下該怎么辦。

我沒有辦法告訴你具體問題的解決辦法,只能從一般性規(guī)律上來聊這個(gè)問題。
學(xué)新技術(shù)遇到問題,這是我們都會(huì)遇到的事情。一般來講,要先明確自己的問題是在哪個(gè)階段,然后再看用什么方式來解決。
一、學(xué)習(xí)新技術(shù)的6個(gè)問題階段
我根據(jù)從學(xué)到用的順序,總結(jié)了學(xué)習(xí)新技術(shù)時(shí)遇到問題的6個(gè)階段,見下圖。

這6個(gè)階段是:
不知道學(xué)什么、不知道從哪里開始學(xué)。比如音視頻,是從編解碼開始,還是從Demux開始?
找不到學(xué)習(xí)資料。
看不懂知識(shí),看不明白用法。比如看不懂H.265的spec,看不明白ffmpeg里怎么添加新的解碼器。
寫代碼時(shí)不會(huì)用。知識(shí)貌似懂了,代碼寫不出來,或者寫出來后沒法與其他輸入輸出模塊整合在一起。
設(shè)計(jì)模塊搞不清用哪些功能、模塊、接口等。比如用ffmpeg渲染時(shí),不知道選SDL還是OpenGL。
遇到Bug不知道怎么解。產(chǎn)品發(fā)布,出了問題,不知道從何下手去解決。
你可以先看看自己的問題是在哪個(gè)階段。
二、不同階段的精進(jìn)策略
接下來咱們說不同階段的應(yīng)對(duì)策略。
第1個(gè)問題階段,不知道學(xué)什么不知道從哪里開始學(xué)。
有兩種策略,一是問題導(dǎo)向,你要解決什么問題,就從問題入手,倒推需要學(xué)什么。比如你要轉(zhuǎn)碼,那就先了解常見的編解碼格式,從ffmpeg或者vlc的轉(zhuǎn)碼功能看起。
第二種策略是以既有知識(shí)體系為基礎(chǔ)進(jìn)行學(xué)習(xí),比如買一本音視頻的書,系統(tǒng)去看。
第2個(gè)問題階段,找不到學(xué)習(xí)資料。
學(xué)習(xí)資料分為文章、圖書、論文、標(biāo)準(zhǔn)、課程等,可以到圖書網(wǎng)站搜書,可以到常見的在線教育平臺(tái)搜課,可以用Google、百度等搜關(guān)鍵字,還可以到專業(yè)論壇瀏覽帖子或文章……
第3個(gè)問題階段,看不懂知識(shí),看不明白用法。
同一個(gè)知識(shí),可能有不同講法,有的人講的通俗易懂,有的人講的云山霧罩。所以首先嘗試更換學(xué)習(xí)資料,尋找講得更好的資料。
另一種策略是先看別人的demo,看這些demo運(yùn)轉(zhuǎn)起來是怎么回事兒,再看它怎么用那些知識(shí),從應(yīng)用往回倒推,去理解知識(shí)、技術(shù)點(diǎn)。
還有一種策略,就是找人給你講。
第4個(gè)問題階段,寫代碼時(shí)不會(huì)用。
這往往是在使用具體知識(shí)點(diǎn)、接口、類庫(kù)時(shí)出現(xiàn)的。此時(shí)的常見策略,是找同一個(gè)知識(shí)點(diǎn),看別人怎么用的。
比如有些小伙伴學(xué)習(xí)LibVLC,寫代碼時(shí),不知道libvlc_media_new_callbacks 這個(gè)方法該怎么寫,各種callback怎么定義,內(nèi)部怎么實(shí)現(xiàn),那就看例子怎么用的,看別人怎么用。
先模仿,再自己寫,調(diào)試著看……反復(fù)這么練,慢慢就搞明白了。
第5個(gè)問題階段,設(shè)計(jì)模塊搞不清用哪些功能、模塊、接口等。
這往往是因?yàn)椴淮罅私饽撤N技術(shù)實(shí)現(xiàn)同一目的的不同手段各自的應(yīng)用場(chǎng)景和具體特性,需要逐一去了解,然后匹配你的目標(biāo),匹配你模塊提供給外界的接口,比較著去選擇。
第6個(gè)問題階段,遇到Bug不知道怎么解。
一般解Bug,三種策略:
利用日志查找線索
分析邏輯,走讀源碼,定位問題
調(diào)試跟蹤
這些都要求你熟悉業(yè)務(wù)、熟悉設(shè)計(jì)、熟悉源碼、熟悉具體技術(shù)的特性或原理,所以想要更好的解決Bug,其實(shí)有很多基本功要練。另外還要有分析問題的能力。
三、問題的反面是成長(zhǎng)的契機(jī)
我提供的一般性思路,不一定能解決你的問題,但我卻也希望,你不要就此放棄。
有問題,有挑戰(zhàn),才有成長(zhǎng)。
努力解決問題,提煉經(jīng)驗(yàn),獲得成長(zhǎng)。這是你的機(jī)會(huì)。
◇◇◇
評(píng)論
圖片
表情
