关于计算机理论课程学习的一些介绍(原创)
转眼大学毕业也快三年了,自己的身份也由学生变成了老师,期间也了解了一些学弟学妹们关 于计算机理论课程学习的困惑,在这里我想对计算机系的理论课程进行一些介绍,希望能让大家对计算机的课程学习有个总体的认识和把握,当然,由于水平和时间 的原因,难免挂一漏万,仅供大家参考和交流。
个人以为无论学什么,都需要成体系,像著名的“三论”:信息论,系统论,控制论,都是要求人们从宏观的角度来看待问题。当然,开始的时候可能会只见树木, 不见森林,但是当你毕业的时候,应该能够从系统的层面上把握计算机,因为你们的专业名称写的是“计算机科学与技术”,是要靠这个吃饭的。其实有些东西应该 在大一的“计算机导论”里就有涉及,但那时候可能没有具体的感受,所以无法深刻体会。
计算机系的培养目标,应该是满足某种社会需要,具体的说就是科学和工程的需要,我们培养的学生应该能在这两方面有所作为。所以大家开设的课程里面就有必修课、限选课和选修课之分。
我在这里也想整理出一条主线出来,希望尽可能从宏观的角度展现计算机作用一门科学与技术的学科体系,当然,划分的名称用的不一定非常准确,但基本上表达了这样一种意思。
计算机基础->计算机硬件体系->计算机软件系统级->计算机软件平台级->计算机软件应用级->计算机交互式设计级->毕业设计。[/b:237ac6c1f1]
计算机基础:[/color:237ac6c1f1]是导致计算机科学诞生的一些基础课程,主要包括数学和英语。数 学是一切学科的基础,而国内的计算机系一般都是从数学系分出来的,课程包括数学分析,线形代数,概率论,离散数学,数值分析等。如果你以后想考研的话,数 学是一定要学好的。而离散数学更是计算机的基础,只要想一下计算机只能识别“0”和“1”,你就知道离散而不是连续对于计算机的重要性了。而英语作为计算 机的母语,其重要性不言而喻,而国外特别是美国在计算机方面的确领先颇多,这也是为什么经典的教材和书籍一般都是国外原版或翻译的;也同样是英语一定的原 因,成就了印度在软件开发方面的异军突起,如果你能够阅读英文的资料或是书本,那你的英语学习就达到一定目标了。
计算机硬件系统:[/color:237ac6c1f1]指具体的计算机物理层面上的硬件设备,课程包括数字电路, 模拟电路,计算机原理,计算机系统结构,单片机,微机控制等。这一层次的学习主要是要大家对计算机硬件有所了解,知道计算机在物理层面上是怎样工作的,当 然由于不是电子和自动化系,所以对硬件的要求不会太高,不过对硬件的了解有助大家进入联想,宏基,富士康等计算机生产厂商,起码给你一堆配件,你要能够 DIY成一台计算机。
计算机软件系统级:[/color:237ac6c1f1]这是在计算机上面包装的第一层软件,具体来说就是操作系 统,设计的课程有操作系统和汇编语言。操作系统是一门重要的基础课,现在常用的操作系统包括Windows、Unix、Linux系列,学习操作系统,可 以让你对怎样管理计算机有一个具体的认识,包括CPU管理,内存管理,外设管理,文件管理,系统接口,网络管理,安全管理等,而不是仅仅简单的知道系统的 操作,要达到知其然而且要知其所以然的目的。我正在上通信工程的操作系统,所以这里多说两句。这门课程也是很多研究生考试和公司面试的课程之一,现在数学 系都开了操作系统,可见其专业基础课程的重要性,而且如果你想编出高水平的程序,不了解进程,线程,进程间通信(IPC)这样一些概念是不太可能的。汇编 是在机器语言的基础上加了一层助记符,在早期的计算机中没有汇编和高级语言,人们只能用打孔带来识别程序,痛苦可想而知,有了ADD,SUB这样的助记符 之后,人们的工作轻松了许多,虽然操作起来还是类机器的动作,但这有利于理解“机器的思维”。
计算机软件平台级:[/color:237ac6c1f1]在操作系统之上的一层平台级的软件,之所以叫平台级,是 因为他们可以作为某种平台为其上的应用层提供更多的功能,课程包括编译原理,数据库原理,软件工程等。其中编译原理应该是一门最麻烦的课,也是计算机系为 数不多的区别于非专业的课程,编译其实也就是一种翻译,主要负责把人类的高级语言翻译成机器能读懂的机器语言或是汇编语言。如果给你一段高级语言,你能够 把它用机器或是汇编语言来理解,这门课程的目的就达到了,这也能让你知道自己写的程序是否有效和高效,因为你知道编译器能够接受什么,理解什么;常用的编 译器及集成开发环境有Windows下Microsoft的Visual、.NET系列, Borland的DELPHI系列,Linux下的gcc,图形库GTK+,QT及Kylix等。数据库原理主要涉及到关系数据库如SQL的操作规则和范 式的划分,通过学习数据库会对信息的存储和查询有一种全新的规范化的认识;常用的数据库平台软件有ORACLE、SQL SERVER、MY SQL等。之所以把软件工程放在这里,主要是考虑到计算机辅助软件工程CASE已经越来越成为人们开发过程中一个必不可少的工具,除了传统的七种生命周期 的方法,越来越多的软件工程思想(CMM、XP、极限编程等)被应用,而UML也为Rational系列这样的软件工程平台工具的出现奠定了基础。
计算机软件应用级:[/color:237ac6c1f1]主要指在计算机系统软件的支撑下进行的应用软件的开发, 涉及的课程包括高级程序设计语言,数据结构,算法设计,面向对象设计,计算机图形学等。高级语言设计主要是把你自己的想法写出来,告诉计算机你想做什么, 当然是用英语,现在也有人想做汉语编程的开发环境,其实也是为了方便大家的表达而已。每一门语言(汉语、英语、法语等)都有自己的字母、单词、语法和语 句、段落、文章,计算机高级语言也一样,我们系的传统是Pascal,这是一门比较适合教学的讲究结构化和规范化的强类型的语言。当然,你需要自学C语言 等其他高级语言。然后是数据结构,一位图灵奖的获得者给出了这样一个公式:程序=数据结构+算法。由此可见这两门专业课的重要性,他们跟编译原理一样,是 计算机系在程序设计方面区别与其他院系的课程。数据结构主要是指数据抽象及其之间的关系,而算法则是用最好的方法去操作这些数据抽象。虽然现在有很多人说 编程根本不用考虑数据结构跟算法,只要实现就行了,但是在实现的时候就已经不知不觉的应用了数据结构和算法,而且涉及到复杂问题的时候,专业功底的深厚就 显得尤为重要,这也是考研和大公司招聘的时候要考察的主要科目。最著名的算法书应该是Donald E.Knuth的《计算机程序设计艺术》,现在面试的有三卷,比尔盖茨曾经说过:如果你看懂了这三本书,请发简历给他(机会总是有的,微软的门永远是向你 们开着的;去年我虽上过通信的算法,但也没有时间拜读)。面向对象是80年代兴起的一门技术,跟传统的结构化程序设计不同,它强调封装,继承,多态,流行 的面向对象的语言有Java,C#, C++等,当然光学理论是不够的,可以掌握一门开发工具,像JBuilder,C#,VC等。
计算机交互式设计级:[/color:237ac6c1f1]可以让我们的机器像人一样思考和交流,课程包括计算机 网络,人工智能,多媒体技术,人机交互技术等。通过上述的课程,我们的PC已经能很好的在桌面工作了,不过如果不能和其他的机器交流的话将是一件很痛苦的 事情,就像你天天呆在房子里不出门也不准打电话一样,会比较郁闷;于是跟交通网、电话网类似的计算机网络应运而生。如果说98年用Netscape上网还 是新鲜事的话,现在网络已无所不在的影响了我们的生活;所以,你要学会让你的机器懂得交流。如果你对信息的发送和接收有所认识的话,这门课程的目的就达到 了。多媒体技术包括了图形,图像的操作和音频,视频的压缩等,目的是让计算机能更快更好更方便的进行人机交互。研究表明人类接受信息的程度从高到低依次是 图形,表格,文字,从中就可见多媒体越来越受重视的原因。让计算机像人一样思考一直是人们的夙愿,人工智能,神经网络,遗传算法,都是可以好好了解的。
毕业设计:[/color:237ac6c1f1]如果上面还有什么没有涉及的话,那剩下的就是毕业设计的任务了。 一般来说,工科的毕业设计(论文)着重于具体的设计或者是理论性的论文。对计算机系来说,一方面是要求你们把几年学习过的课程融会贯通即综合应用知识的能 力,另一方面是要求你们有一定的创新精神,也就是有一定的前沿性和探索性,如果毕业设计的内容还是几年前甚至十几年前的东西,相信在概念上面就已经落伍 了。所以如果想真正通过毕业设计学到东西,要么就是很扎实的应用,要么就是很新的思想和知识。
计算机理论课程的学习历程大概就是这样,如果有时间下次再跟大家交流实践课程的学习。“十年树木,百年树人”,通过四年的学习,要求大家在同一根结实的树 干(必修课)上,不同的枝条(选修课)结满同样丰硕的果实(你们),大抵就是我们的目标吧。当然,这里只是列出了一些最基本的概念和思想,计算机本身博大 精深,每一门课程都值得你好好的钻研,就像踢球一样,没有大局感是不行的,但是只有大局感却没有细腻的技术也是不行的。总之,“千里之行,始于足下”,有 了总体的概念,加上耐心而勤奋的钻研,相信每个人都能找到学习的乐趣和动力。
其实,本科的学习主要还是提供给大家一个继续发展的基础,如果在毕业的时候,你能够拥有相应的成熟完善的人格,很好的解决问题的能力,也即“会做人,会办 事”,那四年的功夫就没有白费。很多人毕业后可能没有从事本专业,但是这个基础会让你终身受益,这也是提倡学历学习和终身学习的初衷吧。
转眼大学毕业也快三年了,自己的身份也由学生变成了老师,期间也了解了一些学弟学妹们关 于计算机理论课程学习的困惑,在这里我想对计算机系的理论课程进行一些介绍,希望能让大家对计算机的课程学习有个总体的认识和把握,当然,由于水平和时间 的原因,难免挂一漏万,仅供大家参考和交流。
个人以为无论学什么,都需要成体系,像著名的“三论”:信息论,系统论,控制论,都是要求人们从宏观的角度来看待问题。当然,开始的时候可能会只见树木, 不见森林,但是当你毕业的时候,应该能够从系统的层面上把握计算机,因为你们的专业名称写的是“计算机科学与技术”,是要靠这个吃饭的。其实有些东西应该 在大一的“计算机导论”里就有涉及,但那时候可能没有具体的感受,所以无法深刻体会。
计算机系的培养目标,应该是满足某种社会需要,具体的说就是科学和工程的需要,我们培养的学生应该能在这两方面有所作为。所以大家开设的课程里面就有必修课、限选课和选修课之分。
我在这里也想整理出一条主线出来,希望尽可能从宏观的角度展现计算机作用一门科学与技术的学科体系,当然,划分的名称用的不一定非常准确,但基本上表达了这样一种意思。
计算机基础->计算机硬件体系->计算机软件系统级->计算机软件平台级->计算机软件应用级->计算机交互式设计级->毕业设计。[/b:237ac6c1f1]
计算机基础:[/color:237ac6c1f1]是导致计算机科学诞生的一些基础课程,主要包括数学和英语。数 学是一切学科的基础,而国内的计算机系一般都是从数学系分出来的,课程包括数学分析,线形代数,概率论,离散数学,数值分析等。如果你以后想考研的话,数 学是一定要学好的。而离散数学更是计算机的基础,只要想一下计算机只能识别“0”和“1”,你就知道离散而不是连续对于计算机的重要性了。而英语作为计算 机的母语,其重要性不言而喻,而国外特别是美国在计算机方面的确领先颇多,这也是为什么经典的教材和书籍一般都是国外原版或翻译的;也同样是英语一定的原 因,成就了印度在软件开发方面的异军突起,如果你能够阅读英文的资料或是书本,那你的英语学习就达到一定目标了。
计算机硬件系统:[/color:237ac6c1f1]指具体的计算机物理层面上的硬件设备,课程包括数字电路, 模拟电路,计算机原理,计算机系统结构,单片机,微机控制等。这一层次的学习主要是要大家对计算机硬件有所了解,知道计算机在物理层面上是怎样工作的,当 然由于不是电子和自动化系,所以对硬件的要求不会太高,不过对硬件的了解有助大家进入联想,宏基,富士康等计算机生产厂商,起码给你一堆配件,你要能够 DIY成一台计算机。
计算机软件系统级:[/color:237ac6c1f1]这是在计算机上面包装的第一层软件,具体来说就是操作系 统,设计的课程有操作系统和汇编语言。操作系统是一门重要的基础课,现在常用的操作系统包括Windows、Unix、Linux系列,学习操作系统,可 以让你对怎样管理计算机有一个具体的认识,包括CPU管理,内存管理,外设管理,文件管理,系统接口,网络管理,安全管理等,而不是仅仅简单的知道系统的 操作,要达到知其然而且要知其所以然的目的。我正在上通信工程的操作系统,所以这里多说两句。这门课程也是很多研究生考试和公司面试的课程之一,现在数学 系都开了操作系统,可见其专业基础课程的重要性,而且如果你想编出高水平的程序,不了解进程,线程,进程间通信(IPC)这样一些概念是不太可能的。汇编 是在机器语言的基础上加了一层助记符,在早期的计算机中没有汇编和高级语言,人们只能用打孔带来识别程序,痛苦可想而知,有了ADD,SUB这样的助记符 之后,人们的工作轻松了许多,虽然操作起来还是类机器的动作,但这有利于理解“机器的思维”。
计算机软件平台级:[/color:237ac6c1f1]在操作系统之上的一层平台级的软件,之所以叫平台级,是 因为他们可以作为某种平台为其上的应用层提供更多的功能,课程包括编译原理,数据库原理,软件工程等。其中编译原理应该是一门最麻烦的课,也是计算机系为 数不多的区别于非专业的课程,编译其实也就是一种翻译,主要负责把人类的高级语言翻译成机器能读懂的机器语言或是汇编语言。如果给你一段高级语言,你能够 把它用机器或是汇编语言来理解,这门课程的目的就达到了,这也能让你知道自己写的程序是否有效和高效,因为你知道编译器能够接受什么,理解什么;常用的编 译器及集成开发环境有Windows下Microsoft的Visual、.NET系列, Borland的DELPHI系列,Linux下的gcc,图形库GTK+,QT及Kylix等。数据库原理主要涉及到关系数据库如SQL的操作规则和范 式的划分,通过学习数据库会对信息的存储和查询有一种全新的规范化的认识;常用的数据库平台软件有ORACLE、SQL SERVER、MY SQL等。之所以把软件工程放在这里,主要是考虑到计算机辅助软件工程CASE已经越来越成为人们开发过程中一个必不可少的工具,除了传统的七种生命周期 的方法,越来越多的软件工程思想(CMM、XP、极限编程等)被应用,而UML也为Rational系列这样的软件工程平台工具的出现奠定了基础。
计算机软件应用级:[/color:237ac6c1f1]主要指在计算机系统软件的支撑下进行的应用软件的开发, 涉及的课程包括高级程序设计语言,数据结构,算法设计,面向对象设计,计算机图形学等。高级语言设计主要是把你自己的想法写出来,告诉计算机你想做什么, 当然是用英语,现在也有人想做汉语编程的开发环境,其实也是为了方便大家的表达而已。每一门语言(汉语、英语、法语等)都有自己的字母、单词、语法和语 句、段落、文章,计算机高级语言也一样,我们系的传统是Pascal,这是一门比较适合教学的讲究结构化和规范化的强类型的语言。当然,你需要自学C语言 等其他高级语言。然后是数据结构,一位图灵奖的获得者给出了这样一个公式:程序=数据结构+算法。由此可见这两门专业课的重要性,他们跟编译原理一样,是 计算机系在程序设计方面区别与其他院系的课程。数据结构主要是指数据抽象及其之间的关系,而算法则是用最好的方法去操作这些数据抽象。虽然现在有很多人说 编程根本不用考虑数据结构跟算法,只要实现就行了,但是在实现的时候就已经不知不觉的应用了数据结构和算法,而且涉及到复杂问题的时候,专业功底的深厚就 显得尤为重要,这也是考研和大公司招聘的时候要考察的主要科目。最著名的算法书应该是Donald E.Knuth的《计算机程序设计艺术》,现在面试的有三卷,比尔盖茨曾经说过:如果你看懂了这三本书,请发简历给他(机会总是有的,微软的门永远是向你 们开着的;去年我虽上过通信的算法,但也没有时间拜读)。面向对象是80年代兴起的一门技术,跟传统的结构化程序设计不同,它强调封装,继承,多态,流行 的面向对象的语言有Java,C#, C++等,当然光学理论是不够的,可以掌握一门开发工具,像JBuilder,C#,VC等。
计算机交互式设计级:[/color:237ac6c1f1]可以让我们的机器像人一样思考和交流,课程包括计算机 网络,人工智能,多媒体技术,人机交互技术等。通过上述的课程,我们的PC已经能很好的在桌面工作了,不过如果不能和其他的机器交流的话将是一件很痛苦的 事情,就像你天天呆在房子里不出门也不准打电话一样,会比较郁闷;于是跟交通网、电话网类似的计算机网络应运而生。如果说98年用Netscape上网还 是新鲜事的话,现在网络已无所不在的影响了我们的生活;所以,你要学会让你的机器懂得交流。如果你对信息的发送和接收有所认识的话,这门课程的目的就达到 了。多媒体技术包括了图形,图像的操作和音频,视频的压缩等,目的是让计算机能更快更好更方便的进行人机交互。研究表明人类接受信息的程度从高到低依次是 图形,表格,文字,从中就可见多媒体越来越受重视的原因。让计算机像人一样思考一直是人们的夙愿,人工智能,神经网络,遗传算法,都是可以好好了解的。
毕业设计:[/color:237ac6c1f1]如果上面还有什么没有涉及的话,那剩下的就是毕业设计的任务了。 一般来说,工科的毕业设计(论文)着重于具体的设计或者是理论性的论文。对计算机系来说,一方面是要求你们把几年学习过的课程融会贯通即综合应用知识的能 力,另一方面是要求你们有一定的创新精神,也就是有一定的前沿性和探索性,如果毕业设计的内容还是几年前甚至十几年前的东西,相信在概念上面就已经落伍 了。所以如果想真正通过毕业设计学到东西,要么就是很扎实的应用,要么就是很新的思想和知识。
计算机理论课程的学习历程大概就是这样,如果有时间下次再跟大家交流实践课程的学习。“十年树木,百年树人”,通过四年的学习,要求大家在同一根结实的树 干(必修课)上,不同的枝条(选修课)结满同样丰硕的果实(你们),大抵就是我们的目标吧。当然,这里只是列出了一些最基本的概念和思想,计算机本身博大 精深,每一门课程都值得你好好的钻研,就像踢球一样,没有大局感是不行的,但是只有大局感却没有细腻的技术也是不行的。总之,“千里之行,始于足下”,有 了总体的概念,加上耐心而勤奋的钻研,相信每个人都能找到学习的乐趣和动力。
其实,本科的学习主要还是提供给大家一个继续发展的基础,如果在毕业的时候,你能够拥有相应的成熟完善的人格,很好的解决问题的能力,也即“会做人,会办 事”,那四年的功夫就没有白费。很多人毕业后可能没有从事本专业,但是这个基础会让你终身受益,这也是提倡学历学习和终身学习的初衷吧。