编程架构演化史:远古时代,从打孔卡(Punched Card)开始
回想读书时记录到书本里的打孔纸带编程,到初学编程接触到的C语言高级编程,再到C++、Java面向对象语言产生;从面向过程系统设计 到面向对象系统设计;从三层结构到MVC、MVP、MVVM;从主机到虚拟机再到如今的容器,云原生时代;DDD、六边形架构、简洁架构、清晰架构、C4等等,这一系列的名词构建了系统架构设计的发展史。
历史有时候是很有趣的东西,它能让一些看似难以回答的问题变成有解。举个例子,比如一些公司/团队编码规范中有一条,一行代码不应该超过80个字符以便于代码可读性。如果用一个童心来发问为什么是80个字符?相信一些人会嗤之以鼻,80只是一个概数换成90/100也是可以的不用纠结。这说法当然没错,但如果在 20 世纪 60 年代一行唯一能写的只有80个字符,在那时这一限制是物理的没有办法写81个字符,IBM 打孔卡设立的标准。虽然打孔卡早已被淘汰,有趣的是80这个数字还在,当然已经是新的含义了。
历史有时候是在一次次重演,了解历史演化过程才能感知演化趋势。比如函数式编程起源可以追溯到 20 世纪 30 年代 Lambda 运算的发明,而2013年9月 Java 1.8的发布的新特性之一是支持Lambda 表达式。可曾想到70-80年后的21世纪,函数式编程竟越来越火了起来,当然其内在的意义以有了不小的变化。
历史记录着有些技术的消亡,也记录着新技术的出现,但背后力量让人值得深思着迷。可想到在80-90年代使用IBM大型机是主流技术的代表,而如今去IOE、分布式、云计算是时代主流技术的代表;又或者在20世纪90年代你可想到拥有巨大用户基础的IE到今天已经被淘汰,Chrome浏览器成了主流产品;还有机的各种颜色的几MB软盘,到现在几TB的云存储等等。
想尝试着从编程架构历史的演化角度,去理解、解读一些概念;并且写成系列的文章。牛顿说:“站在巨人的肩上。”,也许看看巨人如何长成巨人也是件很有趣的事情;不求能写得多深刻,只求让读文字的人有点趣味,有稍许所思。
远古时代,打孔卡(Punched Card)
写编程架构演化,不可避免地要提到一个公司IBM,虽然2021年初IBM中国研究院全面关闭,但不可否认历史上它是一个伟大的公司。
上图的设备是,Herman Hollerith(1860-1929)为美国人口普查局发明和制造的制表系统。这些机器首次用于汇编1890年人口普查。Hollerith的专利后来被计算制表记录公司(Computing Tabulating Recording Co.)(1924年更名为IBM)获得,也成了IBM穿孔卡片系统的基础。
1928年,IBM推出了规格为190x84mm的打孔卡存储80列x12行数据,相当于120字节。这也是前文中提到80这个数字最开始的意义与样子。现在已经很难想象如果当时是如何调试程序的Bug,以及对于程序可读性的理解。不过,计算机基于二进制进行运算表现得非常硬核,打孔即代表的是1,不打卡代表的是0。
到了1964年,IBM推出了当时最先进的System/360,它的外设 IBM 2540 可以每分钟读取1000张打孔卡;每台能卖到200w-300w美元(特别注意1964年的美元);想想如今喜欢比拼计算机性能或许就是就是从那个时候开始。1969年的美国国家标准定义了打孔器的128个字符,并将其命名为Hollerith打孔卡代码(通常简称为Hollerith卡代码),以纪念Hollerith。 打孔机从人口普查开始,慢慢向更多的行业铺开;比如航空航天、金融机构、学校科研等等,这些行业的发展也越来越离不开程序设备,与此同时需要面对的是其昂贵、笨重、低性能的情况。
打孔卡编程时代的弊端也显而易见,越来越多行业需要越来越多的计算机,但其价格昂贵。现在21世纪几百RMB一个月的云服务器,估计在当时是难以想象的,这里不难看出第一个技术演化的驱动力:经济成本。
笨重且巨大的计算机,显然也满足不了各类场景的需求,到如今手机、平板、笔记本等各种大小设备的出现满足办公、娱乐等各类场景,可以发现另一个驱动力:多样场景。
航天天文、金融业务都有复杂计算的需要,分钟级别的打孔数据读取显然不足以支撑;现在各类高性能计算机的存在,其实也可以归纳第三个演化驱动力:复杂程度。
这里说的是驱动力哲学角度来说就是矛盾点,矛盾推动事物的发展真是让人着迷的理论。
本篇作为编程架构演化史开篇说的是打孔编程时代,但推动技术演化背后的驱动力/矛盾点其实已然出现;且看它在水面之下推动着演化变革。一批又一批伟大的公司将走向历史的舞台,同时一批又一批的公司将被历史淹没,既是无情的抉择也是演化历史的必然。
敬请关注公众/头条号(求一键三连)。时势造英雄且看续说编程架构演化史的江湖之路。
编程架构演化史:远古时代,从打孔卡(Punched Card)开始的更多相关文章
- x86-1-32位x86 处理器编程架构
x86(32位)-1-32位x86 处理器编程架构 Intel 32 位处理器架构简称IA-32(Intel Architecture,32-bit) x86是指intel的86系列的CPU统称,比如 ...
- ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构
★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...
- 使用WCF实现SOA面向服务编程—— 架构设计
原文地址:http://www.cnblogs.com/leslies2/archive/2011/03/29/1997889.html SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就 ...
- Python编程-架构、Socket
一.客户端/服务器架构 1.C/S架构 Client/Server架构,即服务器/客户端架构. 客户端和服务器端的程序不同,用户的程序主要在客户端,服务器端主要提供数据管理.数据共享.数据及系统维护和 ...
- CRUD全栈式编程架构之界面层的设计
Layout的设计 模板模式 mvc的模板特别类似设计模式中模板方法模式,结合Layout中RenderSection和RenderBody方法可以将部分html展现逻辑延迟到具体的视图页面去实现里面 ...
- 并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)
最近在进行DSP软件优化时,查阅文献,看到了几种并行机制,下面予以总结: 关键词一:指令流水 关键词二:多进程 关键词三:多线程 关键词四:多核(多处理器.超线程结构.多核结构.多核超线程架构) 在体 ...
- Hibernate(八)__级联操作、struts+hibernate+接口编程架构
级联操作 所谓级联操作就是说,当你进行主对象某个操作时,从对象hibernate自动完成相应操作. 比如: Department <---->Student 对象关系,我希望当我删除一个d ...
- SOA面向服务化编程架构(dubbo)
dubbo 是阿里系的技术.并非淘宝系的技术啦,淘宝系的分布式服务治理框架式HSF啦 ,只闻其声,不能见其物.而dubbo是阿里开源的一个SOA服务治理解决方案,dubbo本身 集成了监控中心,注 ...
- 介绍MVC编程架构模式
MVC(Model/View/Controller)模式是国外用得比较多的一种框架模式,最早是在Smaltalk中出现.MVC包括三类对象. Model——是应用对象 View——是它在屏幕上的表示 ...
随机推荐
- Python算法之动态规划(Dynamic Programming)解析:二维矩阵中的醉汉(魔改版leetcode出界的路径数)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_168 现在很多互联网企业学聪明了,知道应聘者有目的性的刷Leetcode原题,用来应付算法题面试,所以开始对这些题进行" ...
- Nginx 限制上传文件的大小。responded with a status of 413 (Request Entity Too Large)
# 限制请求体的大小,若超过所设定的大小,返回413错误. client_max_body_size 50m; # 读取请求头的超时时间,若超过所设定的大小,返回408错误. client_heade ...
- Java学习 (四)基础篇 Java基础语法
注释&标识符&关键字 注释 注释并不会被执行,其主要目的用于解释当前代码 书写注释是一个非常好的习惯,大厂要求之一 public class hello { public static ...
- reactjs中使用threejs从0到1
搭建本地开发环境 安装nodejs 按照 Create React App 安装指南创建一个新的项目 npx create-react-app react-three-demo 删除掉新项目中 src ...
- 技术分享 | 浅谈mysql语法解析调试方法
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 本文向您介绍一种利用mysql解析器和bison的调试选项进行sql语法解析跟踪 ...
- Sampler类定义
此是所有采样的基类,这样定义的好处是,我们可以分别测试每一个采样算法. 类定义: #pragma once #ifndef __SAMPLER_HEADER__ #define __SAMPLER_H ...
- Redis 05 集合
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 Set 中的值 ...
- Docker 01 概述
参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...
- RAID磁盘阵列技术
RAID磁盘阵列技术 1.RAID概述 RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心思想是将多块独立磁盘 ...
- Sirni题解(最小生成树,埃氏筛)(继 Liang-梁)
目录 前言 题意 思路 一些建议 前言 本篇是对Liang-梁的Sirni(最小生成树,埃氏筛)的后继博客. 通篇原文:https://blog.csdn.net/qq_37555704/articl ...