985CS專業學生認為C語言相比於python和Java是落後的跟不上時代的產物,我覺得這才是大學CS教育的失敗。
首先大學CS專業的學生應明確認識到,CS專業教育的終極目的是教授CS(Computer Science),而不是「CL」(Code Language)。選擇大一時先學習哪一門語言的語法,完全由之後的CS教學需要決定。那麽什麽是CS專業本科的主要學習科目?當然是【數據結構和演算法】【電腦組成原理】【作業系統】【電腦網絡】【編譯原理】【數據庫原理】等。這些才是CS的核心專業知識,憑借這些專業知識的掌握,學生也將具備深入研究電腦科學的條件,以及學習其它琳瑯滿目的軟件編程的基礎。
而就目前來說,上述電腦科學學科的很多實踐或實驗性專案還是以C語言甚至組合語言這種偏向於底層的語言為主要實作手段。比如作業系統、網絡協定、數據庫、編譯器/直譯器等,很多優秀的專案或課程實驗是以C/C++為程式語言。所以從後續的學習來說,學習C語言是後續學習的前置條件。
當然我們不是說C語言就是必須優先掌握的,它也不是學習CS的唯一途徑。老師選擇先教C語言,並不影響其它語言的學習,最終要看對於電腦科學的掌握,而不是看對某種語言的掌握。一個有意學習電腦的初學者想先學習Python語言是沒有問題的,只會C語言的人也是難以學好電腦的,但是現在就將教授C語言歸為過時和落後的象征,還為時尚早。C語言語法最簡單,但是用來操控電腦則最難。Python語言的語法相比C語言要復雜很多,但是上手後操控電腦則比C語言容易很多。如果時間條件允許,以python為入門電腦的語言是不錯的(可惜大學老師沒有時間把知識掰開揉碎了給你一口一口餵,大學的知識多復雜度高而時間少)。大學授課受到整體課時安排的限制,如果不能在限定時間內學會某特定基礎內容會影響後續很多課程的學習。況且先學哪種語言更好並沒有定論,所以你可以對整體課程設計提出質疑和可行性改進建議,這是可以的,很多CS專業的課程編排確實受到教師水平糊學生水平等影響而存在很多不盡如人意的地方。但是總體來說先學哪種語言並不太會影響一個要成為電腦大師的人將來成為大師的整體行程。
作為一個985CS專業的學生,你們上的可以是北大,但絕對不是北大青鳥。你們掌握的知識應該上得廳堂下得廚房,而不是只能靠某一道快餐活著。
問題被修改,原問題如下:
補充:鑒於某些同學閱讀理解的問題(可能知乎越來越多中小學生了),我把我上面的話的一些意思稍微明確一下:
- 我反對的不是CS專業要不要首先學習C語言課程,我反對的是將先學習C語言課程視為落伍和跟不上時代的言論。
- 我也沒有表達「C語言是萬眾基礎,先學C語言才是正途」的意思,我說的是學校先開設哪門語言應結合其整體課程進度安排來看,CS專業學生先學哪個語言從長遠來看差異影響並不大,但在受到課時限制和課程之間依賴關系的影響下,課程編排不能靠腦袋一熱。如果你對學校的課程有意見,可以對整體課程課時安排提出建設性建議,甚至要對整體招生和畢業要求做出改變。
- 我不反對先學習python等語言作為入門的第一步,我甚至提倡初學者在條件允許的情況下先學習方便操控電腦的語言。如果你只對自己負責,你學什麽怎麽學都行。