探究丨我們要掌握好多少C語言知識點才能做好C語言專案?
導言
很多初學C語言的小夥伴,在學習之初並沒有一個大概的概念,學習這門語言需要掌握多少知識點,怎麼才算學的差不多?
C語言的精髓點在哪? 學到多少東西才能夠達到做專案的標準?學習的時候需要注意哪些細節點?疑問太多以至於壓得自己喘不過氣來。筆者從專案的角度分析C語言到底需要掌握哪些知識,為什麼要去掌握這些點,怎麼去掌握,在此嘗試著總結以下幾點,未必都是對的,起碼可以做到親身經歷。

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

指標,陣列,結構體,列舉靈活運用
不要只看這幾個字,幾乎是C語言裡面最精髓的代表。陣列這個概念基本上還能理解透徹,說到指標這個應用場景太多,而且在什麼專案中幾乎都離不開指標的使用。變化無窮,會用的覺得其樂無窮,不懂的哭上天。記得在網際網路有個流傳很長時間的文章,林銳的我的大學十年(有興趣的同學可以去網上查閱,程式設計的人生也可以很彪悍,記得當初發燒期間還專門買了林銳的一本高質量程式設計)提到了做了一個C語言的專案,為了繞開指標最後全部用陣列代替實現了,後來做的專案也黃了。不是說因為用陣列使用就不行,專案的定位方向出問題了。用陣列完全替代指標這條路也是可行的,但是會花費相當大的周折。
說到指標,不能不提到計算機專業開的另外一個課程,資料結構。資料結構就是原生資料或者組合資料的混合運用的一種規則集合。連線這些資料,將這些資料有機的串聯在一起,指標起到非常關鍵的作用。經常見到初學者說資料結構和天書差不多,幾乎看不懂,建議回爐好好學習指標,說到指標還是存在很多故事,在入門之初有幸遇到一位水平極高的老手帶著,基本功紮實的不得了,記得有一次使用指標忘記初始化,這老手嘆了口氣,當年我每次用指標錯一次,就被專案經理當眾批評一次,後來再也不敢不初始化使用了,所以印象才能這麼深刻,話說到這裡剛入門的小白挨多少批評或者鄙視,是最正常不過的事情了,這對於程式設計界來說稀鬆平常。
結構體在專案中用的特別多,很多初學者覺得結構體都在教材的最後章節,覺得不是那麼重要。其實結構體在一定層次上決定著軟體的脈絡框架。很多高手在設計模組的時候,不是急急忙忙的寫程式碼,而是先把標頭檔案裡面的結構體設計出來,簡單的來說就是把資料模型先搞起來。有個資料模型程式碼實現起來就比較輕鬆了。面向物件裡面類的老祖宗就是結構體延伸來的。關於結構體如何賦值,包含著指標的情況下,如何賦值這些都是常見的初學者經常容易掉的坑。列舉一般用在羅列不同類別,存在多個相同功能的實物,搭配switch使用的很多,在這就不一一列舉了。

函式的使用
函式是面向過程程式設計最基本的單位,任何C程式的執行都有函式的身影,因為程式的入口main就是一個函式,函式傳值方式,呼叫方式(遞迴,回撥)都是函式內在的表現。函式的裡面又可以巢狀別的函式,使得程式慢慢變得複雜化。前幾天和一個非計算機專業的聊天,談到如何學習函式,說到了數學不好是不是程式設計不好學。函式的程式設計基本因子,和數學裡面的函式有一定的共性,但程式設計裡面的含義引申的層次更多,數學在一定層面就是提供一個工具或者方法而已,函式的設計裡面夾雜著諸多的程式設計思想。
檢驗一個程式設計師水平的高低可以簡單讓用函式實現一個相對複雜一些的功能,基本上就能看出程式設計思想掌握的深淺程度。不妨自己實現一個函式,檢驗下自己程式設計水準,函式的檢驗是面試裡面必不可少的題目。
一個函式基本上代表一個小的模組,多個模組有機的組合形成一個系統。建議初學者在學習函式的時候,不要滿足於會使用函式,還要讓自己站的層次更高一點。這能決定自己是一個純粹的執行者還是未來框架的設計者,不要覺得這些東西距離自己很遠,慢慢的積累時間長了,慢慢也就從量變變成質變了。

對於記憶體和效能有少許的理解
記憶體和效能對於初學者來說,可能覺得很遙遠,其實這兩樣東西貫穿整個編碼界,檢驗軟體功能最重要的兩項指標,軟體佔用記憶體多少,執行時間長了會不會讓系統變緩慢。同時開啟在多個軟體的時候,你設計的軟體是不是變得很卡頓,這些都是大家平常在使用軟體時候經常遇見的現象。今天在車上閒聊,司機說當年的XP執行的多好,非要升級搞什麼windows7或者windows10之類的,把電腦搞的卡的要死。這其實是微軟作業系統設計理念的一個延伸,用空間換時間。說的通俗點,提前把一些常見的軟體載入到記憶體裡面,使用的時候流暢度會感覺好一些,理念這麼好,為啥還變得這麼卡慢,主要機器配置太低了。微軟這幫大佬認為你機器記憶體和CPU還是相當不錯的,因為現在硬體成本基本上接近白菜價了。在機器配置還不錯的情況下,windows7,10執行的速度還是很不錯的。透過這些生活常識,歸結對程式設計,對編碼的認知程度上,慢慢就會建立起自己的知識體系。
這點在嵌入式裝置上表現的很明顯,一般嵌入式裝置記憶體和cpu配置不是高,記憶體就要省著點用,佔用CPU很高的一些函式儘量少去呼叫,避開雷區,這些經驗就要靠平時多去積累,多去思考,才會融入自己知識體系,才會慢慢認識到寫程式碼其實在程式設計時候,只佔很小的一部分,大部分的時間還是在思考如何讓程式碼更加利索,記憶體更少的去使用,cpu佔用率低一些。認識到這些時候,層次就不一樣了,就會越來越覺得設計思想的重要性了。
另外想要成為一個優秀的、有能力程式設計師的話 ,其實作為一個開發者或者程式設計學習者,有一個學習的氛圍跟一個交流圈子特別重要!這裡我要推薦一個C語言 c++交流Q群,7-4-1-8-1-8-6-5-2,不管你是大牛還是小白,大家都一起成長進步。

嘮嘮叨叨說了以上四點,可能和裡面具體的概念不是很搭邊,主要站在專案的角度上做了一些延伸,從專案的角度去認識一些基本的概念,讓初學者在學習的時候,有個大致的認識。在知識層次上面稍微做了一些拉伸。稍微上了一點高度,滲入了一些程式設計思想。希望初學者對此有一個更加深刻一點的認識,不要拘泥於語法的限制,程式語言服務於程式設計思想。學到了真正的程式設計思想,才叫貨真價實的懂程式設計。
筆者就大致講這麼多,希望對各位有所幫助!喜歡文章可以支援一下哦!