diff --git a/docs/CS学习规划.md b/docs/CS学习规划.md new file mode 100644 index 00000000..190c7b19 --- /dev/null +++ b/docs/CS学习规划.md @@ -0,0 +1,63 @@ +# 一个仅供参考的CS学习规划 +计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。这一节的内容是对后续整本书的内容的一个概览,你可以将其看作是这本书的目录,按需选择自己感兴趣的内容进行学习。 + +## 必学工具 +> 俗话说:磨刀不误砍柴工。如果你是一个刚刚接触计算机的24k纯小白,学会一些工具将会让你事半功倍。 + +[MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。 + +[翻墙](必学工具/翻墙.md):由于一些众所周知的原因,谷歌、Github等网站在大陆无法访问。然而很多时候,谷歌和Stackoverflow可以解决你在开发过程中遇到的95%的问题。因此,学会翻墙几乎是一个内地CSer的必备技能。(考虑到法律问题,这个文档提供的翻墙方式仅对拥有北大邮箱的用户适用)。 + +IDE(Integrated Development Environment):集成开发环境,说白了就是你写代码的地方。作为一个码农,IDE的重要性不言而喻,一个轻便的编辑器可以让你从产生一个编程点子到开始写代码之间只隔了一个快捷键。个人推荐常用的IDE是VSCode和Sublime(准确的说Sublime只是一个编辑器,但丰富的插件使它基本满足了我的轻量级编程需求)。当然对于大型项目我还是会采用略重型的IDE,例如Pycharm(Python),IDEA(Java)等等(免责申明:所有的IDE都是世界上最好的IDE)。 + +[Vim](必学工具/Vim.md):一款命令行编辑工具。这是一个学习曲线有些陡峭的编辑器,不过学会它我觉得是非常有必要的,因为它将极大地提高你的开发效率。现在绝大多数IDE也都支持Vim插件,让你在享受现代开发环境的同时保留极客的炫酷(yue)。 + +[Git](必学工具/Git.md):一款代码版本控制工具。Git的学习曲线可能更为陡峭,但出自Linux之父Linus之手的Git绝对是每个学CS的童鞋必须掌握的神器之一。 + +[Github](必学工具/Github.md):基于Git的代码托管平台。全世界最大的代码开源社区,大佬集聚地。 + +[Makefile](必学工具/Makefile.md):一款工程构建工具。善用Makefile会让你养成代码模块化的习惯,同时也能让你熟悉一些稍大的工程的编译链接流程。 + +[LaTex](必学工具/Latex.md):逼格提升论文排版工具。 + +## 环境配置 +> 你以为的开发 —— 在IDE里疯狂码代码数小时。 + +> 实际上的开发 —— 配环境配几天还没开始写代码。 + +under construction. + +## 主线课程 +under construction. +### 数学类 + +### 编程入门 + +### 系统入门 + +### 体系结构 + +### 操作系统 + +### 网络 + +### 编译原理 + +### 软件工程 + +### 人工智能 + +### 机器学习 + +### 深度学习 + +## 定制属于你的课程地图 +> 授人以鱼不如授人以渔。 + +以上的课程规划难免有强烈的个人倾向和喜好,不一定适合所有人,更多的是抛砖引玉的作用。如果你想挑选自己感兴趣的方向和内容加以学习,可以参考我在下面列出来的资源。 + +- [MIT OpenCourseWare](https://ocw.mit.edu/courses/#electrical-engineering-and-computer-science): 麻省理工学院的课程资源开放共享项目,收录了数以千计的各科课程资源,其中计算机类的课号是6.xxx。 +- [MIT CS Course List](http://student.mit.edu/catalog/m6a.html):麻省理工学院的CS课程列表。 +- [UC Berkeley EECS Course Map](https://hkn.eecs.berkeley.edu/courseguides):UC Berkeley的EECS培养方案,以课程地图的方式将各门课程的类别和先修关系一目了然地呈现,其中绝大多数课程本书中均有收录。 +- [UC Berkeley CS Course List](https://www2.eecs.berkeley.edu/Courses/CS/?_ga=2.49145060.370293363.1598336094-476512950.1598336094): UC Berkeley的CS课程列表。 +- [Stanford CS Course List](https://blog.csdn.net/qq_41220023/article/details/81976967): 斯坦福的CS课程列表。 diff --git a/docs/必学工具/Git.md b/docs/必学工具/Git.md new file mode 100644 index 00000000..8e2a075a --- /dev/null +++ b/docs/必学工具/Git.md @@ -0,0 +1,15 @@ +## 为什么使用Git +Git是一款分布式的代码版本控制工具,Linux之父Linus嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了Git用来维护Linux的版本(给大佬跪了)。 + +Git的设计非常优雅,但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对Git不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况(好吧是我)。 + +但相信我,和Vim一样,Git是一款你最终掌握之后会感叹“它值得!”的神器。 + +## 如何学习Git +和Vim不同,我不建议初学者在一知半解的情况下贸然使用Git,因为它的内部逻辑并不能熟能生巧,而是需要花时间去理解。我推荐的学习路线如下: + +- 阅读这篇[Git tutorial](https://missing.csail.mit.edu/2020/version-control/)。 +- 阅读这本开源书籍[Pro Git](https://git-scm.com/book/en/v2)的Chapter1 - Chapter5,是的没错,学Git需要读一本书(捂脸)。 +- 此时你已经掌握了Git的原理和绝大部分用法,接下来就可以在实践中反复巩固Git的命令了。但用好它同样是一门哲学,我个人觉得这篇[如何写好 Commit Message](https://chris.beams.io/posts/git-commit/)的博客非常值得一读。 +- 好的此时你已经爱上了Git,你已经不满足于学会它了,你想自己实现一个Git!巧了,我当年也有这样的想法,[这篇tutorial](https://wyag.thb.lt/)可以满足你! +- 什么?光实现一个Git无法满足你?小伙子/小仙女有前途,巧的是我也喜欢造轮子,这两个Github项目[build-your-own-x](https://github.com/danistefanovic/build-your-own-x)和[project-based-learning](https://github.com/tuvtran/project-based-learning)收录了你能想到的各种造轮子教程,比如:自己造个编辑器、自己写个虚拟机、自己写个docker、自己写个TCP等等等等。 \ No newline at end of file diff --git a/docs/必学工具/Github.md b/docs/必学工具/Github.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/必学工具/Latex.md b/docs/必学工具/Latex.md new file mode 100644 index 00000000..eef5acbb --- /dev/null +++ b/docs/必学工具/Latex.md @@ -0,0 +1,14 @@ +## 为什么学Latex +如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。 + +LaTex是一种基于Tex的排版系统,由图灵奖得主Lamport开发,而Tex则是由Knuth最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习LaTex的理由,LaTex和常见的所见即所得的Word文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。 + +Berkeley计算机系教授Christos Papadimitriou曾说过一句半开玩笑的话: +> *Every time I read a LaTeX document, I think, wow, this must be correct!* + +## 如何学习LaTex +推荐的学习路线如下: + +- LaTex的环境配置是个比较头疼的问题。如果你本地配置LaTex环境出现了问题,可以考虑使用[Overleaf](www.overleaf.com)这个在线LaTex编辑网站。站内不仅有各种各样的LaTex模版供你选择还免去了环境配置的难题。 +- 阅读下面三篇Tutorial: [Part-1](https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1), [Part-2](https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2), [Part-3](https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3). +- 学习LaTex最好的方式当然是写论文,不过从一门数学课入手用LaTex写作业也是一个不错的选择。 \ No newline at end of file diff --git a/docs/必学工具/Makefile.md b/docs/必学工具/Makefile.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/必学工具/其他工具.md b/docs/必学工具/其他工具.md new file mode 100644 index 00000000..e69de29b