计算机科学(CS)的课程体系

byr看到的,苦于无法收藏,转载于此。

原文链接:http://bbs.byr.cn/#!article/SoftDesign/45263

简单总结一下计算机科学(CS)的课程体系 
  
今天无意中看到了我多年前这个版上发过的一个帖子,叫《我心目中计算机软件科学最小必读书目》,然后发现自己的想法到现在真是变化好大,所以特意上站来把帖子删了。但是删完以后才发现网上已经到处都是转载了,心里那个惭愧啊,算是散播了一些偏见。因此想了想还是补一篇相类似的帖子吧,不过不想从什么“必读书目”的角度写了,类似地总结一下计算机科学(CS)的课程体系吧。 
关于计算机科学(CS)的课程体系,我个人打算分三部分或者说沿着三条线来总结,分别是“数据结构 & 算法”,“程序语言”和“系统 & 工程”。 
  
1.    数据结构 & 算法 
数据结构和算法其实就是一回事 
1.1.    离散数学 
<Discrete Mathematics and Its Applications> (Kenneth H. Rosen)

 
好吧,可能对程序员们来说,已经想不起还有这么门课了。不过其实对于一个没接触过CS数学思维的人来说(比如大一新生),学一下离散数学还是有所帮助的,像递归这些概念我们已经习惯了所以觉得理所当然,但是对外行来说还是不那么容易理解的,至少我给我老婆讲的时候她没理解。 
1.2.    数据结构 & 算法 
<Algorithms> (Robert Sedgewick & Kevin Wayne)

 
<Introduction to Algorithms> (Thomas H. Cormen et al.)

 
现在已经不是我读大学的那个时代了,我看那些本科生直接看算法导论完全没压力,所以其实也不用这本那本的推荐了。实在还嫌算法导论难的话就上面那本吧,简洁得多,有具体的程序语言实现,也没那么些数学证明。 
1.3.    高度依托于算法的课 
其实依托于算法的课程非常非常多,鉴于都是选修课,就介绍两个吧: 
1.3.1.    数据挖掘 
<Data Mining: Concepts and Techniques> (Jiawei Han et al.)

 
现在大家都把数据挖掘挂在嘴上了,不提不行啊。 
1.3.2.    人工智能 
<Artificial Intelligence: A Modern Approach> (Stuart Russell and Peter Norvig)

 
我本人是做人工智能的,所以算是捧捧场吧。人工智能其实是个大杂烩,传统的那些分支,比如搜索,约束,推理,规划,知识表示,已经非常冷门了,所以反过来那些热门的分支都出去自立门户了,比如机器学习,自然语言处理,计算机视觉,机器人。 
  
2.    程序语言 
程序语言的知识体系其实并不像国内高校教的那样。程序语言有没有理论体系,有,你要是看过王垠的博客就知道了。在美国的大学里程序语言理论一般分三部分或者说三门课程。第一门语法学,其实就是编译原理;第二门语用学,这个下面会讲;第三门语义学,这个我觉得太理论,离现实太远了。就我本人而言,当年博士资格考试考过语义学之后就再也没有用过。还有,很多人都推崇那本《计算机程序的构造和解释》,其实我觉得如果不搞学术的话完全没必要看那么深。 
2.1.    编译原理 
<Compilers: Principles, Techniques, and Tools> (Alfred V. Aho et al.)

 
美国的CS教学特别强调“计算理论”相关的课程内容,比如自动机,lambda表达式,P = NP?。当然做学术的话这些东西可能会用到,但是干程序员的话这些东西基本上不会用到。而唯一比较接地气而又涉及到计算理论的东西就是编译原理了。 
2.2.    程序语言语用学 
<Programming Language Pragmatics> (Michael l. Scott)

 
其实我一直没搞懂为什么中国的大学计算机系都不开这门课,按道理国内都应该特别喜欢教这种很“记背”类型的课程啊。我要对国内的学生们强烈推荐这门课程,语用学其实就是比较和总结各种各样程序语言的共性和区别。在去学各种各样具体的编程语言之前,这门课程可以从总的视角来帮助学生了解不同程序语言的背景和特征,对具体语言的特征不但知其然还知其所以然。要是国内大学像美国一样也把这门课列成必修课程的话,可以帮助学生树立很多正确观念,比如“不同语言是有不同的适用范畴的,没什么优劣之分”。 
2.3.    具体的程序语言 
<C++ Primer> (Stanley B. Llippman et al.)

 
<Thinking in Java> (Bruce Eckel)

 
这里贴两本C++和Java的吧,其他的就不贴了。除了C/C++和Java这种学校会教的以外,值得推荐的还有用于脚本的Python,用于网页的PHP和用于动态效果的Javascript,至于Lisp,Prolog啊什么的对普通程序员太远了。 
  
