Linux應用開發自學之路

良許Linux發表於2019-03-02

前言

在 「關於我 」那篇博文裡,朋友們應該知道了我不是科班出身,是由機械強行轉行到Linux應用開發方向。下面我就詳細向大家介紹自己這一路上的轉行歷程,希望對大家有所啟發。

我是學機械專業的,對於機械專業我還是很感興趣,而且當年這個專業也是我自己選擇的。本科時成績沒排第一,但也排專業前列。碩士時成績一直是專業第一,還拿過國家獎學金。由此可見,我還是挺熱愛機械的,考研時甚至還想去中科院深造(可惜落榜了),想成為一名機械磚家。

轉折點

但轉機在我畢業之後。本來我就想一直踏踏實實的做機械,但陰差陽錯的,第一份工作由機械工程師調劑到電子工程師。雖然是電子工程師,但做了很多程式碼工作,那時候學了一些Verilog,以及C#,並且用C#開發了一個測試工具及一個生產用的上位機,據說那個測試工具現在還在電子部門使用。也就是那時,我真正接觸到了程式設計,並深深的被程式設計世界所著迷。

可是,我在學校學的是機械啊,跟軟體相關的東西頂多是C語言及組合語言,但C語言是十年前(那時候)學的,早就還給老師了。因此,為了工作的需要,我硬著頭皮開始學習程式設計。我每天早上6點起床,學習一個小時後7點去趕班車,晚上下班回來再繼續學習。在這樣的條件下我學會了Verilog及C#,同時對STM32有個大概的瞭解。

但那個崗位畢竟不是完全做軟體工作,還需要做電子方面的工作。做軟體的都知道,寫程式碼的時候需要一個不被打擾的環境,而我那個崗位,一天可以接到十幾個電話,嚴重干擾我的軟體開發進度,因此,我決定離開公司,去做真正的軟體工程師。

入門

第二份工作,我是嵌入式工程師。在去公司之前,我係統的學了一遍51,看的是郭天祥十天學會51微控制器,對微控制器有個初步的入門。真正入職後,再利用一個月的時間系統學習一遍C語言,看的是C語言之父寫的C程式設計語言。這本書雖然寫於80年代,但現在看來依然不過時。而且這本書比較薄,容易看完,比較有成就感。

看完 「C程式設計語言」之後,最好再看C和指標,C專家程式設計,C陷阱與缺陷。這三本書號稱「C語言三劍客」 ,學完它們你的C語言水平絕對是非常之高了。做我們這行,C語言是基礎語言,一定要把C語言完全拿下。

之後為了工作的需要,開始接觸了Marvell 88MC200及88MW300。這兩款是WIFI晶片,但本質是微控制器,採用的是ARM M3核心。底層驅動已經由廠家寫好了,我們要做的工作就是在SDK基礎上做應用做二次開發。在這個過程中,我對敏捷開發有了初步的認識,看了高效程式設計師的45個習慣:敏捷開發修煉之道這本書。

在第二家公司裡,我知道了物聯網的整體解決方案,對於物聯網的整體框架有了更深入的瞭解。同時對嵌入式開發所需的技能有了全面的掌握,達到能夠獨立做一個物聯網專案的水平。當然,期間還學會了版本控制工具git,看的是Pro Gitgit權威指南。同時再進一步系統學習了STM32,看的書是野火的STM32庫開發實戰指南,但看的視訊卻是正點原子的。這裡強烈推薦正點原子的視訊,真的是做的非常好。

由於我是轉行,我自知底子薄,起點比別人落後很多,因此我很刻苦學習。我就住在公司附近,公司8點上班,我依然6點起床,12點睡覺。平時沒事的時候就在公司學習,看程式碼,寫程式碼,調程式碼,甚至好幾個週末也是在公司度過。為了轉行我一心撲在了學習上,放棄了一切娛樂活動,只為能趕上同事一點半點。這個狀態一直持續了我在這個公司的整個過程。

新挑戰

可惜,一年之後我不得不離開了,因為我老婆在廣州,我去廣州追隨我老婆了。由於我面試時的不錯表現,以及我不錯的英語口語,我順利的被廣州一家外資世界500強錄用。我的新崗位是Linux應用開發工程師,使用C++ 開發。而在那時,我既不會Linux,也不會C++,所以公司敢錄用我真的是勇氣可嘉。

從微控制器到Linux又是一個比較大的跨度。Linux主要有三個方向:運維、應用、底層,而我選擇的是應用方向。為了工作的需要,我必須先拿下C++。好在公司是外企,幾乎不加班,於是我有充足的時間學習。可是,每天坐班車的時間加起來有三個小時,這麼好的時間我不能浪費啊,於是,我買了個iPad,下載一套視訊,在班車上也進行學習。當然,我也注意保護眼睛,在班車上絕不看書,看視訊的時候也經常往窗外看看。

這裡講講自學過程中是採用看書還是看視訊的方式。我採用的是先看視訊再看書的方式。為什麼要這樣?因為我個人覺得,很多技術書都是很厚的一本,自己看下來要花費很多時間精力,而且很多知識點在工作中很少會用到,可以暫時先略過的。視訊一般會比較短,一般是幾天就能看完,而且老師一般只挑重點的講。我們時間都很寶貴,我建議先把老師講的知識完全掌握了以後,再利用書籍進一步擴充套件其它知識。但是,不管是看書還是看視訊,一定要寫程式碼,一定要寫程式碼,一定要寫程式碼,否則非常容易造成眼高手低!!

