工作那么多年魂角,或多或少都會(huì)有自己的工作習(xí)慣、學(xué)習(xí)習(xí)慣智绸。其實(shí)工作了野揪,就不能談“學(xué)習(xí)”,因?yàn)楣竟蛡騿T工是為了產(chǎn)生效益的瞧栗。但以“研究”作為標(biāo)題的話斯稳,又顯得自己太狂。本文就筆者的學(xué)習(xí)迹恐、研究經(jīng)歷——更多是自學(xué)挣惰,總結(jié)一些想法、步驟,雖不是具備代表性憎茂,但也是經(jīng)過(guò)實(shí)踐的珍语。很多年不寫理論性的文章了,行文難免略顯幼稚竖幔。
不求甚解
我接觸Linux大概有8年時(shí)間了板乙。回想起當(dāng)初自學(xué)的過(guò)程拳氢,十分痛苦募逞,一度放棄。為了鍛煉馋评、證明自己的毅力放接,又重新拾起來(lái)。在自學(xué)之初栗恩,很多東西是不懂的透乾,但我沒(méi)使用對(duì)一個(gè)點(diǎn)窮追猛打。對(duì)于一些知識(shí)可能已經(jīng)超出自己的理解磕秤,我就放過(guò)荷荤,但我會(huì)記錄下來(lái)芹血。若干時(shí)間后(或半年、或一年),可能就會(huì)實(shí)然理解玄帕、明白過(guò)來(lái)了。對(duì)于新知識(shí)镜沽,我一直不強(qiáng)調(diào)要精研得很深茵乱,那么太辛苦太花時(shí)間了。學(xué)習(xí)USB搜变,不必先看USB協(xié)議采缚,可以先從能提高直觀認(rèn)知的地方開始:以使用U盤入手,一步步追蹤代碼挠他,根據(jù)代碼學(xué)習(xí)協(xié)議扳抽。如果結(jié)合USB協(xié)議分析軟件,可能效果更好殖侵。
學(xué)會(huì)抽象
很多時(shí)候贸呢,我們不能局限于某一個(gè)具體的板子、具體的接口拢军、具體的應(yīng)用場(chǎng)合楞陷。要學(xué)會(huì)抽象,學(xué)會(huì)舉一反三茉唉。從較高層面上看固蛾,很多嵌入式系統(tǒng)就是“輸入<->處理<->輸出”這樣的結(jié)構(gòu)结执。輸入有不同接口:串口、USB艾凯、SPI昌犹、IIC、PCI览芳,等斜姥。輸出可以有LCD顯示屏、LED燈沧竟、串口打印铸敏、網(wǎng)絡(luò),等悟泵。對(duì)于模塊來(lái)說(shuō)亦是如此杈笔,從前一個(gè)模塊接收數(shù)據(jù),處理糕非,然后發(fā)給下一個(gè)模塊蒙具。對(duì)于系統(tǒng)或模塊,可以先畫出大略的結(jié)構(gòu)圖朽肥,再往里面添加細(xì)節(jié)禁筏,然后各個(gè)擊破。
常做總結(jié)
所謂“好記性不如壞筆頭”衡招。我在大學(xué)時(shí)期就開始寫技術(shù)博客篱昔,后來(lái)工作上也有部分問(wèn)題是參考先前寫的文章的。因?yàn)榧夹g(shù)這東西更新太快始腾,涉及太廣州刽,如果沒(méi)有及時(shí)記錄、總結(jié)浪箭,很容易會(huì)忘記穗椅。有時(shí)經(jīng)常做重復(fù)性工作。就我而言奶栖,在沒(méi)有使用云筆記工具之前匹表,我一般使用記事本手寫(大學(xué)時(shí)主要手寫),或者用word文檔來(lái)存檔驼抹。后來(lái)主要使用云筆記進(jìn)行總結(jié)桑孩。
開闊視野
我們不應(yīng)就解決問(wèn)題而解決問(wèn)題拜鹤,那樣會(huì)將自己局限于某一個(gè)應(yīng)用場(chǎng)合框冀。或許和筆者工作多年未接觸公司核心業(yè)務(wù)有關(guān)吧敏簿,這些年明也,都是基于TI芯片做底層宣虾、平臺(tái)開發(fā),偶爾寫寫上位機(jī)調(diào)整温数。在開發(fā)時(shí)绣硝,我從未將涉及的東西限制在TI芯片上,也未將技術(shù)點(diǎn)只限制于安防領(lǐng)域中撑刺。誠(chéng)然鹉胖,如onvif、gb28181都有安防行業(yè)密切相關(guān)够傍,但如其它freetype甫菠、ffmpeg等,也可應(yīng)用于其它行業(yè)中冕屯。往大方向來(lái)說(shuō)寂诱,萬(wàn)一以后不在安防行業(yè)工作,也有幾個(gè)傍身之技在手安聘,到哪里都有飯吃痰洒。
博雜?精專浴韭?
在學(xué)習(xí)丘喻、工作上,往往出現(xiàn)兩種不同觀點(diǎn)念颈,一是博仓犬,二是精。我和很多人討論過(guò)這個(gè)話題舍肠,一些人說(shuō)要專門研究一個(gè)領(lǐng)域搀继,成為專家。筆者所讀的專業(yè)翠语,從模擬電子叽躯、數(shù)字電子,到四大原理課程肌括,到計(jì)算機(jī)體系架構(gòu)点骑,還有各種編程語(yǔ)言,不可謂不雜谍夭。但正是這些基礎(chǔ)黑滴,使得后來(lái)的工作中與硬件部門、業(yè)務(wù)部門流暢溝通紧索。很難想象袁辈,一個(gè)8年工作經(jīng)驗(yàn)的計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)的人,連RS485單工通信也沒(méi)有概念珠漂。
某一年晚缩,我的主管在年底總結(jié)大會(huì)上對(duì)我進(jìn)行點(diǎn)評(píng)尾膊,一共八字:廣度有了,深度不夠荞彼。言外之意冈敛,似乎是又要有廣度,又要有深度鸣皂。
我們公司有的部門專門研究視頻方面的算法抓谴,其它業(yè)務(wù)無(wú)須接觸,有的人甚至可能連產(chǎn)品如何使用也不知道寞缝。但并不妨礙他們將會(huì)成為專家齐邦。公司的分工是要明確的,但很多公司實(shí)際上并不這樣第租。一些部門有專家措拇,另一些部門也就會(huì)有打雜的機(jī)動(dòng)人員。具體表現(xiàn)是哪里需要人慎宾,哪里就安排人丐吓,而不管這個(gè)人擅長(zhǎng)哪方面,——這一點(diǎn)趟据, 在我所在的部門的部分人(尤其是我)表現(xiàn)得十分突出券犁。在此情況下,要向上峰爭(zhēng)取成為某一方面的高手汹碱、專家粘衬,可能性幾乎沒(méi)有。事實(shí)上咳促,我向主管爭(zhēng)取過(guò)稚新,甚至拿韓退之《師說(shuō)》中“術(shù)業(yè)有專攻”來(lái)表明態(tài)度,無(wú)奈制度就在那里跪腹,只好接受事實(shí)褂删。
所以,后來(lái)我在工作上對(duì)“博學(xué)”冲茸、“精通”兩者做了調(diào)整:以工作任務(wù)為驅(qū)動(dòng)屯阀,以精通技術(shù)為目標(biāo)。就是說(shuō)轴术,對(duì)于工作上的安排要接愛(ài)难衰,將工作任務(wù)抽象為技術(shù)點(diǎn),然后對(duì)此技術(shù)點(diǎn)列出大綱逗栽,優(yōu)先考慮盖袭、研究工作上要求的,其它要點(diǎn)待有時(shí)間再研究。前面我寫的coreboot學(xué)習(xí)系列文章苍凛,就是一個(gè)典型:我認(rèn)為領(lǐng)導(dǎo)極有可能安排我做BIOS(因?yàn)楣窘佑|過(guò)X86底層開發(fā)的就我一個(gè)人),因此預(yù)先去研究兵志。在接觸初期對(duì)coreboot進(jìn)行了解醇蝴,然后列出提綱(或者說(shuō)是要做的事務(wù)),然后去研究想罕、學(xué)習(xí)悠栓。然后領(lǐng)導(dǎo)安排其它同事做BIOS事務(wù),然后我就暫停了按价。但不排除后續(xù)實(shí)然讓我負(fù)責(zé)惭适。
所以,我工作這幾年接觸大量的雜七雜八的東西楼镐,基本全是工作任務(wù)驅(qū)動(dòng)癞志,出于自己自愿研究目的的少之又少。無(wú)論是freetype字符疊加框产,還是視頻硬件加速凄杯,還是硬盤smart控制,還是pelco云臺(tái)控制秉宿,我都來(lái)者不拒戒突。但在雜亂當(dāng)中,也保持著自己清醒的認(rèn)知:我的本職是linux系統(tǒng)描睦、底層驅(qū)動(dòng)膊存、C/C++等,其它的都是鞏固和支撐個(gè)人知識(shí)面的東西忱叭,是用于提升技能隔崎、開闊視野的東西。
但是韵丑,公司畢竟是要賺錢的仍稀,完成工作是第一位的。記得幾年前埂息,部門一位同事要解決產(chǎn)品接U盤的問(wèn)題技潘,領(lǐng)導(dǎo)甚至要求該同事看完USB協(xié)議。有個(gè)新平臺(tái)使用了PCI接口千康,領(lǐng)導(dǎo)又要求研究PCI協(xié)議享幽,還買了書籍。在浮躁追求直觀效益的公司拾弃,是不允許你花時(shí)間做研究的(因?yàn)槟愕难芯款I(lǐng)導(dǎo)看不到直觀經(jīng)濟(jì)效益)值桩。但當(dāng)出現(xiàn)問(wèn)題時(shí),又以理論基礎(chǔ)不牢為原由進(jìn)行批評(píng)豪椿。在此管理風(fēng)格下奔坟,我是無(wú)力改變現(xiàn)狀的携栋,只好堅(jiān)持自己的做法,盡力做好事咳秉。其它的婉支,管它呢。
李遲 2016.10 中旬