學習C語言基本思路與參考書籍【強烈推薦】
計算機行業(yè)發(fā)展非??欤髮W里的教育基本都跟不上實際的社會需求。如果你所在的學校還在指定大家使用譚浩強的教材,或使用VC6.0來教大家上機實驗,那你不妨看看本文,這里有一些建議可以幫助你不會脫離社會太遠。
本文引用地址:http://www.butianyuan.cn/article/277225.htm考慮到這是一個過來人感覺很基礎,但是對于初學者又覺得困難重重的問題,我想如果這篇文章要想寫得不讓你覺得專業(yè)名詞扎堆,內(nèi)容高深莫測,讀完還是不知所云,那最好的辦法也許是,我們通過溝通的方式把整個「C語言應該怎么學」的問題由小及大的展開,慢慢來談。
在開始之前,我們先來做一個小測試。
一、小測試,你準備好學習C語言了嗎?
1. 你是否聽說過二進制數(shù),他們是如何進行運算的?(基本的數(shù)的進制知識)
2. 你能說出一個最小的計算機系統(tǒng)由哪些部分構(gòu)成嗎?(基本的計算機結(jié)構(gòu)知識)
3. 計算機是如何存儲圖像的? (數(shù)字化原理)
上面這三個問題,能回答的同學舉手。如果你舉手了,那么我們進入下階段的討論,否則,我將告訴你,你現(xiàn)在最重要的事情,是趕緊找一本《計算機科學導論》把預備知識補充好。
因為——
C語言說到底是一門以內(nèi)存為中心的編程語言,你能不能學懂它,其實很大程度上不是取決于你智商高低,而是你是否擁有扎實的計算機結(jié)構(gòu)、存儲、運算原理方面的知識!!
在這里,我想強調(diào),任何新知識的學習都是有一定的前提條件的。C語言學習的前提條件就是,對計算機系統(tǒng)要有一個整體的,科學的基礎認識。脫離了這個基礎認識,一切都很困難。
所以,有些同學學不會C語言,不是因為他們智商不行,而是因為他們沒有準備好。
我花時間寫這篇文章來給大家講C語言的學習,當然是希望大家真正的學會、學懂C語言,并能夠真正感覺到它的用處,所以很抱歉我不會像培訓機構(gòu)那樣,告訴你“零基礎”就能夠開始學。但如果你真的按照我說的去做,那么至少從現(xiàn)在起,你確實是開始有點“學院派”的認真了。
在這篇文章的最后,我推薦了一本我曾經(jīng)讀過的《計算機科學導論》。這本書可以說是我的啟蒙書,我讀過,真心覺得好,所以推薦給需要的同學。
好了,接下來我們進入C語言的學習過程。
二、學C語言到底學些什么—— 「語法」和「函數(shù)庫」
C語言學習的關鍵,是要先搞明白,學C語言到底是在學些什么?
我這么一問,有的同學就要翻開課本,指著目錄說,我知道我知道,有變量,數(shù)據(jù)類型,循環(huán)語句,函數(shù),哦哦哦,還有指針等等!
很遺憾,如果你以為學習C語言就是學習這些東西,那你得趕緊糾正一下看法,否則接下來的學習會困難重重。因為我曾經(jīng)就是這么掉到坑里的,這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節(jié),又讓我遲遲不能接觸到更重要的知識,結(jié)果是眼高手低——知道許多別人不知道的無用知識,但是又寫不出什么真正像樣的程序來。
所謂「語法」,就是入門教材里最著重講解的內(nèi)容。也就是那些所謂的變量、數(shù)據(jù)類型、分支判斷、循環(huán)、函數(shù)、指針等等。
這些內(nèi)容比較枯燥,但是好消息是這些內(nèi)容并不難,都是一些格式化的東西。只要你多練習,就會自動的刻在你的腦子里,成為一種下意識的習慣。
但是 「語法」本身其實沒什么用。因為它只是一種格式規(guī)范,你學得再好,也不能引導你寫出厲害的程序。因為在軟件設計中,實際上最核心的部分還是在于其 「函數(shù)庫」部分。
什么是 「函數(shù)庫」?
簡單來說,函數(shù)庫就是別人編寫好的C函數(shù),直接提供給你用,你只要調(diào)用里面的函數(shù),就能實現(xiàn)一定的功能。例如 printf() 函數(shù),你肯定知道,只要調(diào)用這個函數(shù),你就能夠在那個黑糊糊的窗口里顯示一段文字。你并不明白 printf() 的內(nèi)部工作原理,但是你知道你只要按照說明去調(diào)用,就能夠?qū)崿F(xiàn)對應的功能。
這就是函數(shù)庫——別人寫好的,打包送到你面前,你可以自由調(diào)用來做各種各樣的事情的函數(shù)集合。
我來說幾個來自函數(shù)庫的函數(shù),例如 CreateWindowEx() 函數(shù)可以用來創(chuàng)建一個窗體(這個函數(shù)由微軟提供),例如 GaussianBlur() 函數(shù)可以用來對一個圖像進行高斯模糊處理(這個函數(shù)由 OpenCV 提供),再比如 evhttp_new() 函數(shù)可以創(chuàng)建一個 HTTP 服務程序(這個函數(shù)由 libevent 提供)……
其他還有什么庫函數(shù)?太多了。從控制網(wǎng)絡通信,到截取視頻畫面并分析其中的人臉位置,到加解密本地文件,甚至包括微信收發(fā)消息,抓取淘寶商品信息……庫函數(shù)的數(shù)量和有用程度遠遠超乎大家的想象。
誒?你從來沒聽說過還有這些東西?課本里也沒提到?
那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函數(shù)而已。事實上 C 語言包含的庫函數(shù)本身就有不少,但是更多更強大的還是許多第三方庫函數(shù),例如我上面提到的這些。
重點是在于,我想告訴你,庫函數(shù)才是你學習C語言并將其應用于實際的關鍵!!
學會調(diào)用別人的庫函數(shù),甚至寫出自己的庫函數(shù),都是極其重要的。因為一個函數(shù),本質(zhì)上就是一個功能單位。你擁有的基礎設施越多,你的發(fā)揮空間越大。道理就是這么簡單。這就是我需要向大家強調(diào)的第二個觀點,要想寫出實用的C程序,一大關鍵就是研究并學會使用各種庫函數(shù)。
你看見隔壁王二寫了個三維程序能讓一個彩色的立方體在空中旋轉(zhuǎn)?快找 OpenGL 庫函數(shù)來用。什么?劉大寶寫了個網(wǎng)絡軟件能在局域網(wǎng)里聊天?快找 Socket 庫來用。
看見了嗎?庫函數(shù)有多重要?
但是,函數(shù)庫的學習并不是孤立的。許多庫函數(shù)背后需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函數(shù)庫,代表的不僅僅是明白如何調(diào)用那么簡單,而更反映了我們對一個特定領域——網(wǎng)絡、數(shù)字圖像、密碼學、操作系統(tǒng)等的認識。
三、基本的學習過程與一般規(guī)律
如我前面所述,C語言學習主要是以語法入門,然后到函數(shù)庫。再具體一些來說,包括以下階段:
1. 學習基礎語法
2. 學習簡單的少數(shù)幾個C語言自帶的函數(shù)
3. 學習一些程序設計的基礎知識(數(shù)據(jù)結(jié)構(gòu),算法)
4. 學習更多更強大的C語言自帶的函數(shù)
5. 學習一些特定應用領域的基本理論知識(操作系統(tǒng),數(shù)據(jù)庫,網(wǎng)絡,圖像……)
6. 應用上一階段學習的到知識進一步學習其他人提供的函數(shù)庫(網(wǎng)絡處理、操作系統(tǒng)管理、圖像、密碼學等等)
對于本科階段的同學來說,著重學好1-4,有選擇的學習一下5-6,做一些小作品出來,就已經(jīng)非常非常不錯了。這就是一般的學習規(guī)律。說得很簡短,但是要做到真的很不容易。
四、參考書籍
首先第一本,也是我認為最重要的書,是這本《計算機科學導論》??梢哉f,這本書是對我人生影響最大的兩本書之一。這本書通俗易懂,知識面廣,但又具有一定的深度。真是因為讀了這本書,才讓我建立了對計算機科學合理的基本認識。在不涉及太多的數(shù)學原理的情況下,這本書清晰的揭示了包括計算機的基本構(gòu)成,CPU運算的原理,內(nèi)存、硬盤、光盤是如何存儲數(shù)據(jù)的,編程的基本原理(機器語言、匯編語言,結(jié)構(gòu)化編程語言,面向?qū)ο缶幊陶Z言),以及網(wǎng)絡、數(shù)據(jù)壓縮等。
說白了,就是一本科普書。但是是一本偉大的科普書。入門者的福音書。
![說明: http://pic1.zhimg.com/e12a7dfd9919f8411f43eeb4152f8610_b.jpg](http://editerupload.eepw.com.cn/201507/a783d63fcca298b1878a3437e887803f.jpg)
然后,第二本,就是關于C語言語法的書籍了,說實話這部份我已經(jīng)沒有印象看的什么書了。因為我這個人有個毛病,就是喜歡東翻翻,西翻翻,哪里不懂就到處找書。可見這個部分其實沒有大家想象的那么固定,你只要找到一本自己看得懂的書,就是好書!不必太過于拘泥于書與書之間的優(yōu)劣比較。
最經(jīng)典的C語言入門書籍許多人肯定要說是 K&R 的那本。但是其實這本書對大多數(shù)初學者來說還是略難,如果有興趣也可以讀一讀。但我更建議你了解一些C語言之后再轉(zhuǎn)過來看看會更好。
柴田望洋的《明解C語言》最近是一本廣受歡迎的親切的C語言入門書。昨天我專門到書店翻了一下,這本書確實很不錯,親切,謙虛,易懂。但我想也未必適合所有人。如果你是希望學習曲線平緩一些的,可以考慮看看。
![說明: http://pic2.zhimg.com/a86f52cb9d043e1b38389c8e3510a971_b.jpg](http://editerupload.eepw.com.cn/201507/a26a863694733a8b5d875de6103a16e1.jpg)
![說明: http://pic2.zhimg.com/71415eb8211777be63311ebe5a23f269_b.jpg](http://editerupload.eepw.com.cn/201507/fa715960c21637756fab29b409533b01.jpg)
但是,再補充一本,如果對于那些已經(jīng)學得差不多的同學,必須得看看下面這本,這是我的至愛之一啊!^_^ 那就是吊炸天的《C Standard Library》,china-pub鏈接:C標準庫(C標準庫“圣經(jīng)”)
好好看看這本書,它是真正的頂級教材,因為——里面包含了標準庫實現(xiàn)的完整源碼,以及作者在實現(xiàn)時的思路講解。是一本值得收藏的超級力作。讓我們一睹頂級程序員的思維杰作。(吐嘈:這本書的翻譯還是有一些值得修正的地方,所以能收英文版的同學就直接收英文版了)
![](http://editerupload.eepw.com.cn/201507/8d2173b72b279cd7736e6497899468e8.jpg)
這幾本書其實并未涵蓋C語言學習的所有重要方面。稍后我會再放上一些來。今天打字打到手疼,就不繼續(xù)了。
五、晉級——通向更高境界之路
學無止境。更專業(yè)的學習至此其實才剛剛開始。
c語言相關文章:c語言教程
評論