选择大于努力!0基础学好C语言编程,首先要掌握的是什么?
互聯網時代更新換代太快,大學的書本,教育根本跟不上,所以如何用更少的時間掌握最前端的技術,方法很重要。
考慮到這是一個過來人感覺很基礎,但是對于初學者又覺得困難重重的問題,我想如果這篇文章要想寫得不讓你覺得專業名詞扎堆,內容高深莫測,讀完還是不知所云,那最好的辦法也許是,我們通過溝通的方式把整個「C語言應該怎么學」的問題由小及大的展開,慢慢來談。
在開始之前,我們先來做一個小測試。
一、小測試,你準備好學習C語言了嗎?
1. 你是否聽說過二進制數,他們是如何進行運算的?(基本的數的進制知識)
2. 你能說出一個最小的計算機系統由哪些部分構成嗎?(基本的計算機結構知識)
3. 計算機是如何存儲圖像的? (數字化原理)
上面這三個問題,能回答的同學舉手。如果你舉手了,那么我們進入下階段的討論,否則,我將告訴你,你現在最重要的事情,是趕緊找一本《計算機科學導論》把預備知識補充好。
因為——
C語言說到底是一門以內存為中心的編程語言,你能不能學懂它,其實很大程度上不是取決于你智商高低,而是你是否擁有扎實的計算機結構、存儲、運算原理方面的知識!!
在這里,我想強調,任何新知識的學習都是有一定的前提條件的。C語言學習的前提條件就是,對計算機系統要有一個整體的,科學的基礎認識。 脫離了這個基礎認識,一切都很困難。
所以,有些同學學不會C語言,不是因為他們智商不行,而是因為他們沒有準備好。
我花時間寫這篇文章來給大家講C語言的學習,當然是希望大家真正的學會、學懂C語言,并能夠真正感覺到它的用處,所以很抱歉我不會像培訓機構那樣,告訴你“零基礎”就能夠開始學。但如果你真的按照我說的去做,那么至少從現在起,你確實是開始有點“學院派”的認真了。
在這篇文章的最后,我推薦了一本我曾經讀過的《計算機科學導論》。這本書可以說是我的啟蒙書,我讀過,真心覺得好,所以推薦給需要的同學。
好了,接下來我們進入C語言的學習過程。
二、學C語言到底學些什么—— 「語法」和「函數庫」
C語言學習的關鍵,是要先搞明白,學C語言到底是在學些什么?
我這么一問,有的同學就要翻開課本,指著目錄說,我知道我知道,有變量,數據類型,循環語句,函數,哦哦哦,還有指針等等!
很遺憾,如果你以為學習C語言就是學習這些東西,那你得趕緊糾正一下看法,否則接下來的學習會困難重重。因為我曾經就是這么掉到坑里的,這種狹隘的觀點讓我浪費了大量的時間去學習瑣碎的細節,又讓我遲遲不能接觸到更重要的知識,結果是眼高手低——知道許多別人不知道的無用知識,但是又寫不出什么真正像樣的程序來。
所謂「語法」,就是入門教材里最著重講解的內容。也就是那些所謂的變量、數據類型、分支判斷、循環、函數、指針等等。
這些內容比較枯燥,但是好消息是這些內容并不難,都是一些格式化的東西。只要你多練習,就會自動的刻在你的腦子里,成為一種下意識的習慣。
但是 「語法」本身其實沒什么用。因為它只是一種格式規范,你學得再好,也不能引導你寫出厲害的程序。因為在軟件設計中,實際上最核心的部分還是在于其 「函數庫」部分。
?關于怎么快速學C/C++游戲編程,有什么方法,這個問題,想必大家都已經心中有數了,打算深入了解這個行業的朋友,可以私信小編獲取相關的學習視頻和資料。
什么是 「函數庫」?
簡單來說,函數庫就是別人編寫好的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/C++編程學習,小編給大家提供一個學習交流群,歡迎到訪:893,154,,226。
四、書籍推薦
基礎(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)
那么大家有什么好的建議和方法呢,歡迎大家留言評論。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的选择大于努力!0基础学好C语言编程,首先要掌握的是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 千万数据却只用6步管理!这套数据治理架构
- 下一篇: 码农即将被淘汰?未来10年,这样的程序员