计算机学科是一个复杂的知识领域,从不同角度理解,可以有不同的含义。从多个视角观察和描述事物是计算机学科的一个基本方法,这种方法既是学生应该具备的能力,也是学生应当养成的习惯。
为了给后面的学习奠定基础,这里从一个假设开始:假设通过4年的大学学习,你成为一名顶级的程序员(或者是首席IT科学家、CTO、系统架构师等),你刚刚完成一款功能非常强大的软件,现在你要把这个软件的设计思路通过文字表达出来,与他人分享和交流,你会怎么做呢?
有一种方法,可以给每行代码都加上注释,把代码中所蕴含的思路阐述清楚,像Linux一样。但是在代码级看问题,很容易迷失在代码中,往往不知道这个软件是做什么的,也不知道这个软件各个部分之间的关联和关系。
还有一种方法,就是把软件看作各个模块组成的整体,先把模块之间的关系表述清楚,然后再去描述单个模块内部的逻辑,这是分而治之的办法。但是通过这种方法也无法说明做这个程序的目的是什么、用户怎么使用、怎么安装。
当然,如果一个人有非常好的写作天赋,他可以综合以上各种问题,有条理地娓娓道来,让阅读的人潜移默化地了解他要表达的思想。但是这种“天才”往往当了作家,而不是程序员,而且即使是“天才”作家,也要有灵感才能写出美妙的文字。从事计算机相关工作的人大多数具有理工科学习背景,也必须快速、准确地把自己要表达的东西说清楚。
因此,计算机软件行业的先驱们索性就把所有表达方法都综合起来,把软件从逻辑、实现、过程、部署、需求5个视角分别表达一遍。把所有信息通过各种视角汇集在一起,人们可以只了解自己感兴趣的信息,也可以通过视角转换对事物有一个全面的认识。这就是已成为行业标准的统一建模语言(UML)以及与其密切相关的统一软件开发过程(RUP)的基本思想之一,提出UML和RUP的Booch、Jacobson和Rumbaugh都被奉为了先哲。图1-1所示是经典的描述软件体系结构的4+1视图。
图1-1 UML体系结构4+1视图
要描述在计算机相关行业的其他比较复杂的问题,可以从各个视角分别描述问题,并在每个视角下把问题描述清楚。需要了解一项技术的时候,也要学会从各个视角都看一看,如果一个视角无法理解,就换另一个视角看。因为计算机系统的硬件和软件非常复杂,无法仅从一个视角就表达清楚,只有自己在大脑中综合从各种视角获取的知识,形成自己的理解,才能在这个行业中迅速地取得进步。例如对于本章关注的计算机硬件,读者就可以从功能、外表、原理、物理电路、性能度量等各个视角来学习和观察,进而形成自己的理解。
下面从两个视角介绍计算机。
刚刚进入大学的学生,第一次在课本上接触“系统”的概念可能是在生物课上,而计算机科学上“系统”的概念与生物上的“系统”概念非常相似。通常由相互作用和相互依赖的若干组成部分结合而成的、具有特定功能的有机整体称为“系统”,例如,本章后面介绍的冯·诺依曼计算机系统就是由处理器、控制器、输入/输出设备和存储器相互连接、用来处理信息的一个有机整体。
计算机科学的研究和软硬件的开发最基本的思想是抽象。计算机是一种机器,但它与其他各类机器的最大不同在于其他机器处理的都是实实在在的物质,如织布机把输入的丝线处理成布匹输出。计算机接收的是信息,处理之后输出的还是信息。信息是看不见摸不着的,计算机既然要处理信息,就要对信息进行抽象,把信息抽象成现阶段计算机能够处理的电压高低变化的电流,也就是计算机领域常说的0和1信号。
这里可以假想,如果可以找到另一种处理逻辑运算的部件以及信息介质,而不是现在计算机里面使用的三极管和电流,那么仍然可以按照原来的计算机科学的研究成果,制造出一种全新的“计算机”,而原来写好的程序仍能继续运行,原来的计算机理论也没有被颠覆。就是说,无论计算机是什么样子的,硬件发展到什么地步,其抽象的系统本质都不会发生变化,计算机基本原理也不会过时。
计算机行业有一个笑话是说,最牛的计算机高手是能用小刀在硬盘上雕刻操作系统的。哈哈一笑之后可以思考一下:真正的计算机高手或者说专家应该是什么样子的呢?
很多人认为用汇编做最底层设计或者设计CPU的是高手,还有人认为懂最新的SOA、Ajax技术的是高手。可是计算机相关专业的学生,不管以后是做底层设计,还是做最新技术的研究,都至少应该了解计算机系统的原理,这比学会编写程序更加重要。因为编程本身只是一项技能,用不着在高等教育中专门学习,很多非专业的人员培训3个月就能熟练地用Java编程了,而我们在大学里要花4年的时间去学习计算机,难道我们要用4年去学习如何用小刀刻硬盘吗?
其实,编写计算机程序的目的是编制操作指令,让计算机能够完成人下达的任务。汇编语言也好,C++也罢,都只是在操作计算机,把数据从内存送到处理器,然后做加减乘除等基本运算。用汇编语言相当于珠算里面拨动一个一个算盘珠子,而用C++类似于使用了“三下五除二”这样的珠算口诀,区别在于编制操作计算机指令的效率,也就是说C++开发程序速度相对较快,而汇编语言开发速度较慢。读者以后遇到新的计算机语言或者新的技术时,只要明白这种语言的语句或者技术对于计算机的内存和CPU到底做了什么,就能很快掌握这些语言和技术。
回到小刀刻硬盘的故事,讨论一下抽象的思想在计算机学科中的作用。现在的程序员分两种,一种是接受了计算机专业系统教育的,一种是自学成才的。假设真的有这样一把小刀可以直接在硬盘上刻写二进制的数据,自学成才的高手会直接在硬盘上用二进制代码去刻一个指令序列,这个指令序列就是操作系统。一个操作系统的指令序列大约是1GB的数据,如果每秒刻8下,要刻31年才能刻完。而学过计算机专业知识的人,会先分析计算机的体系结构,提出一个编程语言,再用二进制指令刻一个简单的设备环境加载器,把这个编程语言的编译器刻到硬盘上,然后把刀子扔掉,开始用自己写的编程语言去写自己的操作系统。学习计算机,要从抽象的视角来看待它,要有自己提出编写计算机语言编译器的能力以及设计计算机硬件的知识,掌握操作系统的关键算法,明白数字电路的基本原理,了解模拟电路的常识。这也是我们与非专业人员的本质区别和竞争优势所在。
计算机是一种抽象的系统,系统的软件和硬件在抽象的层面上没有任何区别,所有硬件能实现的功能软件也能实现,同样,所有软件能实现的功能硬件也都能做到。把真实世界中的物体抽象到计算机当中,进行计算机软件和硬件的设计,是学习和理解计算机非常好的方法。
也许对于刚起步的读者,本节的内容有些过于深奥,但希望读者能够记住这些内容,相信随着学习的深入,会有越来越深刻的体会。这些内容有助于读者在计算机技术飞速发展的今天把握住不变的本质,坚持自己的方向,少走弯路。
下面换一种视角观察计算机。从工程学的观点来看,计算机是一种机器,机器的特性体现在由输入、处理器、输出3个部分组成。现在人们使用的计算机几乎都是冯·诺依曼计算机体系结构,它符合机器的特征,同时做了一些扩展和约束。
冯·诺依曼提出了存储中间结果的设计思想,也就是说处理器可能不能一次处理完所有的输入,而要把输入存储到一个仓库中,这个仓库就是人们所说的存储器。冯·诺依曼的另一个重要思想是输入是按顺序执行的,输入自己决定应该是存储还是处理,那么必须有另一个设备来对输入进行控制,这个控制设备就是控制器。这定义了计算机至少由输入设备、处理器、控制器、存储器、输出设备5个部分组成,如图1-2所示。
图1-2 冯·诺依曼计算机示意图
了解了组成计算机的5种设备,就可以把现在微型计算机的组成部件按这5种设备进行归类,虽然这种归类不是特别准确,但通过这种归类可以对计算机有简单的认识。
(1)CPU(中央处理器):其最关键的部分是算术逻辑处理单元(ALU),它能够进行加、减和比较等简单的运算。CPU的外观如图1-3所示。
(2)显卡:用途是将计算机系统所需要的显示信息进行转换以驱动显示器,并向显示器提供信号,控制显示器的正确显示。现代显卡更搭载了强大的图形处理器和显存等组件用以实现图形加速功能。显卡的外观如图1-4所示。
图1-3 Intel公司的酷睿i7处理器(CPU)
图1-4 NVIDIA公司的Kepler GTX680显卡
(3)声卡:把数字信号转换为声音信号,现在主要集成在主板上,如图1-5所示。
(4)网卡:把数字信号转换为能在网线中传输的模拟信号,现在最新的主板上也集成了网卡,如图1-6所示。
图1-5 集成在主板上的Realtek ALC887声卡
图1-6 主板上集成的网卡
主板:可以控制CPU和存储设备之间的信息交换,起作用的主要是其上的南北桥芯片,如图1-7所示。
图1-7 某品牌的高档主板
(1)鼠标:通过按键和滚轮装置对光标经过位置的屏幕元素进行操作的输入设备,如图1-8所示。
(2)键盘:可以将英文字母、数字、标点符号等输入计算机中的一种设备,如图1-9所示。
图1-8 某品牌的无线鼠标
图1-9 某品牌的无线键盘
显示器:现在主要以液晶显示器(LCD)为主,如图1-10所示。
(1)内存:CPU进行数据处理时,数据必须先从硬盘传输到内存当中。内存的存取速度是硬盘的20倍左右,现在的内存在断电后还不能保留数据。内存可以由一个或多个内存条组成,内存条的外观如图1-11所示。
图1-10 液晶显示器
图1-11 计算机内存条
(2)硬盘:用来永久性存储数据的设备。硬盘是计算机的主要存储介质之一,分为机械硬盘和固态硬盘。机械硬盘由一个或者多个铝制或玻璃制的碟片组成,这些碟片外覆盖有磁性材料,被永久性地密封在硬盘驱动器中。固态硬盘(Solid State Disk)是用固态电子存储芯片阵列而制成的硬盘,具有读写速度快、低功耗、无噪声、抗振动、低热量、体积小、工作温度范围大和容价比偏低的特点。机械硬盘和固态硬盘外观如图1-12所示。
图1-12 希捷1TB SATA硬盘和东芝128GB固态硬盘
(3)光驱:现在常见的光驱有只读的DVD光驱和可写的DVD刻录光驱两种。DVD刻录光驱如图1-13所示。
除了以上5个部分之外,机器要运转还需要有电源,它为计算机提供稳定的电流和能量。正如人要吃饭才能工作一样,机器要输入能源才能正常工作。电源的外观如图1-14所示。
除了上述设备,计算机还可以有其他配套设备,如打印机、扫描仪、手写板、音箱等。
图1-13 DVD刻录光驱
图1-14 450W的电源