谈谈对计算机专业的层次化理解: 计算机专业如何入门(问题 引导 学习思路)

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

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

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

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

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

   


       知道了这些,相信你可以计算机入门了。 我们不仅获取了一些零散的知识,也从全局把握了计算机专业的整个框架体系。 对于任何一个相关知识,我们不会再觉得那么抽象,不可理解了。   其实学习知识的过程,就是一个从抽象到具体,从高层到底层,从普适基础再到应用领域。 只要建立一个类似于上图的一个知识层次体系,以后想继续深挖哪个层次,就直接去找相关的书籍或者资料,继续研读就行了。 

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

     PS: 对于深入理解计算机系统,这本书。 我建议初学者先别直接学习它。 可以先将 C语言程序设计,汇编语言,计算机组成原理大概了解了,再去看这本书,感触会更深。

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值