3. 系统 & 工程 
这些都是配盘子的课了,我打算提5门,分别是“计算机组成与设计”,“操作系统”,“计算机网络”,“数据库”和“软件工程”。 
3.1. 计算机系统 
<The C Programming Language> (Brian W. Kernighan & Dennis M. Ritchie)

 
<Computer Systems: A Programmer‘s Perspective> (Randal E. Bryant & David R. O‘Hallaron)

 
对于前三门计算机系统的课程,不得不提一下大神级的著作《深入理解计算机系统》,这确实是经典中的经典,我当年都还是看了APUE之后才看的,仍然觉得受益非浅。当然这些课都得先学c语言做基础。 
3.1.1. 计算机组成与设计 
<Computer Organization and Design: The Hardware/Software Interface> (David A. Patterson and John L. Hennessy)

 
现在基本上硬件课程在计算机系已经越来越不重要了,做系统结构的大多都跑电子系(EE)去了,并且他们搞完系统结构之后还得过来找程序员的工作,像汇编语言这样的东西也越来越淡出大多数程序员所能接触到的范围了,看看《深入理解计算机系统》了解了解就足够了。 
3.1.2. 操作系统 & 计算机网络 
<Modern Operating Systems> (Andrew S. Tanenbaum and David J. Wetherall)

 
<Computer Networks> (Andrew S. Tanenbaum and David J. Wetherall)

 
以前读大学的时候老师都把这两门课当“记背”类型的课了,都是直到后来看了CSAPP和APUE才会写。 
3.2. 数据库 
<Database System Concepts> (Abraham Silberschatz et al.)

 
3.3. 软件工程 
<Software Engineering: A Practitioner‘s Approach> (Roger Pressman and Bruce Maxim)

 
  
--

时间: 2024-10-19 18:25:49

计算机科学(CS)的课程体系的相关文章

Java Web课程体系

今天在网上看到一个java web课程体系,觉得很有意思,在这里记录下来. Java Web课程体系分为5个阶段: 1.初级阶段 2.中级阶段 3.高级阶段 4.资深阶段 5.专家阶段 Java Web课程初级阶段的内容有: 1.Java语言基础 2.Java语言面向对象的高级特性 3.JSP 4.Servlet 5.JDBC编程 阶段目标:可以胜任初级Java Web开发工作 Java Web课程中级阶段的内容有: 1.Spring 2.SpringMVC 3.Struts2 4.Hibern

IT十八掌课程体系SPARK知识点总结

Spark知识点 IT十八掌课程体系SPARK知识点如下: 有需要IT十八掌体系课程的可以加微信:15210639973 1.定义 MapReduce-like集群计算框架设计的低延迟迭代和交互使用的工作. 2.体系结构 3.一些重要概念的解析 (1) RDD(resilient distributed dataset) 弹性分布式数据集一个只读的,可分区的分布式数据集,能够部分或全部的缓存在内存中(数据溢出时会根据LRU策略来决定哪些数据可以放在内存里,哪些存到磁盘上),用来减少Disk-io

生态学视域下高职艺术设计专业课程体系的实施

