大学的计算机导论 公开课课是哪本书?

计算机科学与技术本科专业有哪些核心课程?应该如何安排学习顺序?各个课程推荐哪些经典教材?
例如:&br&&ol&&li&计算机学科导论和 C 语言&br&&/li&&li&汇编、操作系统、C++、数据结构、离散数学、数值分析和计算机组成原理&br&&/li&&li&计算机编译原理和数据库 &br&&/li&&li&计算机网络与安全和软件工程&/li&&/ol&&br&还有其它的诸如:高数、线性代数、离散数学、网络原理、网页设计、多媒体技术、汇编语言、面向对象的设计语言、Java 编程、ASP、SQL等&br&&br&我在网上搜了好多,大家说法都不一样,我也搜集了一些教材,但不知道是否全面,而且也不知道学习顺序,我的思路是这样的:&br&&ol&&li&先学习 C 语言和 C++。教材有:C programming language-K&R、C traps and pitfalls、Algorithms in C 和 Expert C Programming&br&&/li&&li&学习数据结构。清华大学严蔚敏《数据结构》,目前还未找到经典的国外教材&br&&/li&&li&学习算法。算法导论和具体数学及其应用&br&&/li&&li&计算机组成原理。Computer Organization and Design The Hardware-3rd-David Patterson&br&&/li&&li&计算机系统。CSAPP&br&&/li&&li&操作系统。鸟叔的私房菜和计算机网络&br&&/li&&/ol&&br&我也看了一下清华大学等名校的本科课程,但是课程好多啊,哪位大侠能够按照循序渐进、由浅入深的学习顺序给介绍一个合理的顺序?如果没时间推荐教材的话,我可以根据推荐的课程来搜一下,然后补充进来,让这个话题有一个综合的、完整的答案。
例如:计算机学科导论和 C 语言汇编、操作系统、C++、数据结构、离散数学、数值分析和计算机组成原理计算机编译原理和数据库 计算机网络与安全和软件工程还有其它的诸如:高数、线性代数、离散数学、网络原理、网页设计、多媒体技术、汇编语言、面向对象的设计语言、Java 编程、ASP、SQL等我在网上搜了好多,大家说法都不一样,我也搜集了一些教材,但不知道是否全面,而且也不知道学习顺序,我的思路是这样的:先学习 C 语言和 C++。教材有:C programming language-K&R、C traps and pitfalls、Algorithms in C 和 Expert C Programming学习数据结构。清华大学严蔚敏《数据结构》,目前还未找到经典的国外教材学习算法。算法导论和具体数学及其应用计算机组成原理。Computer Organization and Design The Hardware-3rd-David Patterson…
按投票排序
核心就三门课:数据结构:看《算法导论》。操作系统,看 Tanenbaum 的书,这是最最核心的课程。计算机体系结构,看 David Patterson 和 John Hennessy 合写的书。另外,“操作系统”不是教你怎么安装配置Linux,看原问和楼下某些答案太搞笑了。
第一次在知乎答题!正好之前在北邮人上发了这么个帖子, 现在略作修改后原帖转过来, 包括关于北邮人上几个回帖的讨论部分。简单总结一下计算机科学(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.
程序语言程序语言的知识体系其实并不像国内高校教的那样。程序语言有没有理论体系,有,你要是看过王垠的博客就知道了。在美国的大学里程序语言理论一般分三部分或者说三门课程。第一门语法学,其实就是编译原理;第二门语用学,这个下面会讲;第三门语义学,这个我觉得太理论,离现实太远了。就我本人而言,当年博士资格考试考过语义学之后就再也没有用过。还有,很多人都推崇那本《计算机程序的构造和解释》(&Structure
and Interpretation of Computer Programs&),其实我觉得如果不搞这方面学术的话完全没必要看那么深。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和UNP才会写。3.2.
数据库&Database System Concepts& (Abraham Silberschatz et
软件工程&Software Engineering: A Practitioner's Approach&
(Roger Pressman and Bruce Maxim)----------------------------------------------------------------以下是当时对北邮人的几个回帖的讨论:看了北邮人的几个回帖之后,想想其实说说哪些课程是不必深究的也是有意义的,所以我在这里补充几个回复:回复1.关于《计算机体系结构:量化研究方法》&Computer Architecture: A Quantitative Approach& (John
L. Hennessy and David A. Patterson)本人之前是通信工程本科毕业,后来在电院的计算机应用技术硕士毕业(院系合并之前),毕业后在爱立信写基站板子上的软件,所以我的看法应该不代表“我邮的CS”,从出身而言,我也应该不会因为不了解硬件而忽视硬件课程。就说说不是我邮的情况吧。我是在美国大学读的CS博士,回复里也有人提到了,由于历史原因,美国很多大学CS和EE都是放在一个系的,但是碰巧了,我读的那个大学不但CS和EE分为两个系,而且CS属于科学学院,EE属于工程学院,甚至EE居然叫做Electrical
and Computer Engineering而不是Electrical
and Electronical,而这个EE系分四个大组,用中文来说分别是电气工程,电子工程,通信工程和计算机工程。在我读的那个CS系,只有一个韩国教授做的是体系结构这种硬件的方向,他的实验室索性设在了EE系里,所有学生都去EE系的实验室和计算机工程的那个大组一起做,课程也基本上和EE的一起选,但最后所有这个韩国教授的学生还都去的是软件工程师的职位。美国的CS系都要考博士资格考试,当时操作系统和系统结构这两门课是二选一,除了韩国教授的学生以外,我读博士的那么多年里所有其他的学生选的都是操作系统。。所以我的观点在原文里也说了,如果你做的是计算机硬件相关的方向,那么《计算机体系结构量化研究方法》肯定是必学的,但是鉴于现在CS系做硬件的人越来越少,完全是软件一统天下的局面,我真心觉得CS的课程设置里体系结构并不是必须的了。多说一句,别说CS系了,我当年本科通信工程一个班32个人里面,软件工程师出了八九个,而硬件工程师只出了一个。回复2.关于《计算理论》(包括《形式语言与自动机》)&Introduction to the Theory of Computation& (Michael
Sipser)首先,我对做计算理论的人是很崇敬的,完全没有忽视的意思,看看图灵奖一半以上的得主都是这个方向的就知道了。我是在美国的大学读的CS博士,我读博士的时候,计算理论这门课是最难的一门,没有之一,博士资格考试计算理论是必考,也是最难的一门,没有之一。不巧的是,我就是做科研的,本来当年考完博士资格考试就想着我这辈子应该再也不会用计算理论的东西了吧,谁知道后来生平第一篇论文投出去的时候,审阅的人就问我这个问题证明了难度了吗,我想还有这码子事啊,于是赶紧证明一下是P-Complete的,寄了过去,谁想到审阅的人回复说,证明是make
sense的,但是里面有个小错,我给你纠正了,最终结果不是P-Complete的而是P-hard的。原文里关于编译原理我也说了,“美国大学CS特别强调‘计算理论’相关的课程,做学术的话这些东西可能会用到,但是干程序员的话这些东西基本上不会用到。”所以我的观点是,计算理论这种东西太高大上了,更像是数学专业而不像是CS的课程,读博士将来做科研的话好好学学是应该的,但是对于绝大多数念完CS专业去公司里干程序员的人来说,没必要学那么深,学好编译原理足够了。回复3.关于北邮人上之前的帖子《我心目中计算机软件科学最小必读书目》(关于APUE与UNP)我多年前在北邮人上发过的一个帖子,叫《我心目中计算机软件科学最小必读书目》,后来发现自己的想法真是变化好大,所以特意上北邮人去把帖子删了。但是删完以后才发现网上已经到处都是转载了,心里那个惭愧啊,算是散播了一些偏见。我多年前是系统级软件的程序员,就是成天抱着APUE和UNP的那种,后来辞了职去读博士才转的方向,由于受之前的工作经历影响,我上次那篇帖子是站在系统级软件工程师的角度说的,但是时过境迁,现在的计算机工业界特别是互联网行业已经大大地向前端转移了,所以很可能一个写PHP或者Javascript的程序员会觉得过去那个帖子写的和他的知识体系完全不是一个方向,因此我觉得上一个帖子有点偏了。那天也是一时冲动就删了,其实想想叫《我心目中计算机软件科学最小必读书目》的话是有点偏了,但要是不删掉改个名字叫《我心目中系统级软件程序员的最小必读书目》也还是可以的。
说点靠谱的吧,毕竟刚毕业,这个顺序用来做完计算机科学与技术专业入门应该还是可以的。入门后还得根据自己的兴趣看更多专业方向的书。大一上学期:1. 计算机导论 这个随便找个名校的课程就行,主要是梳理后面的知识脉络。2. c语言
《k&r》一本即可,也不要全看完(初次看后面铁定看不懂),到struct那章把所有语法点弄明白就差不多了。其他c语言方面的书可以涉猎,但实话说帮助不大。sp:这时最好动手实践计算机配机器,装机器;大一下学期:3. 数据结构与算法
《算法导论》一本即可,关键是每章习题必须全部做完。当然也不用全部看完,到动态规划和贪心算法那章即可,有兴趣看完则是好事。这个横跨大一与大二。4。 线性代数
清华版或是同济版到都可以,mit有开放课程视频。sp:这时可以学点网页制作相关知识,推荐《Web标准设计》与《CSS权威指南》,想入门千万别用dreamweaver大二上学期:5。计算机组成原理
这个推荐《深入理解计算机系统》,中文版前面翻译都很好,后面稍微差点,但总体质量很高(这算是帮美女老师做广告么。。。)这本关键是每节插入的各个习题,每章后面的习题不要求。这本书实际还涵盖:汇编语言,操作系统导论6。 离散数学
这个可以用国内教程,也可以用国外教材sp:C++ 《C++ Primer》入门一本即可;大二下学期:7。 概率论与数理统计
这个跟上面一样,国内数学教材也很好8。 操作系统
什么鸟叔就呵呵了,这门课关键是设计实现好不,最需要掌握的是操作系统中涉及的简单算法与数据结构概念。所以推荐《操作系统原理》。浙大都有开放教程。9。 数据库导论
推荐《数据库原理》,这门课关键是数据库系统中的库表设计和sql使用,必须动手做点小项目。自学Java或是php搞点什么xx管理系统吧sp: Linux操作入门,Java,PHP,Mysql等DBMS。到这里已经基本入门了,做点小项目问题不大,之后才是真正开始修炼各种高级内功的时候,最关键书理论要理解,实践也不可以少。大三上学期:10。 计算机网络
推荐那本国内谢希仁的,别看啥自顶向下。11。 计算机体系结构
推荐国外那本《计算机组成与软硬件接口》,别忘记习题。12。 编译原理
入门《龙书》就可以了,可以跳过第二章,第一遍看到第六章就行,别忘记习题与实践。完全可以跟着cousera上那门Compiler,有视频有实践作业挺好的。大三下学期:从这里开始可以根据兴趣专研自己感兴趣到部分了,必修一门:13。 软件工程
书太多了,经典理论与敏捷理论都最好涉猎一下;不过光看用处不大,可以做些项目了,在实践中学习才是最好的学习。sp:这时应该已经做过几个小项目了,可以学习使用版本控制软件svn以及git进行代码文档的管理。 提议增加方向的选择,个人也只能根据稀少的经验稍微写点目前的推荐书目,因为专研到各个技术方向的细节太多,而且瞬息万变,不像入门只要看经典就可以了。Web前端:可以在编译原理、计算机网络、图形学多巩固一下。js入门推荐《JavaScript高级编程》,千万别直接看犀牛书。Web后端:分为Java和C++方向,前者多看下《设计模式》,后者肯定得把《effective C++》系列读完。C++方向推荐看看《UNIX环境高级编程》《STL源码剖析》系统:在操作系统、体系结构多下点功夫,推荐看看《计算机系统结构:一种量化研究方法》,《操作系统设计与实现》,反正系统架构是一通百通算法:本人一窍不通另外强烈推荐《计算机程序的构造和解释》!
有些答案有秀书的嫌疑嘛,列那么一大堆一个普通本科生能四年能看完(看懂)基本上也不需要再去写代码了,因为没时间。如果真追求实用,要认真研读的书还真不多,四门核心课(数结,操系,计网,计体)用心学足够支撑一个人深入学习感兴趣的东西了吧(相信大部分人还是以找到好工作为追求的),没有想成为各方面都熟悉一点的多面手还是别花过多时间研究各种东西了.比如在语言上,lisp,haskell等等很cool的语言;数据库上,MS家的,O记的,mysql等等一堆;XXX上,XXXXX。这些东西学了可能有帮助,但是捡了芝麻丢了西瓜这事儿不大值得,当然学有余力了解一下,是可以为以后加分。P.S:我买过大量的书,是涉及到一个学生能想到的各个方面,但是如今有很多都闲置了,因为在刚开始学习的时候什么都想学,什么都觉得重要,但是后来发现。。。真的驾驭不了那么多东西,好好弄清楚自己的方向才是重要的。
正文传送门——题目本身还是有一定讨论价值的:计算机的基本功就是写代码=算法+数据结构美帝学校的原则都是,读得来恭喜你,你是我们的学生,读不来很抱歉,祝你好运。(我们学校本科十个人中只有六个能在六年内读完本科学位;当然了我室友年年4.0无压力。这就是制度凶残但是中国留学生更凶残啊)参考1——UIUC(点击图片放大看):参考2——UCB:Required Courses for Satisfaction of the CS MajorL&S CS majors must earn 27 units in upper division technical courses, including:Required Courses: (Algorithms) (Systems)Breadth courses choose two from the following: (Digital Systems) (Computer Architecture) (User Interfaces) (Computer Security) (Languages and Compilers) (Software Engineering) (Computer Graphics) (Databases) (Artificial Intelligence)Any two additional .Technical electives.Any upper division CS or EECS course provided it is graded is automatically approved. See the .跑题一分钟,可跳过看正文这是一个雄心勃勃的问题,按理说咱们应该be nice and 不泼冷水。只是你自己已经知道这个胖子是一口吃不成的了:我也看了一下清华大学等名校的本科课程,但是课程好多啊况且你还是个纯外行——“翻译; 是一个对文学、历史感兴趣的人,特别喜欢古典文学。”我们花半天功夫写个不错的课表又怎么样?有意思吗?该不会是看比尔盖茨自传头脑发热了吧?
我的建议顺序是两条线,一条是计算机一条是数学:1、学数字逻辑,书《编码的奥秘》2、学组成原理,书《深入理解计算机系统》3、学C语言,书随意,千万不要一上来就学C,学了前两个,你才能学这个,不迷惑4、学数据结构和算法,书《算法导论》5、学操作系统,书《操作系统:精髓与设计原理》7、网络、汇编、编译原理、数据库,到这儿就比较随意了
个人认为,关键是要由系统化的思维,能够迁移,搞清楚要解决什么样的问题,其他自由脑补1、导论:《SICP:CH1-3,4-5》,北京大學裘宗燕翻譯,前3章就是新手看的,基本的抽象能力就有了;C + PYTHON/RUBY方面,python2就是各种补丁,能直接上py3可能顺眼得多;《计算的本质》;HtDP又不太实用,racket对语义理解要求有些高而且繁杂2、數據結構C語言描述(維斯的最經典) + 算法概論 === OK,《算法导论》就不必了,宽泛且浅,倒是可以翻翻高教绿皮《运筹论》,实操可以是北航尹宝林教授的《C程序设计思想》,虐了一代代学生,或者《C编程接口?郭旭翻译了一遍》3、汇编,操作系统,鏈接與匯編、计算机组成原理 ===《CSAPP》基本够用了4、计算机网络,网络協議TCP/IP详解Vol1,再随便找个好点高校比如北邮里面的网络实验课件对照看看,找找感觉;找个tcpdump, wireshark命令或者工具抓包试试手;真心说谢袭人的绝对良心之作;5、操作系统核心,LDD,ULK或者德国人的《深入理解linux内核架构》,郭旭的翻译还是不错的;找源码,特定关注某个子系统,块设备IO;6、编译:《编程语言设计模式》,《龍書上半段》,《虎書算法描述》,若要深入优化,《鯨書全部》=== SICP+EoPL7、其它的诸如:高数再补一个《重溫微積分》、线代+概率統計、离散組合推荐北京大学出版社屈婉玲耿素云等的教材、OOP不如直接看coolshell里面总结的软件设计原则再补充看看《敏捷软件开发模式》前半段用OO语言详细解说编程基本原则(原则是真的,模式是特定语言或者领域的)、数据库直接拿ORACLE的解说文档看看,不可多得,一通百通,一窥顶尖DBMS的使用和實現基本概念和手法说的有点乱,有些名字也记不清楚了,感兴趣自行放狗,上下文相关搜索
程序=数据结构+算法
零基础直接从C Primer Plus开始看起,中间有几章,讲I/O和位运算的部分可以先跳过。全书下来就大概知道程序是个啥长啥样,再重看一遍,至少C语言基本功就很扎实了。数据结构和算法看《数据结构与算法分析:C语言实现》,吃下来这本书这方面就算有感觉了,至少知道各种数据结构和算法都是啥玩意了。之后再看高级的算法书也有底了,感觉不错可以直接看算法导论了。《深入理解计算机系统》学完C和基本数据结构就可以开始看,越早看越好,越早看越好,因为很重要所以说两遍。这本书树立了计算机的大局观,从底层到系统到网络,什么都有涉猎,这本书吃下来后已经有能力自行决断要看哪些书要研究什么方面了。
我觉得能不学C++就不学C++之外,其他也没什么好修改的了。不过楼主本科就看具体数学,那其他的看点什么都不奇怪了。
CSAPP〈深入理解计算机系统〉很不错,可以让你对计算机系统有个比较大致的了解,包含了汇编,操作系统,网络等的一些基础知识~。。。尤其是书配套的lab非常好~这个好像是cmu的ics213的用书~
数学&算法:具体数学+算法导论。语言:k&r c语言,OO类语言:java\ c++\python\,学OO不建议一上来就C++,容易陷入语法的坑。系统:深入理解计算机系统,吃透这本外加操作系统足以。
核心课程,专业课基本都涵盖了,但关键在于别用老师自己的教材或是国内的教材。课外自己买国外的经典书仔细研读。要不然你会觉得操作系统,体系结构这些课程怎么毫无压力,不痛不痒。
从最底层开始学先学逻辑电路和数字电路,玩玩单片机,再学汇编语言,推荐王爽的那本书。再学计算机组成原理。在学这些底层东西的同时,可以熟悉一下linux操作系统。可以看看薄一点的书,如果毅力强,可以看鸟哥的那本书然后再学c语言(不包括c++),《21天学通C语言》这本书还不错,然后可以再看c语言之父的那本书或者C primer plus都可以。然后再用C语言做做小项目,比如贪吃蛇之类的小游戏然后再学数据结构和算法C++ / C# /java任选一个精通即可再学操作系统,计算机网络把上面的这些基础打牢就可以了
看看考研考什么应该会有一些帮助,很多时候提早阅读以后需要的东西会对当下起到指导作用,就像提早接触高考题型,会对高中的学习起到指导作用,计算机方面:数据结构,计算机组成,操作系统,计算机网络}

我要回帖

更多关于 计算机科学导论 课件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信