From 0cf8a83c214c5f3c6780763d6c7504b35930f1d1 Mon Sep 17 00:00:00 2001 From: zhongyinmin Date: Tue, 9 Nov 2021 16:58:43 +0800 Subject: [PATCH] add CS61A & missing semester --- docs/index.md | 11 ++++++----- docs/编程入门/CS61A.md | 28 +++++++++++++++++++++++++++ docs/编程入门/MIT-Missing-Semester.md | 12 ++++++++++++ mkdocs.yml | 3 +-- 4 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 docs/编程入门/CS61A.md create mode 100644 docs/编程入门/MIT-Missing-Semester.md diff --git a/docs/index.md b/docs/index.md index 7d2104aa..14433edd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,10 +6,11 @@ 本书目前规划了以下部分(如果你有其他好的建议,或者想加入贡献者的行列,欢迎邮件zhongyinmin@pku.edu.cn或者在issue里提问): -- 必学工具:翻墙, StackOverflow, Git, Github, Vim, Latex, Makefile ... -- 环境配置:bash,环境变量,Anaconda ... -- 培养方案替代课程:我将按照信科2021年计算机科学与技术专业的培养方案,对于每个课程列出相关替代课程学习资料,并分析如何在不影响课程绩点的情况下学习尽可能多的内容。 +- 必学工具:IDE, 翻墙, StackOverflow, Git, Github, Vim, Latex, Makefile ... +- 环境配置:Linux基础,bash,环境变量,Anaconda ... +- **国外高质量CS课程汇总**:我将把所有我上过的所有高质量的CS课程分门别类进行汇总,并给出相关的自学建议,每门课都会有一个独立的仓库维护相关的资源以及我的作业实现。 - 经典书籍推荐:看过CSAPP这本书的同学一定感叹好书的重要,我将列举推荐自己看过的计算机领域的必看好书与资源链接。 +- 培养方案替代课程(北大信科专享):我将按照信科2021年计算机科学与技术专业的培养方案,对于每个课程列出相关替代课程学习资料,并分析如何在不影响课程绩点的情况下学习尽可能多的内容。 ## 梦开始的地方 —— CS61A 大一入学时我是一个对计算机一无所知的小白,装了几十个G的Visual Studio天天和OJ你死我活。凭着高中的数学底子我数学课学得还不错,但在专业课上对竞赛大佬只有仰望。提到编程我只会打开那笨重的IDE,新建一个我也不知道具体是干啥的命令行项目,然后就是cin,cout,for循环,然后CE,RE,WA循环。当时的我就处在一种拼命想学好但不知道怎么学,课上认真听讲但题还不会做,课后做作业完全是用时间和它硬耗的痛苦状态。我至今电脑里还存着自己大一上学期计算概论大作业的源代码 —— 一个1200行的C++文件,没有头文件、没有类、没有封装、没有unit test、没有makefile、没有git,唯一的优点是它确实能跑,缺点是“能跑”的补集。我一度怀疑我是不是不适合学计算机,因为童年对于极客的所有想象,已经被我第一个学期的体验彻底粉碎了。 @@ -57,11 +58,11 @@ ## 自学的坏处 当然,作为CS自学主义的忠实拥趸者,我不得不承认自学也有它的坏处。 -第一就是交流沟通的不便。我其实是一个很热衷于提问的人,对于所有没有弄明白的点,我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候,你只能反复听那句让你匪夷所思的知识点。当然,如果能有几个志同道合的伙伴结伴自学,那将是极好的。之后我将会根据这个项目的受关注情况考虑建立类似交流群性质的论坛供大家讨论。 +第一就是交流沟通的不便。我其实是一个很热衷于提问的人,对于所有没有弄明白的点,我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候,你无法顺着网线到另一端向老师问个明白。我努力通过独立思考和善用Google来缓解这一点,但是,如果能有几个志同道合的伙伴结伴自学,那将是极好的。之后我将会根据这个项目的受关注情况考虑建立类似交流群性质的论坛供大家讨论。 第二就是这些自学的课程基本都是英文的。从视频到slides到作业全是英文,所以有一定的门槛。不过我觉得这个挑战如果你克服了的话对你是极为有利的。因为在当下,虽然我很不情愿,但也不得不承认,在计算机领域,很多优质的文档、论坛、网站都是全英文的。养成英文阅读的习惯,在赤旗插遍世界之前,还是有一定好处的(狗头保命)。 -第三,也是我觉得最困难的一点,就是自律。因为没有DDL有时候真的是一件可怕的事情,特别是随着学习的深入,国外的很多课程是相当虐的。北大信科引以为傲的第一虐课ICS只是CMU的系统入门课,你觉得它虐只是因为你还没有习惯除了OJ之外的编程。你得有足够的驱动力强迫自己静下心来,阅读几十页的Project Handout,理解上千行的代码框架,忍受数个小时debug时光。而这一切,没有学分,没有绩点,没有老师,没有同学,只有一个信念 —— 你在变强。 +第三,也是我觉得最困难的一点,就是自律。因为没有DDL有时候真的是一件可怕的事情,特别是随着学习的深入,国外的很多课程是相当虐的。北大信科引以为傲的第一虐课ICS只是CMU的系统入门课,你觉得它虐只是因为你还没有习惯除了OJ之外的编程。你得有足够的驱动力强迫自己静下心来,阅读几十页的Project Handout,理解上千行的代码框架,忍受数个小时的debug时光。而这一切,没有学分,没有绩点,没有老师,没有同学,只有一个信念 —— 你在变强。 ## 这本书适合谁 正如我在前言里说的,任何有志于自学计算机的朋友都可以参考这本书。如果你只是对某个特定的领域感兴趣,当然可以选择性地挑选你感兴趣的内容进行学习。当然,如果你是一个像我当年一样对计算机一无所知的小白,初入大学的校门,我希望这本书能成为你的攻略,让你花最少的时间掌握你所需要的知识和能力。某种程度上,这本书更像是一个根据我的体验来排序的课程搜索引擎,帮助大家足不出户,体验世界顶级名校的计算机优质课程。 diff --git a/docs/编程入门/CS61A.md b/docs/编程入门/CS61A.md new file mode 100644 index 00000000..57ef6b64 --- /dev/null +++ b/docs/编程入门/CS61A.md @@ -0,0 +1,28 @@ +# CS61A: Structure and Interpretation of Computer Programs +## 课程简介 +- 所属大学:UC Berkeley +- 先修要求:无 +- 编程语言:Python,Scheme,SQL +- 课程难度:🌟🌟🌟 +- 预计学时:50 hour + +伯克利CS61系列的第一门课程,也是我的Python入门课。 + +CS61系列是伯克利CS专业的入门课,其中: + +- CS61A:强调抽象,让学生掌握用程序来解决实际问题,而不关注底层的硬件细节。 +- CS61B:注重算法与数据结构以及大规模程序的构建,学生会用Java语言结合算法与数据结构的知识来构建千行代码级别的大型项目(一个简易的谷歌地图,一个二维版的Minecraft)。 +- CS61C:关注计算机体系结构,让学生理解高级语言(例如C)是如何一步步转换为机器可以理解的01串并在CPU执行的,学生将会学习RISC-V架构并自己用Logism实现一个CPU。 + +CS61B和CS61C在本书中均有收录。 + +回到CS61A,注意这不仅仅是一门编程语言课,而是会深入到程序构造与运行的原理。最后你将在第4个Project中用Python实现一个Scheme的解释器。此外,抽象将是这门课的一大主题,你将学习到函数式编程、数据抽象、面向对象等等知识来让你的代码更易读,更模块化。当然,学习编程语言也是这门课的一大内容,你将会掌握Python、Scheme和SQL这三种编程语言,在它们的学习和比较中,相信你会拥有快速掌握一门新的编程语言的能力。 + +## 课程资源 +- 课程网站:https://inst.eecs.berkeley.edu/~cs61a/su20/ +- 课程视频:https://www.youtube.com/watch?v=0_LryzvBxFw&list=PL6BsET-8jgYVkdaPYJNyvuNga3QA_U1gA +- 课程教材:http://composingprograms.com/ +- 课程作业:课程网站会有每个作业对应的文档链接以及代码框架的下载链接。 + +## 资源汇总 +我学习这门课中的所有资源和作业实现都汇总在[这个](https://github.com/PKUFlyingPig/CS61A)Github仓库中。 \ No newline at end of file diff --git a/docs/编程入门/MIT-Missing-Semester.md b/docs/编程入门/MIT-Missing-Semester.md new file mode 100644 index 00000000..99317252 --- /dev/null +++ b/docs/编程入门/MIT-Missing-Semester.md @@ -0,0 +1,12 @@ +## 课程简介 +- 先修要求:无 +- 编程语言:shell +- 课程难度:🌟🌟 +- 预计学时:10小时 + +正如课程名字所言:“计算机教学中消失的一个学期”,这门课将会教会你许多大学的课堂上不会涉及但却对每个CSer无比重要的工具或者知识点。如果你是一个计算机小白,那么我非常建议你学习一下这门课,因为它基本涉及了本书必学工具中的绝大部分内容。 + +## 课程资源 +- 课程网站:https://missing.csail.mit.edu/2020/ +- 课程视频:https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J +- 课程作业:一些随堂小练习,具体见课程网站。 diff --git a/mkdocs.yml b/mkdocs.yml index e7621d71..eb715673 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,4 @@ site_name: CS自学指南 theme: name: material -repo_url: https://github.com/pkuflyingpig/pku-cs-self-learning/ - +repo_url: https://github.com/pkuflyingpig/pku-cs-self-learning/ \ No newline at end of file