一.全局篇
在开篇我希望大家和我一起来思考一下几个问题:
问题1:你喜欢计算机么?如果你喜欢计算机能否把你为什么喜欢它的理由写出来?又或者你不喜欢计算机,也请你说出理由?
问题2:你眼中的计算机是什么?
问题3:你认为如何能够学好计算机?
答案1:也许你会问我你提这个问题有什么意义呢?简直就是浪费时间。但我要说的是,这是你学习计算机应当认识的最重要的一个问题,它比我下面提的任何一个问题都要重要,因为我觉得只有一个人对计算机产生了浓烈的兴趣,你才可能更好的学好计算机,你才会感到快乐,一个人如果对自己做的事情感觉不到快乐将会是一件很痛苦的事情,你会感觉到特别的累。下面我将要从自己的经历回答这个问题:我刚学习计算机的时候并没有感到浓烈的兴趣,但是一次偶然让我对它产生了很强烈的兴趣,那是我大一的时候,我对数学很感兴趣,我参加一次数学建模比赛,我使用了一个名叫mathmatics的软件,它的功能特别强大,很多复杂的的数学运算在它面前简直是小菜一碟,我学了一段时间之后,我知道它是使用c语言编写的,正好我们开了c语言的课程,虽然我们后来在数学建模比赛中并没有获得什么奖(不是因为我们做的不够好,一些原因我就不想说了),过后,我就迷上了c语言,我就开始使用c语言编写一些很难计算的数学运算,印象最深的是:我使用了牛顿二分法解决了一元高次方程的的计算。这是我很有成就感的一件事情,从此之后我对计算机的热爱便一发不可收拾,在我完整的学完《c和指针》后,我便产生了编写OS(操作系统)的冲动,我从开始学习《数据结构与算法分析》到唐硕飞的《计算机组成原理》同时参考了《深入理解计算机》到学习ARM9系列的Datasheet(芯片手册),完整的学习了杜春雷写的ARM体系结构与编程,然后看了“萝卜头”的ucos-II内核源码,还有参考了赵炯老师写的《LINUX内核完全剖析》,我花了大约两个多月的时间写出了属于自己的OS内核,它的功能很简单,实现多任务和连续内存的管理。从此我对编程的兴趣与日剧增,我开始了我的图形算法设计生涯,我报名参加了全国大学生课外学术科技竞赛“挑战杯”,带领团队花了半年多得时间完成了人脸检测和识别算法,我个人学习了《Learning OpenCV》这本书,这里我要强调的一点是,在进行图形算法设计的时候,需要你有很强的数学基础,主要涉及到的数学知识有:高等数学(处理工具),线性代数(一副图像可当做一个矩阵进行处理),概率论和统计(主要用于建立数学模型)。当然这些数学知识不仅仅需要你学好大学里的数学课程,因为很多的问题你要从计算机的角度去考虑,换句话说,就是需要你学会计算机的思维方式。最后要说的一点是,我在上面提到过的几本书都很经典,当然我看的书不仅仅局限于这里,在下面谈到具体的问题我会逐步的提到,我希望没看过的人可以看看,真的很经典。
答案2:计算机是个什么玩意儿呢?下面我将从两个方面为你解剖整个计算机。
第一个方面:我带领你从整个计算机的硬件组成部分剖析计算机,实质上,现代的计算机仅仅由三类总线和五种部件组成,我把它简称为“三线五部件”,这里不需要你明白具体的每个部件的作用,你只需要知道这几个部件,后面我会一个一个部件为你分析。请看图1-1
图1-1 计算机组成图
图注:图中的运算器和控制器在现代集成电路横行的时代,早已集成在CPU中了。在这里为便于大家和我自己的理解我把它从CPU中拿出来了,但实际上,其是包含在同一片CPU中的。
当然我的这个图不能够很形象的表示出现代计算机的机构,只是为了大家更加容易记住计算机的组成部件,简记“三线五部件”即:三线(地址总线、数据总线、控制总线),五部件(运算器、控制器、存储器、输入、输出)。
注:请注意上述部件与总线相连的箭头方向,不可随意更改方向。
下面我要给大家讲述计算机的“进化论”:
计算机在最初是由美国科学家冯.诺依曼发明的,我们经常称其为冯诺依曼机,其在发明之初的时候是以控制器为中心的,而由于一系列原因(到底是什么原因呢?我在后文会给大家提到,在这里请大家勤于思考)而演变成现代计算机以存储器为中心。
第二个方面:当然一台计算机光有硬件怎么能叫做计算机呢?只有硬件它就只能裸奔了,现在我要为计算机穿上衣服,不能让它裸奔。请看图1-2
图1-2 计算机层次结构图
注:这是计算机总体中的第一个层次结构,计算机的层次结构设计思想是一种非常重要的设计思想,我会在后文中逐个为大家剖析各种的层次结构。
在这里,我将计算机比作一个人,由人联系到计算机,计算机最底层是由数字逻辑电路组成的,再将各种数字逻辑电路构成各种各样的集成电路实现所需要的功能,将这些不同功能的集成电路组成为一台完整的机器,这台机器叫做裸机(此时只能够裸奔),我们可以将其看做是一个没穿衣服的人,此时其只能够呆在屋子里,不能出门,有伤风化,如果你特别激动可以尝试出门(估计要被扔臭鸡蛋),现在它若要出门,就要为它穿上衣服,为它穿的内衣叫做指令系统(这里只需要大家对整个机器的层次结构有个大概的了解,如果你有兴趣请看我后面的章节,我会为大家详细解析的),再加一件衬衫叫做操作系统,它的毛衣可以看做是汇编语言,外套是各种各样的高级语言,当然了全凭你个人的喜好,你只要有水平,你就可以换各种各样的衣服,你可以想象一下,将计算机的这种设计思想是不是很经典?你能想到么?大家一定要掌握这种设计思想,因为这种设计思想太牛X了!怎么牛了呢?就像你人一样生病了不好医,要是碰上绝症,只能俩腿一蹬,计算机裸机也一样,但是你穿的衣服就不一样了,只要你有钱,看上什么买什么穿都行,计算机也一样,只要技术够牛,想换什么语言就换什么语言,当然了就像你只有一块布,你要将它设计成一件漂亮的衣服是很不容易的,而这件漂亮的衣服就向我们使用的软件。
答案3:怎样学好计算机呢?在这里我要借助于伟大的哲学家的理论,我把它简称为“主义编程话”,也许有的同学会说我不信,且听我慢慢的道来,首先,最重要的是要借助的认识论:认识----实践---再认识----再实践。只有照这样你才能学到计算机的真谛,这是我这四年来的感悟,我的学习过程正是这样的一个过程,所以我学到的东西比身边的同学更深刻,当然了这是题外话,同时也比较抽象,我们现在从抽象到具体吧。具体来说对于一个想学好计算机的人来说你的过程应该是这样的:1.推荐阅读《编程高手箴言》作者:梁肇新。2.翻看《编程高手箴言》第一章,我觉得这本书第一章写得很经典,但是后面的章节实在是不咋滴,作者只是单纯的以Intel的芯片简介底层的编程,让读者往往都是一头雾水,追究其根本原因就是没有实践的过程,高手能明白,我们无法明白,但是我们要成为高手就得从这入手,怎么办呢?后来,我买了一块ARM9的开发板,从简单的驱动程序入手,编写完成各种驱动程序以后,才能明白计算机中各种硬件设备的工作原理,才能明白程序是怎么控制硬件的。3.如果你想往更底层的方向发展,推荐阅读《uCos-II》,加拿大“萝卜头”先生写的。当然前提在阅读这本书籍之前推荐首先学习数据结构和计算机组成原理和操作系统原理书籍,《uCos-II》很经典的学习操作系统的书籍,学完之后你可以自己尝试做一个小型的Kernel。4.如果你想往更上层的方向发展呢?学完这些你应当好好的学学软件工程,数据库等各种课程。
注:数据结构推荐《数据结构与算法》,作者:Mark Allen Weiss;计算机组成原理推荐《计算机组成原理》,作者:唐硕飞;操作系统推荐《操作系统设计与实现》,作者:安德鲁.坦尼鲍姆(Andrew S. Tanenbaum)
阿尔伯特.伍德豪尔(Albert S. Woodhull)
本章结束,下章待续……