扯買房實(shí)在不擅長绎速,咱門還是來聊程序吧。
A焙蚓,B纹冤,C洒宝,D,E萌京,F(xiàn)雁歌,G大鵬說,我《都選C》知残,我是不知道大鵬是不是也寫過代碼靠瞎,他居然清楚C的重要性。對我來說求妹,C語言應(yīng)該可以算得上是世界上最偉大的編程語言乏盐。全中國口氣最大的程序員,業(yè)界稱之為“垠神”制恍,曾經(jīng)發(fā)過文章吐槽過業(yè)界各種主流的編程語言(對Java父能,的Python稍微寬容一些),他說Go語言設(shè)計有錯誤净神,Ruby是垃圾何吝,JavaScript是垃圾中的垃圾。但我看他對C語言卻沒發(fā)表過什么負(fù)面言論鹃唯。
之前參加Go大會爱榕,演講的人許多都在說受不了C語言了,它動不動就爆內(nèi)存坡慌,為了提高系統(tǒng)穩(wěn)定性與可維護(hù)性他們把原有的邏輯用Go語言重寫了一遍黔酥,這應(yīng)該是一個正確的策略,并不是C語言不適合大項(xiàng)目八匠,而是要掌控好這門編程語言實(shí)在太困難絮爷,一個公司很難保證招聘的所有員工都牛逼到考慮到如此之多的內(nèi)存管理情況,難免引入一些有內(nèi)存泄露隱患的代碼梨树,與其在這里面死磕還不如換一種更好掌控的語言,這或許更符合公司的發(fā)展需要岖寞。
C語言沒有垃圾回收抡四,需要自己去管理內(nèi)存釋放內(nèi)存,而這點(diǎn)對于現(xiàn)代程序員來說確實(shí)有點(diǎn)難以接受仗谆。除此之外語法過度嚴(yán)謹(jǐn)指巡,定義方法之前都需要預(yù)先聲明,指針操作難以理解這種種麻煩事也導(dǎo)致了C語言的市場份額(應(yīng)該這樣說)漸漸被其他語言所占去隶垮。不過我覺得以上種種麻煩事也是C語言的魅力之處吧藻雪。它能讓我們可以更加直觀地與計算機(jī)系統(tǒng)打交道,讓我們可以更加清晰地了解到一個程序運(yùn)行的時候發(fā)生了什么事情狸吞,我們哪些方面需要系統(tǒng)的接口支持勉耀,我們能夠清楚自己需要分配多少內(nèi)存空間等等等等指煎。
1. 我們往往忽略了它的存在
對于許多計算機(jī)系的同學(xué)來說C語言可能就是噩夢,以至于他們遇到Java的時候就如同找到一根救命的稻草便斥。經(jīng)濟(jì)快速發(fā)展的今天C語言似乎漸漸失去了昔日的榮光至壤,在語言排行榜上的第一名的位置已經(jīng)讓給了Java,游戲領(lǐng)域C++已經(jīng)占有了一席之地枢纠,Web領(lǐng)域像街,Ruby,Go晋渺,Python镰绎,JavaScript這些語言各自占著不同比例的“市場份額”。那問題來了木西,C語言是否還有市場跟狱?。
讓我們透過現(xiàn)象來看看更本質(zhì)一點(diǎn)的東西户魏,目前承載著我們生活的大部分技術(shù)其實(shí)都跟C語言脫不了關(guān)系驶臊。比如,Python叼丑,Ruby這些流行編程語言的解析器关翎,目前使用最廣泛的服務(wù)端操作系統(tǒng)--Linux的內(nèi)核,以及我們目前用得最多的版本管理系統(tǒng)Git鸠信,他們都是大神們用C語言編寫而成纵寝,只是我們平時看不到C的存在罷了。或許它已經(jīng)被編譯成二進(jìn)制代碼星立,可以直接在命令行直接運(yùn)行爽茴,或許有些人給你提供了友好的用戶界面,讓你們看不到在背后默默支撐他們的人绰垂∈易啵或許有人用它實(shí)現(xiàn)了其他更加高級的編程語言(如Ruby,Python劲装,Lua)胧沫,讓你沉迷于這些語言的語法糖的時候忘記了它的解析器是由誰來實(shí)現(xiàn)。
如此看來就有點(diǎn)像是前端開發(fā)跟后端開發(fā)的關(guān)系那樣占业,個人覺得后端工程師往往需要承擔(dān)比前端更加大的工作壓力绒怨,他們編寫的代碼支撐著我們系統(tǒng)最關(guān)鍵的部分,但是人們往往只能關(guān)注到他們能夠直接觸碰的東西(可供用戶使用的UI界面)谦疾,卻忘記了為了支撐他們所見的這個頁面背后默默運(yùn)行著的服務(wù)端代碼南蹂。C語言實(shí)現(xiàn)了許多主流語言的解析器,而我們基于這些編程語言實(shí)現(xiàn)了很多了不起的網(wǎng)站念恍,App六剥,而它自己(C語言)卻漸漸淡出了人們的視線在背后默默運(yùn)行著晚顷。
2. 你可以學(xué)會它
C語言難,是真的難仗考,他是很多大學(xué)教計算機(jī)課程的“守門”語言音同,為何說是守門語言?大學(xué)老師美其名曰:“用它來嚇跑那些對在計算機(jī)領(lǐng)域混水摸魚的人(說得好像他自己不是在摸魚似的)秃嗜∪ň”這確實(shí)有點(diǎn)用,說實(shí)在這也嚇走了一些人锅锨,我自己也被它嚇跑過叽赊。
C語言是難,但個人覺得并沒有老師說得那么玄乎必搞,如果真如老師所說理解不了指針的人就不適合干這行的話必指,那我早就該轉(zhuǎn)行了,事實(shí)是每個人的智力水平不一樣恕洲,有些人只是接收得慢而已塔橡,憑什么要因?yàn)檫@些老師的幾句話就打退堂鼓?
它沒有垃圾回收還有異常處理霜第,我們需要自己去分配內(nèi)存葛家,它甚至連對象都沒有。以至于很多人都黑那些學(xué)C語言的人找不到對象(好吧泌类,這點(diǎn)我承認(rèn)癞谒,所以我現(xiàn)在更多在寫Ruby)。C語言看起來更像是手動擋的汽車刃榨,雖然比起自動擋的汽車有點(diǎn)難以把控弹砚,但熟練之后的那種操作感還有成就感是無與倫比的。這也導(dǎo)致了我在大三別人都在苦學(xué)Java的時候選擇了C跟Linux枢希,只是就業(yè)機(jī)會堪憂只能暫時放下了桌吃,最后為了不隨Java的大流投入了動態(tài)語言的懷抱。如今看來甚好晴玖,學(xué)習(xí)了動態(tài)語言之后更加明白了C的重要性读存,以及Java的非絕對必要性,哪怕現(xiàn)在我用C語言就只能寫出"Hello World"也沒關(guān)系呕屎,只要用心,愿意花時間研究敬察,C語言并沒有想象中那么難秀睛,你一定可以掌控它。
3. 這東西有什么用莲祸?
學(xué)C語言可以找到什么樣的工作蹂安?又是一個尷尬的問題椭迎,我要是知道答案當(dāng)初我可能就不會跑去學(xué)Python了。我大學(xué)時候碰過壁田盈,我以為如果我學(xué)會了C語言在外面一定可以找到好工作畜号。后來我發(fā)現(xiàn)我錯了,好不容易去了一家聲稱招C語言的公司實(shí)習(xí)允瞧,去了之后他們讓我學(xué)C#简软,工作兩個星期后跟他們老總接觸之后發(fā)現(xiàn),原來他們是分不清C跟C#的區(qū)別述暂。
以前據(jù)說嵌入式領(lǐng)域會用到C語言痹升,不過好像這個領(lǐng)域也被Python,C++這些語言占領(lǐng)得差不多了畦韭。C語言會不會演變成像Lisp那樣只適合用來做教學(xué)語言了疼蛾?
之前聽過有些大神說過
寫Lisp你很難找到相關(guān)的工作,但是它能讓你成為一個更好的程序員艺配。
現(xiàn)在看來這句話用在C語言上也挺合適的
寫C你很難找到相關(guān)的工作察郁,但是它能讓你成為一個更好的程序員。
據(jù)我觀察转唉,函數(shù)式編程是越來越流行了黑竞,如今Java據(jù)說都支持一些Lambda相關(guān)的東西了缕粹,Clojure,Elixir這些編程語言也漸漸火起來了,Ruby熬粗,Python,JavaScript這些語言幾乎統(tǒng)治了Web開發(fā)的半壁江山驴一。后起之秀Go聲稱要擊敗C語言踊淳,把C語言能做的事情都做一遍。確實(shí)如今的C語言已經(jīng)沒有當(dāng)年的那么無敵了镶苞,出現(xiàn)了許許多多的替代品喳坠,或者衍生品。但我覺得作為一個存活了幾十年的語言茂蚓,它自有它過人之處壕鹉,作為一個系統(tǒng)級編程語言,它簡單卻難以掌控聋涨。
當(dāng)然也可能并沒有如上所說的那么玄乎晾浴,更多的是覺得學(xué)這個東西有什么卵用,只能用來擼擼算法題牍白。哈哈脊凰,如果持有這種想法的同學(xué),您還是繼續(xù)寫Java比較好一些茂腥。畢竟Java即可以用來擼算法題也可以用來找工作狸涌。不過個人更傾向于C語言切省,或許我自己也是追求“手動擋”操作感的那類人吧,想想你可以在黑窗口上帕胆,打開一個輕量級的文本編輯器朝捆,編寫相關(guān)的代碼,可以自己精確分配內(nèi)存空間懒豹,直接往某個內(nèi)存里面塞你想要的東西芙盘,當(dāng)你塞的東西放不下的時候,程序會告訴你內(nèi)存爆了歼捐,這個時候你得去思考自己塞了什么不應(yīng)該塞的東西進(jìn)去何陆。個人覺得這或許也是動態(tài)語言所不能給予的編程體驗(yàn)吧。
學(xué)C語言確實(shí)很難找到相關(guān)的工作豹储,除非你是資深專家贷盲,但它讓我們更直接地與操作系統(tǒng)打交道,讓我們對內(nèi)存分配剥扣,線程調(diào)度這些概念有更清晰的理解巩剖。了解這些東西或者說磨練這方面的意識對于日常的工作可能沒有什么直接的幫助,但我始終相信掌握C并借此了解更多底層的東西钠怯,可以讓你在這條路上走得更遠(yuǎn)佳魔,也更開心。
4. 尾聲
以上是本人對C語言的一些看法晦炊,或許有些片面(還望指正)鞠鲜。越來越多的語言妄想取代它的地位。但個人覺得無論這些語言再先進(jìn)他們也無法完全取代C語言在許多程序員心目中的地位断国,特別是優(yōu)秀的程序員贤姆。而C語言最終會走上Cobol那樣消亡的道路呢,還是會走上不朽之路呢稳衬?我們拭目以待霞捡,但我個人覺得會是后者。