原標題:自學 CS 總結
額,標題的CS指的是Computer Science 電腦科學。
首先這只是我個人的總結,希望能提供大家一些好的建議或者想法,至於具體的可實施性和可推廣性就不做任何保證了。其實主要是“我上過的與CS有關的公開課的總結”,不過為了名字的短小精悍所以。
只是彙報一下我學了這些課,而且做一些個人的評價,並不代表著就等同於CS的學位了。額,作業系統編譯等等都沒上過這是必然不能比的。我只是上了這些課,而且這些課都屬於CS的範疇而已。現在也只不過是拿到了offer所以彙報一下,肯定還要繼續學的。忘了哪位同學評論的對,這些都是CS Technology,主要面向的其實是非CS專業的同學,打一些基礎吧,畢竟現在不會programming什麼的基本寸步難行啊。
如果確實準備通過自學CS來找工作,那麼最好先確保有足夠的時間,能力和毅力。大忙人,作業寫不完天天趕ddl的,數學恐懼症,程式設計恐懼症或者重度拖延症基本可以點叉了。而且請至少留出一年時間來學習吧。
我的背景本科是藥學和心理,MS是Columbia的Biostatistics,然後工作拿到了。加州某小IT公司(也就是說你們大部分不會知道名字的公司)的offer,package勉強可以跟CS MS comparable這樣。不過鑑於這裡面有極大的運氣成分所以沒有任何可推廣性和借鑑價值。然後我就進入正題說自學CS了。
我的背景算是統計吧,然後這樣的話是要往machine learning的方向轉,完全沒必要我也不願意做純碼農or Software Engineer,我投的基本上還是比較交叉的Data Scientist或Modeling Scientist這樣。需要一定的programming能力但是要求並不深。除此之外可能會一些database或者machine learning會有幫助。我學其他的基本是個人愛好。其他專業的同學請看看就好了。而且申請OPT什麼的時候還要考慮工作和學位的匹配程度。
首先一點,一定要是免費!或者基本免費。為什麼不旁聽的原因是我在醫學部的校區離計算機系的主校區還是有相當距離的,所以我懶得去。不過現在網路上有極其豐富的教學資源,尤其是在計算機這方面更是非常豐富。這裡我用的主要是三個平臺:
1, Coursera,由Stanford的吳恩達(什麼沒聽說過?英文名應該更熟叫Andrew Ng)和Daphne Koller教授建立,現在有200多面課程,基本上有100多所大學吧,其中CS的課應該就有50+。他們的特點是每門課都有一定的開放時間,而且有deadline,如果沒有趕上開放時間就要等半年或者更長時間才能趕上下次開放。所以要上的話建議提前半年到一年看好所上課程的下次開課時間。(如果是某門課的first run那麼很可能會推遲開課。)最後一般會給certificate,但是不會有人看那玩意的。程式設計作業會有,不過一般不會限定語言。課程跟大學內教授的相似,會更偏理論。課時基本上是5-8周,然後每門課的用時不定,2-4小時吧,如果有programming assignment會更多。
說一下PA(Programming Assignment),PA這個東西我覺得是非常好也非常有用的。有實驗表明學習的最好方式之一就是通過教別人,而PA,我的理解就是把你的概念教給計算機的一個過程,所以真的是非常有用的,不做PA基本等於白學雖然有些誇張但是收穫少了80%應該是會有的。
2, Udacity,cofounder是google一個教授,另一個也是stanford的。課非常flexible。只要材料全部post了那麼什麼時間上都可以,什麼時間完成作業也都沒要求,適合填充碎片時間(比如coursera的課很少的時候安排看Udacity),會更加註重應用,會有autodesk,nvidia的人去講。並且我認為很適合學程式設計。用的Python較多,如果沒註明的話預設就是python了,最近也有需要C/javascipt/HTML的課。缺點是他的視訊是upload到Y2B上面的(雖然現在基本都開放下載了),所以需要翻薔。技術好的請翻薔的,技術不好的請搞一個V*P*N,一個月也沒多少錢,跟你學到的知識相比絕對物超所值。課基本是7周,6周的正課,最後一週一般是叫點牛人然後來個展望這樣。每週時間也要看programming的比重,不會很多。
3, 其他,主要是iTunes U或者翻譯過來的網易公開課,相比而言視訊的質量會非常差。沒了。不是特別推薦。優點是網易公開課的話是有中文翻譯的。這個一般相比,看視訊的時間需要的較多。
然後我第一次上Coursera的時間是4.23,第一次上Udacity的時間是4.18,也就是說到現在也沒有一年。這之前我的程式設計經驗是:R,基本可以熟練運用。如果統計的同學R或者Matlab應該是肯定會一個的吧。然後後面我會按照我上的課的時間順序給出評價。基本上5星是必選,4星是machine learning必選,3星是推薦,2星是一般,1星是不推薦。
0, MIT電腦科學導論,5星。請到網易公開課找,或者iTunes U等找英文資源。我上課的時間是大四。講的內容基本是以python程式設計為主,並且會涉及到一定的OOC(物件導向)的內容,鑑於後面的課都跟OOC沒什麼關係所以這個課也還是挺好的。講的也不錯,相比之下harvard的CS101我就很不喜歡。
1, Udacity CS101 Intro to CS: 2.5星,作為入門課是很可以的,講的也很適合美國人(對我的意思是他們比較笨),不過如果有了MIT的做基礎這個基本就跟玩似的。有時間上了就好也不花什麼精力。或者直接作為python入門也是不錯的。內容基本是build a toy search engine。還算有趣。
2, Udacity CS262 Programming Language:5星,通過build一個javascript和html的interpreter可以對計算機語言的執行方式有一個更深層次的理解。尤其是對於各種syntax error之類的。而且他的成品基本上是Udacity所有課裡面最exciting的,老師的聲音也很好聽。難度適中。有前兩個的基礎應該問題不大
3, Udacity CS212 Design of Computer Program: 5星,Google的Peter Norvig講,基本講完之後的感覺就是所有程式設計都沒問題了。不過也很難,我當時每週的課都。比較困難。因為當時我是101,212,262還有machine learning同時上的,外加還要抽出一點點時間複習期末考試。每週基本上都能有一定的成果,第一週是poker,然後後面還有word game,game solver,grammar等等非常有趣的內容,極力極力推薦。難度,挺難的,不過收穫也非常大。順便這老師我特喜歡,也是Udacity的cofounder。
4, Coursera Machine Learning:4星,ML必須課需要說什麼麼。不過比較偏應用,會介紹Neural Network,但是對SVM基本上一帶而過。還有recommendation system和別的一些較應用的內容。沒有reinforcement learning的部分,unsupervised也比較淺。有PA,沒有期末考試,一般人這課都能拿滿分吧因為沒有限制嘗試的次數。用的語言是Octave/Matlab,難度一般。順便Andrew Ng的奇怪的中國口音實在是聽起來好爽。以及老師也是Coursera的cofounder,還經常來中國玩。
5, Coursera Software Engineer for SaaS: 1星,看情況應該是不再開了,隨便說幾句。課的視訊直接就是上課錄得,質量很差非常沒有誠意,而且感覺就是一直在賣自己的教材的樣子。課。因為上的太早了我完全沒概念所以也基本沒聽懂。勉強做了前面幾個PA實在忍不了了最後這個課我就基本沒上。用的是Ruby on Rails。
6, Coursera Human-Computer Interaction: 2星,一般。沒什麼特別的意思。有些需要自己設計介面什麼的對那種基本不感冒。而且後面居然開始講統計和實驗心理學一類的東西了我有些接受不了。
7, Udacity CS253 Web Application: 3星,挺不錯的課,就是最後用GAP搭建一個非常簡單的blog以及wiki。能夠提供一些關於網頁應用的insight(當然非常淺),做的東西也算是非常有意思的,另外用的平臺是Google的GAP,國內的同學請準備翻薔。難度適中。而且最後一單元會談到很多很實用的問題比如scale什麼的。而且能給一些關於software engineering的idea。
8, Coursera Algorithms: Design and Analysis Part 1: 5星,這個是Stanford開的那版,不是Princeton的,後者我沒上過不過據說更淺一些。老師很有激情語速也比較快,寫字也很難看。不過看多了就習慣了。演算法對CS是非常重要的,也是面試常考的。這個介紹的是基本概念big-O,還有sort和search。每週都有PA,基本是給input然後求output這樣,不限定語言,不過python有時候會非!常!慢!難度適中
9, Coursera Cryptography I: 3星,Stanford的密碼學,講得很詳細,而且也非常難。畢竟都是最最聰明的人在搞這些玩意。有很多非常奇妙的trick。不過難的同時同樣的也很有挑戰性。這個比較偏理論。有三星的自虐指數,難度是真的很難。
10, Udacity CS373 AI: Robotics: 3星,是Udacity另一位cofounder講的,也很不錯介紹了particle filter和A*什麼的。缺點是一開始重複了兩週的非常基礎的probability的內容,不然的話還是可以考慮給4星的。難度適中。
11, Udacity CS387 Applied Cryptography: 也是密碼學,一視同仁給3星。這個就很應用,理論的部分不多,而且cover的比Coursera的多(Coursera的畢竟只是part I, part II還遙遙無期。。)每單元最後都有challenge題目,是真的很變態。尤其是final的最後一題,設計得非常巧,有大概四五個環節要把很多學到的東西都用上。做的感覺就跟拿著藏寶圖尋寶,然後一個一個解開線索一樣。因為是密碼學,所以必須的自虐指數三星,難度也真的很難。另外上這課有時候也需要梯子。
12, Udacity CS215 Algorithms:3星吧,鑑於有上面的algo了這個也不是很難。算是鞏固好了。介紹的重點是關於graph的,dijkstra什麼的。老師很有趣,見過一面。難度適中。
13, Udacity CS258 Software Testing: 1星,我上過的Udacity最差勁的課,課內容非常少,而且總之這個現在也用不到。我反正是有時間就上了。唯一的收穫是中間寫了一個數獨的solver,然後我自我感覺寫得很不錯。導致後面我對數獨完全失去興趣了。
14, Coursera Quantum Mechanics and Quantum Computation:2星。量子。啊這些其實沒什麼關係上純是興趣因為密碼說過量子計算機可以破RSA。然後非常難,非常虐。所以就不推薦了。我現在也只能記住最基本的qubit的共軛。
15 Stanford Machine Learning: 4星。是iTunes U上面的,Andrew Ng在史丹佛的講課視訊,相比前面coursera的就更理論,雖然沒有NN的內容,但是svm講得很細,還有ica和reinforcement的部分。總之算是鞏固基礎,然後相輔相成。同樣我還是很喜歡吳恩達老師的口音!
16, Coursera Web Intelligence and Big Data: 1星。大部分很淺,不喜歡。而且考試非常無厘頭。不過基本上介紹得很全面,包括file system也涉及到了。PA。比較傻逼。不過也不是很花時間,所以還好。
17, Udacity CS222 Differential Equation:3星,在學校基本算是沒學過微分方程所以挺遺憾的。這個課也有涉及很多實際問題所以算是有趣。畫的圖也很好看。總之最後的感覺就是世界真和諧,世界真奇妙,世界真美好。而且用matplotlib,需要的同學可以借鑑一下。
18, Coursera Introduction to Computational Finance and Financial Econometrics:2星,本科難度的課,基本上很傻逼。前面70%都是在複習什麼矩陣啊概率啊之類的。用的是R。會有一些time series的東西。還有一點關於股票的,不然根本就是白上了。
19, Coursera Probabilistic Graphical Models: 3.5星,和Machine Learning的關係也沒有那麼大,還不算一定必選。老師是Coursera的另一位cofounder,內容是研究生級別的,很難,PA也很難。我現在有些概念也沒完全理解透。而且內容很多。借用weibo上老師木的評價:“別的都是講的術,圖模型講的是道”。自虐指數三星。我當時經常週六下午做這個PA做的死去活來。
20, Coursera Neural Networks for Machine Learning: 4星。現在Deep Learning的領軍人大牛hinton親自講授。內容有點。晦澀,但是理解之後概念還是不錯的。PA什麼的難度也適中。不算特別變態。
21, Udacity CS313 Theoretical Computing:2.5星,主要講關於NP的,這個topic還是蠻有趣的。Programming的比重也不大,應該可以輕鬆上完。因為確實跟CS,主要是找工作的話關係沒那麼大所以到不了3星,何況NP後面還有5星課程會cover到。
22, Udacity CS259 Software Debugging: 2星。主要是Coursera的課都上完了沒事就上了。內容如題。其實也可以,但是我肯定不是這麼debug的。
23, Udacity CS271 Intro to Artificial Intelligence: 4星。Udacity當年的第一門課。兩個cofounder講。對於ML,NLP,CV,機器人,game theory等都有所涉及。看完了我突然覺得。尼瑪原來我感興趣的這些全都是AI啊。不難,沒有PA,花點時間就好了。
24, Coursera Algorithms: Design and Analysis Part 2: 5星。必須的五星,之前的part 2,內容是greedy algorithm,dynamic programming和NP。涉及的東西很多,PA也變態了很多python真的特別慢。在此力薦pypy。沒什麼可說的演算法是必須看的。而且這倆part加起來本科畢業生的水平至少就有了。
25, Coursera Interctive programming in Python:2.5星,用他們自己建的一個GUI去遍圖形介面,也算是python入門課。很簡單,不過如果是machine learning的話用處不大。(這門課當是因為沒時間只是看了視訊,也沒有做作業,沒拿certificate)
26, Coursera: Intro to Database: 3星 現在搬到Class2Go上面去了貌似。介紹資料庫,包括一些xml啊json什麼的還有nosql的部分。當然大頭是SQL,因為考SAS證的時候學過了,所以也就看看。不過資料庫對於big data什麼的還是很重要的(準確地說nosql資料庫還有DFS什麼的很重要。),所以應該還是看看比較好。
27, Coursera Computing for Data Analysis: ?星,簡單的但是比較系統的介紹R語言。看各位的需要了。時間只有4周,感覺老師講的還不錯。
28, Coursera Game Theory: 2星,感覺。好奇怪的,感覺什麼都沒說就上完了,最後就記得一個詞叫納什均衡了。而且很淺,尤其是rational的假設令我感到很不安。當然我會說我選這課的時候根本不知道Game Thoery是博弈論。我還以為是什麼遊戲之類的呢。
29, Coursera Image and video processing:3星,介紹基本的關於image processing的東西,挺好的。有時候挺好奇PS裡那些效果是怎麼辦到的,就看這個就好了。當然那部分貌似跟PDE有關所以其實我基本沒看懂。
30, Udacity CS344 Parallel Computing:2.5星,用的是build on C的CUDA。因為主要是為了提高運算速度所以用C還是可以理解的。因為不熟悉C。所以上成了一個傻逼啊!不過有些概念學一下還是很有助於開闊眼界的。現在Program GPU也很是流行的樣子。而且我覺得挺難,主要是C完全不熟。這門課的唯一宗旨就是提高Performance,是非常practical的一門課,雖然其實Udacity很多課都很practical。
31, Coursera Linear and Discrete Optimization:2星,有很弱智的PA,基本就是填空題。然後就是線性規劃嘛。主要cover了simplex演算法等。也不是很花時間。後面還有一些很有趣的應用比如在graph上面的。越上越覺得真的是很奇妙。
32, Coursera Natural Langauge Processing:一開始是想看在是鄙校的份上違心給個3.5星的,上完之後覺得還是可以給4星的。這個課主要是先期準備不足所以一開始很亂套導致扣了很多印象分。講的算是清楚明白,只是不知道到底cover了多少,PA難度也還可以。不過那些東西感覺都太經典了。是不是有點過時了啊。NLP基本也和ML關係很緊密,所以個3.5也不算很過分。最後又給了一個optional的PA導致我很感動,外加是鄙校的緣故果斷4分。
33, Coursera Social Netwrok Analysis: 3星,社交網路誒很火的,雖然講的似乎也比較淺,而且老師沒有照片上那麼好看。上完了,感覺講的確實比較淺。有同學推薦Stanford的network,看上去這個Umich全部8周的內容在那裡也就3-4周。不過反正每週也就1個多小時的時間,不能要求太多了。
34, Udacity CS255 HTML5 Game Development: 可以給1.5星麼,真的不是很喜歡這門課,雖然講課的是Google的,但是quiz什麼的設計的特別粗糙,意思就是一般而言solution的答案直接提交都是會有錯的。也不像一般的課有獨立的pset或者final,這門課所有的內容就是圍繞一個game展開的。不過如果真的有興趣做這方面的話,收穫還是挺大的。而且非常適合作為OOC的教材。不過總體而言由於quiz太爛的問題打下2分。而且似乎有一個單元必須用chrome才可以。
35, Udacity CS291 Interactive 3D Graphics:2.5星。用Three.js吧,build on javascript。恩,想想這是魔獸會用到的技術我就覺得很有動力。內容非常具體也非常多,涵蓋面非常廣,可能是Udacity內容相對而言較多的一門課,不過由於前後隔的時間比較長。我覺得很多概念都記不太清了,所以學的效果不能算好,但是其實很有趣的。
以下課程是我在上的還沒上完。
36, Coursera Computational Neuroscience: 2.5星。用一點Octave,恩,老師感覺挺有趣的,才剛3周,不過感覺內容不會太差。總之computation的東西和Neuroscience我都學過所以這個應該比較無壓力吧哈哈哈
37, Intro to Data Science: 4星,最近發現UW的課出其不意的很靠譜啊。這個課只上了第一週但是感覺來說是非常靠譜的,實用性很強,雖然相比CS感覺會更適合統計的同學。不過目前的感覺就是如果有志於做Data Scientist請一定要上這門課。會使用Python,SQL,R,基本上這些Data Scientist也是必須的。
38, High Performance Scientific Computing: 4星,同樣UW。這門課同樣是非常statistic friendly,因為是在applied math系下面的,對於一些commend line的東西會手把手的教。而且練習目測也很靠譜。唯一一點就是沒有certificate,不過學到東西是最重要的吧。同樣實用性非常強(意思就是一般面試也不會考,但是日常絕對很常用)。根據Syllabus看,會教部分Python,Fortran 90,OpenMP,推薦所有真的打算從事這個行業的非CS的同學學習。上第一週的時候還只是3.5分現在想想覺得4分一點也不虧,可能還會給到4.5。(太偏實用不太好給5分)
下面這個課我沒上過:
??: Coursera Complier,所以也沒法打分,用的應該是C,目測比較難但是上過的同學感覺收穫還是很大的。不過因為python不用compile所以我也沒什麼概念。
總結:必上:MIT的導論,Udacity 262, 212,Coursera上史丹佛的演算法。還有Andrew在Coursera和Stanford上面的兩版Machine Learning。
另外我們有個關於Udacity和Coursera這些公開課的QQ群:244689946 (課程圖譜),有一些下載的資源在:http://blog.coursegraph.com/公開課可下載資源彙總
最後的廢話:感謝Andrew Ng,Peter Norvig等人的努力,沒有他們就不會有這麼多這麼好的免費資源給我們。我的偶像是Steve Jobs和Walt Disney,他們不僅改變了我,也改變了世界。Andrew他們還不算,因為雖然這些公開課改變了我,但是還沒看到他們改變世界,不過他們都還活著。所以我覺得肯定會看到那一天的。另外感謝他們給這麼好的機會和資源,我覺得如果可能的話我會貫徹終身學習,堅持一直學習下去的。
以及感謝太傻的任老師雖然把我搞出國服務就算結束了但是一直還在幫我。發各種資訊給我(雖然大多不靠譜),但是Udacity和Coursera也是他介紹的。我後面找工作的position大部分也是他發給我的。雖然造就了超低的回覆率但是至少我要去的公司也是包含在裡面的。
好吧再加一句太傻的服務基本上似乎是不太好的,這真的不是廣告啊你們妹的,有這麼廣告的麼。只不過這個老師是真的對我不錯。