【C語言】要掌握好多少知識點(diǎn)才能做好C語言項(xiàng)目?
很多初學(xué)C語言的小伙伴,在學(xué)習(xí)之初并沒有一個(gè)大概的概念,學(xué)習(xí)這門語言需要掌握多少知識點(diǎn),怎么才算學(xué)的差不多?
C語言的精髓點(diǎn)在哪? 學(xué)到多少東西才能夠達(dá)到做項(xiàng)目的標(biāo)準(zhǔn)?學(xué)習(xí)的時(shí)候需要注意哪些細(xì)節(jié)點(diǎn)?疑問太多以至于壓得自己喘不過氣來。筆者從項(xiàng)目的角度分析C語言到底需要掌握哪些知識,為什么要去掌握這些點(diǎn),怎么去掌握,在此嘗試著總結(jié)以下幾點(diǎn),未必都是對的,起碼可以做到親身經(jīng)歷。

基本的數(shù)據(jù)操作,運(yùn)算規(guī)則,常見程序結(jié)構(gòu)設(shè)計(jì)
很多人覺得這么幾點(diǎn)我都看了多少遍了,早就爛熟于心了。舉個(gè)簡單的例子,printf打印可能是最常使用的函數(shù)了,但是這個(gè)函數(shù)在真正大型工程中,很少直接去調(diào)用,為什么?
主要項(xiàng)目中涉及到封裝的概念,什么時(shí)機(jī)加入打印在調(diào)試大型系統(tǒng)的時(shí)候,更容易定位問題,這些編程思維對于初學(xué)者來說很難接觸到,也很難想到,任何復(fù)雜的事物都是由簡單的細(xì)節(jié)環(huán)繞而成,在學(xué)習(xí)之初不要覺得這些很簡單的數(shù)據(jù)操作很簡單,要真正納入自己的知識體系還是需要花點(diǎn)心思。可以在學(xué)習(xí)的時(shí)候,網(wǎng)上搜一些資料看這些數(shù)據(jù)操作以及運(yùn)算規(guī)則是如何使用具體的場景中。
很多人初學(xué)者可能會(huì)有疑問覺得去哪里找這些代碼去,世界軟件發(fā)展了這么多年,最不缺的就是代碼,在github或者開源中國里面代碼多如牛毛。學(xué)習(xí)的對象也是數(shù)不勝數(shù)。有點(diǎn)扯遠(yuǎn)了,這觸及到另外一個(gè)學(xué)習(xí)編程的步驟,學(xué)會(huì)看懂別人的代碼,然后才能嘗試寫出優(yōu)質(zhì)的代碼,知己知彼百戰(zhàn)不殆。曾經(jīng)聽一個(gè)編碼高手說過“技術(shù)這東西只要花的時(shí)間長,肯下功夫早晚都能搞定,只要進(jìn)入狀態(tài)了,什么方法都能想的出來”,看書學(xué)習(xí)也罷,看視頻學(xué)習(xí)也罷,需要讓自己插上聯(lián)想的翅膀,把自己的思維境界打開。
說到運(yùn)算規(guī)則,涉及到代碼的格式的問題,說說身邊人的事情,去年招了一個(gè)剛畢業(yè)的學(xué)生,基本功不是很好,但是有一個(gè)特質(zhì)專注力很高,能沉得住氣。當(dāng)初見第一眼就覺得是個(gè)做軟件的苗子,有了第一印象后面的事情就順理成章了。很多經(jīng)驗(yàn)不是很足的同學(xué),參加面試回答的問題也不是很理想,但還是被錄取了,其中一個(gè)因素就是你身上有公司需要的基因,這多少算來有點(diǎn)運(yùn)氣的成分在里面了。今年這哥們覺得很突然,說為啥當(dāng)初剛開始寫代碼的時(shí)候?yàn)樯恫灰竽敲磭?yán)格,說了幾句話,初學(xué)者特別是基礎(chǔ)很差的情況下,要求太多只會(huì)讓一個(gè)人慢慢失去對這個(gè)行業(yè)的信心,也許會(huì)錯(cuò)失一個(gè)軟件天才。隨著時(shí)間推移能夠邁入軌道了,那么就該要求一些基本的職業(yè)素養(yǎng)了,代碼的格式,就該要求了。很多初學(xué)者覺得寫的代碼越高深,越讓人看不懂才叫高手,有這種想法的趁早打住。大道至簡,這四個(gè)字在任何時(shí)候都不過時(shí)。做的復(fù)雜邏輯混亂只能說明當(dāng)初在設(shè)計(jì)的時(shí)候,沒有徹底想明白,想明白了展示出來一般都比較舒坦平整。

