谈谈我对计算机专业的理解: 计算机专业入门(问题 引导 学习思路)

转载请注明出处: http://blog.csdn.net/j123kaishichufa/article/details/47400175

这段时间,一直在看《深入理解计算机系统》。渐渐发现爱不释手,欲罢不能。有种相见恨晚的感觉。这使得自己回首自己本科时候,为什么总觉得入不了计算机的门?这本书也促使自己思考一下 计算机专业到底学什么,为什么要学这些?有什么联系?

本人2007年入学本科,专业计算机,当时就读于一所211学校。 可能有些人在本科或者研究生期间已经接触到了这本书,那恭喜你,有本好书指引你了解计算机,了解计算机专业。很尴尬,我是今年才接触到这本书,自己太弱了。回首本科时候所学的一些计算机课程,恍然觉得那些年虚度光阴,4年的本科时光,一直不知道为什么学校安排这些课程;本科都毕业了,也还是对于本专业没入门。      如果当时能有人指引推荐一些好书,或者有老师能够简单介绍计算机专业,那该多好。
  也许也是我自身原因,一直都是所谓的好学生,却不知道如何去寻觅经典有价值的书籍。

这篇博客不是技术博客。写的目的是, 希望那些当年和我一样迷茫,入不了门的计算机专业本科生,能够对自己所学专业一层一层有个系统的认识。(因为我觉得自己当时入不了门,就是因为缺乏系统的认识)只有你系统的了解了, 你才能体会到学校安排的专业课程的有用之处,才能将一些抽象难懂的计算机知识与实际联系起来,才会真正理解,真正将书本上的知识转换为自己的知识。
 而这些基本的知识,正是以后继续搞计算机专业的根基。没有根基,何谈你是计算机专业的?

------------------------------------------------------------------------------------------------------------------------

以我们学校举例吧。 计算机专业的学生, (课程大概包含这些,不过也有其他的)大一课程是 高数,线性代数,物理,英语, C语言程序设计等。    大二课程 数据结构, 微机原理,C++程序设计,数字电路,模拟电路。 大三,汇编语言,计算机组成原理,计算机系统结构,编译原理, JAVA。 大四, 计算机网络,操作系统,图形学,模式识别等等。    这些课程安排都有一定的道理,之所以称学校称这些课程为必需专业课,基础课,都是有原因的。
 有经验的人,或者已经毕业的人就可以看出来, 从大一到大四,课程学习是有规律的: 从计算机专业的角度来看,是从抽象层次到具体层次;从简单高层到复杂底层; 从普适层次到领域层次(如下图)。

这样安排的计算机课程(知识)体系,很有助于本科生简单的入门:

Step1:
学习C语言程序设计时,一个简单的程序就可以得出我们想要的结果,很神奇吧。 “第一次”接触计算机,就可以编程出一个程序,对于大一学生来说,不可思议。只是简单的知道计算机就是用来执行一些些程序的。那么程序是什么?

程序 =  数据  +  算法。 在初级阶段,所用到的算法只不过是数学上的基本运算,数据可以是数学意义上的整数,但除此之外,还有抽象意义上的抽象数据类型。如何组织数据,使得我们的C程序写的更加高大上,使得程序能够执行更加复杂的任务? 那么数据结构课程就来了。

Step2:  学习了C语言程序设计和数据结构,我们已经开始学会编程了。  可是我们仍然一头雾水,为什么计算机能够优雅的运行我们的程序? 我们只是在抽象层次上会写程序,但是根本想不清楚物理层面上,也就是实际上的一台计算机机器如何做到这些?那么我们可以想一想,一个C语言程序在让计算机运行之前做了什么?

对于一个C源程序,得先编译为汇编语言,然后通过汇编器转换为机器语言。机器语言是由0、1二进制代码组成的,而计算机是一条电子机器,它只能识别0 1代码,因此需要将C语言进行编译,汇编,转换成机器语言,计算机才可以识别并执行这个。         从C语言到机器语言(0 1 代码组成),这个过程到底是什么,那么汇编语言 + 编译原理(编译器)会告诉你。

到了这一步,我们是不是觉得对一个C程序,再也不觉得很抽象,很飘渺了, 好像稍微了具体了点吧。

    Step3: 问题又来了。 计算机识别 0 1 代码,也就是机器语言 ,那计算机如何运行这行0 1 代码,他怎么知道0 1 代码的意义, 怎么去执行想要的运算。 这涉及到计算机物理硬件的设计,也涉及到处理器指令系统了。 计算机物理硬件方面,计算机的核心芯片上面有很多电路,这些硬件方面的知识,数字电路和模拟电路这两门知识会告诉你。
 等了解了这些,你就会知道所有的运算,数据传输都是通过硬件实打实做的。     可是计算机硬件很复杂,有真么多电路,还有存储数据的东西,好零碎啊。 那么别担心,计算机组成原理,计算机体系结构会把这些零碎的东西整合起来,告诉你一个整体的逻辑,会告诉你,计算机如何存取一条01 组成的机器指令或者数据,识别出指令的功能,并将将它传输到计算机的计算处理单元,进行计算,并将结果输出。

     Step4: 有了这些知识,我们大概可以具体想象的到:一个C语言程序到最终运行得出我们想要的结果,这中间经历了哪些过程和坎坷。 对于抽象的一个程序,我们可以具体的理解它了,不是吗?

