系統程式員成長計劃-背景知識

來源:互聯網
上載者:User

轉載時請註明出處和作者連絡方式
文章出處:http://www.limodev.cn/blog
作者連絡方式:李先靜 <xianjimli at hotmail dot com>

對於是否寫這樣一章,我猶豫了很久,最後考慮到這個系列是針對新手而寫的,不應該對讀者做過多假設,這些基礎知識是必須掌握的,不能不介紹一下。如果你已經瞭解它們,可以放心的跳過本章。如果你是新手,請認真學習本章提到的內容。

基礎知識

C語言。千萬不要認為C語言過時了,它始終是開源社區,特別是系統軟體和嵌入式系統中的王者,在可以預見的未來,C語言將持續煥
發出生命力。有些外行認為C語言不適合開發大型軟體,這是大錯特錯了,作業系統核心,虛擬機器,資料庫管理系統,圖形引擎和WEB伺服器等大型軟體幾乎都是
用C語言開發的。相反C語言不適合開發小程式,這時候指令碼語言更能顯出威力。C語言能經久不衰,自有它的道理:

C語言是最簡單的語言之一,大部分程式設計語言在出現時都以其簡單而獲得好評,幾乎全部都隨著時間的推移變得越來越複雜,C語言經過數十年的發展,卻始
終保持其簡潔和優美。初學者認為C語言難學,其實主要是對電腦本身不理解,花點時間去學習一下電腦群組成原理和作業系統原理,再來學習C語言就很簡單
了。一旦掌握了它,你會發現C語言的每項特性都是必須,常用的,根本不需要記憶任何不必要的東西,它的特性真是減無可減了。

C語言是運行時效率最高的程式設計語言之一。同樣的演算法,C語言通常比其它語言更高效,這也它作為系統軟體主流程式設計語言的原因之一。有些動態語言號稱比較C語言更快,那都是騙人的,拿一個特定演算法作為例子不足為證。選擇是高效的演算法是根本,但C語言更能把高效發揮到極致。

C語言是最直觀的語言之一。C語言能夠直觀的表達程式員的想法,不像其它一些語言,一行簡單的代碼,你不清楚裡面到底做了什麼,不清楚它將花多少時
間執行。C語言的直觀性很好的滿足了程式員好奇心,使用C語言你更能感覺編程是一種藝術。一切盡在掌握之中,更能滿足你的成就感。

在系統程式員煉成計劃中,前面部分都是使用C語言作為樣本,讀者應該找本C語言入門書籍看看,可以先通讀一遍,不求甚解都可以,隨著後面的課程而深入的學習。

資料結構與演算法。不管使用什麼設計方法和開發過程,資料結構與演算法都是軟體開發的基石。打好基礎在以後的工作中會事半功倍。後繼
課程也都是這些基本資料結構和演算法為中心,講述如何用這些基本的材料構建大型系統。讀者暫時無需精通資料結構和演算法,先找本書看看,瞭解一下像雙向鏈表、
動態數組、隊列、堆、棧、hash表、排序和尋找的基本原理就行了,後面我們會以這些資料結構題材反覆的練習。

開發環境

本系列文章重點講解軟體開發的基礎知識,這些知識不依賴於特定的平台和開發環境,讀者可以根據自己喜好來選擇,我們推薦讀者使用下列開發環境:

作業系統使Linux。Linux是最適合程式員使用的作業系統,它是開源的,有多種不同的發行版可以免費使用,這些發行版預設安裝就帶了開發工具。學習Linux本身就需要一本書,如果你從來沒接觸過Linux,也不用驚慌,花幾個小時學會十來個常用的命令就夠了,其它的以後慢慢再學。

編輯器使用VIM。編輯器的功能是建立源檔案,也就是把我們編寫的代碼輸入到電腦中。vim和emacs是Linux下最流行的
代碼編輯器,vim入門更簡單,功能也很強大。它支援尋找剪下替換等基本編輯功能,也支援符號跳轉和代碼補全等進階編輯特性。vimtutor是最好的入
門教材,初學者跟著這個tutor學習一遍就可以用它來編程了,等用得比較熟練之後,再去掌握那些進階功能。你掌握得越熟練,你就能更高效的工作,這個投
資是值得的。

編譯器使用gcc。編譯器的功能是把原始碼翻譯成電腦可以“讀懂”的機器語言。在Linux下可用的C編譯器有好幾個,gcc
是其中最流行的,大多數發行版都預設安裝了gcc。gcc的參數很多,看起來很複雜,我們只掌握最簡單的用法就好了,大概像這樣的:gcc -g
test.c -o test。

調試器使用gdb。調試器的功能是協助程式員定位錯誤,這是最後一招,也是最不期望的一招,使用調試器越多通常說明你的水平越
差,不過對初學者來說,掌握這個工具必不要可少的。gdb的功能強大,推薦讀者使用命令列的gdb,它更靈活更方便。讀者先掌握如何設定斷點、顯示變數和
繼續執行等基本操作就行了。

工程管理使用make。make是Linux下最流行的工程管理工具,Makefile是make的輸入檔案,它本身就相當於一
種程式設計語言,執行make相當於調用其中的函數。編寫Makefile是一件繁瑣無趣的工作,幸好我們不用學習它,後面我們會講解make的改進版
automake,現在你能寫出下面這種簡單的Makefile就行了:
all:
    gcc -g test.c -o test
clean:
    rm -f test

在這裡,你可以把all看作一個函數名,gcc -g test.c -o
test是函數體(前面加tab),它的功能是編譯test.c成test,在命令列運行make
all就相當於調用這個函數。clean是另外一個函數,它的功能是刪除test。如果你有時間學習一下Makefile當然更好,如果沒有時間,瞭解這
麼多也夠了。

我在培訓初學者時,如果他從來沒用過Linux,沒有用C語言寫過程式,我會給兩到四周時間學習上述內容。如果讀者處於類似的水平,也不急著看後面的課程,好好學習一下這裡提到的內容。

(歡迎批評,鼓勵和建議)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.