指針,數(shù)組,結(jié)構(gòu)體,枚舉靈活運(yùn)用
不要只看這幾個(gè)字,幾乎是C語言里面最精髓的代表。數(shù)組這個(gè)概念基本上還能理解透徹,說到指針這個(gè)應(yīng)用場景太多,而且在什么項(xiàng)目中幾乎都離不開指針的使用。變化無窮,會(huì)用的覺得其樂無窮,不懂的哭上天。記得在互聯(lián)網(wǎng)有個(gè)流傳很長時(shí)間的文章,林銳的我的大學(xué)十年(有興趣的同學(xué)可以去網(wǎng)上查閱,編程的人生也可以很彪悍,記得當(dāng)初發(fā)燒期間還專門買了林銳的一本高質(zhì)量編程)提到了做了一個(gè)C語言的項(xiàng)目,為了繞開指針最后全部用數(shù)組代替實(shí)現(xiàn)了,后來做的項(xiàng)目也黃了。不是說因?yàn)橛脭?shù)組使用就不行,項(xiàng)目的定位方向出問題了。用數(shù)組完全替代指針這條路也是可行的,但是會(huì)花費(fèi)相當(dāng)大的周折。
說到指針,不能不提到計(jì)算機(jī)專業(yè)開的另外一個(gè)課程,數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)就是原生數(shù)據(jù)或者組合數(shù)據(jù)的混合運(yùn)用的一種規(guī)則集合。連接這些數(shù)據(jù),將這些數(shù)據(jù)有機(jī)的串聯(lián)在一起,指針起到非常關(guān)鍵的作用。經(jīng)常見到初學(xué)者說數(shù)據(jù)結(jié)構(gòu)和天書差不多,幾乎看不懂,建議回爐好好學(xué)習(xí)指針,說到指針還是存在很多故事,在入門之初有幸遇到一位水平極高的老手帶著,基本功扎實(shí)的不得了,記得有一次使用指針忘記初始化,這老手嘆了口氣,當(dāng)年我每次用指針錯(cuò)一次,就被項(xiàng)目經(jīng)理當(dāng)眾批評一次,后來再也不敢不初始化使用了,所以印象才能這么深刻,話說到這里剛?cè)腴T的小白挨多少批評或者鄙視,是最正常不過的事情了,這對于編程界來說稀松平常。
結(jié)構(gòu)體在項(xiàng)目中用的特別多,很多初學(xué)者覺得結(jié)構(gòu)體都在教材的最后章節(jié),覺得不是那么重要。其實(shí)結(jié)構(gòu)體在一定層次上決定著軟件的脈絡(luò)框架。很多高手在設(shè)計(jì)模塊的時(shí)候,不是急急忙忙的寫代碼,而是先把頭文件里面的結(jié)構(gòu)體設(shè)計(jì)出來,簡單的來說就是把數(shù)據(jù)模型先搞起來。有個(gè)數(shù)據(jù)模型代碼實(shí)現(xiàn)起來就比較輕松了。面向?qū)ο罄锩骖惖睦献孀诰褪墙Y(jié)構(gòu)體延伸來的。關(guān)于結(jié)構(gòu)體如何賦值,包含著指針的情況下,如何賦值這些都是常見的初學(xué)者經(jīng)常容易掉的坑。枚舉一般用在羅列不同類別,存在多個(gè)相同功能的實(shí)物,搭配switch使用的很多,在這就不一一列舉了。

函數(shù)的使用
函數(shù)是面向過程編程最基本的單位,任何C程序的運(yùn)行都有函數(shù)的身影,因?yàn)槌绦虻娜肟趍ain就是一個(gè)函數(shù),函數(shù)傳值方式,調(diào)用方式(遞歸,回調(diào))都是函數(shù)內(nèi)在的表現(xiàn)。函數(shù)的里面又可以嵌套別的函數(shù),使得程序慢慢變得復(fù)雜化。前幾天和一個(gè)非計(jì)算機(jī)專業(yè)的聊天,談到如何學(xué)習(xí)函數(shù),說到了數(shù)學(xué)不好是不是編程不好學(xué)。函數(shù)的編程基本因子,和數(shù)學(xué)里面的函數(shù)有一定的共性,但編程里面的含義引申的層次更多,數(shù)學(xué)在一定層面就是提供一個(gè)工具或者方法而已,函數(shù)的設(shè)計(jì)里面夾雜著諸多的編程思想。
檢驗(yàn)一個(gè)程序員水平的高低可以簡單讓用函數(shù)實(shí)現(xiàn)一個(gè)相對復(fù)雜一些的功能,基本上就能看出編程思想掌握的深淺程度。不妨自己實(shí)現(xiàn)一個(gè)函數(shù),檢驗(yàn)下自己編程水準(zhǔn),函數(shù)的檢驗(yàn)是面試?yán)锩姹夭豢缮俚念}目。
一個(gè)函數(shù)基本上代表一個(gè)小的模塊,多個(gè)模塊有機(jī)的組合形成一個(gè)系統(tǒng)。建議初學(xué)者在學(xué)習(xí)函數(shù)的時(shí)候,不要滿足于會(huì)使用函數(shù),還要讓自己站的層次更高一點(diǎn)。這能決定自己是一個(gè)純粹的執(zhí)行者還是未來框架的設(shè)計(jì)者,不要覺得這些東西距離自己很遠(yuǎn),慢慢的積累時(shí)間長了,慢慢也就從量變變成質(zhì)變了。

