編程語言這麼多,恰恰C語言成了大學的必修課!就由於二級嗎?

「我不是學計算機的,爲啥要學C語言?」若是把學C語言的精力用來學學其它與專業相關度更高的東西,是否是會更好呢?既然如此,幹嗎還學C語言呢?程序員

大學裏除了要拿到「畢業證」和「學位證」之外,還要過「四級」和「二級」,不然可能會被扣發兩證,或找工做受阻,難以「落戶」等。這裏的二級指的是「全國計算機等級考試二級」,是一個面向「程序員」,「考覈計算機基礎知識和使用一種高級計算機語言編寫程序以及上機調試的基本技能」的考試。雖然社會只須要少許的人會編程序,但莫名其妙的是幾乎全部的大學生都想(或被要求)過二級,致使程序設計課程成爲了必修課。編程

二級考試可選的語言包括C、C++、Java、Delphi、Visual Basic、Visual FoxPro和Access。爲何恰恰要學最古老的C呢?這裏的緣由複雜多樣,每一個學校都有各自的解讀,就不一一列舉了。總之,中國必定是世界上「認識」C語言的人口最多的國家,二級考試功不可沒。微信

反正既然此課已開,不學也不行,精力已經搭上,就仍是認真瞭解一下C語言吧。雖然有些無奈,但好在C語言確實是一個有趣的傢伙,並且越瞭解越以爲有趣。若是不信,請往下看……機器學習

遊戲、黑客和C語言

1969年的美國貝爾實驗室,是當時科技界的夢工廠,集結着世界上最富創造力的科學家和工程師,包括數位諾貝爾獎得到者,他們一塊兒創造了無數影響着全人類的發明。好比數碼相機的核心——CCD就是那一年在貝爾實驗室誕生的。編程語言

這幫傢伙的成就貌似遙不可及,但其實也都是凡人,在某些方面和咱們也是很是類似的。好比當他們見到一臺強大的計算機時,內心最早想到的也是用它來玩遊戲。那個時代,計算機是大型機構才能擁有的奢侈品,在這上面玩遊戲實在暴殄天物。但誰在意呢,追求快樂是最重要的,因此他們爲了痛快地玩遊戲而沒少動腦筋。性能

那時候是沒有商業遊戲的,因此想有遊戲玩,首先要發揮DIY精神,本身編。本身編的遊戲被別人喜歡,是當時最有面子的事情。有一個叫Ken Thompson(如下尊稱爲ken)的工程師,26歲,不務正業,看到阿波羅11號載人登月成功,以爲挺酷,本身也想試試,就設計了一個叫「Space Travel」的遊戲。在遊戲中,玩家駕駛着宇宙飛船,在虛擬的太陽系裏穿梭,欣賞美景的同時,還能夠在各個行星、衛星表面降落。學習

這個遊戲先是在Mutlics系統上編寫,後來又在GECOS系統上重寫。能運行這兩個系統的機器都是笨重的大型機,雖然運算能力出衆,但顯示效果不好,並且機時費很是高,玩一次,公司要支付75美圓(當時美國人均月收入大約200美圓)。這要是被老闆發現了,可不是鬧着玩的。因而他夥同28歲的同事,Dennis M. Ritchie(如下尊稱爲dmr),滿大樓地尋找免費的「遊戲機」。功夫不負有心人,還真被他們找到了一臺。操作系統

PDP-7小型機,DEC製造,擁有當時最早進的圖形處理能力。彼時的計算機主要用來處理數據,圖形能力並不過重要,因此PDP-7更多的時候是靜靜地躺着,不多被使用,直到ken和dmr這對骨灰級的玩家發現了它。翻譯

遊戲開始了。可是,遊戲的運行須要操做系統的支持。PDP-7當時仍是「裸機」,沒有能在其上運行的操做系統。偉大的DIY精神再次發揮做用,他倆挽起袖子開始爲PDP-7編寫操做系統,並給這個系統起了一個名字——Unix。直到今天,Unix仍然是最被信任的操做系統,它既支撐着軍隊、政府、電力、電信和銀行等大型機構的關鍵業務,也是蘋果Mac系列電腦的動力之源,甚至iPhone、iPod Touch的魅力也部分拜其所賜。設計

