為什麼C語言會是大學的必修課?

這是一本給非計算機專業的大學生的C語言的書。“我不是學計算機的,為啥要學C語言?”這個問題每年在中華大地都會被問上幾百萬次。被問的對象可能是老師,也可能是師哥師姐。師哥師姐往往也就是故作明瞭的表情,複述一遍隱約記得的老師的話。

而這些話多半都是比較高瞻遠矚的,例如“將來可能會用到”,“鍛鍊編程思維有好處”,“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”,但它的語法完全是機器的,每一行語句都和一條機器指令嚴格對應,這個特點使得針對一種計算機編寫的彙編程序不能在另一種計算機上使用,因為這兩種計算機的機器語言是不同的。用專業術語來說,彙編語言缺少“可移植性”。


你必須很努力,然後看起來才毫不費力!點個贊支持小編!不知道你們有沒有收穫呢?關注我每天都有乾貨,看下期哦。


分享到:


相關文章: