what?還有985高校給大一上C語言課?是不是太落伍了?

2022-01-08 11:00:01

今天在知乎上看到這樣一個問題:為什麼現在部分985高校還是給大一上C語言課:

C語言真的沒什麼卵用了?竟然還有985高校給大一學C語言課?

這個題主是某985CS專業學生,發現學校居然給大一教C語言程式設計,而不是現在最流行的JAVA或者Python,不由得產生了疑問。

評論區非常精彩,不少答主認為:C語言真的沒什麼卵用了,學校可能是教學方法太落後了,才會繼續教C語言。

不得不承認不少大學計算機專業的教學方法的確有點落後,但大一學C語言還真沒什麼問題。

關於這個問題,小北也寫了篇文章,大家可以看看:你已經是個成熟的985大學了,請不要在大一教 C 語言!(https://mp.weixin.qq.com/s/P1JbWc-mhqmHPKYGe_Zhpw)

雖然現在計算機專業畢業之後用C語言的是小概率,但學習C語言好處還真的非常多。

簡單說兩點吧:

1.培養計算機體系基礎知識

好的大學、好的計算機專業的教學重點不是語言棧而是計算機體系基礎知識。

但用C語言來詮釋資料結構、作業系統、計算機網路、編譯原理、等核心知識最直觀、最簡單。

同時C語言的語法在這些語言中基本是最簡單的,幾天就能學會,相當於掌握這個工具之後再開展其他課程,相當於用最快的速度掌握課程前置知識點的學習。

計算機專業的朋友一定要注意前置知識點,比如網易雲課堂的學習路線就標註了課程和知識點的相關性:

在這裡插入圖片描述

2.C語言最接近硬體

這點非常重要,C語言中沒有大量的語法修飾,C語言中的語句大部分情況下能和組合的語句一一對應。

比如if對應jxx系列、while對應jnz語句,這種一一對應能讓我們更加理解計算機是怎麼執行的。

對這塊感興趣的同學可以買一本《CSAPP》,這本書完全按照C語言和組合的對應關係來讓你瞭解計算機工作原理,以及學習組合語言。

同時C語言很多函數都是直接和作業系統打交道的,跟Java、Python完全不一樣,這些高階語言的直譯器、JVM之類,隱藏了大量硬體細節。

說到底,科班出身的人一定要對計算機底層原理有深厚的功底,在這個基礎之上,Java、Python應該是可以自學的選項。

C語言接近硬體的特效能幫我們構建對計算機體系的底層認知,而這種認知很大程度決定了將來我們能否成為高階工程師甚至技術專家。

基於以上兩點原因,C語言絕不是一個可選項而是必修項,洋哥有不少非科班讀者問:如何提升編碼能力,我都會先問一個問題:學過C語言嗎?沒有的話先學習下。

接下來給大家推薦幾本C語言經典書籍吧,其實舊文推過,再推薦一次:

1.《C Primer Plus》

強力推薦的一本C語言入門書籍,全書626頁,可以讓你在C語言的世界裡暢遊很久,關鍵文筆還非常幽默風趣讓人心情愉悅。

一般來說,中文翻譯都會失真不少,但這本書的翻譯非常到位,幾乎沒有丟失背景資訊和隱藏資訊。

2.《C和指標》

這本書的特點是在指標上花了大功夫,指標絕對是C語言的精髓,理解了就等同於攻克了最難的部分。

除了頭尾兩章,指標貫穿全書,並用了大量通俗易懂的例子來講解,正是指標使得C語言如此之強大,所以要學習C語言的精髓,就是要精通指標。

3.《C陷阱與缺陷》

這本書就是一個小冊子,但很有讓人讀下去的慾望,倒不是因為頁數太少,而是書中所說的每一個需要注意的地方,作為一名程式設計師都可能遇到。

作者敘述起來也是旁徵博引,舉的例子短小精悍卻一針見血。此書作為一本常備讀物非常贊,沒事可以經常翻翻加深印象。

4.《C專家程式設計》

這是一本C語言進階書籍,學完前兩本,並有一些實踐經驗之後,再來攻克比較合適。

這本書會讓你對C語言的使用有深入瞭解,同時還介紹了一些C++的知識。

這本書需要一些前置知識包括編譯原理(簡單瞭解即可),Unix/Linux的基礎知識:命令和工具等等。

以上四本書學精學透,C語言基本就問題不大了,另外強調一點,學習語言除了看書之外一定要多實踐多編碼,可以用C語言做一些好玩的程式,比如最簡單的萬年曆,複雜點的貪吃蛇之類的。

最後強調一點:每一個想在計算機行業長期發展的同學,無論科班還是非科班,請務必把C語言基礎弄夯實,萬丈高樓平地起,C語言就是必須的地基。

今天就寫這麼多了,我們下期見~