1. 程式人生 > >思路不對努力白費!0基礎學好C語言程式設計,必須掌握的學習思路!

思路不對努力白費!0基礎學好C語言程式設計,必須掌握的學習思路!

計算機行業發展非常快,大學裡的教育基本都跟不上實際的社會需求。如果你所在的學校還在指定大家使用譚浩強的教材,或使用VC6.0來教大家上機實驗,那你不妨看看本文,這裡有一些建議可以幫助你不會脫離社會太遠。

考慮到這是一個過來人感覺很基礎,但是對於初學者又覺得困難重重的問題,我想如果這篇文章要想寫得不讓你覺得專業名詞扎堆,內容高深莫測,讀完還是不知所云,那最好的辦法也許是,我們通過溝通的方式把整個「C語言應該怎麼學」的問題由小及大的展開,慢慢來談。

在這裡插入圖片描述

在開始之前,我們先來做一個小測試。

一、小測試,你準備好學習C語言了嗎?

  1. 你是否聽說過二進位制數,他們是如何進行運算的?(基本的數的進位制知識)

  2. 你能說出一個最小的計算機系統由哪些部分構成嗎?(基本的計算機結構知識)

  3. 計算機是如何儲存影象的? (數字化原理)

上面這三個問題,能回答的同學舉手。如果你舉手了,那麼我們進入下階段的討論,否則,我將告訴你,你現在最重要的事情,是趕緊找一本《電腦科學導論》把預備知識補充好。

因為——

C語言說到底是一門以記憶體為中心的程式語言,你能不能學懂它,其實很大程度上不是取決於你智商高低,而是你是否擁有紮實的計算機結構、儲存、運算原理方面的知識!!

在這裡,我想強調,任何新知識的學習都是有一定的前提條件的。C語言學習的前提條件就是,對計算機系統要有一個整體的,科學的基礎認識。 脫離了這個基礎認識,一切都很困難。

所以,有些同學學不會C語言,不是因為他們智商不行,而是因為他們沒有準備好。

我花時間寫這篇文章來給大家講C語言的學習,當然是希望大家真正的學會、學懂C語言,並能夠真正感覺到它的用處,所以很抱歉我不會像培訓機構那樣,告訴你“零基礎”就能夠開始學。但如果你真的按照我說的去做,那麼至少從現在起,你確實是開始有點“學院派”的認真了。

在這篇文章的最後,我推薦了一本我曾經讀過的《電腦科學導論》。這本書可以說是我的啟蒙書,我讀過,真心覺得好,所以推薦給需要的同學。

好了,接下來我們進入C語言的學習過程。

在這裡插入圖片描述

二、學C語言到底學些什麼—— 「語法」和「函式庫」

C語言學習的關鍵,是要先搞明白,學C語言到底是在學些什麼?

我這麼一問,有的同學就要翻開課本,指著目錄說,我知道我知道,有變數,資料型別,迴圈語句,函式,哦哦哦,還有指標等等!

很遺憾,如果你以為學習C語言就是學習這些東西,那你得趕緊糾正一下看法,否則接下來的學習會困難重重。因為我曾經就是這麼掉到坑裡的,這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節,又讓我遲遲不能接觸到更重要的知識,結果是眼高手低——知道許多別人不知道的無用知識,但是又寫不出什麼真正像樣的程式來。

所謂「語法」,就是入門教材裡最著重講解的內容。也就是那些所謂的變數、資料型別、分支判斷、迴圈、函式、指標等等。

這些內容比較枯燥,但是好訊息是這些內容並不難,都是一些格式化的東西。只要你多練習,就會自動的刻在你的腦子裡,成為一種下意識的習慣。

但是 「語法」本身其實沒什麼用。因為它只是一種格式規範,你學得再好,也不能引導你寫出厲害的程式。因為在軟體設計中,實際上最核心的部分還是在於其 「函式庫」部分。
在這裡插入圖片描述

​關於怎麼快速學C/C++遊戲程式設計,有什麼方法,這個問題,想必大家都已經心中有數了,打算深入瞭解這個行業的朋友,可以加下小編上面的C/C++遊戲程式設計學習裙【 玖四捌,玖伍四,四捌四】,不管你是小白還是大牛,小編我都歡迎,不定期分享乾貨,包括小編自己整理的一份2018最新的C/C++資料和0基礎入門教程,歡迎初學和進階中的小夥伴。

什麼是 「函式庫」?

簡單來說,函式庫就是別人編寫好的C函式,直接提供給你用,你只要呼叫裡面的函式,就能實現一定的功能。例如 printf() 函式,你肯定知道,只要呼叫這個函式,你就能夠在那個黑糊糊的窗口裡顯示一段文字。你並不明白 printf() 的內部工作原理,但是你知道你只要按照說明去呼叫,就能夠實現對應的功能。

