为什么称之为“周一学习计划”,因为一个星期的工作日就是从周一开始的呀,因此周一是美好的(劳资根本不想上班),是的,一日之计在于晨,一周计划在于周一,卓同学的24小时自习教室最近也发出一条通告:大致意思就是最近大家有点懈怠了啊,所以今天开始2017.8.21每人都要总结自己的学习成果。
以下来自知乎的一个提问:《作为计算机专业学生,最应该学习的课程前五位是什么?不论当前大学是否开设这些课程。》其中一位网友的回答。
作者:知乎用户
链接:https://www.zhihu.com/question/19628851/answer/12452793
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
计算机专业概念有点大。我本人毕业于国防科技大学计算机科学与技术专业,个人觉得就计算机科学与技术(CS)专业而言,以下这些是必修的:
1、计算机组成原理(包括先修课程“数字逻辑与数字系统”,简称“数电”):这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,像搭积木一样构成整个计算机系统,那就算及格了。 一门名为计算机体系结构是本课程的扩充包,对于了解近代计算机结构体系当然是必要的,但由于这里讨论的是Top 5,因此我认为计算机组成原理更为基础。
2014-07-15:在评论里有人让我推荐书目,我个人比较喜欢这本 Computer Systems - A Programer's Perspective (2rd Edition)。中文译本是《深入理解计算机系统》。在之前写的,本文最后的补充阅读中我也提过这本书。
2、线性代数,概率与统计和离散数学:要知道,凡是能称之为“科学”的专业,就必须有一定的数学功底,否则难以称作“科学”。这三门课我觉得是本科时期最重要的三门数学课,比高等数学重要。如果你想在计算机科学的道路上走远点,那这三门可是必修的。
3、MIT开设的《Introduction To algorithm》,中文版叫《算法导论》:我觉得应该学习它而不是国内习惯开设的《数据结构》。数据结构仅仅是算法的一部分,国内的数据结构课程回避了很多本质的东西,仅仅是对一些常见的数据结构的罗列,学起来总有些不痛不痒的感觉。《Introduction To algorithm》虽然有些章节夹杂着很多很让人讨厌的“数学”,但却能从本质上带你领略这门十分必要而且有趣儿的课。
4、操作系统与编译原理:操作系统可以说是《算法导论》的实验课,最好能在学习期间自己实现一个小型的操作系统,或者操作系统各分系统的Demo。编译原理可能是普遍本科生觉得难的一门课,但是作为CS本科生或者未来的软件科学家,这是基础中的基础,学完之后所有的语言在你看来应该没有太大的区别,这门课应该是离散数学+算法导论的实验课。最好能在学习期间自己实现一个小型的编译器,语言最好能自创,或者是某个已有的你喜欢的语言的基本子集。5、掌握一门常用的编程语言和编程技术:能了解你用过的所有的程序内部大致是怎样的,能用你熟悉的语言编写大部分的程序,至少不能是对任何一个程序满头雾水。以上这些不难做到,我觉得是基础中的基础,我固执地以为,不能掌握他们就不应该获得CS学士学位。
补充阅读:
在评论中有位朋友这么说道:
一看就是典型科班好学生。人生很短,学自己要用到的就好。多花时间在2、3、5是对的,甚至任选其二就能让你受益良多、乐在其中。 1和4所起到的作用,比起它们的意义,更多的是让一部分学生从一开始就对计算机产生失望和绝望,是抹杀学生本来的兴趣的凶手。回到问题本身,既然是“应该学习”,1、4不该放在里面,即使不学它们,我想在计算机专业的大多数领域是做得下去的。
我想对此做个回应:
首先,我自认为不是典型的中国式的“典型科班好学生”。这里列出的Top 5不是为了成为“典型科班好学生”,因为光学好这5门绝不够“好”;更不是为了“在计算机领域做得下去”,我相信在某个计算机领域,比如作为Microsoft Office的金牌培训讲师,只要精通Office就能干得很棒。
这里列出的Top 5是作为一个计算机科学与技术专业毕业生该有的知识储备,是这个专业的根基。如果你对这个专业真正有兴趣,并且热爱它,那我认为学习这里列出的Top 5会是个不错的选择。
当然,对于一个计算机世界的从业人员,学好它们也会收益良多。比如对于程序员来说,操作系统与编译原理这门课能够让你对你的程序如何在计算机里出生,运行,死亡有个好的认识,在我的编程经验中,我觉得这种认识让我收益良多。很多朋友也许知道有一本经典的书籍叫“Computer Systems:A Programer's Perspective”,里面的基础就是来源于操作系统与编译原理。还是那句话,如果你喜欢CS,这5门课是必须的,要是在这5门课上感到失望或者绝望,我想你该考虑换个专业了。
因为最近有学习一点iOS逆向(做逆向当然正向也要玩的6才行😦),发现涉及到了好多计算机专业的相关课程,比如C语言,数据结构与算法,汇编,反汇编,操作系统,编译原理,离散数学,Linux等等,而且我发现在iOS这个操作系统下学习,有时候如果不了解一点计算基础课程有点丢软件工程师的脸,想要深入学习真的很难,所以我有一个梦想,闻道有先后,术业有专攻,我想开始,作为21世纪的有志青年,为了不被未来的人工智能时代淘汰,还是需要好好学习啊,哇咔咔。
具体的课表和资料我参照网易云课堂:http://study.163.com/curricula/cs.htm
以及其他可能的资料大家也推荐小弟一下,最近在看的是中国大学MOOC的《计算机系统基础(一):程序的表示、转换与链接》,算是后续的计算机组成与设计,操作系统,编译原理,计算机体系结构等的基础课程吧。