front word

This commit is contained in:
zhongyinmin 2021-10-28 22:30:38 +08:00
parent cf582e2317
commit 2ce485be67
2 changed files with 67 additions and 8 deletions

View File

@ -1,16 +1,75 @@
#
#
这是一本写给北大信科学弟学妹们的自学指南,也算是对自己大学三年自学生涯的一个纪念。
这是一本写给所有想自学计算机的朋友的指南,也是对自己大学三年自学生涯的一个纪念。
本书目前规划了以下部分:
这也是一份献给北大信科学弟学妹们的礼物。如果这本书能对你们的信科生涯有哪怕一丝一毫的帮助,都是对我极大的鼓励和慰藉。
- 必学工具:翻墙, Git, Github, Vim ...
本书目前规划了以下部分(如果你有其他好的建议或者想加入贡献者的行列欢迎邮件zhongyinmin@pku.edu.cn或者在issue里提问)
- 必学工具:翻墙, Stackoverlfow, Git, Github, Vim, Latex, Makefile ...
- 环境配置bash环境变量Anaconda ...
- 培养方案替代课程:我将严格按照信科培养方案,对于每个课程列出相关替代课程学习资料,并分析如何在不影响课程绩点的情况下学习尽可能多的内容。如何不把时间浪费在诸如环境配置等问题上。
- 培养方案替代课程:我将按照信科2021年计算机科学与技术专业的培养方案,对于每个课程列出相关替代课程学习资料,并分析如何在不影响课程绩点的情况下学习尽可能多的内容。
- 经典书籍推荐看过CSAPP这本书的同学一定感叹好书的重要我将列举推荐自己看过的计算机领域的必看好书与资源链接。
## 梦开始的地方 —— CS61A
大一入学时我是一个对计算机一无所知的小白装了几十个G的Visual Studio天天和OJ你死我活。凭着高中的数学底子我数学课学得还不错但在专业课上对竞赛大佬只有仰望。提到编程我只会打开那笨重的IDE新建一个我也不知道具体是干啥的命令行项目然后就是cincoutfor循环然后CEREWA循环。当时的我就处在一种拼命想学好但不知道怎么学课上认真听讲但题还不会做课后做作业完全是用时间和它硬耗的痛苦状态。我至今电脑里还存着自己大一上学期计算概率大作业的源代码 —— 一个1200行的C++文件没有头文件、没有类、没有封装、没有unit test、没有makefile、没有git唯一的优点是它确实能跑缺点是“能跑”的补集。我一度怀疑我是不是不适合学计算机因为童年对于极客的所有想象已经被我第一个学期体验彻底粉碎了。
这一切的转机发生在我大一的寒假我心血来潮想学习Python。无意间看到知乎有人推荐了CS61A这门课说是UC Berkeley的大一入门课程讲的就是Python。我永远不会忘记那一天打开[CS61A](https://cs61a.org/)课程网站的那个瞬间,就像哥伦布发现了新大陆一样,我开启了新世界的大门。
我一口气3个星期上完了这门课它让我第一次感觉到原来CS可以学得如此充实和有趣原来这世上竟有如此精华的课程。
为避免有崇洋媚外之嫌我单纯从一个学生的视角来讲讲自学CS61A的体验
- 独立搭建的课程网站: 一个网站将所有课程资源整合一体条理分明的课程schedule、所有slideshwdiscussion的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈既方便学生也让资源公正透明。
- 课程教授亲自编写的教材CS61A这门课的建设老师将MIT的经典教材*Structure and Interpretation of Computer Programs*(SICP)用Python这门语言进行改编原教材基于Schema语言保证了课堂内容与教材内容的一致性同时补充了更多细节可以说诚意满满。而且全书开源可以直接线上阅读。
- 丰富到让人眼花缭乱的课程作业14个lab巩固随堂知识点10个homework还有4个代码量均上千行的project。与大家熟悉的OJ和word文档式的作业不同所有作业均有完善的代码框架保姆级的作业说明。每个Project都有详尽的handout文档、全自动的评分脚本。CS61A甚至专门开发了一个自动化的作业提交评分系统据说还发了论文。当然有人会说“一个project几千行代码大部分都是助教帮你写好的你还能学到啥”。此言差矣作为一个刚刚接触计算机连安装Python都磕磕绊绊的小白来说这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点又能有“我才学了一个月就能做一个小游戏了”的成就感还能有机会阅读学习别人高质量的代码从而为自己所用。我觉得在低年级这种代码框架可以说百利而无一害。唯一的害也许是苦了老师和助教因为这样的作业可想而知需要相当的时间投入。
- discussion助教讲述考试例题类似于北京大学ICS小班研讨但习题全部用Latex撰写相当规范且会明确给出solution。
这样的课程,你完全不需要任何计算机的基础,你只需要努力、认真、花时间就够了。此前那种有劲没处使的感觉,那种付出再多时间却得不到回报的感觉,从此烟消云散。这太适合我了,我从此爱上了自学。
试想如果有人能把艰深的知识点嚼碎嚼烂用生动直白的方式呈现给你还有那么多听起来就很Fancy种类繁多的Project来巩固你的理论知识你会觉得他们真的是在倾尽全力地想方设法让你完全掌握这门课你会觉得不学好它简直是对这些课程建设者的侮辱。
如果你觉得我在夸大其词那么不妨从CS61A开始它确实是我的梦开始的地方。
## 为什么写这本书
在我2020年秋季学期担任北京大学《深入理解计算机系统》CSAPP这门课的助教时我已经自学一年多了。这一年多来我无比享受这种自学模式为了分享这种快乐我为自己的小班同学做过一个[CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮,因为我也不敢公然鼓励大家翘课自学。
大一入学时我是一个对计算机一无所知的小白装了几十个G的Visual Studio天天和OJ你死我活。凭着高中的数学底子我数学课学得还不错但在专业课上对竞赛大佬只有仰望。提到编程我只会打开那笨重的IDE新建一个我也不知道具体是干啥的命令行项目然后就是cincoutfor循环然后CEREWA循环。计算概论A听了一学期学了一个阉割版的C++语法,信息科学技术概论一学期只记住了摩尔定律。
但随着又一年左右的维护这个仓库的内容已经相当丰富基本覆盖了计科、智能系、软工系的绝大多数课程我也为每个课程都建了各自的Github仓库汇总我用到的自学资料以及作业实现
有空再写,睡觉去了。
直到大四开始凑学分毕业的时候,我打开自己的培养方案,我发现它已经是我这个自学仓库的子集了,而这距离我开始自学也才两年半而已。于是,一个大胆的想法在我脑海中浮现:也许,我可以打造一个自学式的培养方案,把我这三年自学经历中遇到的坑、走过的路记录下来,以期能为后来的学弟学妹们贡献自己的一份微薄之力。
如果大家可以在三年不到的时间里就能建立起整座CS的基础大厦能有相对扎实的数学功底和代码能力经历过数十个千行代码量的Project的洗礼掌握至少C/C++/Java/JS/Python/Go/Rust等主流语言对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web开发、云服务、超算等等方面均有涉猎。我想你将有足够的底气和自信选择自己感兴趣的方向无论是就业还是科研你都将有相当的竞争力。
因为我坚信既然你能坚持听我BB到这里你一定不缺学好CS的能力你只是没有一个好的老师给你讲一门好的课程。而我将力图根据我三年的体验为你挑选这样的课程。
## 自学的好处
对我来说自学最大的好处就在于可以完全根据自己的进度来调整学习速度。对于一些疑难知识点我可以反复回看视频在网上谷歌相关的内容上StackOverlow提问题直到完全将它弄明白。而对于自己掌握得相对较快的内容则可以两倍速甚至三倍速略过。
自学的另一大好处就是博采众长。信科俗称的四大礼包体系、网络、操统、编译每一门我基本都上过不同大学的课程不同的教材、不同的知识点侧重、不同的project将会极大丰富你的视野也会让你理解错误的一些内容得到及时纠正。
自学的第三个好处是时间自由,具体原因省略。
但与此同时,我也清楚绩点的压力是自学不可忽视的一大阻力。从理想状况来说,如果你超前自学高质量的课程,你将从原理上透彻地理解那些知识点,再加上动手实践的反复巩固,应付校内课程的考试是绰绰有余的。但这一切的前提是:“考试考察了你对知识原理本质的理解”。如果考试是细碎知识点的堆砌,是政治要点式的默写,那就需要“另辟蹊径”了。因此,为了这套自学方式的可操作性,我将在[培养方案Pro](培养方案Pro.md)中根据北大信科2021年最新版的培养方案并结合自身经历分析如何无伤自学。
## 自学的坏处
当然作为CS自学主义的忠实拥趸者我不得不承认自学也有它的坏处。
第一就是交流沟通的不便。我其实是一个很热衷于提问的人,对于所有没有弄明白的点,我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候,你只能反复听那句让你匪夷所思的知识点。当然,如果能有几个志同道合的伙伴结伴自学,那将是极好的。之后我将会根据这个项目的受关注情况考虑建立类似交流群性质的论坛供大家讨论。
第二就是这些自学的课程基本都是英文的。从视频到slides到作业全是英文所以有一定的门槛。不过我觉得这个挑战如果你克服了的话对你是极为有利的。因为在当下虽然我很不情愿但也不得不承认在计算机领域很多优质的文档、论坛、网站都是全英文的。养成英文阅读的习惯在赤旗插遍世界之前还是有一定好处的狗头保命
第三也是我觉得最困难的一点就是自律。因为没有DDL有时候真的是一件可怕的事情特别是随着学习的深入国外的很多课程是相当虐的。北大信科引以为傲的第一虐课ICS只是CMU的系统入门课你觉得它虐只是因为你还没有习惯除了OJ之外的编程。你得有足够的驱动力强迫自己静下心来阅读几十页的Project Handout理解上千行的代码框架忍受数个小时debug时光。而这一切没有学分没有绩点没有老师没有同学只有一个信念 —— 你在变强。
## 这本书适合谁
正如我在前言里说的,任何有志于自学计算机的朋友都可以参考这本书。如果你只是对某个特定的领域感兴趣,当然可以选择性地挑选你感兴趣的内容进行学习。当然,如果你是一个像我当年一样对计算机一无所知的小白,初入大学的校门,我希望这本书能成为你的攻略,让你花最少的时间掌握你所需要的知识和能力。某种程度上,这本书更像是一个根据我的体验来排序的课程搜索引擎,帮助大家足不出户,体验世界顶级名校的计算机优质课程。
如果巧之又巧你还是北大信科的一员那么这本书中将会根据信科计算机的培养方案为你打造通关信科之培养方案Pro让你在自学和绩点之间取得平衡。
## 特别鸣谢
在这里我怀着崇敬之心真诚地感谢所有将课程资源无偿开源的各位教授们。这些课程倾注了他们数十年教学生涯的积淀和心血却无私地让所有人享受到如此高质量的CS教育。没有他们我的大学生活不会这样充实而快乐。很多教授在我给他们发了感谢邮件之后甚至会回复上百字的长文真的让我无比感动。
## 你也想加入到贡献者的行列
一个人的力量终究是有限的这本书也是我在繁重的科研之余熬夜抽空写出来的难免有不够完善之处。另外由于个人做的是系统方向很多课程侧重系统领域对于数学、理论计算机、高级算法相关的内容则相对少些。如果有大佬想在其他领域分享自己的自学经历与资源欢迎和我邮件联系zhongyinmin@pku.edu.cn

View File

@ -1,3 +1,3 @@
site_name: 北大信科自学指南
site_name: CS自学指南
theme:
name: material