寫給c語言初學者的話
--.chinaunix.***(ldap)
前些天我寫了一篇「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的一些經驗:
這個題目可以使你練習到tcp/ip的基本程式設計方法和檔案操作的基本方法對於後面學習核心的檔案系統會有幫助的。
2、當你對unix系統有了些了解後,同時對於大部分的系統呼叫(關鍵是關於檔案的系統呼叫,對於linux系統的核心來說從檔案系統入手相對容易一些)也有了清楚的認識後,再推薦你一本書《linux核心情景分析》,該書是關於linux核心的經典之作唯一美中不足的是沒有關於網路子系統的詳細介紹。你可以從檔案系統的系統呼叫入手,慢慢的你就會對linux有了乙個更深入的認識。同時注意很多經典的方法和思想在linux中的運用。你會認識到為什麼unix把所有的東西都看成檔案,對什麼東西操作都是對檔案操作,你會慢慢體會到unix的經典之處了。
3、當你對linux核心有了些了解後,你就可以找個方向來專門發展了,如果你想對眼下流行的網路程式設計感興趣,那麼再推薦你一本書《tcp/ip詳細解釋》,這本書是關於tcp/ip協議的經典之作。你會學習到tcp/ip協議棧是如果實現的,為什麼,各層協議之間是如何工作的。你看完了這本書後,你就可以自己寫乙個dos攻擊程式和sniffer了。
我說的簡單,其實我提到的每本書至少都夠你研究很長時間的,所以希望初學者別著急不驕不躁,相信只要努力過,一定會成為高手的。
在寫**的時候大家要注意養成好的**習慣和風格還有抽象能力。
函式要小
盡量的把函式弄的通用點,**行少點,乙個函式只完成乙個簡單的功能,一眼就能看出來此函式有沒有**錯誤,每個函式都是健壯的,那麼你的程式就是健壯的。
**要少 完成乙個功能的時候在邏輯清楚的情況下**越少越好,千萬不要比**誰寫的多啊。
演算法要好 在完成乙個功能的時候要考慮效率,目前計算機的記憶體很大,所以記憶體已經不是首要考慮的因素了,但是在某些特殊的地方效率還是很重要的。有效率高的演算法,就不用效率低的演算法,看看本版有一篇精華貼子是關於把乙個字元竄兩邊的空格去掉的帖子(trim),很多人都提出了演算法,但是有乙個演算法是最好的,效率最高,**最少,是演算法要好的最好體現
命名要清 命名要清楚,最要用漢語中的謂賓結構如set_buffsize()
檔案要多 盡量把乙個大的程式安功能分成多個檔案,乙個檔案盡量不要超作1000行,這樣就很清楚的知道那個檔案**是健壯的,那個檔案有可能有隱患,在**檢查的時候可以有針對性的檢查某幾個檔案
寫給C語言初學者的話
前些天我寫了一篇 unix c語言值得注意的地方 一貼,回貼中談到學習 國外的開源軟體 中的高質量 的問題,但是有朋友跟我說,在看 的過程中感覺難度很大,想想也是如此,動輒十幾萬行的程式如果沒有人指點的話是很難找到切入點的,所以我撰寫了此文希望能對廣大c語言愛好者有所幫助,在文章中有很多煽情的地方還...
寫給C語言初學者的話
學習c語言不要心急,要循序漸進,須知欲速則不達的道理。千萬不要盲目的寫大量的 這樣做只會堆出大量的低檔次 同時使你形成不好的 習慣。先買本基礎的教材來看看,使得對c語言有個初步的認識,其實我現在手頭上還放著 the c programming language 和 c程式設計 第二版 大學教材 呢,...
寫給C語言初學者的話
盡量的把函式弄的通用點,行少點,乙個函式只完成乙個簡單的功能,一眼就能看出來此函式有沒有 錯誤,每個函式都是健壯的,那麼你的程式就是健壯的。要少 完成乙個功能的時候在邏輯清楚的情況下 越少越好,千萬不要比 誰寫的多啊。演算法要好 在完成乙個功能的時候要考慮效率,目前計算機的記憶體很大,所以記憶體已經...