在 「關於我 」那篇博文裡,朋友們應該知道了我不是科班出身,是由機械強行轉行到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個習慣:敏捷開發修煉之道」這本書。
由於我是轉行,我自知底子薄,起點比別人落後很多,因此我很刻苦學習。我就住在公司附近,公司8點上班,我依然6點起床,12點睡覺。平時沒事的時候就在公司學習,看**,寫**,調**,甚至好幾個週末也是在公司度過。為了轉行我一心撲在了學習上,放棄了一切娛樂活動,只為能趕上同事一點半點。這個狀態一直持續了我在這個公司的整個過程。
可惜,一年之後我不得不離開了,因為我老婆在廣州,我去廣州追隨我老婆了。由於我面試時的不錯表現,以及我不錯的英語口語,我順利的被廣州一家外資世界500強錄用。我的新崗位是linux應用開發工程師,使用c++開發。而在那時,我既不會linux,也不會c++,所以公司敢錄用我真的是勇氣可嘉。
我這家公司裡我依然保持著早上6點起床,晚上11點睡覺的習慣。這樣早上有1個小時,晚上3個小時,班車上3個小時,一天總共有7個小時可以用於學習。而週末我會睡個懶覺,7點起床,依然11點睡覺,週末幾乎不出門,所以週末又有大量的時間可以用來學習。
對於linux應用的學習,主要有六部分:1. 環境搭建;2. 基本操作;3. 系統程式設計;4. 網路程式設計;5. 資料庫程式設計,6. shell程式設計。下面一一詳細介紹。
1. 環境搭建
作為linux工程師,毋庸置疑一定需要linux環境。對於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應用程式設計書籍推薦:
學完以上六部分,基本就有能力完成linux環境下的應用程式設計了。當然,在有些場合我們可能還需要用到python指令碼。像我公司的專案部分指令碼就是用python完成的。對於python的入門,可以參考「簡明python教程」。但如果想進一步提高的話,那就需要閱讀大量書籍了。對於linux層級的指令碼應用,掌握一些基礎的足夠了。
以上就是我的linux應用開發自學之路,雖然我離高手還有很長的距離,但我還是將自己的這段自學經歷分享出來,希望能夠幫助朋友們少走一些彎路,同時也期待和高手一起學習、提高。好了,今天的分享就至此為止。
iOS開發自學心得
陸陸續續從最開始學習ios到現在從事ios開發工作已經有乙個年頭了,在這裡跟大家分享一下一些學習心得。2 網上下了幾本書,看了下object c的一些基本語法和原理 學過c的入手起來比較快 3 看了幾本關於ios開發的書,對ios開發有一些大致的了解,如果不動手做些demo,看書基本沒啥用,過目就忘...
Web前端開發 自學筆記
一 html認知 1 html骨架標籤 1 html標籤 網頁的整體 2 head標籤 網頁的頭部 3 body標籤 網頁的身體 4 title標籤 網頁的標題 2 注釋 1 注釋的作用 為 新增的具有解釋性 描述性的資訊,主要用來幫助開發人員理解 瀏覽器執行 時會忽略所以的注釋 2 注釋的快捷鍵 ...
Qt開發自學1 認識Qt
1 先看mainwindow.件 在namespace命名空間下進行宣告,對具體類進行宣告 explicit防止隱式轉換 建構函式,析構函式 基礎ui類,所有控制項都在全域性指標 ui下面。2 再看mainwindow.cpp檔案 各種函式的具體實現 建構函式 析構函式 3 工具工作列 3.1歡迎 ...