学习计算机相关技术之前, 首先要解决的问题是, 为什么人们需要计算机. 人需要语文用来交流, 需要数学用来工作, 因此就有了纸笔算盘等工具. 计算机就是电子时代的纸笔和算盘, 甚至随着时间有了网络终端, 多媒体等更多的应用.
要从本质上理解计算机, 我们可以看一下冯诺依曼体系, 这是关于计算机结构的一个经典概括.
很多书上没有显式指出传输系统, 但事实上传输非常重要. 就是图中那各种连接线. 不只是计算机内部的传输, 现在是网络时代, 网络的重要性可能超过了计算机. 所谓的控制器, 运算器, 存储器, 输入输出, 都可以看成是网络的一部分. 云计算的理念就是, 网络就是计算机.
而控制器和运算器, 在计算机中也是合成为一部分出现的, 就是我们常说的中央处理器, 简写为CPU. 控制的本质也是运算, 是对计算的管理, 或者叫元运算. 这部分在计算机中相当于是人的大脑.
而输入输出两部分合起来称为IO系统, 相当于笔的作用. 存储器类似于纸. 当然这种不同维度的类比是不精确的, 纸对人来说不仅是存储, 也是输出系统的一部分.
所以, 我们重新整理一下, 计算机系统可以分成四部分
处理 存储 IO 传输
这些是计算机技术的关键.
在硬件上, 这四部分对应:
-
CPU 包括各种控制和运算的芯片
-
存储设备 包括存储芯片(内存, 闪存, SSD), 磁盘(硬盘, 软盘), 光盘, 以及存储阵列, NAS, SAN等各种高大上的存储
-
IO设备 输入的有键盘, 鼠标, 麦克风, 摄像头, 扫描仪, 手写板, 输出的有显示器, 音响, 打印机等等.
-
传输设备 包括计算机内部的电路板, 总线, 以及众多的网络设备.
在软件上, 这四部分对应:
-
操作系统 以及处理各种底层的运算和控制的软件, 包括我们自己开发的软件中负责处理运算和逻辑的部分.
-
数据库 包括一般由操作系统负责的文件系统和内存管理, 以及各种能把数据保存下来的持久和非持久的储存技术.
-
交互 接收用户输入, 把结果返回给用户.
-
通信 软件内部的组织沟通, 以及和其他软件, 其他计算机的交流.
所以, 经过时间和市场的检验, 在计算机行业最重要的是这样几种公司,
硬件厂商:
做芯片的, 如Intel,
做存储的, 如希捷,
做外部设备的, 如三星,
做网络设备的, 如华为.
软件厂商:
做操作系统的, 如微软,
做数据库的, 如oracle,
做UI交互界面的, 如adobe,
做网络的, 如google.
而技术的重点其实在两端, 一是保护用户的数据, 二是提供良好的用户交互. 中间的传输和处理都是辅助. 用户感受不到, 也不应该让用户感受到. 技术应该尽可能的封装内部和底层的细节, 让用户透明的使用. 技术的最终目标是要让用户满意, 为用户创造价值.
而数据, 或者叫信息, 在不同的场合也会有不同的表现形式.
运算 以二进制的形式存储在CPU寄存器或者cache(缓存)中, 以求高效处理.
存储 在内存中, 以链式和线性数据结构存储, 在持久化存储时, 采用关系或图等格式, 要求存储密度高, 而且规范便于查询存取, 大量密集和格式化的休息, 如同字典或仓库.
传输 采用json或xml等轻量级格式, 轻巧简约, 如同名片.
交互 以易于人接受和理解的形式, 比如文本, 图形, 音视频等.
现在的软件开发的一个很大的问题是, 很多时候都是在不重要的事情上花费了太多时间, 处理各种编程语言, 各种格式转换和通信的实现. 其实这些工作应该尽可能规范化和自动化, 让数据透明和简单的反映在界面上, 自动实现所有的通信, 转换和绑定.
比如metetor这样的js框架就是以这样的思路, 让界面和远程数据绑定, 中间所有传输和转换的细节不用关心, 只要简单的声明就可以. 所以可以极大的提高开发效率, 让程序员可以把更多的精力放在业务上.
而数据框架spark实现的则是存储跨越网络的透明化. 无需关心数据存放在什么地方, 只要指出你要哪些数据就可以了. 这也是云存储的理想.
而google的Kubernetes(简写为k8s)实现了运算和控制跨越网络的透明化. 不用管软件运行在什么地方, 运行到什么状态, 框架会自动帮你管理. 这是云操作系统的理想.
但是这些技术都还只是初级阶段, 需要更多发展和整合. 所以今天我们还是要手工处理很多技术细节, 才能让业务流程正常运行起来, 这也是软件行业成本高, 效率低的症结所在.
但是我们可以相信, 未来一定是朝这个方向发展. 未来程序员只关心两点, 首先是数据, 然后是让用户方便的查看和操作数据. 其余的技术细节都是由更底层的框架和技术自动提供支持的.
今天我们已经有了AI编码和很多低代码平台, 然而真正让计算机自由的为人所用还有很长的路要走.
我们再举另外一个例子, 比如自行车
有脚蹬和刹车, 作为控制器,
有链条, 作为传输系统,
有车把作为交互设备,
人自己直接充当了存储系统, 按照固定的程序去蹬车, 让车跑起来.
这就好像早期的计算机没有持久化存储, 每次运行都是人工连接各种电线开关, 然后才能开始运算.
所以冯诺依曼提出了存储程序的思想, 把人脑中存储并自己执行实现的初始化程序, 通过编码, 存储在计算机的持久化存储器中, 人只需要按下开机按钮, 计算机就能自动启动和执行运算.
我们可以看到, 最根本的控制器还是人, 但是随着软件越来越智能, 机器的控制能力越来越高, 人的工作就会越来越简化.
所谓的人工智能, 其实就是人编写了更多的软件, 存储在计算机里, 然后计算机就可以自动作更多的事了.
当然, 从更为根本的思路看, 计算机也是物质和能量. 直观的看, 每个计算机都需要硬件环境正常, 连接电源才能工作. 材料和能源是任何技术的底层依托.