primary knowledge: functional programming,recursion, abstract data type, object oriented programming, iterpreter, symbolic programming, REPL. python, scheme, SQL and etc.
textbook: composing programs
lab00 lab02 lab03
hw01 hw02 hw03
project1 hog
函数式编程这里可以说是Python的精华之一了,甚至可以说就是最精华的部分,最精彩的部分。使用函数来封装数据和逻辑,将函数作为参数,返回值,相互嵌套还有递归等等,
引入了frame,environment,lexical scope,让你对整个程序运行时的结构和细节有了非常清晰地理解,让你体会到符号化编程的魅力。
lab04 lab05 lab06 lab07
hw04 hw05
project2 cat
在期中考试这里我算是领悟到了John Denero 课堂上讲的一段笑话,或者说是他念的一段诗,“这门课真是比艺术还要抽象,当助教老师在期中考试说考试开始时,我甚至连第一题都写不出来,我认为我很聪明,我努力训练,记好每一种规则,但当考试开始时,我的计划全盘崩溃了”
他的另外一句话对我有很大的激励
不要过分的看重测试和分数,你不必将每一件事都做到完美,但不要停下你前进的脚步,专注于学习、进步和毅力。你很快就能比过去多解决很多问题
what you can do matters more than your score.
lab08 lab09
hw06
project3 ants
把面向对象和函数式编程这两个学好对学好Python有极大地帮助,函数式编程和抽象数据类型也可以说是其他语言的核心内容,面向对象这里包含着Python里面的很多可能新手看不出来的小细节和约定俗成的东西(比如接口、序列、迭代器包括异常等等),学好就可以解决一类问题。
lab10 lab11 lab12
hw07
project4
project4 是综合性最高的一个project,也是质量最高的一个project,抽象数据类型,函数式编程,特别是里面的递归,解释器里的REPL
里面的read
和eval
处理细节,感觉就很综合。
前面15题真的多是带着手把手教你写一个解释器,最后五题就有些拔高了,写不出来可以参照flyingpig 的代码多理解理解,比如我。
scheme语言是真的简洁,因为没有迭代,所有的代码几乎都围绕递归,所以代码量极少,是真的elegant. 关于为何这门课的logo是一个lambda希腊字符学过scheme之后就明白了,所有用户自定义的函数都会创造一个lambdaprocedure 与用户定义的symbol相绑定保存在一个env的字典中。而函数式编程和符号化编程又是这门课最核心的内容。
这个没有什么好说的.
lab12 lab13 hw08
lab14 hw09
看完视频之后一定要精读课本,课本写的很精彩,前三章是精华,有些地方要多读很多遍,project有的地方比较难写,可以在纸上一边做一边推演一下,很管用。
之前看了David Malan的CS50X和CS50P只能说,论教学效果和课堂互动,David Malan无与伦比,但要学真东西,还得CS61A, 这是我目前投入精力最大的一门课,因为真的很抽象(比艺术还要抽象),真的对我而言挺难的,一个project就要做好几天有些还做不出来,好多递归和抽象数据类型的题目也思考不出来,我没有flyingpig天才般的智商能用两个星期做完这门科目,整体历时将近40天,光是想要跟上天才的脚步我就得花费常人好几倍的努力,但我很喜欢他课堂上的一句话:不要过分的看重测试和分数,你不必将每一件事都做到完美,但不要停下你前进的脚步,专注于学习、进步和毅力。你很快就能比过去多解决很多问题 。UCB YYDS!CS61A YYDS!John Denero YYDS!
下一站 CS61B --2023.9.7 日晚