當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式微處理器
[導(dǎo)讀]提到C語言呢,大家第一時間頭腦里邊想到的是什么?是不是在黑乎乎的命令行里,用星號輸出一個菱形,是打印99乘法表,是楊輝三角?如果你想到的是這幾個例子的話啊,恭喜你,沒錯,你就是那個C語言小菜雞。小菜雞往往會有各種各樣的疑惑,這C語言不是說特別強大嗎,會畫個菱形,會打印個楊輝三角,...

提到C語言呢,大家第一時間頭腦里邊想到的是什么?

是不是在黑乎乎的命令行里,用星號輸出一個菱形,是打印99乘法表,是楊輝三角?

如果你想到的是這幾個例子的話啊,恭喜你,沒錯,你就是那個C語言小菜雞。

小菜雞往往會有各種各樣的疑惑,這C語言不是說特別強大嗎,會畫個菱形,會打印個楊輝三角,就能當(dāng)飯吃了?

有了這樣的疑惑就會導(dǎo)致覺得學(xué)習(xí)C語言沒什么用。然后就厭學(xué),然后就學(xué)不好,學(xué)得不好就一點成就感都沒有,逐漸的會失去了學(xué)習(xí)的動力,然后就更厭學(xué),厭學(xué)又厭學(xué),厭學(xué)何其多,不如放棄算了,所以在考試中掛科,在補考中又掛科。

造成這樣現(xiàn)象的原因是什么呢?理論與實際的生產(chǎn)環(huán)境,有非常大的距離。

一個是象牙塔里邊的C語言,除了畫畫小星星,什么都干不了,一個是打工人眼里的C語言,簡直無所不能。

那么到底真實的C語言是什么樣?我們真的有必要學(xué)習(xí)c語言么。

這篇文章我們就來聊一聊,C語言到底能做什么,還有沒有必要學(xué)習(xí)C語言,該怎么學(xué)習(xí)C語言。

為什么要學(xué)習(xí)C語言

我們不說它那些語言特性的優(yōu)點啊,不說什么速度快呀,可移植啊,代碼緊湊啊,等等啊,這些我們不說。因為語言特性和我們自身的關(guān)系也不大對吧?

那么為什么要學(xué)C語言呢?我給你三個理由。

1.C更偏底層

C是一門造輪子的語言,更加貼近操作系統(tǒng),有多貼近?連windows、linux操作系統(tǒng)都是C寫的,學(xué)習(xí)c語言,能非常近距離的「看到」一個程序的運行流程,編譯、匯編、鏈接、運行。

內(nèi)存的申請和釋放,每一個變量是怎么存儲于內(nèi)存中的,他們又分別存在內(nèi)存中的什么區(qū)。

學(xué)習(xí)C語言要直面操作系統(tǒng)的特點,這個過程能學(xué)到很多底層相關(guān)的知識,相比C語言,學(xué)習(xí)其他語言可能就沒有這么底層啊,很多東西都會有一種霧里看花的感覺,無法深入的理解本質(zhì)。

學(xué)習(xí)這些底層知識與機制,對于你程序里排查問題、做性能優(yōu)化,非常有好處,會幫你開闊思路。

2.就業(yè)面更廣

說實話,在我的認(rèn)知里,沒有C語言做不了的事情,只有C語言不適合做的事情。我舉三個必須使用c語言的例子,三個完全沒有一點關(guān)系的行業(yè)。

  • 嵌入式,就是做和硬件相關(guān)的行業(yè)

小到一個兒童玩具、大到洗衣機電冰箱,無人機、汽車,甚至航天飛船,都有嵌入式系統(tǒng)的身影,而這些系統(tǒng)里面的代碼,基本上都是用C語言編寫的。

  • 網(wǎng)絡(luò)游戲

可以這么說,幾乎所有你聽說過的網(wǎng)絡(luò)游戲都有C和C 的身影,比如王者榮耀的后端服務(wù)是C和C 寫的,其他語言的性能滿足不了游戲的實時性。

  • 互聯(lián)網(wǎng)web服務(wù)

