為什麼這麼多人學不會C語言?

筆者雖然現在很少寫C了,但在工作初期有多年C語言工作經驗,後續接觸過的高級語言就太多了,PHP,JAVA,GO,Python等都有一定深入研究,可以簡單說一下我的看法,當然,歡迎關注。

為什麼這麼多人學不會C語言?

先簡單總結一下:

很多C語言的問題要對計算機系統有一定理解之後才能解決,就算有好的教材也不能簡單寫出bug free的代碼。

即使通過看書把C語言入了門,但是坑還是要親身去踩才能學到東西。

  1. 比如C語言不像Java一樣給你很多內置的類,類的方法都定義好了直接用就行了。在C語言裡這些都得自己寫。。。
  2. C語言也沒有Java的垃圾回收機制,還得學著自己管理內存,知道存在棧上的局部變量和分配了內存的變量在存儲上的區別。
  3. 還有malloc的坑,分少了會buffer overflow,忘記free了又會造成memory leak。
  4. unsigned int的坑。

不懂對應的系統知識,只能看著非常confusing的bug找不出原因。

然後我們具體看下C語言難在哪些點:

第一 C語言直接操作內存

特別是和內存關聯很近主要還是指針的存在,很多人說到指針就頭大,指針就是一把雙刃劍,能夠很好的解決邏輯問題,但指針一旦出現問題,找個問題特別費勁,底層語言直接崩潰對應的查找工具還不多,很多還得靠代碼解決,不像高級語言有內存回收,垃圾回收機制。

這就是高級語言比較有優勢的地方,並且高級語言參與的人多遇到問題,去解決的人也多,對應的工具也多。解決內存和性能的問題,就難倒了很多意志不是堅定的人。

而且與指針相關聯的很多東西,在開始學的時候都不是很好理解,回調函數,指針數組,這也是考驗耐性的時候,堅持去理解去學習,也就慢慢挺過去了,其實這些都是基本功能的組合,比如回調函數應用的場景,函數的執行時機已經確定,函數內容實現要根據具體的場景來定,這種在windows編程時候在傳遞句柄的時候用的多。

要理解回調還得知道函數指針是個啥概念,這種對初學者來說簡直就是天書。在學習的時候記住一點先去理解了再去考慮怎麼練習,實踐。不要上來逮著書本上的練習題目呼呼的去敲代碼,要理解個差不多再去動手也不遲。

指針直接的導向就是容易導致內存洩漏,而且如果不是大塊的洩漏解決起來都特別費勁,可能需要運行很長一段時間才能查找到,指針的釋放位置自己要記錄好了,忘記了查找起來相當的麻煩。

為什麼這麼多人學不會C語言?

第二 C語言工具比較少
很多高級語言很多特性都有豐富的成熟類庫,在C語言去實現需要折騰很長時間,這是底層語言不太好的地方,這也就決定了C語言只適合在性能要求比較高的地方去使用,應用研發方面效率很低。

目前來看在嵌入式領域用的還是比較多,特別是在內核驅動,或者操作系統底層實現方面應用的非常廣泛,而且這類對於C語言的要求比較高,不是簡單寫個普通的模塊就能搞定的事情。

總結

基於以上幾點導致很多初學者倒在入門的路上,本質上堅持的力度不夠,誰都不可能在開始學的時候都弄得非常清楚,畢竟天才只有少數。學完之後回來總結C語言也就是十個左右的知識點,懂了也就比較輕鬆了,後續就是靠自己在項目中的打磨了。

您的轉發+關注就是對筆者最大的支持,歡迎關注。

另外喜歡聽互聯網圈裡那些趣聞軼事,或者對大廠架構設計,BAT面試題分享, 編程語言理論這些感興趣歡迎關注筆者,沒有錯。

為什麼這麼多人學不會C語言?

最後,如果你想學C/C++可以私信小編“01”獲取素材資料以及開發工具和聽課權限哦!


分享到:


相關文章: