大学要学什么?
1、计算机组成原理
2、线性代数,概率与统计和离散数学
3、MIT开设的《Introduction To algorithm》,中文版叫《算法导论》
4、操作系统与编译原理
5、掌握一门常用的编程语言和编程技术
详解:
计算机组成原理(包括先修课程“数字逻辑与数字系统”,简称“数电”):这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,像搭积木一样构成整个计算机系统,那就算及格了。 一门名为计算机体系结构是本课程的扩充包,对于了解近代计算机结构体系当然是必要的,但由于这里讨论的是Top 5,因此我认为计算机组成原理更为基础。
线性代数,概率与统计和离散数学:要知道,凡是能称之为“科学”的专业,就必须有一定的数学功底,否则难以称作“科学”。这三门课我觉得是本科时期最重要的三门数学课,比高等数学重要。如果你想在计算机科学的道路上走远点,那这三门可是必修的。
MIT开设的《Introduction To algorithm》,中文版叫《算法导论》:我觉得应该学习它而不是国内习惯开设的《数据结构》。数据结构仅仅是算法的一部分,国内的数据结构课程回避了很多本质的东西,仅仅是对一些常见的数据结构的罗列,学起来总有些不痛不痒的感觉。《Introduction To algorithm》虽然有些章节夹杂着很多很让人讨厌的“数学”,但却能从本质上带你领略这门十分必要而且有趣儿的课。
操作系统与编译原理:操作系统可以说是《算法导论》的实验课,最好能在学习期间自己实现一个小型的操作系统,或者操作系统各分系统的Demo。编译原理可能是普遍本科生觉得难的一门课,但是作为CS本科生或者未来的软件科学家,这是基础中的基础,学完之后所有的语言在你看来应该没有太大的区别,这门课应该是离散数学+算法导论的实验课。最好能在学习期间自己实现一个小型的编译器,语言最好能自创,或者是某个已有的你喜欢的语言的基本子集。
掌握一门常用的编程语言和编程技术:能了解你用过的所有的程序内部大致是怎样的,能用你熟悉的语言编写大部分的程序,至少不能是对任何一个程序满头雾水。
以985,211大学过来人的身份诚心的告诉学弟你。。。其实现在大学教育能交给你的实际知识非常有限,进入公司之后都面临长时间的不适应和再次培训,你唯一能够在大学获得的,其实不是非常扎实的专业知识,更多的是学会如何与人相处,结实自己最初级的人际网络并且形成良好的工作学习习惯(在脱离父母的情况下,你能保证自己绝对不去网吧包夜?不去夜店滥性?),如果你能够学会控制自己,并且展开了自己的人际网络,即便你没有拿到例如交换留学、保研名额之类的东西,你的大学也是成功的。。。所以专业性的问题我就不答了,如果你的学校很好,招生的时候会有相关的大学老师过去,他们回答的绝对比网友专业。。。另外大学课程比较松,基本上分为必修和选修。。。必修课分公共课和专业课,公共课一般在大二就全结束了,专业课则一般从大二开始。。。这个是必须要全过的,所以不逃课很重要,经常做作业也是必须的,最重要的是要学会找前几届的学长们要之前考试的卷子和复习提要。。。大学老师也很懒,基本上那些题目的重复性都很高。。。对于想拿奖学金的人来说,这是一条捷径。。。选修就比较轻松了,一般大四毕业之前拿到规定(我们学校是18)的选修学分就可以顺利毕业,考试也相对来说简单,不过对于丰富知识面还是有一定作用的。。。一般大一就可以修(但学校一般会推荐你,让你从大二之后在开始),个人觉得如果不急着找女朋友,最好还是多修几门感兴趣或者和你主修方向不同的课程。。。如果能够拿到比较好的分数,求职的时候,成绩单打印出来也是赢得眼球的方法。。。并且会让人觉得你的知识面很丰富。。。当然,到大三之后你会碰到一些专业选修课(非必选)。。。如果学分不够,一般这都是让你拿学分的课程,相对来说考试容易过,至少我当年就是靠两门非必选的专业选修课凑够了专业课的学分。。。