cs-self-learning/docs/CS学习规划.md
2021-12-11 01:53:38 +08:00

6.2 KiB
Raw Blame History

一个仅供参考的CS学习规划

计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。这一节的内容是对后续整本书的内容的一个概览,你可以将其看作是这本书的目录,按需选择自己感兴趣的内容进行学习。

必学工具

俗话说磨刀不误砍柴工。如果你是一个刚刚接触计算机的24k纯小白学会一些工具将会让你事半功倍。

MIT-Missing-Semester这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。

翻墙由于一些众所周知的原因谷歌、Github等网站在大陆无法访问。然而很多时候谷歌和Stackoverflow可以解决你在开发过程中遇到的95%的问题。因此学会翻墙几乎是一个内地CSer的必备技能。考虑到法律问题这个文档提供的翻墙方式仅对拥有北大邮箱的用户适用

IDEIntegrated Development Environment集成开发环境说白了就是你写代码的地方。作为一个码农IDE的重要性不言而喻一个轻便的编辑器可以让你从产生一个编程点子到开始写代码之间只隔了一个快捷键。个人推荐常用的IDE是VSCode和Sublime准确的说Sublime只是一个编辑器但丰富的插件使它基本满足了我的轻量级编程需求。当然对于大型项目我还是会采用略重型的IDE例如PycharmPythonIDEAJava等等免责申明所有的IDE都是世界上最好的IDE

Vim一款命令行编辑工具。这是一个学习曲线有些陡峭的编辑器不过学会它我觉得是非常有必要的因为它将极大地提高你的开发效率。现在绝大多数IDE也都支持Vim插件让你在享受现代开发环境的同时保留极客的炫酷yue

Git一款代码版本控制工具。Git的学习曲线可能更为陡峭但出自Linux之父Linus之手的Git绝对是每个学CS的童鞋必须掌握的神器之一。

Github基于Git的代码托管平台。全世界最大的代码开源社区大佬集聚地。

Makefile一款工程构建工具。善用Makefile会让你养成代码模块化的习惯同时也能让你熟悉一些大型工程的编译链接流程。

LaTex逼格提升论文排版工具。

实用工具箱:除了上面提到的这些在开发中使用频率极高的工具之外,我还收集了很多实用有趣的免费工具,例如一些下载工具、设计工具、学习网站等等。

环境配置

你以为的开发 —— 在IDE里疯狂码代码数小时。

实际上的开发 —— 配环境配几天还没开始写代码。

under construction.

课程地图

正如这章开头提到的,这份课程地图仅仅是一个仅供参考的课程规划,我作为一个临近毕业的本科生。深感自己没有权利也没有能力向别人宣扬“应该怎么学”。因此如果你觉得以下的课程分类与选择有不合理之处,我全盘接受,并深感抱歉。你可以在下一节定制属于你的课程地图

以下课程类别中除了含有基础入门字眼的以外,并无明确的先后次序,大家只要满足某个课程的先修要求,完全可以根据自己的需要和喜好选择想要学习的课程。

数学基础

作为大一新生学好微积分线代是和写代码至少同等重要的事情相信已经有无数的前人经验提到过这一点但我还是要不厌其烦地再强调一遍学好微积分线代真的很重要你也许会吐槽这些东西岂不是考完就忘那我觉得你是并没有把握住它们本质对它们的理解还没有达到刻骨铭心的程度。如果觉得老师课上讲的内容晦涩难懂不妨参考MIT的Calculus Course18.06: Linear Algebra的课程notes至少于我而言它帮助我深刻理解了微积分和线性代数的许多本质。顺道再安利一个油管数学网红3Blue1Brown,他的频道有很多用生动形象的动画阐释数学本质内核的视频,兼具深度和广度,质量非常高。

作为计算机系的学生及早了解一些信息论的基础知识我觉得是大有裨益的。但大多信息论课程都面向高年级本科生甚至研究生对新手极不友好。而MIT的6.050J: Information theory and Entropy这门课正是为大一新生量身定制的,几乎没有先修要求,涵盖了编码、压缩、通信、信息熵等等内容,非常有趣。

编程入门

系统入门

体系结构

操作系统

网络

编译原理

软件工程

人工智能

机器学习

深度学习

定制属于你的课程地图

授人以鱼不如授人以渔。

以上的课程规划难免有强烈的个人倾向和喜好,不一定适合所有人,更多的是起到抛砖引玉的作用。如果你想挑选自己感兴趣的方向和内容加以学习,可以参考我在下面列出来的资源。