如何系统地学习计算机理论知识(一)
近毕业,内心难免浮躁。作为一个即将进入 CS 行业百万大军中的一员,如果说没有打算在技术领域有所建树的想法是骗人的。无论是理论研究还是工程开发,新兴技术日新月异、层出不穷,难免让人眼花缭乱,学习时亦心猿意马,心里总觉得XX更有前景,于是趋之若鹜。
但是,技术是学不完的,比如前些年很火的 ROR 知识体系:
Rails_Competencies.png再如前端:2016 年做前端开发是什么体验?
如果仅仅跟着新的 API 和库作者的脚步学习,永远只能被牵着鼻子走,更何况大部分框架和思想早已存在,新出的库不过是从一种语言转到另一种语言,也就是所谓的炒冷饭,本质上并没有变。CS 基础越扎实的人,越能够快速吸收掌握新的知识与技术。
那应该如何系统地学习计算机理论知识呢?我觉得虽然互联网上资源极为丰富,但良莠不齐,要学就应该把最好的挑出来学。根据QS 大学排名和U.S. News排名,计算机专业 Top5 的学校分别是 MIT,UCB,Stanford,Harvard 和 CMU,因此,如果要巩固基础,最应该了解的就是这5所大学 CS 专业的培养计划和课程大纲。
由于这几个学校的本科培养都大同小异,所以我特意分门别类,删繁就简,尽可能挑出课程视频开放的一些科目(大赞伯克利,大部分课程在 YouTube 上可以观看),整理出一份系统的计算机理论知识资料(默认已具备微积分、线性代数、概率论和离散数学等基础数学知识),总结成以下三类:
入门(Introduction)
- CS50(Harvard,Introduction to CS)
- CS61A(SICP) 或 CS106B(Programming Abstractions)
- CS61B(Data Structures) 或 CS161(Data Structures and Algorithms)
- CS61C(Great Ideas in Computer Architecture) 或 CS107(Computer Organization and Systems)
- CS110(Principles of Computer Systems)
核心(Core)
-
操作系统
-
数据库
-
网络
-
编译器
选修(Electives)
-
计算机图形学
-
Web编程
CS142(Web Applications) -
人工智能
CS221(AI)
Google 这些课程去到课程主页上把 lecture、assignment 等要点都过一遍,脑海中有了这些知识的框架,再观看视频、完成作业和项目,一步步自然可以将 CS 理论知识系统化。下一篇文章将继续讨论计算机理论知识的掌握该循序渐进读哪些专业书籍。