现在我们可以随心所用的写我们的程序了。
可是我们的程序是直接使用硬件的吗。 如果直接使用计算机硬件资源,如果我们写错程序了,机器不就坏了吗。 别担心,有操作系统在。   我们写的程序(用户程序)并不是直接去使用机器的硬件资源,那样的话,他不安全了吧,也太麻烦了吧。 操作系统位于硬件和我们的程序之间,它复杂直接去管理硬件资源。我们的程序通过操作系统,去使用硬件资源(比如存储资源等)。当然操作系统还有其他的功能, 总体来说,有了操作系统,我们写程序更加方便了,不需要在程序中指定到底用哪一个存储单元,也就是写程序一般可以不用顾忌我的计算机硬件长啥样了(当然除了嵌入式程序等),而且硬件机器也更加安全了,不会直接受到我们程序的扰乱。

    Step5:  差不多了。 基础知识,也就是普适的知识就这些了。 对于数据库,网络,图形学,都是借用计算机实现一些专用,大型的的功能,涉及到具体领域了。

对于这些,可以先大概了解一点。 等具体从事那个方向,再仔细研究就可以了。

知道了这些,相信你可以计算机入门了。 我们不仅获取了一些零散的知识,也从全局把握了计算机专业的整个框架体系。 对于任何一个相关知识,我们不会再觉得那么抽象,不可理解了。   其实学习知识的过程,就是一个从抽象到具体,从高层到底层,从普适基础再到领域知识。

加油吧,希望这篇博客能够给那些刚刚接触计算机的学生有所帮助。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-29 13:05:00

谈谈我对计算机专业的理解: 计算机专业入门(问题 引导 学习思路)的相关文章

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

理解计算机的工作方式——通过汇编一个简单的C程序并分析汇编代码

Author: 翁超平 Notice:原创作品转载请注明出处 See also:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  本文通过汇编一个简单的C程序,并分析汇编代码,来理解计算机是如何工作的.整个过程都在实验楼上完成,感兴趣的读者可以通过上面给出的课程链接自行动手学习.以下是实验过程和结果. 一.操作步骤 1.首先在通过vim程序建立main.c文件.代码如下: 图1 2.使用如下命令将main.c编

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

Linux内核设计(第一周)--从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 从2月22日起,本学期的linux课程开始了.通过这两天的学习,觉得孟宁老师讲的真不错,条理清晰,举例适当.本周从计算机工作原理出发,回顾了冯诺依曼计算机结构,也回顾了汇编寄存器.汇编指令.C语言程序的汇编分析技巧,很

深入理解计算机操作系统--读书笔记-第八章异常

该文章是我对深入理解计算机操作系统这本书的读书笔记 异常概念:异常就是控制流的突变,用来响应处理器状态中的某些变化,当处理器状态发生变化时,处理器正在执行某个当前指令,在处理器中状态编码为不同的位和信号,状态变化称之为事件,事件可能与当前指令有关如缺页,算术溢出,也可能无关定时器产生信号或者io请求 异常处理完成的三种情况 1)处理程序将控制返回给当前指令 2)处理程序将控制返回给下一条指令 3)处理程序终止被中断的程序 异常处理和过程调用的区别: 1)过程调用时,在跳转处理程序之前,处理器将返

一个简单的内存分配器-《深入理解计算机操作系统》

我相信很多人都知道<深入理解计算机操作系统>这本书,并且很多人都会对它研读.实际本人刚开始看的时候,只是加深了对操作系统的理解,别的到是没有感觉的到, 但是在看到公司的软件框架里面对于内存堆的管理,才发现和书上讲的异曲同工.于是乎,自己对利用隐式的空闲链表实现分配器做了总结,并且和自己想到的架构做了对比分析. 我们知道一个实际的分配器,不仅要考虑好吞吐率和内存利用率之间的平衡,还要考虑: ①空闲块组织:我们如何记录空闲块(一般刚开始会把一整段堆当做空闲块,然后再分割) ②放置:我们如何选择一个

对计算机的别样理解

想再理解一下计算机,思考一下计算机中,变化的与不变的是什么.然后与各位看官分享下自己的看法. 硬件上,一台计算机在生产出来后是不再变化的了,它的所有电路结构都已经固定.这是不变的. 那变化的是什么?肯定会有存储器中的数据.再想好像没啥能变的了.但是一堆电路中只有数据,或者状态在变,会有现在功能强大的电脑吗? emmmmm或许有可能.这里好像一想,确实,数据不能说是数据,而得是状态.每一个可以变化的最小单元都有两种状态,那所有最小单元状态的组合是固定的,也就能推出我们的计算机在某一瞬间的状态就是这

关于计算机位数的理解,32位,64位。。。

众所周知,32位计算机最大内存支持是4G,这个4G是怎么来的呢?4G内存表示最大存储数据为4G的数据么? 隐约记得学计算原理时候把这个概念搞清楚过,可是现在回想起来又有些模糊.首先,32位计算机指的是计算机内存寻址总线是32根,这跟总线主板总线根数应该是对应的.通过二进制算法,我们得到了32位计算机内存寻址范围是0~2^32-1, 也就是0~4294967295.这个并不是存的数据量,我们可以看成是一共有这么多个寄存器.通场情况下,一个寄存器是16位的,也就是一个寄存器能存一个0~2^16-1的

谈谈我对JS原型的理解

昨天阿里实习的第一次电面,也是我人生中的第一次电面,问了很多问题.结果还行吧,算是进入了下一轮.虽然不知道姓名,但还是要感谢面我的那个前辈.好吧,言归正传,为什么要写这篇关于原型的博文呢?因为电面时被问到了.当时有点紧张,感觉回答的很不理想,也许是自己还没有牢固的掌握吧!所以今天就写一写我对原型的理解,顺便理一下自己的思路. 首先,JS没有类继承机制,它是靠原型机制实现继承的,两种方式孰优孰劣,在此不做评判(知识量不足╮(╯▽╰)╭) 先上代码解释这一机制: var people = { nam