C語言做爲一門較低層的語言,有着她獨有的特色程序員
##簡約而不簡單的C語言 C的歷史很悠久了,就語言自己而言雖然簡單,但在低層應用中有着重要的地位。shell
從當前來看她是不會沒落的,由於操做系統須要她,而一切的一切的應用都是創建在操做系統之上的。還有就是編譯器也須要她,絕大部分驅動程序也須要她。緣由就一個——快,比起其它編譯型語言,她速度快了太多。特別是算術與位操做,只須要進過一次彙編解釋,就能夠直接操做寄存器和各個總線之類的。數據庫
說她簡約,是由於C語言的關鍵字是不多的,語法也很簡單,內置的數據結構就更少了,除了能模擬數組,其它的好比鏈表,棧等數據結構是須要本身實現的。因此入門她是快的,稍稍瞭解語法、一個gcc、一個文本編輯器就算知識準備好了,環境也搭建好了,能夠開始玩了。小程序
C語言是強數據類型的(編譯型的)面向過程的語言,確定不適合作Web先後端的開發啦,這樣會開發成本高和開發週期長的重大弊端。雖然她很快,可是就界面交互和普通業務邏輯,她快過頭了,不必。並且這些開發基本都是面向對象的,用C作面向對象不是不能夠,是成本過高,你得請一幫牛逼的人,而不是像我這種僅搞過一兩年技術的小菜鳥,或者剛畢業的大菜鳥。 ##尷尬而又苦逼的C語言 在你沒有成爲一個牛逼的人以前,用C做爲本身的主打開發語言是很苦逼與尷尬的。後端
在當下Java、PHP、JS等語言在移動端和服務器端開發佔領了太多份額,以及以這些語言爲主的程序員更是多如牛毛的狀況下,應用層的開發還真沒有C語言什麼事。從我從數據庫轉開發歷時2年半以來,工做也換了3份,每次換工做投簡歷都很痛苦,不多能找到本身的位置。由於我只會SQL和C,還有就是一點shell腳本語言,因此好工做很差找,高工資的工做更很差找〜〜〜數組
固然C語言仍是有行業用得較多的,那就是金融行業。可是有個弊端,那就是由於這個行業沒票子確定搞不起來,因此提供這樣崗位的都是清一色的外包公司,你懂滴〜〜〜。除非你很強力,或者一點經驗都沒有想混點經驗值,不然每天都是和業務打交道,寫的代碼都是很簡單的流水式的(就是if...else...
外加switch(x){case...}
),基本接觸不到其它的。由於你所用的庫都是牛逼的人被封裝好了的,你就寫業務邏輯好了。全部真不太適合想要提升我的能力的人幹過久。bash
##怎麼學習C語言 僅僅掌握語言自己的知識,確定是玩不轉的。那樣真真正正的只算業餘愛好,是不能拿來工做的。不只是C語言,就算是Java這樣的高級語言,都是須要了解部分操做系統的,更況且像C這麼低層的語言了。因此在簡簡單單掌握了C語法知識後,就須要瞭解操做系統層面的知識,最基礎的確定就是系統調用,也就是學會怎麼和內核交互,寫出實用高效的小程序。爲什麼說是小程序呢?由於C語言自己的特色,要寫出像Nginx這樣龐大的程序,一我的是很難操做的,並且開發週期也很長,維護起來也很難。其實在我看來這有違背高效簡單的原則。什麼樣的程序最適合C?打開你的Linux終端,而後敲入ls -l /usr/bin
後回車,所列出來的程序就是最最適合C的。功能簡單明確,後期也不須要怎麼改變,速度要求高,最重要的一點要能夠很好的與其它獨立程序交互,好比ls -l /usr/bin|grep bash
,這樣的程序就是C最擅長的,也是所謂的——KISS原則——Keep It Simple, Stupid。雖然把功能都分散開,就像之前的人們現代化生活,手錶、音樂播放器、非智能手機、照相機,出門帶一堆,如今只須要功能都有的智能手機就行了。C程序爲什麼不像智能手機這樣作呢?要用看上去很蠢開發模式呢?由於這種「蠢」作法能夠很高效的拼湊出想要的功能,好比ls -l|wc -l
就能夠立馬知道當前目錄下有多少文件,沒必要專門的開發一個程序來幹這件事,只須要像嗎積木同樣組合一下程序就能夠獲得新的功能了。服務器
##後續我會寫些什麼文章? 後續我會在假設你已瞭解C語言語法的基礎上寫一些主方法論的隨筆,一塊兒探討該如何用C語言模式思考,漸進試的改進一個簡單實用的程序,讓她變得實用而非像C等級考試同樣教條。數據結構
以上僅僅是我的觀點,不喜勿噴啊,謝謝。編輯器