我這家公司裡我依然保持著早上6點起床,晚上11點睡覺的習慣。這樣早上有1個小時,晚上3個小時,班車上3個小時,一天總共有7個小時可以用於學習。而週末我會睡個懶覺,7點起床,依然11點睡覺,週末幾乎不出門,所以週末又有大量的時間可以用來學習。

C++ 實在是太難了,我用了一個多月才將視訊裡的知識完全拿下來。之後,在工作中,陸續開始看C++ Primer進一步鞏固。其它書籍推薦:Effective C++,C++ 語言的設計與演化,C++ 標準程式庫。在stackoverflow上有個C++必讀書單,可以去看看。

學完C++我再學習了Linux系統程式設計,同樣採用的是先視訊後書籍的方式進行。不管是視訊還是書籍,一定要看最經典的。市面上有太多良莠不齊的視訊和書籍,如果選擇了一個質量不好的材料來看,不僅會浪費很多時間,而且有可能還會被誤導。對於視訊的選擇,可以去各大培訓機構,裡面通常有一些免費視訊資料供我們下載。

對於Linux應用的學習,主要有六部分:1. 環境搭建;2. 基本操作;3. 系統程式設計;4. 網路程式設計;5. 資料庫程式設計,6. Shell程式設計。下面一一詳細介紹。

  1. 環境搭建
    作為Linux工程師,毋庸置疑一定需要Linux環境。對於Linux環境的獲取,我們通常有三種方式:

    • 將電腦整體安裝為Linux系統;
    • 在電腦裡安裝一個虛擬機器,跑Linux電腦;
    • Window+Linux雙系統。

    得到Linux環境後還不夠,還要知道如何配置、如何遠端連線Linux電腦、如何與Linux電腦互傳檔案、如何在主機上閱讀Linux電腦中的程式碼,等等。

  2. 基本操作
    眾所周知,Linux很少或幾乎沒有介面,所有的操作幾乎都可以通過命令列來完成。對於運維人員來說,需要掌握相當大量的Linux命令。而對於應用、驅動方向的人員來說,只需掌握一些基本的常用的命令即可。對於這部分很多人建議看 「鳥哥的私房菜」 ,但我覺得這個更適合運維人員,我們無需掌握那麼多命令。

  3. 系統程式設計
    在學系統程式設計之前,一定要先學習Makefile,這會為後續的學習提高很大效率。之後的系統程式設計,主要有幾大塊:IO程式設計、程式、執行緒、程式間通訊(包括管道、訊號、訊號量、共享記憶體等)。這幾部分學完了,基本也就差不多了。

  4. 網路程式設計
    網路程式設計主要就是socket,poll,epoll,以及對TCP/IP的理解,同時要學會高併發式伺服器的編寫。

  5. 資料庫程式設計
    資料庫的內容其實並不屬於Linux,但在專案中經常要用到。這部分主要要學會資料庫的基本操作,以及如何寫一套介面去運算元據庫。

  6. Shell程式設計
    Shell是Linux下的指令碼語言,功能雖然不如高階語言強大,但它可能做很多事,在某些場合甚至比高階語言要方便得多。當然除了Shell指令碼,還有Python指令碼。

Linux應用程式設計書籍推薦:

  • UNIX環境高階程式設計。簡稱APUE,號稱程式設計師的聖經。它不是一本API字典,它還講述了很多作業系統的細節,記憶體,檔案系統等方面,是一本難得的好書。但是它起點有點高,不適合初學者。
  • Linux程式設計。如果覺得APUE有點難入門的話,可以選擇此書進行入門。
  • Unix/Linux系統程式設計手冊。這本書號稱是一本超越APUE的書,它是一本比較新的書,裡面新增了APUE所沒有的Linux/Unix新特性。而且對於一些概念性的東西講的確實比APUE好。但至於能否超載APUE,還有待歷史的考驗。
  • UNIX 網路程式設計。也是一本非常經典的書,主要是網路程式設計方向的。
  • MySQL必知必會。本書在Amazon上長期排在資料庫銷售榜首,建議想快速瞭解資料庫原理和MySQL的新手閱讀。快餐性質,簡潔明快,小開本,而且很薄,比較好閱讀。
  • Linux Shell指令碼攻略。這本書很薄很精華,它追求的不是全,而是精,所以用它來入門再適合不過了。

學完以上六部分,基本就有能力完成Linux環境下的應用程式設計了。當然,在有些場合我們可能還需要用到Python指令碼。像我公司的專案部分指令碼就是用Python完成的。對於Python的入門,可以參考簡明Python教程。但如果想進一步提高的話,那就需要閱讀大量書籍了。對於Linux層級的指令碼應用,掌握一些基礎的足夠了。

以上就是我的Linux應用開發自學之路,雖然我離高手還有很長的距離,但我還是將自己的這段自學經歷分享出來,希望能夠幫助朋友們少走一些彎路,同時也期待和高手一起學習、提高。好了,今天的分享就至此為止。

更多精彩內容,請關注公眾號良許Linux,公眾內回覆1024可免費獲得5T技術資料,包括:Linux,C/C++,Python,樹莓派,嵌入式,Java,人工智慧,等等。公眾號內回覆進群,邀請您進高手如雲技術交流群。

Linux應用開發自學之路

相關文章