Unix起初是用匯編語言編寫的,那是一種更接近機器而不是人的語言。計算機能直接讀懂的語言叫機器語言,它全部的語句都是由「0」和「1」兩個數字構成的,根本就不是給人看的。當最後一個機器語言程序員瘋掉之後,人們終於開始琢磨怎麼讓計算機認識人語。基本思路是作一個翻譯程序,直接把人語翻譯成機器語言。這種翻譯程序被命名爲「編譯器」。可是直接理解人語太難了,直到如今還沒能實現,因此就折中一下,設計一種儘可能接近人語,還能被精確翻譯爲機器語言的語言。

這種語言就是咱們常說的編程語言,學編程的過程,其實就是學用編程語言說話給編譯器聽的過程。第一種編程語言確定是最接近機器而遠離人類的,它就是彙編語言。雖然看上去有幾分像人語,好比加法叫「ADD」,減法叫「SUB」,但它的語法徹底是機器的,每一行語句都和一條機器指令嚴格對應,這個特色使得針對一種計算機編寫的彙編程序不能在另外一種計算機上使用,由於這兩種計算機的機器語言是不一樣的。用專業術語來講,彙編語言缺乏「可移植性」。

Unix的優雅加上Space Travel的吸引力,使不少人但願他們的計算機上也能安裝Unix,玩玩Space Travel。因而ken和dmr決定改用高級語言編寫Unix,這樣它就能夠在更多類型的機器上運行。

高級語言是除了機器語言和彙編語言之外幾乎全部編程語言的統稱。它的特色是更接近人語,而與機器語言基本沒有瓜葛。不一樣的高級語言編譯器能夠把一樣的代碼翻譯成適應不一樣機器的指令,於是高級語言大多具備很好的可移植性。

故事講到這裏,該這本書的主角——C語言,登場了。決定使用高級語言後,在語言的選擇上,ken和dmr遇到了麻煩。當時可供選擇的高級語言有不少,包括直到如今還在被使用的BASIC和Fortran等,但都沒被看上眼。DIY基因再次發揮做用,他倆決定本身設計一種好用的高級語言,用來重寫Unix。那一年是1972年,ken繼續完善Unix,dmr以ken早年設計的B語言爲基礎,開始設計新語言,兩人一塊兒開發編譯器。這個新語言被隨隨便便地命名爲——C語言。

1983年,由於Unix和C語言的巨大成功,ken和dmr共同得到了計算機界的最高獎——圖靈獎。玩遊戲玩到這等境界,古今也就只有這兩人吧。

Unix和C,得中其一,便能富可敵國。然而,他倆從一開始就沒有去想申請專利、商標、軟件著做權等法律保護,而是把全部的一切,包括源代碼,都爲所欲爲地處處散播。對他們來講,本身寫的程序有人使用,是最大的快樂,也是最大的財富。也正由於如此,不少機構和我的都能自如地爲Unix和C作貢獻,極大地促進了它們的發展。

從上面的故事,咱們能夠發現他倆的不少可愛之處:作事情以興趣爲出發點,並不在意將來會怎樣;極富鑽研精神,信奉「本身動手,豐衣足食」;樂於分享,不計回報。他們的這些特色正是正宗「黑客精神」的集中體現。他倆也被奉爲黑客圈子裏的英雄,甚至是開山鼻祖,你們都尊稱他倆爲ken和dmr(必須小寫)。幾十年過去了,黑客圈子裏再沒有第二我的敢叫「ken」,這個英語圈裏司空見慣的名字。

Unix和C至今還是年輕黑客被圈子接受前必須苦練的三大技藝之一和之二(之三是隨便一種腳本語言)。由黑客設計,被黑客推崇,因此C語言自身也到處閃耀着黑客精神的光芒。這種光芒使它可以永葆青春。

C語言,不老的傳說

最受歡迎的歌必定是被聽得最多的,最受歡迎的語言必定是被用得最多的。C語言如今用得多嗎?在業界,通常的答案是:若是一件事能夠用X語言作,就必定不要用C語言作。

