跳转至

基础导览

想要步入计算机世界的大门,你需要一把钥匙,一把很坚固的钥匙,在你转动锁孔时不会断裂,当然,打开门之后,你还要奋力的向前冲刺,向上迈进。

这份导览将尝试和你一起找到这把钥匙,那么,开始吧。

CS是一门大学科,其中涵盖了很多可以深入的方向,我曾经想要很深入的了解几个方向的知识,不过还是因为精力有限而告停了。不过,接下来的内容,或是所有CS人应该掌握的基础内容,绝大多数是我走过的路(不过进行了优化)

作者之前还阅读了0xFFFF中的计算机相关专业入门指引专题帖 - 开篇 & 索引,或许可以与本导览相互补充

PS:还有一些学科应用场景等方向需要补充,欢迎贡献

此外,推荐的内容都偏向英文,推荐的课程可以点击链接进行了解

指向某个限速网盘的神奇link,包含不可告人的资料qaq

请先不要在意句子有没有句号,有时候我觉得没句号挺好看(是懒得加

课程学习

导论

对于新的专业领域,了解它的背景是必要的,导论在此发挥了巨大的作用。许多人在课内由于课时限制,并没有完整接受计算机导论的知识。我们学院使用《Computer Science Illuminated》进行教学,往往只能讲完一半,而且学的很浅。

我很喜欢这本书的编排,国内也有其英文影印版,推荐买来看看。

当然,对于新朋友,可能啃书(更何况是英文)是一种很难熬下去的过程,因此我还推荐学习Crash Course,或者是观看CS50的视频。

我为什么不提及CS50的coding,CS中代码实践尤为重要,我个人认为50的coding涵盖面太广,有这方面的精力不如开始一门编程语言的学习,在后期有想法时再学习Web/SQL...

(防杠,Web/SQL之类的语法会在你往后的学习不经意的接触到,如果你有这份心,你会在那时开始接触到)

很多人会说,Crash Course看完就算过完导论了,说法没错,但很多体验是观看课程视频/刷课无法获得的,很多时候沉下心来阅读经典书籍收获更大。

导论的重要目的就是构建框架、印象,很多新技术都不一定会在这里面叙述,你应该通过Google获取这方面的介绍,很多热心的人都会为此撰写Blog或者录制视频。

数学

数学或许是许多人在一开始无法意识到的重要板块。CS不是捣鼓计算机吗,为什么还学数学?不应该写代码,做项目...

算法就是一个依赖于数学的例子,AI中深度学习、神经网络,计算机图形学,网络安全...都依赖于数学。

我们学习的目的应该是:拥有抽象的理论,并且能够将其应用于实践。能够理解定理的由来,一些推论的证明过程,不断提高自己的抽象能力、推理能力。

这里我将基础的数学分为以下几个板块

数学分析


TODO:这一块也是我最近开始知道的内容,先前以为高等数学就涵盖了这块内容,对这方面的了解并不多,希望有人推荐

私以为,高等数学做的工作几乎用现在的Mathematics都可以解算,被删去的数学分析中的内容或是更重要的内容

这方面相关的一门课很火,MIT18.01/02,我没有学习过,看书、做习题的体验就很好了。问朋友推荐了卓里奇的《数学分析》,在没有人推荐前就占个位吧~

PS:我还读过Tomas的Calculus,很吸引我,或许是一个不错的切入


线性代数

你可以参考Gilbert的《Introduction to Linear Algebra》这本书进行学习,这本书是MIT18.06的教材,这门课的推荐更多是推荐Gilbert的课程视频以及课本。

离散数学

在国内这门课涉及到集合论、组合数学、图论、数理逻辑、抽象代数...但都是浅浅学完。

国外有一门优秀的课程CS70,将离散数学和概率论融合在一起学习,能够建立起初步印象,不过有些习题很难,UCB的很多学生也这样想。你也可以参考《Mathematics for Computer Science》(mcs),国内有其中文翻译,个人认为质量不错,B站也有其配套的视频;国内屈先生的《离散数学》也不错

学习数学其实有点看口味,同样的知识点,不同作者表述的方式不一致,我们兴许会有不同的兴趣。

概率论

CS70的概率部分就很好,我还看过《Probability and Computing Randomization and Probabilistic Techniques in Algorithms and Data Analysis》(好长,喜欢叫它爱丽丝),可以跟着布朗大学的CSCI1550学习。

深入

  • 概率论专题
  • CINTA是Bintou写的一本简单浅显的数论、代数的计算性导论,也是进攻密码学必备的基础,其中的推荐读物FINT,AATA..都是推荐的课本,其中FINT国内有翻译本,个人阅读下来体验很好

这方面的内容我并没有太多的推荐,因为深入时需要投入更多的精力,其他没有学完的就暂时不做推荐

编程入门

这里我更希望以入门的视角,而不是单纯针对语言进行推荐。

国内课程喜欢以C/C++进行程序设计语言的开篇,但很多时候都很拖拉,几周后才讲解控制流,甚至自己还不熟练。

PS:有很多资料可以参考,这里列出一个国内质量很高的课程:南科大计算机“C/C++程序设计”课程视频

编程语言的学习更应该注重构建语言抽象,很多人都说:只要熟悉一门语言,一周内就可以掌握新的语言。这样的描述比较空,我更喜欢说:只要构建了编程语言的抽象,你能更快学习新的编程语言并做出小玩意。

怎么构建抽象,我推荐学习CS61A,你还能掌握Python的基本语法,了解函数式编程,多好~

NJU也对CS61A进行了本土化,(可能更适合中国宝宝体质?),我还是更推荐原汁原味的CS61A

我本人是先学习了C/C++语言再接触CS61A的,我认为类似CS61A的课程内容应该越早接触越好。

  • 对于C++的学习,我首先阅读《C++ Primer Plus》,再阅读《C++ Primer》。你可以在掌握C++的基础语法后再阅读C++ Primer,我直接则选择先阅读C++ Primer Plus
  • 对于C的学习,如果没有学习过C语言,推荐《Think C》或许阻碍有点大。可以先从C++入手,然后学习K&R。其实,这方面的学习在你接触系统级编程时就会更深入的学习

PS:关于C++,我的建议是没基础的学完一定要仔细思考要不要深入C++,新标准的编程语法对我来说太魔幻,我现在的知识几乎停滞在C++11标准前

学习一门函数式编程语言是很有用的,会改变你的思考方式,虽说CS61A的scheme会带你浅浅探索,但不够深入,我推荐在了解数据结构后学习康奈尔大学的CS3110,不过我们能接触的更多是他的开源课本,拥有的资源其实已经很丰富。学习OCaml之后可以尝试搭建小玩具(compiler...),不过这些已经超过入门的范畴,让我停下来...

数据结构与算法

  • 推荐学习CS61B,使用Java学习数据结构/算法,使用红宝书作为教材
  • CLRS虽然没有红宝书那么友好,但也是不应该错过的书;国内只有第三版的翻译,我推荐去看英文第四版,因为它的红黑树是彩色的!!!MIT的算法课使用这本教材进行授课,b站有对应的授课视频,不过我觉得看书就好,之前看了几节就没看下去了
  • 学习这部分内容也可以刷一下LeetCode,UCB的Leetcode101挑选了些习题出来授课,可以从这门课开始入手

系统/体系结构

CS61C的教材很经典,其课程也包含了CSAPP前几章的Topic,CSCI0300的教材为CSAPP。这两门课的学习不冲突,建议都学

CSCI0300的视频在某个Link当中~

PS: 没有把这些课程放到CS基础上是希望各个方向形成一定分类


课程推荐Ending

基础导览到此结束,想了解操作系统/计算机网络/数据库/人工智能等内容指引,可以到基础深入部分查看!关于Web等技能的学习可能不会是这份课程的重点

什么?还没有???

对哦,那我就撑一会lol (正式进入碎碎念环节)

  • 人工智能
    • 可以学习UCB的CS188,内容不深
  • 深度学习
    • UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision
  • 操作系统
    • MIT6.1810,强大的xv6,超乎你的想象,可以搭配着OSTEP学习
    • Pintos也很出名,CS162的Project便基于这个system,不过啊,自己一个人刷有点痛苦,我写完Project1就溜了
    • NJUOS,由jyy老师授课,是国内为数不多的优质课程,学习之前以PA作为前置基础,个人不是太推荐学习PA(整个系列)和NJUOS(看视频和讲稿除外),有时间可以聊聊
  • 计算机网络
    • CS144很出名,但我没学过~
    • 学习这部分内容我是看谢希仁的《计算机网络(第8版)》和《计算机网络自顶向下方法》,还参考了中科大郑烇老师的计算机网络课程视频
  • 开心时间:本以为刷完两本王道面对国内的OS/Network考试便轻轻松松,结果差点考到不及格
  • 计算机安全学
    • 参考CS161学习
  • 计算理论
    • Sipser的《Introduction to the Theory of Computation》(ITOC),有配套的课程视频
    • UCB的CS172使用的是ITOC,很推荐跟着这门课学习
  • 编译原理
    • 暂不推荐,学习ing ...

工具

(暂时先把提问当工具,整理好会纳入新的Topic)

提问

提问的智慧这篇文章的内容固然重要,私以为一开始拿出来很没有必要,它的不友好程度甚至能掐灭刚刚燃起的火种。提问前都会遇到一个想法:问这个合不合适?面对这个问题,我可能不会写太多,以前怕麻烦别人,现在即使很easy/不该问的问题,丢给GPT都可以给你答复。所以,你会主动提问吗?

Git

很多课程都需要Git进行文件的版本管理,而这些都会在一开始教你基础的语法。

你也可以通过一些文档实操入手,不用学的太深入,到最后都是现用现查(对我来说是这样的)。有个Up推荐给大家:GeekHour,他的Git教程做的很好。

初期唯一的学习建议是不要从命令入手,而是从文件的工作区域及状态了解

MarkDown

找到一个合适的编辑器多学多用,不要提Word谢谢喵

Linux/Shell

拥有一个Linux环境在CSer内应该见怪不怪,尽早安装并上手吧(我用的是双系统:Win+Ubuntu,主要用Mac)

学会使用命令行也是不可缺少的技能

推荐Missing Semester这门课,内容确实不错,B站也有专门翻译的视频,0xFFFF论坛也进行了这个系列的学习讨论,可以参考

搜索引擎

前情提要:本站所有“Google一下”,都是“使用搜索引擎搜索一下”的代词

将默认搜索引擎更换成Google...(没有Baidu别想了)是必须的,这几乎决定了你你能够获取的信息密度以及精确度

当然Baidu也有其适用的范围,所以不能一板拍,比如查一些马原题目还是可以用的

VPN

你要是能打开这里所有的link,大抵是没问题的~

如果没有,有很多关于这方面的介绍,可以Google一下(陷入死循环)

TODO:待补充完善

评论