Unix C語言值得注意的地方(轉)

ba發表於2007-08-11
Unix C語言值得注意的地方(轉)[@more@]前些天我寫了一篇“Unix C語言值得注意的地方”一貼,回貼中談到學習國外的開源軟體中的高質量程式碼的問題,但是有朋友跟我說,在看程式碼的過程中感覺難度很大,想想也是如此,動輒十幾萬行的程式如果沒有人指點的話是很難找到切入點的,所以我撰寫了此文希望能對廣大C語言愛好者有所幫助,在文章中有很多煽情的地方還請大家原諒,因為這篇文章使我想到了剛剛畢業的時候,所以有點感慨。同時文章中還有一些個人偏見存在,希望持反方向意見的人多多包涵,既然是偏見,那它只是偏見。

學習C語言不要心急,要循序漸進,須知欲速則不達的道理。千萬不要盲目的寫大量的程式碼,這樣做只會堆出大量的低檔次程式碼,同時使你形成不好的程式碼習慣。先買本基礎的教材來看看,使得對C語言有個初步的認識,其實我現在手頭上還放著《The C Programming Language》和《C程式設計(第二版)》(大學教材)呢,有些時候我還會為了一些基本性的概念來翻翻看呢。

如果你的身邊有高水平的開發人員,那麼再好不過了,多多向別人請教。但是就我瞭解的情況來看,大部分的初學者並沒有在進入IT行業後得到一個資深的軟體工程師的指導,而恰恰是在入司後就被推向前線,替老闆們騙取客戶口袋裡的錢,在這個過程中很多人都是在苦苦的堆程式碼,賺著可憐的薪資。儘管我也是在拿著可憐的錢,但是有一點我是幸運的,因為我在我的第一家公司裡遇到了帶領我走向Unix和C語言領域的導師,正是他的一句“Unix和C語言是你一生都要去學習的技術”讓我狂熱的愛上了它們,正是他的一句“你有root口令,並不是你有root口令這麼簡單,更多的是一種責任”(說這句話的前提是我用root口令進入SUN伺服器後刪除了別人的東西,因為我認為這些是無用的東西)使我對責任這兩個字有一個非常具體的認識。所以在這裡請廣大讀者允許我用一些篇幅來對我neusoft的導師yuhj表示深深的感謝。同時也對CU的朋友們表示深深的感謝,可以說,你們是我的第二導師,我已經離不開你們了。

希望大家都比我幸運,沒有得到幸運之神垂青的朋友們也不要灰心,多上CU上來和大家交流交流,討論討論吧,但是注意在論壇上討論的時候不要刨根問底,很多事情不是一句話就說的清楚的,別人只能給你一個指引,再具體的只有靠自己多研究研究、琢磨琢磨。閒暇的時候去精華區看看,你會有意外的收穫的。

千萬不要一看到英文就頭大,儘管我也是這樣,並不是看不懂(畢竟也接受過CET4、6級啞巴英語的教育,還是能看懂的)。man的幫助是最好的教材並且很多國外的論壇對技術的描述是很清楚的,也是很簡單的,更重要的是,你會在上面看到些在國內論壇上看不到的東西(計算機的技術一直都是由西方向東方傳遞,希望有朝一日老外都到我們中國的論壇上來尋找技術資料)。

學習C語言有一件事情也是必須要學的,而且最好是同時學,有的朋友可能已經猜出來了,沒錯,是Unix。Unix和C語言可以說大家提的很多了,有Unix的地方就有C語言,同時也正是有了C語言,才有了Unix(我們還是先討論討論雞生蛋還是蛋生雞的哲學問題吧,誰拿蕃茄打我),甚至有人說C語言就是為了Unix而設計的,可見Unix和C語言之間的非同尋常的關係。學習Unix現在容易多了,以前Unix都是執行在大型的伺服器上的,可是現在有了Linux(按照GNU的意思,Linux就是Linux還不能叫Unix),大家可以在自己的PC上裝一套Linux來學習,注意學習Linux不要拿Linux和Windows來比較,它們不可同日而語。Linux會讓你知道什麼是經典,永遠讓你在一個方向上大展宏圖,Windows只會讓你在別人的套子裡耍上大刀,不時的還要換一個套子耍耍。下面羅列了一些我在學習Unix的一些經驗:

