回複內容:
因為翻譯過來的公開課裡面就只有Java和Python。無論國外情況怎麼樣,c/c++入門真的很不科學。而且後面的資料結構,組成原理,os,都在用c/c++,之前花一學期接觸別的也無妨。
但由於國內還要學兩課、通識課這種雜七雜八的課程,講兩門語言恐怕來不及了,於是第一門就被壓縮了。看了一些回複後覺得似乎很有必要把我的內容從評論中複製出來 讓更多人看到。
回答中多位答主似乎都身處北美院校,我作為一名國內某211大學 正經電腦專業(專業在國內排名二三十名 算是個中上等水平吧 對國內教育資源來說應該比較具有代表性。)
"你要是要求國內的學校跟北美的CS名校看齊,那你就應該做好你在大學第一學期就同時學Python+C++/Java及資料結構基礎+離散數學的準備吧。"呵呵呵豈止如此?樓主你顯然是沒在國內高校讀過CS專業! 說說本人經曆,北上廣某211大學正經CS專業,大一一年和大二上,和電腦有關的東西只學了 C C++ java 資料結構這四門課,三個學期就學了這四門和專業有關的課!!!這其中C++還是自學!!!我真TM納悶了為什麼被定為自學的不是思修毛概這種課而是專業課!!!更奇怪的是 電腦專業學生竟然還要學一門叫做近代史的課程並且是必修的,並且考試還是閉卷的,國內高校的課程合理性不言自明,如果有機會去北美學習CS EE這些工程類課程,我覺得根本不需要猶豫,比國內真的是天壤之別!
不僅如此,到了大三 大四,由於考研的複習考研 出國的備考托福GRE 工作的忙著到處實習,因此原本被安排在大三的很多重要的課程諸如 軟體工程設計模式 資料庫理論 人工智慧演算法 移動端編程 電腦原理 編譯原理 互連網七層模型雙工協議以及貫穿著OO思想的各種語言選修課,這些真正作為一名電腦學生應有的專業素質,大家沒有時間學習,或者說沒有時間好好學習。真正大一大二用來打基礎的那兩年卻都浪費在了思修毛概馬哲近代史電路焊接甚至很多學校還安排了更多大一大二的奇葩課程。我想說:
在國外大學讀CS的同學,請珍惜你們的學習機會!
以下是2015/5/3淩晨最新的編輯。
-----------------------------------------------------------------------------------------------------------------------------------------
後來想了想,又看了看當時敲的這些東西。理性地講,我們國內大學的課程安排,更像是以本科+碩士+博士 這樣一整條完整的時間軸來構建知識體系而設計的。說實話雖然這不合理但也不難理解,畢竟有權利和資格決定高校學生該在什麼時候學什麼樣的課程的人恐怕基本上都是完整地走完這樣一條書本生涯的人,保不齊還有什麼多學位甚至修了多個碩士博士文憑的“理論家”,也許在他們眼裡課程的確應該這樣安排,也許他們中的部分人甚至根本不在乎課程究竟是如何安排因為這對他們自身沒有任何直接利益可言,畢竟大學老師教課都是義務的,掙錢靠的是項目和走學。
但實際上,作為一名已經踏入工作崗位並且依然從事著coding工作的畢業生,回頭看過大學的這些課程以及點點滴滴,我真的不認為這個世界上所有的人都應該在學校裡花比四年本科更長的時間進行學習,至少電腦科學專業我可以負責任地這麼說。
傳統的制度體系帶來了很多的問題,這其中就包括我們國家的教育。很多出國留學的人可能都會有這樣一個共識,國外對我們國家高中之前的教育相對更認可一些,而我們大學階段的教育在西方國家申學校的時候明顯感覺到這一點。我身邊的一個朋友告訴我,他甚至希望先考到國外一個二三流的大學再通過轉學的方式進入一所更好的學校,國內大學教育結果在國外教育界 學術界的認可度不言自明。實名反對目前排名第一的答案,純粹答非所問,用大量文字圖片湊字數。
其實原理很簡單,Python在國內是最近幾年才火起來的,大學裡面要改一個課程的體系是很困難的,所以大學教育還來不及換。我接觸到的很多大牛老師,他們都不會Python。
國內有些專業不需要知道那麼底層的編程思想,所以他們教VB,他們的老師(或者學校領導)不知道有Python比VB好用,否則,怎麼會仍然選擇VB?
另外,親身感受,有一部分老師,他的老師當年怎麼教他的,他就怎麼教他的學生。
============================以下內容純屬猜測:==========================
國外的教學思想是把複雜的問題講簡單,國內的風氣是把簡單的問題講複雜。
譚浩強的學生遍天下,其中某些位居重要部門的學生想幫他多賺點錢。
樓上爭論哪門語言好哪門語言壞的論調是沒有道理的,Java那麼噁心,但是用它確實可以賺錢吃飯。為什麼我們的入門課是Haskell.......................................
以上是吐槽。
首先對於優秀的大學來說,程式設計語言並不是一個很重要的東西,畢竟topXX的大學又不是藍翔,教學任務不是什麼畢業就會寫qq。大多數課程設定的主要目的只是學習程式背後的編程思想,而語言只是相應的工具,什麼順手用什麼。 譬如你做functional programming, 自然要用functional programming language來教。 做影像處理,你就會用matlab。做資料分析,你就會用r。 這不是說什麼C不行,而是你有一個工具箱,但是你做什麼事都用起子會很蛋疼而已。
畢竟,趁著年輕,多接觸點語言總是好的。
以下是吐槽。
那你TMD也不要讓我們每個作業都用一個新語言寫啊,Jason這語言是個什麼鬼東西啊? 每回assignment一半時間花在看Lib了啊! 已經會的語言都會搞混啊! 我校電院入門的語言是Python啊,誰說國內都是C/C++了?
反正我覺得挺好的,讓很多人在後來選專業的時候盲從CS這樣我們壓力小很多。 我們暫時撇開CS Related的專業,國內學習編程的主要是理工科,文科很少開設,至少NJU是這個樣子的。先想想理工科讓學生們學習編程是為了什嗎?
- 本專業可能會用到一些相關的內容
- 需要有基本的編程思維
就第一點來說,比如天文,地質,物理等專業用到編程的地方基本都是計算和類比。他們大多數不需要你寫個完整的類,不需要進行單元測試,不需要有什麼閉包,回調,GUI,Socket,MultiProcess,所以希望一門文法簡單的語言,比如C。另外他們可能需要相對比較高的效能,所以選擇C/C++的居多,而且一般只是講解主幹文法,不涉及其它。
有人會問那為什麼不使用Fortran?首先說他太老了,不是說時代老,而是思維方式有些落後(愚見,勿噴),而且Fortran的高效率是語言理念層面上的,但是在具體編譯器實現上可能並不如C,畢竟現代C編輯器的最佳化技術已經到了變態的地步。而且,其實在大學中學習Fortran的也不少。
對第二點來說,學生學完這門課程要建立起初步的利用電腦來實現特定功能的思維方式,因為他們以後可能會使用Matlab,會使用R。所以需要一門比較正統的語言,學了一門之後,其它的基本上再學起來也不會太困難。所以選擇C和C++再合適不過了,由C衍生出的語言不計其數,所以C的思維方式可以視為一種標準思維方式。但是這樣也會導致學生的思維面比較窄,但是在固定的學時下,恐怕這是最好的這種辦法。有多少非CS學生會再接觸Lisp呢?所以基本上有C的思維方式也就夠了。
綜合這兩點,C和C++基本上就是最合適的語言了,而且有一點必須要考慮,國內大學老師很多比較保守,不願意引進過多新的東西,他都不會用Python你讓他怎麼教?而且有點問題想問題主,誰說國外編程入門大多用Java和Python?我怎麼覺得還是C系列的比較多。@dy.zhao 很久以前給他的答案點了贊。現在看看我個人還是贊同他的部分觀點的。
先說一下我以下用的 CS 排名主要是這個US News 的:
至於 research,拿過多少圖靈獎,這跟本科教學之類的關係暫且不討論。就按照這個前十名的本科生排名來。
至於怎麼比各校的課程,用 AP CS 能不能換分,能換什麼分來比。至於 AP CS 難度,考過的都知道挺水的,用的是 Java,特別是現在 CS AB 和 CS A 被 CB 取消成一個了,AB 取消,難題都不考了。CB 自己考綱寫得不全,有興趣可以參見:Amazon.com: Barron's AP Computer Science A, 7th Edition (9781438005942): Roselyn Teukolsky M.S.: Books
Chapter 1. Introductory Java Language Features
Chapter 2. Classes and Objects
Chapter 3. Inheritance and Polymorphism
Chapter 4. Some Standard Classes
Chapter 5. Program Design and Analysis
Chapter 6. Arrays and Array Lists
Chapter 7. Recursion
Chapter 8. Sorting and Searching
Chapter 9. The AP Computer Science A Labs
這書是真的從 int 講起的,但是 Java 應該講到的地方都講到了。
這是 CB 的考綱:http://media.collegeboard.com/digitalServices/pdf/ap/ap-course-overviews/ap-computer-science-a-course-overview.pdf
看一下前十學校的態度就行了:
1. MIT
2. Stanford2. Stanford
CS106B 這個 level 的是什麼課?自己看視頻:https://www.youtube.com/watch?v=KkMDCCdjyW8
在講 hash;在講 hash;
至於難不難,當然是不難的:
Difficulty of CS 106 for a non-major? : stanford
但是的確有 major 是 CS 的人在上這節課。畢竟你不能要求所有報 CS 的人都有編程經驗,即使有你也沒法檢驗啊……
3. CMU
15-112 or 15-110 Computer class for Freshman?
這課,屬於「選修」的那種感覺。
至於難不難,有一個人回複:
Generally speaking 15110 is the kind of introductory CS course for people who are not keen on exploring a CS career further. Actually you don't need to take it since you have AP CS; you can just get units straight away if you got a 4 or 5 on the AP.
15112 is what you should do if you wish to go further. It is taught by a former Microsoft Project Manager and uses Python. ( in fact you might be able to trade AP CS for 112 too, I just can't remember...) It's quite intense, the professor quite awesome and Python quite useful as a tool for mathematical operations and statistical analysis. Though the workload is notorious. " You know what CMU means after taking 15112."
So it's really dependent on your son. I am pretty sure he can graduate without taking a single CS course, but I doubt you should let slip the world' s best CS education experience now that you have access to it. You can always register for it and drop if you find it to be too hard, after all.
(注,那人是 MCS 的)
底下一個打臉的:
If your son is good at computer science and confident in his abilities, and got a good 4 or 5 then he should already have credit for 15-112. 15-112 is an intro course and covers largely the same material as what he did in AP computer science. Unless he's interested in reviewing material he has already done, he should skip 15-110 and 15-112 completely and just take his AP credit for them. A more appropriate course for him would be 15-122.
結論,CS 的人都覺得是水課。
4. UCB
這裡我瞎了。。。我一直以為是不能換正經課程的……結果 AP CS 在 UCB 可以換成 Data Structure……這裡我瞎了。。。我一直以為是不能換正經課程的……結果 AP CS 在 UCB 可以換成 Data Structure……
期末考卷:https://www.cs.berkeley.edu/~jrs/61b/lec/practice
這裡出現 bug 了;明明 AP CS 水得一塌糊塗,結果在 UCB 居然能換掉 EECS 專業的必修課程,而且還是大一第二學期的必修課程:http://www.eecs.berkeley.edu/Programs/Handbook/sample-curricula-math1b.pdf
然後我看了一下 61C 是啥,發現了這個:然後我看了一下 61C 是啥,發現了這個:https://github.com/liufei11111/CS61C
不太相信這是 ucb 的進度。只能說老老實實這樣上的話,我覺得偏慢了(我算了一下 cs 的進度我一入學就是 junior?當然我覺得沒有人會老老實實這樣上……)
5. UIUC
我有這個學分。但事實上滿足不了 EECE 畢業要求。水課。我有這個學分。但事實上滿足不了 EECE 畢業要求。水課。
6. GaTech
水課。學校裡用 python,因為壓根不在乎你用java 還是啥,太水了。
7. U of M
並非真正的水。但是還是 intro。並非真正的水。但是還是 intro。
8. UT Astin
........
我看到了什嗎?
這門課程竟然還是 CS 才能選?逗我呢?……
9. Cornell
我看了一下很多人都是會去上更難的課程,但是不幸的是這門課被 Cornell 算在畢業要求裡了(CS111X)
10. CalTech
不要忘了CalTech 雖然 CS 比較爛但還是 CalTech 好麼;AP 是什麼東西,你覺得我會認麽?什麼,你說你覺得你自己很牛逼,可以跳課?來入學的時候給你張卷子爽爽。不要忘了CalTech 雖然 CS 比較爛但還是 CalTech 好麼;AP 是什麼東西,你覺得我會認麽?什麼,你說你覺得你自己很牛逼,可以跳課?來入學的時候給你張卷子爽爽。
總結一下:
CalTech, MIT:不承認 AP CS;即使是上一樣的內容也要你在大學裡重新再上一遍高難度版的。
Stanford,CMU,UIUC,GaTech:你考吧,考了學分對 CS 沒用就是了……表示我們可以用 Python 上,別擔心語言,反正都是水課……
UMach, UCB, Cornell, UT:算作 CS 的畢業要求學分;但是你上這麼簡單的課不怕被碾壓嗎?
結論:
用 Java 和 Python 上的基礎課程,雖然的確是美國大學的編程基礎課,但是在 CS Ranking Top10 的學校裡,基本是水課的同義字了。簡單來說就是「漲漲自信」。
另外比如 Cornell 有標註 Placement exam offered,UI 是 CS101 以上一個等級的課 CS125 提供 Placement;想要快點上的人都會考掉的,(我是直接從 CS225 開始上的……) 選什麼都選看起來很難的開始學有利於培養學霸的自信。國內如果開Python, 那估計只有文科生去選了因為Python確實容易入門啊。
C/C++好是好,但是不好學。
像C語言的指標、資料結構、型別宣告等等這些強大的特性都不適合新手入門,難懂,所以有的學校乾脆連指標和資料結構都不上了。還有HashTable這樣實用的東西(Python裡叫Dictionary的東西),沒有原生支援。原生的string類型,C語言也沒有。
C++倒是有string,可是也是延續了他爸爸C語言的缺點——不容易入門,擁有更多更加強大特性的同時,也更加難學了。
這種情況入門確實不如Python。
Python容易入門到了什麼程度呢?在掌握有其他數門程式設計語言的底子的情況下,我看了兩Apsara Infrastructure Management Framework本文法,瞭解文法的大概構造,就可以直接動工幫人做項目了。
編程入門是培養編程觀念、培養對編程的愛好的的,就這點來說,更加易學的Python作為入門課程是相當合適的。很多隻學得會Python的Python傳教士的出現,也是這個原因。
但是入門終究是入門,要玩程式員三大浪漫之類的,還是有些不足。沒有黑Python程式員的意思,我自己也是Python程式員。
對了,暨南大學一些文科學院,編程就上的Python,不需要《電腦導論》、《電腦網路》、《微機原理》等等課奠基,直接就學Python,沒有問題。如果是C語言/ASM,則需要其他課奠基。