學習C語言不是一朝一夕的事情,但卻也不是需要花費幾年時間才能精通的。
那麼如何以最小的代價,學習C語言呢? 這最小的代價也絕不是什麼捷徑,而是以最短的時間去收獲最多的知識,但同時也意味着你需要經曆艱苦的過程。學習C語言是如此,學習其他語言亦是如此。
一、要讀就讀好書,否則不如不讀
所有的初學者都面臨的一個問題便是:如何選取書。好的開始才是成功的一半,選擇一本優秀的教材便是事半功倍的關鍵因素。不幸的是,學校通常會幫你指定一本很差勁的C語言課本;而幸運的是,你還可以再次選擇。
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設計語言》)堪稱C語言中的經典,不過舊版的很多内容都已經過時了,和現在的标準C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《C Reference Manual》,是C語言标準的詳細描述,包括絕大多數C标準庫函數的細節,算得上是最好的标準C語言的工具書。 如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,内容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些曆史也不是什麼壞事。然後你可以挑戰一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細讀完并能透徹理解,你便可以放心大膽地在簡曆上寫“精通C語言”了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。而且,讀這樣的書,很容易打擊你學習的信心。如果你看不懂,那你一定是缺失了某些必備的基礎知識。此時,你要仔細分析自己需要補充哪些内容,然後再去書店尋找講述的這些内容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題編程環境影響着程序員的編程思維。Windows的編程環境大多依賴集成開發環境,比如Visual Studio。而Unix的編程環境下,程序員更加鐘愛Makefile與控制台。顯而易見,集成開發環境更容易上手一些。在Windows上學習C語言,隻需要會按幾個基本的Visutal C 工具欄按鈕就可以開始寫Hello, World!而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學習C語言去專門裝一個Unix系統,似乎有點不劃算。
對于一個隻懂得Windows基本操作、連DOS是什麼都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個小程序遠比學習ls、cat等命令有趣多了,況且我們要專注于C語言本身,就不得不暫時忽略一些東西,比如編譯鍊接的過程、Makefile的寫法等等。不是說略過不學,而是後續在學。
所以小編建議初學者應該以Visual C 6.0或者Dev C 作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。Visual C 6.0使用很方便,調試也很直觀,但其默認的編譯器對C标準的支持并不好,而Dev C 使用gcc編譯器,對C99的标準都有較好的支持。
等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言高級教程都是基于Unix平台的(比如《C專家編程》)。轉變的過程雖然說是痛苦的,你需要面對的是各種紛繁複雜的命令,完全不同于Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數的聯機手冊,還可以看到最優秀的代碼風格
歸結起來就是一句話:初學C語言,建議使用Windows系統和集成開發環境,在準備向“高手”方向努力時,請先轉向Unix平台。
三、萬事俱備,你就是東風書已經選擇完成,環境配置完成,正所謂萬事俱備,隻欠你的努力了。從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這不是一個好的做法。前言是作者對整本書的大體簡介,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要浏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。
學習C語言,必需要注意每一個細節,書上的例子代碼一定要自己親自敲一遍,編譯執行輸出都跟書上說的一緻才能算是學完了一個例子,如果不一緻,就要仔細找原因。除了書本上有的例子,自己還要“創造”一些例子,比如學習運算符優先級的時候,可以寫幾個相同的表達式,在不同的位置加上括号,看看有哪些不同的行為,比如p 和(p) ,又比如a = b == c、(a = b) == c和a = (b == c)等等。自己抄的書上的例子以及改造之後的例子,還有自己“創造”的例子,都應該仔細地歸類保存,并且要在源代碼中寫上簡短的注釋,闡述這個例子的意圖。
例子之後就是習題了,小編建議初學者把所有的習題都獨立做一遍,然後對照答案的代碼,看看自己的代碼有那些不足,再試着修改自己的代碼。很多人不重視習題,這是極大的錯誤,因為作者通常會在習題中說明一些重要的道理,而不是單純地檢驗前面的知識。
也許你認為這樣學習太慢,其實不然。學得細緻就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆财富。所謂好記性不如爛筆頭,就是這個道理。
仔細讀書、認真抄寫源代碼、獨立完成習題外更進一步的實驗,最後将所有的代碼留下,成為自己的經驗和财富,絕對的辛苦,也絕對的事半功倍。當然,這種方式隻适合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。
最後,還有非常非常重要的一點沒有提及,那就是代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。
為了幫助小夥伴們更好的學習C語言,小編整理了C語言的相關學習視頻及學習路線圖。
領取方式
關注小編後,評論轉發文章,私信回複:學習
,