1、學習Unix和C語言,先向大家推薦一本書《Unix高階環境程式設計》,這本書是學習Unix和C的經典之作,儘量把書中提到的系統呼叫都寫個練習程式,先感性的認識一下Linux系統提供給使用者的系統呼叫都是幹什麼的,怎麼用。系統呼叫是核心提供給使用者的功能用以申請核心服務,對於Linux核心的學習,從系統呼叫入手是個不錯的辦法。學習過程可以參看Linux的聯機幫助,和網路上的資料。當你覺得差不多了的時候,那我給大家出一道聯絡題目吧:實現一個ftp伺服器和客戶端的功能,完全可以自己定義一些應用層的協議,只要能實現用簡單的命令傳輸檔案就可以了。

這個題目可以使你練習到TCP/IP的基本程式設計方法和檔案操作的基本方法對於後面學習核心的檔案系統會有幫助的。


2、當你對Unix系統有了些瞭解後,同時對於大部分的系統呼叫(關鍵是關於檔案的系統呼叫,對於Linux系統的核心來說從檔案系統入手相對容易一些)也有了清楚的認識後,再推薦你一本書《Linux核心情景分析》,該書是關於Linux核心的經典之作唯一美中不足的是沒有關於網路子系統的詳細介紹。你可以從檔案系統的系統呼叫入手,慢慢的你就會對Linux有了一個更深入的認識。同時注意很多經典的方法和思想在Linux中的運用。你會認識到為什麼Unix把所有的東西都看成檔案,對什麼東西操作都是對檔案操作,你會慢慢體會到Unix的經典之處了。

3、當你對Linux核心有了些瞭解後,你就可以找個方向來專門發展了,如果你想對眼下流行的網路程式設計感興趣,那麼再推薦你一本書《TCP/IP詳細解釋》,這本書是關於TCP/IP協議的經典之作。你會學習到TCP/IP協議棧是如果實現的,為什麼,各層協議之間是如何工作的。你看完了這本書後,你就可以自己寫一個dos攻擊程式和sniffer了。

我說的簡單,其實我提到的每本書至少都夠你研究很長時間的,所以希望初學者彆著急不驕不躁,相信只要努力過,一定會成為高手的。

在寫程式碼的時候大家要注意養成好的程式碼習慣和風格還有抽象能力。

下面給出大家在寫程式碼的時候的20字方針:

函式要小
儘量的把函式弄的通用點,程式碼行少點,一個函式只完成一個簡單的功能,一眼就能看出來此函式有沒有程式碼錯誤,每個函式都是健壯的,那麼你的程式就是健壯的。

程式碼要少 完成一個功能的時候在邏輯清楚的情況下程式碼越少越好,千萬不要比程式碼誰寫的多啊。

演算法要好 在完成一個功能的時候要考慮效率,目前計算機的記憶體很大,所以記憶體已經不是首要考慮的因素了,但是在某些特殊的地方效率還是很重要的。有效率高的演算法,就不用效率低的演算法,看看本版有一篇精華貼子是關於把一個字元竄兩邊的空格去掉的帖子(trim),很多人都提出了演算法,但是有一個演算法是最好的,效率最高,程式碼最少,是演算法要好的最好體現

命名要清 命名要清楚,最要用漢語中的謂賓結構如set_buffsize()

檔案要多 儘量把一個大的程式安功能分成多個檔案,一個檔案儘量不要超作1000行,這樣就很清楚的知道那個檔案程式碼是健壯的,那個檔案有可能有隱患,在程式碼檢查的時候可以有針對性的檢查某幾個檔案.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-948027/,如需轉載,請註明出處,否則將追究法律責任。

相關文章