您好,登錄后才能下訂單哦!
在 「關(guān)于我 」那篇博文里,朋友們應(yīng)該知道了我不是科班出身,是由機(jī)械強(qiáng)行轉(zhuǎn)行到Linux應(yīng)用開(kāi)發(fā)方向。下面我就詳細(xì)向大家介紹自己這一路上的轉(zhuǎn)行歷程,希望對(duì)大家有所啟發(fā)。
我是學(xué)機(jī)械專業(yè)的,對(duì)于機(jī)械專業(yè)我還是很感興趣,而且當(dāng)年這個(gè)專業(yè)也是我自己選擇的。本科時(shí)成績(jī)沒(méi)排第一,但也排專業(yè)前列。碩士時(shí)成績(jī)一直是專業(yè)第一,還拿過(guò)國(guó)家獎(jiǎng)學(xué)金。由此可見(jiàn),我還是挺熱愛(ài)機(jī)械的,考研時(shí)甚至還想去中科院深造(可惜落榜了),想成為一名機(jī)械磚家。
但轉(zhuǎn)機(jī)在我畢業(yè)之后。本來(lái)我就想一直踏踏實(shí)實(shí)的做機(jī)械,但陰差陽(yáng)錯(cuò)的,第一份工作由機(jī)械工程師調(diào)劑到電子工程師。雖然是電子工程師,但做了很多代碼工作,那時(shí)候?qū)W了一些Verilog,以及C#,并且用C#開(kāi)發(fā)了一個(gè)測(cè)試工具及一個(gè)生產(chǎn)用的上位機(jī),據(jù)說(shuō)那個(gè)測(cè)試工具現(xiàn)在還在電子部門使用。也就是那時(shí),我真正接觸到了編程,并深深的被編程世界所著迷。
可是,我在學(xué)校學(xué)的是機(jī)械啊,跟軟件相關(guān)的東西頂多是C語(yǔ)言及匯編語(yǔ)言,但C語(yǔ)言是十年前(那時(shí)候)學(xué)的,早就還給老師了。因此,為了工作的需要,我硬著頭皮開(kāi)始學(xué)習(xí)編程。我每天早上6點(diǎn)起床,學(xué)習(xí)一個(gè)小時(shí)后7點(diǎn)去趕班車,晚上下班回來(lái)再繼續(xù)學(xué)習(xí)。在這樣的條件下我學(xué)會(huì)了Verilog及C#,同時(shí)對(duì)STM32有個(gè)大概的了解。
但那個(gè)崗位畢竟不是完全做軟件工作,還需要做電子方面的工作。做軟件的都知道,寫代碼的時(shí)候需要一個(gè)不被打擾的環(huán)境,而我那個(gè)崗位,一天可以接到十幾個(gè)電話,嚴(yán)重干擾我的軟件開(kāi)發(fā)進(jìn)度,因此,我決定離開(kāi)公司,去做真正的軟件工程師。
第二份工作,我是嵌入式工程師。在去公司之前,我系統(tǒng)的學(xué)了一遍51,看的是郭天祥十天學(xué)會(huì)51單片機(jī),對(duì)單片機(jī)有個(gè)初步的入門。真正入職后,再利用一個(gè)月的時(shí)間系統(tǒng)學(xué)習(xí)一遍C語(yǔ)言,看的是C語(yǔ)言之父寫的C程序設(shè)計(jì)語(yǔ)言。這本書雖然寫于80年代,但現(xiàn)在看來(lái)依然不過(guò)時(shí)。而且這本書比較薄,容易看完,比較有成就感。
看完 「C程序設(shè)計(jì)語(yǔ)言」之后,最好再看C和指針,C專家編程,C陷阱與缺陷。這三本書號(hào)稱「C語(yǔ)言三劍客」 ,學(xué)完它們你的C語(yǔ)言水平絕對(duì)是非常之高了。做我們這行,C語(yǔ)言是基礎(chǔ)語(yǔ)言,一定要把C語(yǔ)言完全拿下。
之后為了工作的需要,開(kāi)始接觸了Marvell 88MC200及88MW300。這兩款是WIFI芯片,但本質(zhì)是單片機(jī),采用的是ARM M3內(nèi)核。底層驅(qū)動(dòng)已經(jīng)由廠家寫好了,我們要做的工作就是在SDK基礎(chǔ)上做應(yīng)用做二次開(kāi)發(fā)。在這個(gè)過(guò)程中,我對(duì)敏捷開(kāi)發(fā)有了初步的認(rèn)識(shí),看了高效程序員的45個(gè)習(xí)慣:敏捷開(kāi)發(fā)修煉之道這本書。
在第二家公司里,我知道了物聯(lián)網(wǎng)的整體解決方案,對(duì)于物聯(lián)網(wǎng)的整體框架有了更深入的了解。同時(shí)對(duì)嵌入式開(kāi)發(fā)所需的技能有了全面的掌握,達(dá)到能夠獨(dú)立做一個(gè)物聯(lián)網(wǎng)項(xiàng)目的水平。當(dāng)然,期間還學(xué)會(huì)了版本控制工具git,看的是Pro Git及git權(quán)威指南。同時(shí)再進(jìn)一步系統(tǒng)學(xué)習(xí)了STM32,看的書是野火的STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南,但看的視頻卻是正點(diǎn)原子的。這里強(qiáng)烈推薦正點(diǎn)原子的視頻,真的是做的非常好。
由于我是轉(zhuǎn)行,我自知底子薄,起點(diǎn)比別人落后很多,因此我很刻苦學(xué)習(xí)。我就住在公司附近,公司8點(diǎn)上班,我依然6點(diǎn)起床,12點(diǎn)睡覺(jué)。平時(shí)沒(méi)事的時(shí)候就在公司學(xué)習(xí),看代碼,寫代碼,調(diào)代碼,甚至好幾個(gè)周末也是在公司度過(guò)。為了轉(zhuǎn)行我一心撲在了學(xué)習(xí)上,放棄了一切娛樂(lè)活動(dòng),只為能趕上同事一點(diǎn)半點(diǎn)。這個(gè)狀態(tài)一直持續(xù)了我在這個(gè)公司的整個(gè)過(guò)程。
可惜,一年之后我不得不離開(kāi)了,因?yàn)槲依掀旁趶V州,我去廣州追隨我老婆了。由于我面試時(shí)的不錯(cuò)表現(xiàn),以及我不錯(cuò)的英語(yǔ)口語(yǔ),我順利的被廣州一家外資世界500強(qiáng)錄用。我的新崗位是Linux應(yīng)用開(kāi)發(fā)工程師,使用C++ 開(kāi)發(fā)。而在那時(shí),我既不會(huì)Linux,也不會(huì)C++,所以公司敢錄用我真的是勇氣可嘉。
從單片機(jī)到Linux又是一個(gè)比較大的跨度。Linux主要有三個(gè)方向:運(yùn)維、應(yīng)用、底層,而我選擇的是應(yīng)用方向。為了工作的需要,我必須先拿下C++。好在公司是外企,幾乎不加班,于是我有充足的時(shí)間學(xué)習(xí)??墒?,每天坐班車的時(shí)間加起來(lái)有三個(gè)小時(shí),這么好的時(shí)間我不能浪費(fèi)啊,于是,我買了個(gè)iPad,下載一套視頻,在班車上也進(jìn)行學(xué)習(xí)。當(dāng)然,我也注意保護(hù)眼睛,在班車上絕不看書,看視頻的時(shí)候也經(jīng)常往窗外看看。
這里講講自學(xué)過(guò)程中是采用看書還是看視頻的方式。我采用的是先看視頻再看書
的方式。為什么要這樣?因?yàn)槲覀€(gè)人覺(jué)得,很多技術(shù)書都是很厚的一本,自己看下來(lái)要花費(fèi)很多時(shí)間精力,而且很多知識(shí)點(diǎn)在工作中很少會(huì)用到,可以暫時(shí)先略過(guò)的。視頻一般會(huì)比較短,一般是幾天就能看完,而且老師一般只挑重點(diǎn)的講。我們時(shí)間都很寶貴,我建議先把老師講的知識(shí)完全掌握了以后,再利用書籍進(jìn)一步擴(kuò)展其它知識(shí)。但是,不管是看書還是看視頻,一定要寫代碼,一定要寫代碼,一定要寫代碼,否則非常容易造成眼高手低??!
我這家公司里我依然保持著早上6點(diǎn)起床,晚上11點(diǎn)睡覺(jué)的習(xí)慣。這樣早上有1個(gè)小時(shí),晚上3個(gè)小時(shí),班車上3個(gè)小時(shí),一天總共有7個(gè)小時(shí)可以用于學(xué)習(xí)。而周末我會(huì)睡個(gè)懶覺(jué),7點(diǎn)起床,依然11點(diǎn)睡覺(jué),周末幾乎不出門,所以周末又有大量的時(shí)間可以用來(lái)學(xué)習(xí)。
C++ 實(shí)在是太難了,我用了一個(gè)多月才將視頻里的知識(shí)完全拿下來(lái)。之后,在工作中,陸續(xù)開(kāi)始看C++ Primer進(jìn)一步鞏固。其它書籍推薦:Effective C++,C++ 語(yǔ)言的設(shè)計(jì)與演化,C++ 標(biāo)準(zhǔn)程序庫(kù)。在stackoverflow上有個(gè)C++必讀書單,可以去看看。
學(xué)完C++我再學(xué)習(xí)了Linux系統(tǒng)編程,同樣采用的是先視頻后書籍的方式進(jìn)行。不管是視頻還是書籍,一定要看最經(jīng)典的。市面上有太多良莠不齊的視頻和書籍,如果選擇了一個(gè)質(zhì)量不好的材料來(lái)看,不僅會(huì)浪費(fèi)很多時(shí)間,而且有可能還會(huì)被誤導(dǎo)。對(duì)于視頻的選擇,可以去各大培訓(xùn)機(jī)構(gòu),里面通常有一些免費(fèi)視頻資料供我們下載。
對(duì)于Linux應(yīng)用的學(xué)習(xí),主要有六部分:1. 環(huán)境搭建;2. 基本操作;3. 系統(tǒng)編程;4. 網(wǎng)絡(luò)編程;5. 數(shù)據(jù)庫(kù)編程,6. Shell編程。下面一一詳細(xì)介紹。
環(huán)境搭建
作為L(zhǎng)inux工程師,毋庸置疑一定需要Linux環(huán)境。對(duì)于Linux環(huán)境的獲取,我們通常有三種方式:
得到Linux環(huán)境后還不夠,還要知道如何配置、如何遠(yuǎn)程連接Linux電腦、如何與Linux電腦互傳文件、如何在主機(jī)上閱讀Linux電腦中的代碼,等等。
基本操作
眾所周知,Linux很少或幾乎沒(méi)有界面,所有的操作幾乎都可以通過(guò)命令行來(lái)完成。對(duì)于運(yùn)維人員來(lái)說(shuō),需要掌握相當(dāng)大量的Linux命令。而對(duì)于應(yīng)用、驅(qū)動(dòng)方向的人員來(lái)說(shuō),只需掌握一些基本的常用的命令即可。對(duì)于這部分很多人建議看 「鳥哥的私房菜」 ,但我覺(jué)得這個(gè)更適合運(yùn)維人員,我們無(wú)需掌握那么多命令。
系統(tǒng)編程
在學(xué)系統(tǒng)編程之前,一定要先學(xué)習(xí)Makefile,這會(huì)為后續(xù)的學(xué)習(xí)提高很大效率。之后的系統(tǒng)編程,主要有幾大塊:IO編程、進(jìn)程、線程、進(jìn)程間通訊(包括管道、信號(hào)、信號(hào)量、共享內(nèi)存等)。這幾部分學(xué)完了,基本也就差不多了。
網(wǎng)絡(luò)編程
網(wǎng)絡(luò)編程主要就是socket,poll,epoll,以及對(duì)TCP/IP的理解,同時(shí)要學(xué)會(huì)高并發(fā)式服務(wù)器的編寫。
數(shù)據(jù)庫(kù)編程
數(shù)據(jù)庫(kù)的內(nèi)容其實(shí)并不屬于Linux,但在項(xiàng)目中經(jīng)常要用到。這部分主要要學(xué)會(huì)數(shù)據(jù)庫(kù)的基本操作,以及如何寫一套接口去操作數(shù)據(jù)庫(kù)。
Linux應(yīng)用編程書籍推薦:
學(xué)完以上六部分,基本就有能力完成Linux環(huán)境下的應(yīng)用編程了。當(dāng)然,在有些場(chǎng)合我們可能還需要用到Python腳本。像我公司的項(xiàng)目部分腳本就是用Python完成的。對(duì)于Python的入門,可以參考簡(jiǎn)明Python教程。但如果想進(jìn)一步提高的話,那就需要閱讀大量書籍了。對(duì)于Linux層級(jí)的腳本應(yīng)用,掌握一些基礎(chǔ)的足夠了。
以上就是我的Linux應(yīng)用開(kāi)發(fā)自學(xué)之路,雖然我離高手還有很長(zhǎng)的距離,但我還是將自己的這段自學(xué)經(jīng)歷分享出來(lái),希望能夠幫助朋友們少走一些彎路,同時(shí)也期待和高手一起學(xué)習(xí)、提高。好了,今天的分享就至此為止。
更多精彩內(nèi)容,請(qǐng)關(guān)注公眾號(hào)良許Linux,公眾內(nèi)回復(fù)1024可免費(fèi)獲得5T技術(shù)資料,包括:Linux,C/C++,Python,樹(shù)莓派,嵌入式,Java,人工智能,等等。公眾號(hào)內(nèi)回復(fù)進(jìn)群,邀請(qǐng)您進(jìn)高手如云技術(shù)交流群。
cdn.xitu.io/2018/8/13/16531c1b61dc557d?w=150&h=150&f=jpeg&s=16304">
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。