CS61B Data Structures
课程网站:
https://inst.eecs.berkeley.edu/~cs61b/archives.html
CS61B在地里绝对是鼎鼎大名了,看过一个googler说,如果时间只够学一门cs课,建议学这一门,因为学完了就能直接刷题了。另外,这门课对于0基础相对友好,因为前1/3都在讲java基础,后面讲数据结构,不需要提前学过编程语言。从3月初到5月底,我用了3个月左右时间完结了这门课程(所有lab hw全部做完,但3个project只做了1个半。。哎尽力了)。
我的背景是文商科转码,之前没有学过一门编程语言。3月最开始是去听princeton algorithm的,因为那也是一门公认数据结构神课。但第一天就发现它还是需要你会一点java的,虽然可以看它的材料弥补,但我当时着实是看不大懂,感觉很像看天书。。当时就听了国内一个李兴华java课,讲的还不错。看了几天之后在地里发现了cs61b,突然发现这门课不咋需要java基础,而且学一门课就可以java和数据结构兼得,岂不美哉。决定后就全心投入cs61b了,直到上周刚刚完结。
我选择了2014spring版本,一个是因为总体内容和后面差别不大,第二是因为地里对这个版本的讨论思路最多。我的学习流程是看讲义-lecture视频-reading-各种作业和项目,最好就是按照syllabus顺序来。有一点值得注意的,看视频之前建议提前读讲义,读完再看视频可以增进不少理解的。另外很多同学没啥时间做作业,但真的强烈建议做lab和homework(project对于0基础新手1个人做还是有些困难的,可以先略过)。作业设计的相当好,15个lab和10个homework能让我们对各种数据结构有比较充分的锻炼,感觉作业含金量能够占到这门课的一半以上。
对于之前没啥编程基础的同学,这门课学起来可能会比较吃力,尤其是作业部分。听lecture和理解讲义一般没啥问题,但我刚开始做作业的时候,真的非常崩溃。感觉课堂上在讲走路,作业直接让你跨栏。最开始都是直接到github上看别人的代码然后理解,后面是看了别人代码理解逻辑之后再自己敲。经历了一个月左右的怀疑期,觉得自己太傻学不动cs。但经历了这段时间后,情况确实有在好转。因为对java理解加深,做多了也大概明白一个程序的框架。不久之后,就不太需要看别人代码了,可以大部分自己写,少部分需要看一下地里讨论的逻辑。再后面就基本可以完全自己码出作业了,之后就是想办法提升代码简洁度和写的速度了。这里反而不会出大问题,因为已经度过了自我怀疑的难关,后面只是方法论问题了。
后面打算学princeton algorithm part 1,其实很多东西cs61b已经讲过了,但看到业界很推崇这门课配套的红书,说上面的代码非常简洁,就想学一学。我是那种自己没办法读进去大部头的课程书籍,但如果跟一门课程是可以读完的。head first java和data structures这两本就是跟cs61b读完的。强推一下head first java这本书,对小白来说是特别友好的java入门书籍。
如果有同样没啥基础来学cs61b的同学,希望我的经历可以给你点鸡汤。从文商科一下子转到cs,初期做lab homework project的时候很难受是正常的,这时需要的就是耐下性子,慢慢想办法解决。完全不会可以看看别人怎么写,会一点就看看讨论区思路,会的多点就多花点时间尝试自己想。和科班同学比我们速度慢,但自己终究是不断进步的不是吗。