著名的高并發(fā)服務(wù)器Nginx就是C語言寫的,你現(xiàn)在手機上裝的APP,他們的服務(wù)端架構(gòu)基本都會用到nginx,像淘寶雙十一這樣的海量并發(fā)請求,它背后所用的支撐的技術(shù)體系,也有nginx的身影。

大家還知道哪些行業(yè)只能是C語言來做,歡迎留言,讓其他的小伙伴也看到。

所以把C語言學(xué)好。你至少可以從事我剛剛說的這三個行業(yè)。那么如果你實在是不喜歡做硬件,不喜歡做游戲,也不喜歡做后端的服務(wù),你說我喜歡做APP或者前端,那么我就要說第3個理由了。

3.比較容易轉(zhuǎn)到其他的語言。

由于c語言更偏向系統(tǒng)底層,可以把它看作是內(nèi)功的修煉,很多語言在語法上都和c語言類似,而且要比c簡單。

所以如果你不想做C語言相關(guān)工作,轉(zhuǎn)向其他的語言會很容易,而如果你想反過來先學(xué)其他語言,再轉(zhuǎn)C語言,不是不可以,只是相對就要困難一些了。

以上就是學(xué)習(xí)C語言的三個理由,不知道有沒有打動你。那么接下來就是學(xué)習(xí)C語言的路徑了。

C語言學(xué)習(xí)路徑

如果把學(xué)習(xí)c語言比作是攀登一座巍峨聳立的大山,那么我要說的這條路徑呢,就是最快的爬到山頂?shù)穆窂?,我會幫你把那些路邊的野花野草全部通通干掉,把那些可能?dǎo)致你迷失方向的小路也都干掉,只留下最簡單直接的垂直的一條直達山頂?shù)穆肪€,讓你爬山爬的非常過癮。

為了能夠清晰的表達我想說的這個路徑呢,我還畫了一個腦圖,看我是不是很用心。

腦圖文件有點大,清晰的圖片文章放不下,如果有想要下載這個腦圖的小伙伴,可以關(guān)注后回復(fù)“C語言”,即可下載。

我把學(xué)習(xí)C語言的路徑分成了4個階段,小菜雞、入門雞、進階機和老司機。

這4個階段的學(xué)習(xí)過程中,要遵循一定的學(xué)習(xí)原則,我也總結(jié)了5個學(xué)習(xí)原則分享給大家,這樣才能保證質(zhì)量又保證效率。

一、小菜雞

首先是小菜雞,小菜雞指的就是純小白,作為一個小白呢,你要對計算機,對程序有概念。

這部分可以看看日本作家寫的幾本計算機知識相關(guān)的科普書,《計算機是怎樣跑起來的》、《程序是怎樣跑起來的》,這兩本書對新手都非常友好。

說到看書呢,腦圖中每個階段也都會有對應(yīng)的圖書推薦,大家可以買來或者通過某種手段白嫖,我不推薦白嫖,還是買原版支持一下,作者不易啊!

看書有一個原則,就是千萬不要把”讀完“當(dāng)做目的,計算機相關(guān)的圖書很多都是大部頭,等到你讀完,黃花菜都涼了。所以最好是帶著問題讀,把它們當(dāng)做一部字典,只讀你關(guān)心的部分,找到答案就可以把書放下了,不要糾結(jié)讀沒讀完。

對計算機和編程有了基本的概念后,就要學(xué)習(xí)C語言的語法了。C語言的語法其實非常簡單,里面所涉及的概念也不多,都是一門編程語言中最基礎(chǔ)的東西。

數(shù)據(jù)類型、常量、變量、表達式、函數(shù)、分支、循環(huán)、數(shù)組、結(jié)構(gòu)體、指針、C庫,一共就這11個概念,對新手來說,前面的簡單點,后面的可能稍微難理解點,平均每個概念學(xué)習(xí)3到4小時左右就可以了。

