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