一.生态学与课程体系的界定. 1.生态学的界定.作为一门新兴的科学,生态学的产生可追溯到19世纪60年代,德国学者恩斯特·海克尔把生态学定义为"研究有机体同周围环境之间相互关系的科学".生态学的核心观点在于三个方面,即种群.群落.生态系统和人与环境存在竞争合作.互利共生的关系:我们的任何行动都不是孤立的,对自然界的任何侵犯都具有无数的效应:每一事物无不与其他事物相互联系和相互交融.随着社会的发展,生态学的内涵不断丰富,边界不断拓展,从研究生物为主要对象扩展到以人为核心的生态环境问题.生

兄弟连HTML5培训升级混合式开发课程体系

兄弟连HTML5培训升级混合式开发课程体系 在率先提出"混合开发"培训理念的基础上,为了确保授课内容更贴近企业及学员需要,兄弟连HTML5培训混合式开发课程再次升级!融于最新项目框架,紧跟企业发展步伐,加强项目开发经验,提升实战动手能力.学到的HTML5混合式开发课程不仅仅是概念,更重要的是实战经验,兄弟连HTML5培训给学生的起点,是别人达到不了的高点! 1.加强原生JS 企业越来越重视开发人员对于原生JS的掌握情况,而能否熟练掌握HTML5培训原生JS也关系到对JS框架的应用.如果

老男孩教育大数据课程体系2折起超值优惠开班

老男孩教育大数据课程体系2折起超值优惠开班 大数据与云计算的未来发展趋势和前景已经极其广阔,未来的互联网就是大数据和云计算的天下,大数据和云计算将成为每一个IT人员必须会的技术了.老男孩教育也顺势而为重金聘请一流核心骨干讲师,打造互联网大数据课程,绝对让同学们心悦诚服,绝对物超所值,让同学在技术道路上捷足先登,做IT技术达人,成为人生赢家.必须要要学大数据的里有见本文结尾. 虽然价格极低,但课程含金量坚决不低于18000的价值! 一.开课信息 1.开课时间:2016年2月23日(如果满30人,1

linux学习3 Linux云计算系列课程体系全面介绍

一.课程体系 原文地址:https://www.cnblogs.com/Presley-lpc/p/11641814.html

【LInux01】学习Linux课程体系

知识 =>技能   需要大量的练习  相当于复盘 要有成就感 在一个领域深挖,再迁移到其他领域 1.两周以后的知识留存率: 主动学习: 动手实践:40% 讲给别人听:70% 写博客:是写教程,便于以后复习(必须完成) 5W+1H(what, why, when, where,who, How) 被动学习: 听课:10% 笔记:20% 2.Linux运维课程体系 Linux入门 Linux系统管理 Linux服务及安全管理 : httpd,lamp,lnmp Cache:memcached,var

一个项目覆盖CS所有课程的可行性探究

我们先看计算机科学有哪些子领域. 学术领域有: 计算理论 信息和编码理论 算法和数据结构 形式化方法 程序设计语言 实践领域有: 计算机体系结构 并行计算和分布式系统 实时系统和嵌入式系统 操作系统 计算机网络 科学计算 安全性和密码学 人工智能(模式识别.机器学习.数据挖掘.信息提取) 计算机图形学.计算机视觉.多媒体 数据库和大规模数据处理 万维网 自然语言处理和语音 人机交互 软件工程 现在要讨论的是,有没有一个项目,其中要用到所有领域的知识. 首先是所有项目都要用到的,编程语言.算法与数

Day 1 : 行业概述、课程体系介绍、JAVA开发环境

1. JAVA开发环境 1.1. 认识Linux操作系统 1.1.1. Linux的由来及发展 Linux起源于1991年,1995年流行起来,大家可以看到旁边的这个人,它就叫Linux,是他在上大学时候写的一个操作系统,被开源出来,所谓的开源,就是指开放源代码,也就是,一步一步怎么做的,都可以看到.说它是一个类Unix的操作系统,Unix也是一个操作系统,只是它是收费的,而Linux是免费的,当然,这也是它发展起来的原因之一. 目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计