mirror of
https://github.com/PKUFlyingPig/cs-self-learning.git
synced 2026-04-14 02:11:08 +08:00
fix some typo
This commit is contained in:
@@ -16,7 +16,7 @@ IDE(Integrated Development Environment):集成开发环境,说白了就
|
||||
|
||||
[Github](必学工具/Github.md):基于Git的代码托管平台。全世界最大的代码开源社区,大佬集聚地。
|
||||
|
||||
[Makefile](必学工具/Makefile.md):一款工程构建工具。善用Makefile会让你养成代码模块化的习惯,同时也能让你熟悉一些稍大的工程的编译链接流程。
|
||||
[Makefile](必学工具/Makefile.md):一款工程构建工具。善用Makefile会让你养成代码模块化的习惯,同时也能让你熟悉一些大型工程的编译链接流程。
|
||||
|
||||
[LaTex](必学工具/Latex.md):<del>逼格提升</del>论文排版工具。
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# 前言
|
||||
|
||||
这是一本写给所有想自学计算机的朋友的指南,也是对自己大学三年自学生涯的一个纪念。
|
||||
这是一本计算机的自学指南,也是对自己大学三年自学生涯的一个纪念。
|
||||
|
||||
这也是一份献给北大信科学弟学妹们的礼物。如果这本书能对你们的信科生涯有哪怕一丝一毫的帮助,都是对我极大的鼓励和慰藉。
|
||||
这同时也是一份献给北大信科学弟学妹们的礼物。如果这本书能对你们的信科生涯有哪怕一丝一毫的帮助,都是对我极大的鼓励和慰藉。
|
||||
|
||||
本书目前规划了以下部分(如果你有其他好的建议,或者想加入贡献者的行列,欢迎邮件zhongyinmin@pku.edu.cn或者在issue里提问):
|
||||
|
||||
- 必学工具:IDE, 翻墙, StackOverflow, Git, Github, Vim, Latex, Makefile ...
|
||||
- 必学工具:IDE, 翻墙, StackOverflow, Git, Github, Vim, Latex, Makefile, 实用工具 ...
|
||||
- **国外高质量CS课程汇总**:我将把我上过的所有高质量的国外CS课程分门别类进行汇总,并给出相关的自学建议,每门课都会有一个独立的仓库维护相关的资源以及我的作业实现。
|
||||
- 环境配置:Linux基础,bash,环境变量,Anaconda ...
|
||||
- **国外高质量CS课程汇总**:我将把所有我上过的所有高质量的CS课程分门别类进行汇总,并给出相关的自学建议,每门课都会有一个独立的仓库维护相关的资源以及我的作业实现。
|
||||
- 经典书籍推荐:看过CSAPP这本书的同学一定感叹好书的重要,我将列举推荐自己看过的计算机领域的必看好书与资源链接。
|
||||
- 培养方案替代课程(北大信科专享):我将按照信科2021年计算机科学与技术专业的培养方案,对于每个课程列出相关替代课程学习资料,并分析如何在不影响课程绩点的情况下学习尽可能多的内容。
|
||||
|
||||
@@ -17,28 +17,28 @@
|
||||
|
||||
这一切的转机发生在我大一的寒假,我心血来潮想学习Python。无意间看到知乎有人推荐了CS61A这门课,说是UC Berkeley的大一入门课程,讲的就是Python。我永远不会忘记那一天,打开[CS61A](https://cs61a.org/)课程网站的那个瞬间,就像哥伦布发现了新大陆一样,我开启了新世界的大门。
|
||||
|
||||
我一口气3个星期上完了这门课,它让我第一次感觉到原来CS可以学得如此充实和有趣,原来这世上竟有如此精华的课程。
|
||||
我一口气3个星期上完了这门课,它让我第一次感觉到原来CS可以学得如此充实而有趣,原来这世上竟有如此精华的课程。
|
||||
|
||||
为避免有崇洋媚外之嫌,我单纯从一个学生的视角来讲讲自学CS61A的体验:
|
||||
|
||||
- 独立搭建的课程网站: 一个网站将所有课程资源整合一体,条理分明的课程schedule、所有slides,hw,discussion的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈,既方便学生,也让资源公正透明。
|
||||
|
||||
- 课程教授亲自编写的教材:CS61A这门课的建设老师将MIT的经典教材*Structure and Interpretation of Computer Programs*(SICP)用Python这门语言进行改编(原教材基于Schema语言),保证了课堂内容与教材内容的一致性,同时补充了更多细节,可以说诚意满满。而且全书开源,可以直接线上阅读。
|
||||
- 课程教授亲自编写的教材:CS61A这门课的开课老师将MIT的经典教材*Structure and Interpretation of Computer Programs*(SICP)用Python这门语言进行改编(原教材基于Schema语言),保证了课堂内容与教材内容的一致性,同时补充了更多细节,可以说诚意满满。而且全书开源,可以直接线上阅读。
|
||||
|
||||
- 丰富到让人眼花缭乱的课程作业:14个lab巩固随堂知识点,10个homework,还有4个代码量均上千行的project。与大家熟悉的OJ和word文档式的作业不同,所有作业均有完善的代码框架,保姆级的作业说明。每个Project都有详尽的handout文档、全自动的评分脚本。CS61A甚至专门开发了一个自动化的作业提交评分系统(据说还发了论文)。当然,有人会说“一个project几千行代码大部分都是助教帮你写好的,你还能学到啥?”。此言差矣,作为一个刚刚接触计算机,连安装Python都磕磕绊绊的小白来说,这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点,又能有“我才学了一个月就能做一个小游戏了!”的成就感,还能有机会阅读学习别人高质量的代码,从而为自己所用。我觉得在低年级,这种代码框架可以说百利而无一害。唯一的害也许是苦了老师和助教,因为开发这样的作业可想而知需要相当的时间投入。
|
||||
- 丰富到让人眼花缭乱的课程作业:14个lab巩固随堂知识点,10个homework,还有4个代码量均上千行的project。与大家熟悉的OJ和word文档式的作业不同,所有作业均有完善的代码框架,保姆级的作业说明。每个Project都有详尽的handout文档、全自动的评分脚本。CS61A甚至专门开发了一个[自动化的作业提交评分系统](https://okpy.org/)(据说还发了论文)。当然,有人会说“一个project几千行代码大部分都是助教帮你写好的,你还能学到啥?”。此言差矣,作为一个刚刚接触计算机,连安装Python都磕磕绊绊的小白来说,这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点,又能有“我才学了一个月就能做一个小游戏了!”的成就感,还能有机会阅读学习别人高质量的代码,从而为自己所用。我觉得在低年级,这种代码框架可以说百利而无一害。唯一的害也许是苦了老师和助教,因为开发这样的作业可想而知需要相当的时间投入。
|
||||
|
||||
- Discussion小班助教讲解考试例题:类似于北京大学ICS小班研讨,但习题全部用Latex撰写,相当规范且会明确给出solution。
|
||||
- 每周Discussion讨论课,助教会讲解知识难点和考试例题:类似于北京大学ICS的小班研讨,但习题全部用Latex撰写,相当规范且会明确给出solution。
|
||||
|
||||
这样的课程,你完全不需要任何计算机的基础,你只需要努力、认真、花时间就够了。此前那种有劲没处使的感觉,那种付出再多时间却得不到回报的感觉,从此烟消云散。这太适合我了,我从此爱上了自学。
|
||||
|
||||
试想如果有人能把艰深的知识点嚼碎嚼烂,用生动直白的方式呈现给你,还有那么多听起来就很fancy,种类繁多的project来巩固你的理论知识,你会觉得他们真的是在倾尽全力想方设法地让你完全掌握这门课,你会觉得不学好它简直是对这些课程建设者的侮辱。
|
||||
|
||||
如果你觉得我在夸大其词,那么不妨从CS61A开始,因为它是我的梦开始的地方。
|
||||
如果你觉得我在夸大其词,那么不妨从[CS61A](https://cs61a.org/)开始,因为它是我的梦开始的地方。
|
||||
|
||||
## 为什么写这本书
|
||||
在我2020年秋季学期担任北京大学《深入理解计算机系统》(CSAPP)这门课的助教时,我已经自学一年多了。这一年多来我无比享受这种自学模式,为了分享这种快乐,我为自己的小班同学做过一个[CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮,因为我也不敢公然鼓励大家翘课自学。
|
||||
|
||||
但随着一年左右的维护,这个仓库的内容已经相当丰富,基本覆盖了计科、智能系、软工系的绝大多数课程,我也为每个课程都建了各自的Github仓库,汇总我用到的自学资料以及作业实现。
|
||||
但随着又一年时间的维护,这个仓库的内容已经相当丰富,基本覆盖了计科、智能系、软工系的绝大多数课程,我也为每个课程都建了各自的Github仓库,汇总我用到的自学资料以及作业实现。
|
||||
|
||||
直到大四开始凑学分毕业的时候,我打开自己的培养方案,我发现它已经是我这个自学仓库的子集了,而这距离我开始自学也才两年半而已。于是,一个大胆的想法在我脑海中浮现:也许,我可以打造一个自学式的培养方案,把我这三年自学经历中遇到的坑、走过的路记录下来,以期能为后来的学弟学妹们贡献自己的一份微薄之力。
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
## 为什么学Makefile
|
||||
大家第一次写hello world程序的时候一定都记得,在编辑完`helloworld.c`之后,需要用`gcc`编译生成可执行文件,然后再执行(如果你不理解前面这段话,请先自行谷歌`gcc 编译`并理解相关内容)。但如果你的项目由成百上千个C源文件组成,并且星罗棋布在各个子目录下,你该如何将它们编译链接到一起呢?假如你的项目编译一次需要半个小时(大型项目相当常见),而你只修改了一个分号,是不是还需要再等半个小时呢?
|
||||
|
||||
这时候Makefile就闪亮登场了,它能让你在一个脚本里(即所谓的Makefile)定义整个编译流程以及各个目标文件与源文件之间的依赖关系,并且只重新编译你的修改会影响到的部分,从而降低编译的时间。
|
||||
|
||||
## 如何学习Makefile
|
||||
这里有一篇写得深入浅出的[文档](https://seisman.github.io/how-to-write-makefile/overview.html)供大家参考。
|
||||
|
||||
Makefile掌握起来相对容易,但用好它需要不断的练习。将它融入到自己的日常开发中,勤于学习和模仿其他优秀开源项目里的Makefile的写法,总结出适合自己的template,久而久之,你对Makefile的使用会愈加纯熟。
|
||||
Reference in New Issue
Block a user