如今是一个信息的时代,计算机和网络的飞速发展给我们的生活带来了便利,我们几乎已经离不开信息。可以说,信息就是数据!
先从计算机的诞生谈起,最初计算机的产生是为了替代人进行大规模的计算。计算机主要的两个部件是CPU和硬盘,CPU的作用是用于控制和计算数据,硬盘是为了永久保存数据。至于内存是临时缓存数据的,指令和数据都转换成了二进制数据。硬件用于传递和保存数据,软件对数据进行处理。输入设备是为了接收用户输入的数据,输出设备是将计算机进行处理后的数据显示给用户。至此可以说计算机是以数据为中心的。
从一个程序员的角度来看,做软件就是为了处理数据。编程人员都知道写程序要定义变量、定义函数,变量的目的是保存数据,函数的目的是对数据进行相应的操作。当程序运行起来后,程序中定义的所有变量和函数都会载入内存,CPU再通过访问内存进行取指令、取数据、执行指令。数据是我们定义的变量,指令可以看作是我们定义的函数,数据和指令都是二进制数据。从软件的角度来说,软件的核心价值就是计算数据或操作数据。
大型软件都需要分层,何为三层结构?即界面显示层、数据处理层(或者业务逻辑层)、数据库层(也可以是文件)。这三层都是以数据为中心,首先界面显示层接收用户的输入-->数据,然后业务逻辑层进行处理-->数据,读取数据库或将处理结果保存到数据库-->还是数据,最后再回到显示界面显示-->数据。计算机为我们提供了显示器、硬盘等硬件设备,我们要做的就是实现:数据在显示器的显示(还有接收)、数据在硬盘的保存、最主要的是数据在处理层的处理。
软件架构有三种模式:单机版、C/S架构、B/S架构。这三种架构可以从以上的三层结构来讨论,暂且把以上三层结构简述为:显示、计算、数据库。"显示+计算+数据库"在一台机器,就是单机版;"显示+部分计算"在一台机器,"部分计算+数据库"在另一台机器,就是C/S架构,即客户端-服务器模式;"显示"在一台机器,"计算+数据库"在另一台机器,就是B/S架构,即浏览器-服务器模式。可以看出单机版的数据保存在本地,可以直接读写。C/S架构、B/S架构的数据都保存在服务器,客户机如果要对数据进行读写必须把数据从一边传到另一边,所以才产生了网络。做B/S架构的系统要用http协议传递数据,做C/S架构的系统要用到Socket,Socket是对TCP数据或UDP数据的封装。
Java比较适合做B/S架构的系统,C/C++做的更多的是单机版软件或C/S架构的系统。至于C#、PHP、VB、Delphi等编程语言都可以找到自己的位置。从Java做信息管理系统来说,有Html、CSS、JavaScript、Ajax等技术,从简单的Servlet、Jsp,到Struts、Spring 、Hibernate等框架,再到强大的JavaEE,无一不是为数据服务的。从VC做桌面应用来说,窗口、控件、句柄、消息、事件等概念,MFC的一堆类、Doc-View模型、消息映射等,无一不是为数据服务的。不管这些复杂的东西是为了接收输入数据、为了处理数据、为了显示数据、为了传递数据、还是为了保存数据,中心都是数据。
计算机专业的人要学习好多理论知识,包括:组成原理、操作系统、数据结构、算法、数据库、高级编程语言、汇编……数据在计算机里都是二进制的,但是为了操作方便,编程语言规定了数据类型,多个数据类型按一定的规律组织起来就是数据结构。在处理数据时为了完成某种操作,需要有一定的步骤,有些步骤是经常用到的,有一定规律的,于是就产生了算法,经典的排序算法、搜索算法、遗传算法、神经网络算法等都可以以很快的速度产生程序员想要的结果。学习这么多知识为了什么?为了处理数据!
IT的研究方向有软件、图形、图像、网络、数据库、系统架构等。软件工程师是处理数据。网络工程师研究的是怎么使数据从一端传递到另一端,包括TCP/IP协议,数据包的编码解码等,网络安全非常重要,在传输过程中要避免数据被非法截获。数据库管理员的职务是使这些保存的数据不丢失,DBA对数据库的控制、备份、维护、恢复等,都是为了尽力保护好数据,数据的分析又是另一个领域。
我们传统概念上的计算机仅仅是指PC机,除此之外大型的服务器、小型的嵌入式设备、移动设备等,只要有计算能力的机器都可以称之为计算机。一些前沿的云计算、云存储技术也可以组成一个无形的计算机。大数据时代已经到来,计算机以后面临的将是海量的数据处理。