這些基本概念該怎么學(xué)習(xí)呢?

下面說第二個學(xué)習(xí)原則:一定要有合適的練習(xí)題。

什么是合適的練習(xí)題,合適的練習(xí)題有3個特點。

一是有明確的訓(xùn)練目的。比如說學(xué)習(xí)函數(shù),那合適的練習(xí)題就會把練習(xí)重點放在函數(shù)的各個特征上,而不應(yīng)該有其他的一些知識盲點。

二是不應(yīng)該需要花費太長時間。這個花費的時間應(yīng)該剛剛好能夠使你保持專注,一旦失去專注力,浪費時間不說,還可能完不成練習(xí)。

三是合適的練習(xí)題的難度應(yīng)該是能夠稍稍高出你自身的水平。使你每次練習(xí)都有一點新的收獲,如果每次練習(xí)都在畫菱形、畫正方形,畫了也白畫。

有了合適的練習(xí)題的訓(xùn)練,你就會比較快的掌握基礎(chǔ)知識了。

我建議這個階段快速突擊,小菜雞的階段不宜久留,宜速戰(zhàn)速決,1周時間搞定,最多2周。否則啊,學(xué)習(xí)很容易變得枯燥乏味,就會產(chǎn)生這玩意到底有沒有用啊,這種負(fù)面情緒。

還是拿登山做舉例,小菜雞階段就是在山腳下聽老師講理論課,老師講了半天,登山鞋有哪些品牌,如何選擇,登山杖該怎么使用,登山時姿勢是什么樣,全身肌肉如何發(fā)力,遇到雨雪天氣怎么保暖,遇到山體滑坡怎么自救等等,一直講這些理論。

你說我報名了登山運動練習(xí)班,光理論講了半年,學(xué)員當(dāng)然要問,會選登山鞋到底和會不會登山有什么關(guān)系?

學(xué)登山么,懂了最基礎(chǔ)的理論知識,就趕緊是騾子是馬拉出去溜溜了!先登個幾百、一千米看看,把登山實踐過程中遇到的問題點記錄下來,再翻書本找教練學(xué)習(xí)理論。

學(xué)習(xí)編程語言也是一樣,懂了最基礎(chǔ)的之后,就可以做些與實際生活相關(guān)的小項目,遇到不會的再回頭學(xué)就可以。

這里我插入第三個學(xué)習(xí)原則,叫做「最少必要知識」。

就是說剛接觸一個領(lǐng)域,一門知識,先把最關(guān)鍵的那些知識學(xué)會,你就可以做些簡單的東西出來了,這時就應(yīng)該盡快開始實踐,特別是那種需要動手的學(xué)科,沒有必要糾結(jié)要全學(xué)完再開始,而且有些高級的東西必須需要時間的積累才能理解,就算你學(xué)會了考試考過了,沒有時間打磨,那也是紙上談兵啊。

所以我再強調(diào)一遍,小菜雞階段不宜久留,應(yīng)當(dāng)速戰(zhàn)速決,1周時間搞定,最多2周。

得馬上做點有成就感,有滿足感的東西出來。

二、入門雞

所以,趕緊進入第二個階段,入門雞。

這第二個階段的目的是在對編程有了一點初步認(rèn)識之后,嘗試自我開發(fā)自己對編程的興趣。

我建議用windows系統(tǒng)的接口做一些比較有趣、好玩的程序,比如我簡單列了幾個適合練手的小程序。

我為什么推薦windows呢?一是因為windows的圖像界面編程是非常方便的,拖拖拽拽就能畫個界面出來,所見即所得很容易形成成就感;二是因為windows特別適合小白,它把程序背后編譯、鏈接等等在新手階段不需要了解的知識全部隱藏掉了,只要關(guān)注你的代碼就好。

可以從最簡單的開始,比如說先彈出一個這樣的對話框,其實也沒有寫幾行代碼。

