[TOC]
## 计算机学科
人类社会是最为复杂的一个群体。在人类社会的发展过程中,知识起到了其至关重要的作用。因为一切知识都是我们改造社会和发展社会的有力武器。
知识,是通过人类对外界客观环境的认知过程所形成的一种观念。以前的知识口口相传,后来有了印刷术,再后来有了互联网。现在,所有的知识都唾手可得,但知识并不等于一个人的智慧,我们在学习过程中忘记了知识和我们自身的关系,而忽略了知识的转化能力。
人们先要解决的是人到底可不可以认识外界的客观世界。所以一切科学的起点是哲学。人类社会发展过程中因为我们的创造和想象能力产生了很多类型的知识,将知识进行分类,就产生了所谓的学科或者专业。
我认为任何一个学科的设置,都应该具有一套完备的理论系统,最终目的都是为了解决人类社会中的某一个问题而出现。我们学习学科最终学到的是这门学科解决问题的理论体系,经验和技艺。不论哪个行业,凡是高手,都应该具备这三个条件。
但学科不是凭空出现的,也是由人类去设置的。所以,学习任何一门学科都需要从设计者的角度去想:为什么这门学科可以成为一门独立的学科,而又因为什么原因,这门学科中有这些独立的课程。我们看到的知识总是已经按部就班设计好的,正如我们看到的书,总是从目录开始,一章一章按部就班讲下去,但假如我们是这门课程的设计者,你会如何去设计你的教材?
#### 计算
计算机学科出现的目的就是计算。知识的载体是信息。人类最初解决了信息的存储,如印刷术,可以将人类发展过程中知识保留和记录下来。但当信息需要计算的时候,我们不能单纯依靠大脑,就出现了计算的辅助工具,比如算盘等。当人类改造社会的水平和科学水平发展到一定阶段的时候,人类希望可以发明一个更高效的计算辅助工具,我想这应该是计算机最初出现的原因。
算盘的硬件结构很简单,但需要人进行输入和中间计算,最后算盘会将结果呈现出来。而计算机自己完成中间计算,使用者只需要将问题提交给计算机,计算机自动就会给出答案。
所以,有了冯诺依曼的五大部件:输入,输出,存储器,控制器,计算器。
输入和输出是为了完成信息的输入和输出;
存储器是为了进行信息存储;
控制器是为了控制计算步骤;
计算器是为了进行计算。
其实和算盘的结构是一样的。只不过设计出了存储器,控制器,计算器来完成中间计算的功能。
这就是为什么冯诺依曼体系结构很简单,但很重要,因为它是计算机硬件设计的最初理论体系。
#### 计算机
任何学科都有研究的主体。有些主体是客观存在的,如医学研究的主体是人;但有些主体是人类用想象和智慧创造出来的,如建筑学研究的主体是建筑;计算机学科研究的主体是计算机。
#### 计算机组成原理
所以,既然有研究主体,我们必须研究主体的构架;或者组成部件。所以,有了计算机组成原理,计算机体系结构等课程。这些课程的出现是为了告诉我们,学科的研究主体由哪些部分构成。
因为计算机的目的是计算;而计算是需要信息或者数据的;所以,计算机组成原理必须讲清楚,计算机是如何表示信息或者数据的;这就是二进制,二进制原,反,补码,二进制运算出现的原因。这也是运算器主要完成的功能。
接下来,我们应该理解的是,存储器和控制器的内部结构及它们各自是如何完成工作的;这涉及到了存储器的组成,及存储数据的方式;而控制器涉及到的是指令即如何指挥运算器和存储器。发出指令,以完成对应的计算。指令是计算机运行的语言,五大部件通过指令来相互配合完成数据传输和数据计算。而数据和指令的传输媒介就是总线的概念。
这样研究主体就一目了然。
#### 操作系统
接下来,就要研究如何让主体之间的各个部件相互配合,以最高效率完成对应的任务,这应该是操作系统的研究范围。操作系统最终就是为了最大化利用计算机各部件的资源,以使信息得到最快的存储和计算。
操作系统应该是后来才成为完整体系的,因为最初的操作系统人为参与的成分应该更多一些,最初计算机完成的计算功能比较简单,一台计算机所执行的程序个数也比较少,所以,最初考虑的不是效率问题,而是准确问题。
最初计算机执行程序的过程就像一个黑盒子;使用者把信息给计算机,计算机通过自己的内部计算,最后给出结果,但计算过程的每一步都是不可见,也就不可控制。
操作系统希望提供这样的功能,就是让计算过程可见,这样我们就可以更好地安排多个程序进行执行。当把程序的每一步都可见或者可以控制时,进程就出现了。而进程应该是操作系统最为核心的一个概念。
但进程出现有很多副作用,因为进程打破了程序执行的顺序性,而为了解决这个问题就出现了进程同步的概念。同时,为了让进程合作完成特定任务,就出现了进程通信。而线程出现的原因是,进程同时维护着资源,而进程切换就会引起资源的释放和获取,这样会大大降低进程执行的效率,因为资源需要花费很大的时间代价。所以,操作系统让进程继续维护资源,而任务只在进程内部切换,我们把这样的任务叫做轻型进程,也即线程。
接之而来的问题是,到底该如何安排进程的执行顺序,来让处理机进行计算,这就涉及到了处理机调度的问题。而操作系统的剩余部分,都是为了解决一个问题:即如何让最有用的数据距离处理机最近。
#### 数据结构
数据结构是为了研究数据在内存中的表示方式的。内存的物理结构在计算机组成原理已经讲清楚,内存的管理方式已经在操作系统中讲清楚了,但内存到底该如何去组织数据呢?我想这与内存的物理结构密切相关。
因为,内存有两部分组成:存储数据的位和位对应的地址;所以,所有的数据结构应该都是通过地址来表明对应数据关系的。这就有了线性表,数组,树,图等数据结构。其实这些数据结构都是用数据地址来关联数据之间的关系。这与内存的物理结构密切相关。
#### 算法
基于基本的数据结构,我们可以使用计算机解决很多现实生活中的问题。算法就是研究该如何设计计算步骤来解决复杂问题。
算法的基础是数据结构,而数据结构又与内存的物理结构密切相关。所以,我认为算法效率首先与内存物理结构有关,提供怎样的硬件基础,就可以做怎么的计算,而内存的物理结构何其简单,所以,二进制解决现实生活中的问题应该是有瓶颈的。虽然计算机可以依靠其强大的计算,但有些复杂问题不仅仅依靠计算就可以解决的。
我认为,计算机算法还有很大需要弥补的地方。
#### 语言
以上是把计算机做为一个主体去研究。接下来要研究的是,我们到底该如何与计算机进行打交道呢?答,语言。
如果我要和一个美国人交流,我就必须学英语,因为美国人交流的语言是英语;所以,如果让我和计算机交流,我就必须知道计算机是如何交流的。在计算机组成原理中,我们已经学过计算机是通过指令进行交流的,所以,按理来说,我们应该学的是指令。
那么,什么是指令?指令其实就是一串具有特殊意义的二进制串,这个特殊意义就是指令格式,如果足够强大,当然可以写01进制码来和计算机进行交流,最初程序员就是这样工作的。
但随着计算机学科的发展,计算机出现了助记符。也就是用一些特定的英文单词来表示指令,如MOV,ADD等,助记符的出现如同把复杂的01进制翻译出,我们比较容易理解的一些特殊文本。
但这远远不够。
计算机科学家又将其进行抽象,创造出了汇编语言,汇编语言仍然是机器角度的语言。这与计算机的体系结构有关,计算器和寄存器相连,寄存器和内存相连,需要送入计算器的所有数据都要通过寄存器;所以,汇编语言对数据的移动只有两种,即从内存到寄存器,从寄存器到内存。基于此,汇编语言的语法结构总是类似于这样:
MOV,a,b;
一个操作命令和两个操作单元。
对汇编语言的抽象就出现了高级语言。这需要一门课程即编译原理。
高级语言很容易被人类识别和书写,而它最终会被翻译成01进制的指令来让计算机执行。这个抽象过程,真正体现了人类的智慧。
语言分为解释性语言和程序性语言。因为计算机不具备思维,我们只能使用程序性语言和它交流。
语言为什么可以进行信息传递?是因为语言可以表示现实世界的客观事物和客观事物之间的关系。比如,有人说一句:“我爱你。”其实就是陈述了两个客观事物之间的关系。
所以,在设计计算机语言的时候,必须能够表示客观事物和客观事物之间的相互作用。
计算机语言用类型来表示客观事物的种类;
计算机语言用控制结构(顺序,循环,分支)来表示客观事物的相互作用;
计算机语言用抽象(函数)来表示具有一个特定功能的过程;
有的人把计算机语言,当做是21世纪的文学语言,我想,它当之无愧。
语言是由基本要素和要素的表达方式(语法)组成的,英语也是这样,当我们把这两部分学习好了以后,应该练习如何使用基本要素和语法构建别具一格的事物,比如用英语写一篇优美的作文。这是一个人的创造能力,最能体现一个人的水平。(所以,好像一般人都觉得英语最难的部分是写作。)
### 抽象
计算机能如此迅速发展的原因,我想还有一个强大武器是抽象的能力。为什么计算机的抽象能力强,因为计算机的底层构建太过稳固。我们用C写一个“hello world”程序,在一层层转化成01进制,并进行运行的时候,只要代码正确,100%不会出现错误。
抽象是人类很重要的一个武器。管理学使用的就是抽象,从员工到组长,从组长到经理,是层层抽象的过程。
抽象是计算机体系,计算机语言,计算机网络等方面最为重要的思维模式。这一点,我想很重要。
### 信息的虚拟性
不论计算机能存储多大的数据空间,这些信息都是虚拟的,互联网是一个虚拟环境,而这个虚拟环境融入到了我们的社会生活,改变了我们社会生活的方方面面。信息本身就具有虚拟性,这应该是互联网最大的特点。如果当下,所有的人离开互联网,十年以后,互联网不会发生任何改变,因为这些信息都是一个一个的比特位,而不具有任何实际的意义。
因为互联网的虚拟性,互联网最初影响现实生活的方面肯定与虚拟相关。而在现实生活中与虚拟相关的就有人和人之间的关系,所以,互联网又重新定义了人和人之间的关系和交流方式。
而又因为互联网是信息的载体,所以,信息交流当然也是互联网一个最基本的功能。
中国互联网最初发展的时候,开发一个HTML也是一件很牛逼的事情,这就是信息最初交互的成就。
### 工业技术的崛起
IBM曾说全世界拥有100台超级计算机就可以了。而微软说,我要让每个人都拥有一台计算机。所以,IBM成为计算机工业的强弩之末,而微软成为快速崛起并迅速占领计算机市场的巨头。
工业技术的崛起改变了计算机的硬件基础,也就改变了计算机的形状大小和运行方式,现在的计算机制造已经成熟,因为计算机体型不大,且便于管理,很容易被人们接受。计算机开始进入每家每户。
### 商业的本质
商业的本质与互联网最为契合的地方是虚拟。因为货币本身就是虚拟交换的价值单位。所以,商业最容易被互联网接受。中国第一批互联网公司新浪,百度等是利用互联网是信息的载体和传递媒介这一特性建立起来的。腾讯是利用互联网加强人和人关系而建立的,而阿里巴巴却是最先看到互联网和商业相契合的特性。
所以,才有了今天的阿里巴巴,不得不夸一夸马云的高瞻远瞩。直至现今,电子商务仍然没有褪色的迹象。而随着物流系统的逐渐完善,网上购物成为了我们生活中必不可少的一部分。
所以,要看互联网能和什么结合,我觉得最大的特点在虚拟。
### 移动互联网
手机,它不大,放在口袋里一点都不占地方,同时电话是人类通信最初的工具;所以,手机能够普及的原因是与其打电话的功能密切相关。而移动互联网的出现也有很多方面的因素:
手机的普及性;手机硬件的可携带性;手机的软件系统的出现;手机硬件工业链的成熟化。
中国的小米公司看到了手机的前景,所以乘着移动互联网的风,成为了一家很成功的公司。手机必然是移动互联网的载体。所以,移动互联网成为了下一代互联网。
雷军曾说,“站在台风口,猪也能飞起来。”但当台风过去的时候,人们才意识到机会的丧失。
### 智能
计算机能不能实现智能?我想,不能。现在的智能只是以计算的高效来掩盖智商,但并不能表示计算机有思维。
如何让计算机有思维?必须先要研究人的大脑和人类的认知过程。
而人的大脑是自然界最为复杂的事物,现今还没有完全研究透彻,所以,智能的问题我认为还在路上。
### 可佩戴式设备和智能家居
既然我有手机,我为什么会再买一块表,然后用手表去刷支付宝呢?人们已经习惯了手机的操作,智能手机操作的简便化和人性化,以及智能手机系统的完善,这些都只会让手机做为移动设备中互联网的主要载体。与手机的功能,结构,人类的习惯等都有很大关系。
而可佩戴式设备本身需要硬件和软件(嵌入式开发)支撑,现在还没有完善的工业链,同时,使用可佩带设备最后还需要在手机上下载App来做为辅助工具。
所以,可佩戴式设备还远远没有达到能取代手机的地位。
智能家居倒是一个不错的选择。可以提高人们的生活质量,缺点是,比如做一个智能电饭煲,还没有一个完整的工业生产链,和完善的软件系统,但这个思路好像比可佩戴式设备的可操作性要强一点。
所以,互联网+不是盲目地将生活的各个方面结合计算机,互联网本身也是工具,最终目的都只是为了提高人类的生活质量。
想想还有什么可以和互联网结合,我想应该是教育吧。因为教育本身就是一种虚拟式的活动,同时互联网本身是信息的载体,其知识储备足够任何人去学习。
所以,我想互联网最有可能改革的地方涉及到的是教育,它的操作性很强,因为大学的每间教室都有一台连接互联网的电脑,只是,没有人好好利用而已。