對于內(nèi)存和性能有少許的理解
內(nèi)存和性能對于初學(xué)者來說,可能覺得很遙遠(yuǎn),其實(shí)這兩樣?xùn)|西貫穿整個(gè)編碼界,檢驗(yàn)軟件功能最重要的兩項(xiàng)指標(biāo),軟件占用內(nèi)存多少,運(yùn)行時(shí)間長了會(huì)不會(huì)讓系統(tǒng)變緩慢。同時(shí)開啟在多個(gè)軟件的時(shí)候,你設(shè)計(jì)的軟件是不是變得很卡頓,這些都是大家平常在使用軟件時(shí)候經(jīng)常遇見的現(xiàn)象。今天在車上閑聊,司機(jī)說當(dāng)年的XP運(yùn)行的多好,非要升級搞什么windows7或者windows10之類的,把電腦搞的卡的要死。這其實(shí)是微軟操作系統(tǒng)設(shè)計(jì)理念的一個(gè)延伸,用空間換時(shí)間。說的通俗點(diǎn),提前把一些常見的軟件加載到內(nèi)存里面,使用的時(shí)候流暢度會(huì)感覺好一些,理念這么好,為啥還變得這么卡慢,主要機(jī)器配置太低了。微軟這幫大佬認(rèn)為你機(jī)器內(nèi)存和CPU還是相當(dāng)不錯(cuò)的,因?yàn)楝F(xiàn)在硬件成本基本上接近白菜價(jià)了。在機(jī)器配置還不錯(cuò)的情況下,windows7,10運(yùn)行的速度還是很不錯(cuò)的。透過這些生活常識,歸結(jié)對編程,對編碼的認(rèn)知程度上,慢慢就會(huì)建立起自己的知識體系。
這點(diǎn)在嵌入式設(shè)備上表現(xiàn)的很明顯,一般嵌入式設(shè)備內(nèi)存和cpu配置不是高,內(nèi)存就要省著點(diǎn)用,占用CPU很高的一些函數(shù)盡量少去調(diào)用,避開雷區(qū),這些經(jīng)驗(yàn)就要靠平時(shí)多去積累,多去思考,才會(huì)融入自己知識體系,才會(huì)慢慢認(rèn)識到寫代碼其實(shí)在編程時(shí)候,只占很小的一部分,大部分的時(shí)間還是在思考如何讓代碼更加利索,內(nèi)存更少的去使用,cpu占用率低一些。認(rèn)識到這些時(shí)候,層次就不一樣了,就會(huì)越來越覺得設(shè)計(jì)思想的重要性了。

嘮嘮叨叨說了以上四點(diǎn),可能和里面具體的概念不是很搭邊,主要站在項(xiàng)目的角度上做了一些延伸,從項(xiàng)目的角度去認(rèn)識一些基本的概念,讓初學(xué)者在學(xué)習(xí)的時(shí)候,有個(gè)大致的認(rèn)識。在知識層次上面稍微做了一些拉伸。稍微上了一點(diǎn)高度,滲入了一些編程思想。希望初學(xué)者對此有一個(gè)更加深刻一點(diǎn)的認(rèn)識,不要拘泥于語法的限制,編程語言服務(wù)于編程思想。學(xué)到了真正的編程思想,才叫貨真價(jià)實(shí)的懂編程。
筆者就大致講這么多,希望對各位有所幫助!喜歡文章可以支持一下哦!
對于熱愛編程的人來說,有一群一起學(xué)習(xí)一起解答的小伙伴很重要!如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍分享:

粉絲編程交流:
