CS61B结课笔记,感想,以及资源
我用到的各种资源的合集
(可能不是很全,有补充的可以评论区贴出来)
https://csdiy.wiki/
非常感谢CS自学指南让我发现了许多好课
网上类似的经验贴已经很多了,这里就不赘述了直接上别人的贴子。
https://instant.1point3acres.com/thread/908806
(他的下半文章我没找到,找到的可以评论区贴一下)
https://github.com/ZonePG/CS61B
(别人写sp21留下的代码,实在没办法的时候去看)
(写gitlet的时候别看,他的merge我看着就……)
(代码不复用,是这个样子的。)
https://www.mcatin.com/index
(61B精译在的地方,61B还是免费的,61C就开始收费了 =_=)
(蛮贵的,268,不过有分销员系统,当分销员的话别人点你的链接买课你可以得到10%的佣金,可以和基友py一下)
(比如这样https://www.mcatin.com/h5/course-detail?id=17&share_source=1&distribute_uid=1131)
(当然也可以选择网上的机翻)
https://sp21.datastructur.es/
课程主页,lab以及project都在那里面
https://www.gradescope.com/
autograder的所在网站,邀请码去自学指南61B那个地方找
https://joshhug.gitbooks.io/hug61b/content/
jush版本的61B课程配套教材
这里顺便推荐一下他们的选读课本,普林斯顿那本算法4(橙色封面的,应该很好认)
一些杂七杂八的推荐
https://blog.csdn.net/li12ji34an/article/details/105821558
https://zhuanlan.zhihu.com/p/432135426
别人写的学习总结
https://blog.csdn.net/fourier_transformer/category_9856976.html
https://blog.csdn.net/lindaicoding/article/details/119439923
(这里强调老师叫jush,不是josh)
关于配置环境
https://zhuanlan.zhihu.com/p/115229260
https://zhuanlan.zhihu.com/p/344813657
这里我只说交作业的东西,这个上传到github用lab里面提供的东西,我这么也交不上去
最后我直接用gitbub做到那个GitHub desktop 交了,效果一样(也就是最后面那个链接里的东西)
(环境配了我5h,真正的开发.jpg)
61B里面的style 与 debug guide 我觉得蛮好的,额外贴出来
https://sp21.datastructur.es/materials/guides/style-guide.html
https://sp21.datastructur.es/materials/guides/debugging-guide.html
关于git,做gitlet之前可以了解一下(虽然我就看了个开头)
https://www.liaoxuefeng.com/wiki/896043488029600
附上廖雪峰的教程
据说学完就可以leetcode刷题啦
https://leetcode.cn/
关于gitlet(proj2)(重要)
https://zhuanlan.zhi.com/p/533852291
https://zhuanlan.zhihu.com/p/496809425
我觉得61B的gitlet是我目前做过最难的一个project(我刚入门)
里面各种各样的东西花了我40~50h的时间(可能更多)
但是学完真的非常有收获!!
我觉得我变强了,我这种刚入门的菜鸡居然可以写出这样的东西!
如果你有一颗勇敢的心,一定要去试试(即使你不学61B)
顺便gitlet的这个项目,有大佬搞来了本地测试(参考知乎文章),真的非常厉害,我觉得这个至少节省了我至少8h!
感谢Null佬!以及abmdocrt
sp18与sp21的难度确实不一样,sp18的作业比sp21的要多好多(我懒得写了)
关于61B
最终自己考试分数大概是222分(满分300,不算附加题)
估计排名排的蛮后面的
而且这是我自己改的比较松,主要是改的难了这分数就有点伤心了
我自己找到自己不少漏洞,估计写点其他年份的考试可以发现更多,但懒得写了......
以下是我的漏洞
1. 没有掌握快速排序的实现,然后导致分隔的具体过程出错(很多东西自己推一边可能不会忘)
2. 题目看错好多,好多东西想的一样,结果写出来和他要求的有点不一样,所以如果真的要严格改的话,估计200分都没有……
3. 传terator 的时候忘记加new,而且没有直接把this传递进去,用了一个比较蠢的等价
4. JAVA的private 以及外部的强制类型转化
5. Hashcode的实现,首先,hashcode必须是int,我不知道这个。。。。。
6. 数组的resize在部分题目也需要把他的时间成本考虑进去
7. 关于Dijkstra’s Runtime,或者可以推广到所有的图,我们都需要考虑顶点和边两个东西,然后专门针对于这一题来讲,主要有三个构成,add,removeMin,changePiority,不同的操作针对的东西(图和顶点)需要分开来分析,上图的时候就记了一个结论了,没有搞清楚这里的推导过程,结果暴雷了。
8. 没有考虑负数的情况,我的代码有bug
学习时长
大约200h左右(包含项目)就能学完(这里针对初学者,比如我)
(前四周JAVA基础语法,5~11数据结构,11~排序算法以及补充)
抛开数据结构我想说的是,61B对数据结构的讲解并没有十分的深入,相反的,61B补充了许多和数据结构无关的东西
比如说教你DEBUG,写Unit Test,软件工程,(甚至后面还有道德理念,团队协作之类的水课)
我个人听了觉得还是蛮受用的。教的也非常通俗易懂。
作业甚至拥有风格检查环节(保持良好排版习惯是必要的)

(这就是我被扣了160分的理由嘛)
关于project
61B(sp21版本)可以基本说是项目驱动的了,毕竟作业少了很多
从61A开始,每次看项目说明我就能看上好久,经常看的我头疼。非常锻炼人的英语能力,每次写完项目都有一种劫后余生的感觉。
(请拒绝使用网页的全文翻译,谷歌翻译的全文也不行,阅读英语文档的能力是编程人员的一种基本功。)
(写这段感慨的时候我还没写gitlet,现在写完gitlet,现在我觉得其他的项目说明真的太友好了!!)(至少长度是这个样子的,gitlet有1.4w的说明,看说明看了我两天)
你如果有对应的属性的话(是个M)在项目完结的那一刻,真的可以感受到那种非常激动的感觉。
(git写最后面merge的重构的时候,写到晚上一点)
在project1的时候,我还只是一只鸡,只能写出双端队列的实现形式,但是在我写完基本数据结构以及基本的动作逻辑后
拨出音符的那一刻我是很激动的
(相信我,对一只鸡而言这个已经很痛苦了,这么多bug,你总能写出来其中的(十)几个的,况且中间发现前面写的实在是太烂了,我把前面的代码全部删掉重写了)
当我后面使用老师提供的TTFAF(through the fire and flame,不过我不知道在哪里听)听歌的时候,我整个人都沉没在一种幸福之中
我目前在国内还没上到这样的课(主要是我现在才大一),但我觉得能学这么厉害,这么用心写出来的东西能学习是我的荣幸。
关于gitlet(proj2)
真的非常棒
足足把我碾了五遍!(第一次时读文档说明的时候)
大概有4次大改,第1次是逻辑都不通畅,第2次是代码实在是太繁琐,第3次是持久性乱写,存储的东西乱七八糟的,第四次是merge没有复用,把我写麻了
(写了5h的代码说删就删了…..)
我觉得做一个类似于这样的项目真的可以改掉很多人编程的不良风格(如果你愿意重构你的代码的话),良好的风格本身就是为了节约时间,降低复杂度的,做这个项目的时候我主动的去了解了一些软件工程以及代码编写之类的知识。同时对自己写了比较详细的注释(因为自己有点看不懂自己写的东西了)
John hug 在课程中提到paul(61A那个老教授)使用的gitlet项目好像比这个要难的多,有兴趣的话你们也可以试试他的。
Ps.这门课Paul Hill finger 也教过(而且比较难)
我选用的是fa21版本的课程(因为有精译),然后采用的是sp21的作业,(顺带一提同样开放autograder的好像还有sp18,不过好像sp21的在今年年底会关闭lab的autograder?)
老教授好像今年退休了(2022),作为看过他61A教学视频的云学生,我还是很尊敬他的。


大家的时间开销大概是这个样子的(jush说自己可能要20h)
有一说一看伯克利学生说gitlet难的时候我还是非常开心的(你小子也有今天)
一点感慨
真的是一门好课,也许做的时候,心态会有点炸,重构代码的时候,精神会有点崩溃,但一切都是值得的。
(最后调proj3的时候漏看了需求,成功的把我心态弄炸了,大不了就autograder没有满分嘛,我做游戏自己能玩就行。)
分享一下笔记

正经内容已经说完了,下面是上课时的我觉得有趣的部分
(和61B关系不大,只是分享点有趣的东西,觉得浪费时间可以跳过)
在这门课你会看到
·超级棒而且聪明的的老师(而且有点秃)


·JUJU的奇妙比喻



·平易近人的话题(指被父母揍)

甚至有次讲座diss了一下龙珠Z
(此处应有图片)
·还没瞎但是已经没手了的星际选手


(那个时候的铂金相当于现在的接近大师?(段位分布重新调整过))
在课堂上打开有道精品课





我爸是李刚

(有一说一,jush可能不知道这个是什么梗)
碎碎念,
他虽然说自己是个无政府主义者但是听他的描述真的有点像马克思主义者
他和John Nero(61A很经典的那个版本) 关系蛮好的(他自己说的,顺便提了一句自己和很多老师都很熟)
他自己不是很喜欢gitlet(压力太大了(让他))但是数据上来看gitlet很好,因为数据驱动,他把gitlet留下来了。
顺便,jush的本科学的是EE,他面试工作的时候才第一次学数据结构(可怕=_=)
最后
感谢这两个月来的陪伴,这段时间真的非常的有价值。
最后的最后,就像summary里面大家说的那样吧
Bye Jush!
Thank you.