這裏的X能夠代指任何語言。天啊,這好象是在說「若是能夠聽X的歌,就必定不要聽周杰倫的歌」。這是在評價周杰倫仍是曾軼可啊?

哪一個編程語言是最受歡迎的?每一個人都會有本身的主觀見解。仍是用客觀的數聽說話吧。

TIOBE在2020年4月公佈的程序設計語言受歡迎程度的趨勢圖(最新的統計圖請訪問上面網址)。能夠看到,C語言始終處於前兩位,並且最近大有再次奪回第一位的勢頭。

能不用就不用,還如此受歡迎,這就有些讓人費解了。dmr曾經說過一句話:「C詭異離奇,缺陷重重,並得到巨大成功。」由於詭異且有缺陷,因此會被儘可能避免使用,取而代之的是彌補了這些缺陷的語言;由於確實得到了巨大成功,因此它至今仍大受歡迎。一個成功的例證是,圖x-x中列舉的當今最受歡迎的10種語言,除去C語言,剩下的9種中,有7種都直接使用、間接引用或部分借鑑了C語言的語法(好比,它們語句的結尾都要有一個「;」),只有Visual Basic和Python的語法裏找不到C的影子。憑這等世界第一的影響力,受到歡迎也就在情理之中了,儘管它是那麼的讓人愛恨交織。

C語言教給咱們的事

如今,還須要使用C語言的地方大概只限於下面三個領域:

C語言仍然是編寫操做系統的不二之選。它爲操做系統而生,能更直接地與計算機底層打交道,精巧、靈活、高效。最重要的,操做系統的開發者都是最頂尖的程序員,他們有充足的能力和經驗駕馭C語言。

在對程序的運行效率有苛求的地方,好比嵌入式領域,C語言也是首選。不過,嵌入式系統如今的硬件性能也已經足夠強大,而功能要求愈來愈高,因此C語言的生存空間正在縮小。

在須要繼承或維護已有的C代碼的地方,還須要C語言。有不少影響深遠的軟件和程序庫最先都是用C開發的,因此還要繼續應用C。可是,它們中的不少已經開始使用其它語言重寫,那些C的代碼遲早有一天會被拋棄。

應用面如此窄,學它能有多大用處呢?

若是單純從「用不上」這個角度得出「學C語言沒有用」的結論,是有失公允的。即使對計算機及相關專業而言,C語言的「用處」也不算大。學習C語言的意義在於,它爲咱們打開一扇瞭解計算機的窗口。在幾乎作任何事情都離不開計算機的今天,越瞭解計算機也就意味着越能利用好計算機。

美國卡內基梅隆大學計算機科學系前系主任周以真教授在2006年發表了一篇著名的文章——《計算思惟》。文中談到「計算機科學的教授應當爲大學新生開一門稱爲‘怎麼像計算機科學家同樣思惟’的課,面向非專業的,而不只僅是計算機科學專業的學生」,這是由於「機器學習已經改變了統計學。……計算生物學正在改變着生物學家的思考方式。

相似地, 算博弈理論正改變着經濟學家的思考方式,納米計算改變着化學家的思考方式,量子計算改變着物理學家的思考方式」,因此「計算思惟表明着一種廣泛的認識和一類普適的技能,每個人,不只僅是計算機科學家,都應熱心於它的學習和運用」。

不過遺憾的是,咱們如今還不多有學校開設這樣的課程。因此程序設計課在某種程度上肩負了傳播計算思惟的責任。這也是對於不須要使用C語言的學生而言,最大意義之所在。

總之,無論你該不應學C,適不適合學C,既然這門課已經開了,並且有不錯的老師帶領,那麼就好好抓住這個機會吧,別把時間浪費了。也許一個學期以後,你會發現本身在程序設計方面的天賦,進而在這方面努力,最後成爲一名受人尊敬的黑客呢。

另外若是你想更好的提高你的編程能力,學好C語言C++編程,以便更好地考研或者工做的話!

C語言C++編程學習交流圈子,QQ羣757874045點擊進入】微信公衆號:C語言編程學習基地

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

編程學習軟件

編程學習視頻

相關文章
相關標籤/搜索