看招聘職位要C語言的比例真不多了,是不是C語言真的過時了?
看看很多招聘網站有關找純粹的C語言開發的比例真的不是很多,都被Java,php,python等等語言刷屏。這對于初學正在學習C語言的小白簡直就是驚天霹靂,學了沒人要,學了還有啥意義。如果單從快速找工作的角度考慮這件事的确,這個觀點是能站得住腳的。

前幾天和一位老碼農聊天,開篇就來了這麼幾句,換開發語言算了,現在的做底層的日子不比以前了,看看那些做App的,做不了幾年工資蹭蹭就上去了,我們這熬了這麼多年才這麼點。
難道C語言真的過時了?
現在先看看C語言到底能做了多少事情,大家經常說的linux作業系統的核心都是C語言寫的,對應的很多嵌入式核心驅動也跑不出C語言範疇,包括大家常用的手機,機頂盒,電視機底層硬體驅動基本山都是C語言完成,還有常見基于單片機的程式也主要由C語言完成。大緻概括來說嵌入式領域C語言還是無處不在,很多底層的圖形庫也是基于C語言完成。
當然C語言最牛的地方,幾乎現在所有的上層語言的底層語言絕大部分都是C語言大哥做嫁衣給鋪墊完成。深刻了解上層語言底層實作,離不開C語言。
linux核心社群火熱程度,依然有增無減,記得有個對核心研究很透徹的哥們,說了句話“我覺得能看懂核心裡面的代碼就是最大的幸福了,更不要說修改裡面的代碼“(當然這話說的主要是核心架構層次的,不是外圍裝置擴充方面)
一方面說C語言的工作機會少了,待遇不行了,一方面C語言還是滲透在各個領域,這中間到底發生了什麼事情?
一.基于C語言實作底層架構,就目前來說已經相對比較成熟,對于底層的修改需求已經存在很多基礎的版本,修改起來相對比較輕松,維護的工作相對多,技術要求降低。真正的架構修改還是需要C語言超級高手來做(這方面高手待遇目前依然居高不下)
二.應用層語言的蓬勃發展,技術更新的速度越來越快,用上層的語言很快就能實作比較漂亮的界面,就沒必要用C語言一點一線去操刀。專業的人做專業的事情,分工更加明細,界面層次的東西,上層語言實作起來更加得心應手。
三.應用層面的程式設計,比之前火熱許多。特别是一些App級别的開發,至少從表面上看沒有C語言啥事情了,是以現在很多入門的小白直接選擇java或者php之類的語言,沒有C基礎一樣做的很棒,這是社會分工細化的結果,沒有哪種語言會一直長盛不衰,技術在不斷更新中。
如何正确看待C語言?學好了,還是能找到工作的,畢竟社會招聘的崗位總量還是很多。相對比例偏少而已,因為整體公司的數量比之前也是多了許多。
想讓自己有個長遠的發展,比如架構師層面,C語言幾乎還是必修課,不了解底層的實作談何架構整個系統,談何做出通用化的架構。從語言角度考慮學會了C語言切入到其他程式設計語言,學習速度會加快不少,還是值得去學。
什麼人才能學好?為什麼學到一半就早早繳械投降了?衆多迷霧,衆多的困難,怎麼破局?
很多對程式設計感興趣的小夥伴,找個所謂的高手,問了幾個程式設計入門需要的書,也是拼了,呼呼的買了一堆C語言,C++,java等等,本着多多益善的原理,然後從C開始看,最初幾天看的熱火朝天,把如何編譯C代碼,如何列印基本的字元串看的很是仔細,随着難度的增加,越來越覺得吃力,有點寸步難行的趕腳,怎麼辦啊,網上找點資料看看,看的似懂非懂。然後再堅持看了幾節,迷糊的越來越厲害,這個時候開始懷疑自己的學習方法或者書買錯了,開始自我否定,在網上搜搜覺得C語言是不是太難了,很多是從java開始學的。于是先放棄C開始主攻java,開始學習java,最初幾章明顯學的比C語言快點,畢竟有點基礎了,結果一遇到思維意識形态之外的又開始迷糊,又掉到學習C語言時候的困頓中,于是自我否定。程式設計太難,不是每個人都能學會的,徹底放棄。
這是小白常見的放棄之路的複盤,有這種類似情況的,或者有類似經曆的對位思考下。
那麼如何破掉這些困局? 一. 懷揣極大興趣客觀評價寫代碼是一件,很枯燥乏味的腦力勞動,需要極大的驅動力,一般驅動人去做一件事,興趣是其一,強大的精神力其二。興趣是第一老師,有了興趣就可以克服一些困難,遇到問題或者需要攻堅的時候能夠挺得住。程式設計相對來說知識點很分散,難易程度不統一,細節極多,持續不斷的克服問題,需要有一定的精神力。
二.适宜的學習方法程式設計學習存在一定的技巧性,原則上先要把一門語言入門之後再切入到别的語言,語言本身極具靈活性,學好一樣平移到另外層次是切實可行。入門一種語言基本上意味着熟悉了一種語言的特性。切忌一種還沒學好就中間換來換去,這是以犧牲自身興趣點為代價的。
選擇一本合适的入門書籍,建議選擇老外的,c primer plus 以及c程式設計語言都是很經典的入門書籍,很多人都提到了用視訊學習,零基礎前幾節的學習可以采用視訊入門的方式,有了感覺建議還是回歸到書本上。在書本上遇到難點,可以找對應的視訊去學習。明白了了解了再回歸書本,為啥建議采用書本,從效率上講書本的學習速度遠快于視訊,還有些人提到了書本上的東西看的頭發麻,如果真是這種狀态,需要靠視訊才能激發自己學習的動力,那麼可以問下自己,是不是進入學習狀态了。
無論覺得多難,還是要嘗試建立自己的知識體系,對于初學者來說這可能是一個極大的挑戰,程式設計就是一個思維認知過程,認知清楚了架構也就清晰了,那麼嘗試着勾勒知識架構也是加速引導思維認知的一種途徑。
三, 不要鑽過多的牛角尖很多初學在學習C語言時候,開始恨不得把記憶體的工作原理以及printf底層實作挖個底朝天,這些從長遠看都需要做,但是作為入門級别的,還是繞開,先做到會用,然後了解到了一定層次再去深入了解,很多初學者開始學的特别痛苦,覺得自己什麼都不會,什麼都搞不懂,但什麼都還想搞明白。不否認有一次性搞定的天才,但大多數人還是凡人,還是需要先了解表面的含義,再去深挖底層含義。
四 堅強的毅力程式設計百分九十以上的東西,都需要自學,自學依賴很強的毅力。說的通俗點就是堅持。面對如此枯燥無味的代碼,需要保持長時間的專注度和忍耐力。沒點骨氣,做不到。淺嘗辄止基本上做任何事情都是失敗者。
以上四點不是,任何一點做不到都能成為放棄學習的理由,都是一個從開始學習到放棄的經典案例。真要想學好C語言,不兼具點拼搏因子基本上和入門漸行漸遠。
如何去選擇C語言的學習資料?學習語言的開始一般是閱讀參考書。我建議選擇幾本非常經典的好書,仔細完整反複閱讀幾遍,“書讀百遍其義自現”。選擇C語言學習的好處是,這幾本書基本上完整涵蓋了C語言程式設計領域的方方面面,不會像C++那樣,即使讀完一堆書還是有些糊塗,依然有這樣那樣難懂的陷阱。