但是這個東西就很有趣,就要比那種黑乎乎的命令行看著順眼的多對吧,你可以把這個程序發(fā)給你的同學(xué),如果你同學(xué)只會寫楊輝三角,那你這簡直就是高了一個段位。這是什么?這不就是成就感嗎?

我上學(xué)那會就對圖形界面很感興趣,我到現(xiàn)在依然記得第一次用windows編寫了一個最簡單的對話框的那種喜悅,我感覺我就是計算機的上帝,我讓他干嘛他就干嘛,這才叫編程嘛。

我用C語言寫過一個音樂播放器,還用java寫過一個撲克牌游戲,當(dāng)時真的是,課程設(shè)計都直接高分。

圖形界面編程很容易激發(fā)一個人的興趣,俗話說,興趣是最好的老師,一旦你學(xué)習(xí)編程的興趣和熱情被點燃,那這興趣會驅(qū)動著你繼續(xù)學(xué)習(xí)下去,你會不斷完善你所編寫的代碼,直到它展現(xiàn)出你想要的樣子。

在這些編程練習(xí)中,你會反復(fù)用到第一個階段學(xué)到的理論知識,遇到不會的,翻翻書,找找視頻馬上補上,這樣的練習(xí)有了理論指導(dǎo)會事半功倍。

這個階段的時間長短呢,自己決定,如果越做越爽,也可以一直在這個階段玩下去。

這里我再插入第四個學(xué)習(xí)原則,就是要自己給自己訂立目標(biāo)。不能漫無目的的瞎學(xué),要有個指引,訂立的目標(biāo)最好是可以衡量的,不然你都不知道自己學(xué)沒學(xué)會。

比如立下目標(biāo),要在3小時內(nèi)學(xué)習(xí)5個C標(biāo)準(zhǔn)庫的接口。能夠知道在什么情況下用、并且會用5個接口就算達成了目標(biāo)。

再比如做個音樂播放器,要把一個音樂播放器做到什么樣的效果,有哪些功能,先從整體上考慮好,然后為了實現(xiàn)這些目標(biāo)不斷完善,一旦達到了目標(biāo),就可以進入下一個目標(biāo)了。

三、進階機

那么下面是第三個階段,進階機。

這個階段要學(xué)一些編程語言之外的東西。數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng)絡(luò)的理論和實踐都該安排上了。

數(shù)據(jù)結(jié)構(gòu)可以先學(xué)些最基礎(chǔ)的,像棧啊、隊列啊、鏈表,他們的概念是什么,有什么區(qū)別和聯(lián)系,樹形結(jié)構(gòu)比較難理解,看不懂可以先略過。

簡單的算法也要懂一些,排序和查找是最常用的,必須要掌握。

計算機網(wǎng)絡(luò)是整個互聯(lián)網(wǎng)行業(yè)網(wǎng)絡(luò)通信的理論基礎(chǔ),也必須學(xué),物理層、鏈路層可以不會,網(wǎng)絡(luò)層、傳輸層和應(yīng)用層必須掌握最關(guān)鍵的幾個協(xié)議。

最后,學(xué)習(xí)了這些理論知識還是要實踐,沒有實踐的理論就像是蓋在沙子上的碉堡,俗稱沙雕。如果你不想做沙雕,那就把代碼寫起來!

這個階段該學(xué)習(xí)在linux上寫代碼了,畢竟在實際的工作中,基本沒有人在windows上用C語言開發(fā)程序。

我覺得非常合適的一個練習(xí)項目就是網(wǎng)絡(luò)聊天軟件,像QQ一樣的,可以用linux寫服務(wù)端,用windows寫客戶端,這個過程中的練習(xí)會加深對操作系統(tǒng)的系統(tǒng)調(diào)用、數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)這些知識的理解。

而且網(wǎng)絡(luò)聊天軟件很有趣,做起來也沒那么枯燥,做好了之后發(fā)給你女神一個專屬客戶端,你們在你自己寫的軟件里聊天,邊聊天邊吹牛,豈不美哉!

這個階段涉及不同課程的知識,應(yīng)該花費比較長的時間。我建議代碼要一行一行的寫,就像飯要一口一口的吃,三連支持要邊看邊點。

項目中每一行代碼都要搞明白什么意思,這樣你才能寫出健壯的、沒有bug的代碼。

我在寫這個稿子的時候?qū)iT去找了一些開源的聊天軟件,沒有找到我想要的C語言的windows linux這樣組合的,并且適合新手的項目。

不知道小伙伴們對這個學(xué)習(xí)路徑是否認(rèn)可,對這樣的項目是否有興趣,我就大言不慚的在此立下一個flag,如果這篇文章的點贊數(shù)超過100,我就實現(xiàn)一套適合自學(xué)的代碼,分享給大家。

四、老司機

那么接下來呢,就來到了C語言學(xué)習(xí)的最后一個階段:老司機階段。

這個階段不再需要學(xué)習(xí)基礎(chǔ)知識,而是要開始向高手、向大師學(xué)習(xí)了。

使用廣泛、經(jīng)得起時間考驗的開源代碼是這個階段最好的學(xué)習(xí)資料,我列出了幾個網(wǎng)絡(luò)行業(yè)相關(guān)的C語言的開源項目,這也是我在工作中經(jīng)常接觸到的項目。

有JSON格式數(shù)據(jù)的解析庫cjson、最小的http服務(wù)器tinyhttpd、高性能的http服務(wù)器nginx,還有物聯(lián)網(wǎng)常用的傳輸協(xié)議mqtt,如果想學(xué)習(xí)tcp與udp的實現(xiàn),有個協(xié)議棧找叫l(wèi)wip,與linux內(nèi)核的網(wǎng)絡(luò)協(xié)議棧相比,代碼量少了不是一星半點,非常適合學(xué)習(xí)。

我不知道你是什么行業(yè),你所在的行業(yè)又有哪些著名的開源C項目,歡迎留言分享給大家!我相信它們都可以拿來做自學(xué)的材料。

剛開始學(xué)習(xí)開源代碼肯定是一臉懵B的,你會驚呼,C語言還能這樣寫?你會懷疑,我眼前的代碼還是那個熟悉的C語言么。

相信我,每個人都是這樣的,我總結(jié)了幾個學(xué)習(xí)源碼的方法也分享給大家,這個腦圖后面也有:

首先要保證代碼是沒有錯誤可以直接運行的,不然一運行就出錯,就沒有辦法繼續(xù)下去;

接著我們要先從整體上理解整個項目的功能是什么,它的輸入是什么,輸出是什么,先在頭腦里有個預(yù)期;

在看代碼的時候可以只關(guān)注數(shù)據(jù)結(jié)構(gòu)中最關(guān)鍵的字段和最關(guān)鍵的語句,與主干邏輯無關(guān)的代碼可以直接忽視掉。**

進階機階段是學(xué)習(xí)的是怎么使用接口,老司機階段就是學(xué)習(xí)怎么實現(xiàn)接口了。能看明白開源代碼,能講明白實現(xiàn)原理,你就踏入了專家之路。

end

好的,以上就是關(guān)于C語言的學(xué)習(xí)路徑了,總的來說,C語言簡單直接,非常容易上手,但想做到精通就沒那么容易了。

不知道大家有沒有聽說一個「一萬小時定律」,是說只要你在一個領(lǐng)域投入超過10000小時的練習(xí)時間,你就會成為那個領(lǐng)域的專家。

這就是我要說的最后一個學(xué)習(xí)原則,長期主義。

其實10000個小時也沒有多遙遠(yuǎn),如果一天工作8小時,除去節(jié)假日,一年的工作時間有2000個小時,所以如果你一直在學(xué)習(xí)和使用C語言,并按照這個路徑和剛剛說的那些學(xué)習(xí)原則堅持下去,5年就會成為編程高手!

不知道你聽了有什么感覺呢?歡迎留言說出你的故事。

END

來源:科巖成果,作者:科巖版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