這就是函式庫——別人寫好的,打包送到你面前,你可以自由呼叫來做各種各樣的事情的函式集合。

我來說幾個來自函式庫的函式,例如 CreateWindowEx() 函式可以用來建立一個窗體(這個函式由微軟提供),例如 GaussianBlur() 函式可以用來對一個影象進行高斯模糊處理(這個函式由 OpenCV 提供),再比如 e連結 函式可以建立一個 HTTP 服務程式(這個函式由 libevent 提供)……

其他還有什麼庫函式?太多了。從控制網路通訊,到擷取視訊畫面並分析其中的人臉位置,到加解密本地檔案,甚至包括微信收發訊息,抓取淘寶商品資訊……庫函式的數量和有用程度遠遠超乎大家的想象。

誒?你從來沒聽說過還有這些東西?課本里也沒提到?

那是因為你看的是入門教材,著重講解語法,順帶提到了少量的 C 語言自帶的庫函式而已。事實上 C 語言包含的庫函式本身就有不少,但是更多更強大的還是許多第三方庫函式,例如我上面提到的這些。

重點是在於,我想告訴你,庫函式才是你學習C語言並將其應用於實際的關鍵!!

學會呼叫別人的庫函式,甚至寫出自己的庫函式,都是極其重要的。因為一個函式,本質上就是一個功能單位。你擁有的基礎設施越多,你的發揮空間越大。道理就是這麼簡單。這就是我需要向大家強調的第二個觀點,要想寫出實用的C程式,一大關鍵就是研究並學會使用各種庫函式。

你看見隔壁王二寫了個三維程式能讓一個彩色的立方體在空中旋轉?快找 OpenGL 庫函式來用。什麼?劉大寶寫了個網路軟體能在局域網裡聊天?快找 Socket 庫來用。

看見了嗎?庫函式有多重要?

但是,函式庫的學習並不是孤立的。許多庫函式背後需要一定的領域知識支撐。同樣如我第一個觀點所述,需要預備知識。學懂一個函式庫,代表的不僅僅是明白如何呼叫那麼簡單, 而更反映了我們對一個特定領域——網路、數字影象、密碼學、作業系統等的認識。

在這裡插入圖片描述

三、基本的學習過程與一般規律

如我前面所述,C語言學習主要是以語法入門,然後到函式庫。再具體一些來說,包括以下階段:

  1. 學習基礎語法

  2. 學習簡單的少數幾個C語言自帶的函式

  3. 學習一些程式設計的基礎知識(資料結構,演算法)

  4. 學習更多更強大的C語言自帶的函式

  5. 學習一些特定應用領域的基本理論知識(作業系統,資料庫,網路,影象……)

  6. 應用上一階段學習的到知識進一步學習其他人提供的函式庫(網路處理、作業系統管理、影象、密碼學等等)

對於本科階段的同學來說,著重學好1-4,有選擇的學習一下5-6,做一些小作品出來,就已經非常非常不錯了。這就是一般的學習規律。說得很簡短,但是要做到真的很不容易。

在這裡插入圖片描述

四、書籍推薦

基礎(C語言入門,初學,程式設計基礎)

  1. 《C語言程式設計:現代方法》(第2版)(C Programming: A Modern Approach, 2nd Edition, K.N.King)

  2. 《深入理解計算機系統》(修訂版或第2版)(Computer Systems: A Programmer’s Perspective, Randal E. Bryant et al),閱讀建議

  3. 《C語言程式設計》(第2版)(The C Programming Language, Brian W. Kernighan & Dennis M. Ritchie)

  4. 《程式設計師修煉之道》(The Pragmatic Programmer: From Journeyman to master, Andy Hunt & Dave Thomas)

核心/驅動

  1. 《Linux核心設計與實現》(第3版)(Linux Kernel Development, 3rd Edition, Robert Love)

  2. 《Linux裝置驅動程式》(第3版)(Linux Device Driver, 3rd Edition, Jonathan Corbet et al)

  3. 《深入Linux核心架構》(Professional Linux Kernel Architecture, Wolfgang Mauerer)

應用

  1. 《UNIX環境高階程式設計》(Advanced Programming in the UNIX Environment, W. Richard Stevens)

  2. 《UNIX網路程式設計》(Unix Network Programming, W. Richard Stevens)

進階

  1. 《C陷阱與缺陷》(C Traps and Pitfalls, Andrew Koenig)

  2. 《C專家程式設計》(Expert C Programming, Peter van der Linden)

  3. 《ARM嵌入式系統開發:軟體設計與優化》(ARM System Developer’s Guide: Designing and Optimizing System Software, Andrew Sloss et al)

你們在學習困難中遇到的問題是什麼呢?歡迎提問,抽空給大家解答!