计算机知识体系
本科专业背景偏文科,做了4年的记者,考研调剂选择了中国科学技术大学的软件学院,在校一年的时间的酸甜苦辣比我四年的本科路还要多,开始慢慢的思考问题了,计算机的课程各式各样学了不少,但是为什么要学这些,我总觉得该有一个完整的只是体系,因为这是一门学科。于是和许多的同学交流并不断从网上寻找答案,下面是引用了中国科学技术大学的一名大三的本科生的帖子,我觉得写的思路挺清晰的:归纳一下并添加我的思想,黑色是他的,蓝色是我的,
整个计算机科学就像人一样,有两条腿。一条叫做数学(基础),一条叫做物理(基础)。数学主要指的是数理逻辑。其中比较重要的是形式逻辑系统、Turing论题和Churcher论题。形式逻辑系统用逻辑的方法描述这个世界,在寥寥数条公理和推理规则之上构筑了整个逻辑系统、数论系统乃至计算机科学。Turing论题是计算机科学的基础,它点出了形式逻辑系统的威力:只要是人能计算的,机器都能用形式逻辑的规则进行计算。并且它提出了一种实现的方法,就是Turing机。Churcher论题指出了形式逻辑系统的不足:人能证明的,机器不一定能证明。更准确的说是,在形式逻辑系统中,不存在一种通用的算法,能判断所有命题的真假。这就是计算机科学的数学基础。而计算机技术的物理基础就是数字逻辑电路。这里不说模拟电路啊电磁学啊,因为感觉和“逻辑”联系不是很大。首先数字电路中给出了逻辑的电路实现,比如如何实现这样的电路——仅当两输入均为高电平时输出为高电平——即与门。然后数字电路给出了组合逻辑的设计方法。这直接使算术逻辑单元(ALU)的设计成为可能。最后,数字电路给出了时序逻辑的设计方法,典型的结果就是寄存器、计数器的出现,使得时序控制成为可能。
计算机——硬件:现代常用计算机的体系结构是由冯.诺依曼同学指定的,称为冯.诺依曼结构。这位同学把整个计算机拆成了5大块:运算器、控制器、存储器、输出设备和输出设备。计算机采用2进制。指令和数据以同等的地位存放在存储器里。课程:《计算机组成原理》、《操作系统》、《微机原理》、《cpu的设计和测试》、《计算机体系结构》 注:课程是按照学习的深浅依次罗列的
——软件:《数据结构》、《算法》、《软件工程》、《软件质量保证与测试》
——应用
从软件开发的任务出发,就可以很容易的领会到软件科学的体系架构了。首先,我们需要有一种高级语言来与电脑进行符合人类思维的交流。在它的基础上,就可以实现数据结构,从而为算法的实现打好基础。数据结构之上自然是算法。再往上是一些架构性的程序设计思想和规范,比如面向对象的思想、软件工程的思想等等。软件科学到此似乎就比较完善了。但是不要忘了高级语言下面还有支撑它的基础:编译器和操作系统。这两门课:编译原理和操作系统就成为了沟通软件和硬件之间的桥梁。至于计算机应用,涉及到的领域就太多了。举例来说,人工智能、数字信号处理、计算机网络、操作系统等等等等。这里将操作系统也列为计算机的应用,是因为它的实现也用到了很多计算机科学的知识,比如算法、图论等等,也是需要下层知识的支撑的。每一门领域中,又各自有它自己的数学作为基础:比如人工智能需要形式逻辑,数字信号处理需要信息论、积分变换和采样理论,计算机网络对概率论的应用较多等等。因此,计算机应用可以分为两层,下层是数学,上层则是各个具体的学科。
在整个体系中,数学贯穿了始终。可以说,数学是计算机科学技术的灵魂,扎实的数学基础对于这个专业的学生来说是相当大的优势。
而于我而言,我没有任何这方面的知识,跟着科大的课程慢慢摸索,一方面详细了解计算机知识,以《深入理解计算机系统》作为入门课,深入研究linux的操作系统,期间理解语言的机制,不只是语法,真正明白整个语言在计算机内部的调度和编写。另一方面开始补充硬件的知识,硬件入门是《EDA》技术,其实起点比较高,但逼着自己去补充数字电路的知识。
计算机是一门学科,而不是大多数人认为的只是coding,也感谢科大让我少走了3年的弯路,在学习阶段有了明确的方向。