為什麼MOOC上以C語言為主講授的計算機課程幾乎沒有?

謝@周子涵 @宋紹銘 @Adder 三位提醒,原始問題只是感到很好奇,沒想到引來無數噴,才有了回噴橋段,現已對題乾和描述進行修改,對樓下各位表示歉意。

————————————

本人不是CS背景的,只是用於做科學計算和演算法驗證,平時用的比較多而已。課題組內無師兄帶,雖然自己摸索了好久,從最初研究生入校時代碼總量不超過500行,到上周某一天寫了超2K行,自認為實屬不易,但同時也越發感受到閉門造車所帶來的概念混淆or不清晰、理解偏差引起的瓶頸很難突破,於是才有了上網找課程充電的想法。

其實自己想找的課程,也就是以C為工具的數據結構、演算法設計、網路、分散式計算,操作系統等,最好還有一些圖形界面設計之類的。搜一下的話,是有一些,但相對別的語言,可選資源確實不多。

如果各位有優質資源,歡迎推薦,萬分感謝。

樓下說直接看C源碼,雖說我知道無數大牛都是這麼過來的,由衷說一聲謝謝,可是科學計算畢竟只是自己科研工作的一部分,曾經看過別人寫的部分代碼,確實有幫助,但也深感耗時耗精力。主要原因更在於,coding不是主業,有無數無聊的公式需要折騰、大堆想起來就有吐的衝動的實驗要做,真心沒這麼多時間和精力learn it in such a hard way.

我也在自學Python的途中,不過主要是作為工作之餘的興趣,有點想玩玩具,學習過程中發現MOOC可供參考的課程如此豐富,而自己真正想提高的以C為工具的課程相較之下確實太少,有感而發

同時也對國外CS教育表示好奇,是不是國外CS教育已經不以C為工具講授課程?C是不是已經不再是理工科學生的必修項?

PS:其實自己就身處國外,只是所屬專業離CS有點遠,問過周圍人(Physics、EE、Chemistry、Mathematics),計算機必修選C的很少,大部分都選的Java,還有選Matlab的。。。。辦公室里有兩個做計算的,不過也是後來自學的Python。。。


--------------問題已經修改,以下回答針對原問題-----------------------------------------

這個問題問的很有意思。

「為什麼 MOOC 沒有C , 而中國大學堅持教C?」

言下之意,中國大學要以mooc標準,向mooc看齊咯?

先立結論:

1. MOOC和傳統大學面對的是完全不同的群體,課程設置理念出發點也不同。大學學C出於培養作為一個科班計算機專業學生的基礎的考慮,MOOC學python是出於傳播編程作為一種工具的有效性,以及照顧學習者積極性的考慮。

2. 一般來說,C語言的進階或者說高級的學習方法,並不是單純的學習語言本身,而是用C作為工具,去學習操作系統,編譯器,嵌入式系統這些學科,在特定領域的學習中不斷練習使用C的編程的能力,增強對C的理解。

先說第一點,學MOOC的都是什麼人?多數課程完成的人數不到選課人數的個位數百分比。Coursera data science certificate 賣出了十幾萬個(憑印象,數據可能有誤),最後完成capstone project的只有500多個人。而且,在這些完成的人里,多數還都是已經有計算機科學背景的,零基礎的鳳毛麟角。

這可還是教python的結果。最易學,最好上手,最能看見成效,最讓人有動力的語言之一。如果教C,能堅持的人只會更少。CMU的CSAPP是開放在網上的,但是在沒有教授和助教的幫助下,有多少人能堅持著把概念都搞透,把bug都修了,把performance提高到最佳?

這就說到第二點,Robert Harper上課的時候曾經這樣黑C:「C語言不是一種你可以只看代碼就可以解釋的語言,你常常要下降到系統的級別,去討論具體的架構,具體的編譯,才能解釋為什麼你的代碼是正確的,有效率的。」

C是一種很架構敏感的語言,對於不同的架構,你雖然同樣是寫C,但是設計理念和各種考量可能完全不同。所以學C,學的不只是一門語言,而是你具體學習情景的底層系統設計理念。

不妨看看非中國大學CMU的計算機課程安排,用python的intro課15112是給零基礎或者非cs專業的學生上的。本科生正常第一門基礎課15122就是用C:基本是用C學一些基本的數據結構。下一門學C的大課就是15213:CSAPP:用C實現各種系統的底層功能。再之後的大部分「系統類選修課」:計算機網路,操作系統,並行計算,分散式系統,雲計算,嵌入式系統,包括一些機器人類課程,全部都是用C。我想這才是國內大學應該看齊和以之為標準的課程安排,而不是MOOC,你覺得呢。

