34 门课改变人生——牛人自学计算机总结

2266 查看

原标题:自学 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大部分也是他发给我的。。。虽然造就了超低的回复率但是至少我要去的公司也是包含在里面的。。。

好吧再加一句太傻的服务基本上似乎是不太好的,这真的不是广告啊你们妹的,有这么广告的么。。。只不过这个老师是真的对我不错。。。