不過我覺得CMU設計課程的人真的很不喜歡java,除了軟工,真的沒有課用java。

然後我注意到了題主的一個用詞:「高階C語言課程」。

我個人覺得C是一門很精鍊的語言,沒有C++那麼多亂七八糟的功能,Java那麼多的設計模式。語言本身其實沒什麼特別好深入學習的。你看市面上很多C++,Java的書,但是C的書也沒幾本吧。況且coursera,edx和我所知道的很多大學好像也沒有任何學習一門編程語言本身的「高階課程」,只有使用某門語言的「高級課程」。題主找的東西基本上是一種普遍的不存在吧。


連我這種堅定的軟粉都不抵觸學習並熟練掌握如何使用vim和gdb在linux底下寫代碼了,你們連學個語言怎麼都那麼墨跡。


C語言程序設計

C語言程序設計進階

大學計算機專業

網易哭暈在廁所。

題主搜索水平真是捉急。


這邀我。。

你以為什麼mooc就是標準么?【嘩】

有本事你別學,直接掛。


應試教育使得中國人喜歡學那些很難但是沒什麼卵用的東西。

體現在計算機科學裡就是低年級要學C,要學彙編,要學編譯器操作系統。

這些當然要學。但函數式編程怎麼不學呢?GPU並行計算怎麼不學呢?分散式機器學習怎麼不學呢。

可見中國三/四本大學的課程設置是嚴重偏科並且鑽牛角尖的。


我覺得mooc的想法應該是c這麼基礎的東西,還有什麼好教的。。。


這個是UIUC的SystemProgramming,第一堂課的內容就是C Programming Language……

至於MOOC,Coursera上的hwswinterface(基於CSAPP)也是從C開始的啊

https://www.coursera.org/course/hwswinterface


需要視頻教程手把手才能編程入門的不是geek,

其中做得好的能用來搬磚,做得不好的連磚都搬不好


沒找到是什麼情況,你只找名字裡面有C的課程嗎?

隨手放一個:hwswinterface

強行放一個(把CUDA當成C是不是不太好):hetero

最後來一個名字里也有C的:arduino-platform

除非你關心的是程序語言本身,高階課程顯然是與具體的應用場景相關的。C常見的應用場景和Python常見的應用場景那個門檻更低好像沒什麼好說的,這是顯而易見的。哪個應用場景應該有更多人關注,應該有更多MOOC,也是顯而易見的。

我覺得題主被噴很自然,因為題目和問題補充說的根本不是一回事,如果只是好奇,那就不要扯其他有的沒的,這些課又不是很難找。

我一直好奇不教C(因為教C++所以C不單獨開課不算)的大學是怎麼展開體系結構和操作系統相關課程的,如果有誰的學校是這個樣子,希望能在評論里介紹一下授課思路,謝謝。


題主可以看一下斯坦福的一個公開課《編程範式》。非常好的一門課,從底層剖析C語言的各種機制。這門課里講的基礎不是語法,而是C語言各種語法在內存中的變化。而學好C語言最重要的一點也就是內存玩的6了。

有時間再閱讀一些優秀的開源操作系統或資料庫的代碼。對於學好用好C非常有幫助。我看過的是嵌入式系統ucos和資料庫Redis的源碼。都是非常優秀的代碼。


別把中國大學mooc不當mooc =_=

浙大翁愷老師好棒!


先認真的表達一下我對這個問題的看法:

MOOC:教C的語法的課程,你這種充電的人也不需要,教C如何編程的,說實在話比較難。

國內大學:

作為一個成績不好的CS學生,至少大家都有的CS課程我們都是知道的:

一門語言課

數據結構+演算法

計算機組成原理

操作系統

編譯原理

好,就這幾門課,無關痛癢的就先別提了

列出來的上面的課程,非常非常多的書的示例都只有C/C++,有一些書在第一頁就已經當成我們會C/C++。

學習完python,作為一個初學者,基本上只能看懂演算法書裡面的偽代碼,學完C/C++,balabala,什麼都能看懂。

你以為,大學教的語言課是真的教你如何編程嗎,他只是告訴你,一門語言差不多有這些個東西,下次看到別忘記。

輪子哥說的對啊,學個語言還那麼磨嘰。學C/C++直接去讀大牛的源代碼+看書啊。


MOOC上還沒有教你核物理呢,中國大學裡也有教啊


mooc也沒有教程序員怎麼吃飯的吧


我的理解:

真正C玩的6的人們懶得教別人;對C一知半解的人們有自知之明,不去胡亂教別人。


根據國內多數高校課程安排與教學要求,c這麼簡單的語言不需要上mooc。


分頁阅读: 1 2