世界上最流行的编程语言,用户数超过Python,Java,JavaScript,C的总和!
世界上最流行的编程语言是什么?
Python? Java? JavaScript? C?
都不是,是Excel!
外媒估计,全球有12亿人使用微软的Office套件,其中估计有7.5亿人使用Excel!
可是Excel不就是能写点儿公式,做点儿计算吗, 这也是编程语言?
之前的Excel不是图灵完备的,2021年微软通过引入LAMBDA,让Excel 具备了图灵完备性,Excel 转变成一种全面的编程语言。

当然,普通用户很少用Lambda,主要是组织数据,用公式分析,做可视化,提供决策依据,这才是Excel的舞台。
别看Excel现在呼风唤雨,它也是从尸山血海中一路冲杀出来,差点儿就被人干掉。
今天我们来聊聊Excel发展的故事。
1
神奇纸张
我在外企的时候,有个国外同事,从来不说PPT,而是说Slides, 也从来Excel,而是说SpreadSheet。
刚开始我还不习惯,后来看看Excel的发展历史,才知道他是对的,Excel不过是SpreadSheet的一种。
电子表格(SpreadSheet)不是微软的发明,是哈佛学生丹尼尔·布里克林灵机一动想出来的。

1977年,丹尼尔·布里克林哈佛商学院读MBA,教授让这些MBA学生去填一些分类账目表格,用来预测公司收购的财务状况。这些淡绿色的表格填起来很烦人,表格之间的数据有依赖关系,有一处填错了,后面的都得重新计算。
曾经设计过字处理软件的布里克林立刻想到:为什么写一个电子表格程序,自动地去计算呢?
布里克林的老师则认为他是在浪费时间:你没搞错吧,现在市面上的PC都是玩具,再说了,这些填表的工作将来都是会计,秘书的活儿,你们MBA的主要工作是建模!
老师说的一点都没错,这是1977年,Apple II 才刚刚出现,上面没啥商业软件,确实是发烧友们的大玩具。
但是布里克林不信邪,他从麻省理工找了一个会编程的朋友,两人合作,用汇编写了世界上第一个电子表格软件:VisiCalc,意思是Visible Computing。
这个软件的界面是绿色的,我估计是参考了当时分类账目表格的颜色:

让所有人都没有想到的是,VisiCalc迅速成为了Apple II上的“杀手软件”,人们购买Apple II的唯一理由就是:想使用上面的VisiCalc。

VisiCalc给世界带来的变化,不亚于复式记账簿。
有了电子表格之后,商人们只需要将数字输入,就能看到输出是什么。并且在PC上运行的电子表格打破了大公司的层级结构,将权利下放给更多人,甚至不需要依赖于数据部门,自己就能搞定。
VisiCalc 这个“可以执行计算和重新计算的神奇纸张”开启了一场革命,促使PC从狂热爱好者的玩具成为了严肃的商业工具。
2
异军突起
电子表格的市场一旦开启,激烈的竞争就如约而至 。
1980年,VisCalc仅仅问世一年以后,Sorcim公司发布了SuperCalc,解决了单元格之间循环引用的问题。
1982年,微软正式出手,推出了自家的电子表格程序Multiplan,提供了“更大的工作表”以及其他改进。
但它们都无法撼动先行者VisiCalc的地位,因为“一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程!”
Mitchell Kapor(卡普尔)本来基于VisiCalc开发插件的程序员,他开发过两个图形插件,可以从VisiCalc的文件中生成图形。

VisiPlot

VisiTrend
当IBM PC这个划时代意义的产品推出时,VisiCalc却没有采取什么行动,卡普尔意识到机会来了。

他将自己的软件版权以170万美元的价格卖出,然后又拉了130万的风投,铤而走险,押注IBM PC,开发了新的电子表格软件Lotus1-2-3。
1-2-3指的是该产品的使用方式,即电子表格,图形包和数据库管理器。

正如VisiCalc是Apple II的Killer application一样, Lotus 1-2-3成为了IBM兼容机和MS-DOS上的杀手级应用,IBM兼容机比Apple电脑便宜很多,市场巨大。
卡普尔顺势掀起了营销的狂潮,研发费用100万美元,发布产品就花费了250美元,Lotus 1-2-3销量扶摇直上,在最初的18个月就卖出了85万套,迅速成为电子表格领域的新霸主。
Lotus公司也超越微软,成为世界上最大的独立软件公司。
Lotus 1-2-3有多流行呢?很多人在买计算机的时候,不是说要买IBM PC兼容机,也不是说要买MS-DOS兼容机,而是要买能运行Lotus 1-2-3的计算机!
3
王者归来
眼瞅着Lotus1-2-3在自家的MS-DOS上称王称霸,赚钱赚到手软,而Multiplan又如同扶不起的阿斗,微软难道就此偃旗息鼓?
这绝不可能!
1984年秋天,微软一行四人秘密入驻西雅图的红狮酒店。

这四个人从左到右分别是:Bill Gates, Doug Klunder, Jabe Blumenthal 和 Charles Simonyi
他们要在这里进行为期三天的头脑风暴,讨论如何干掉Lotus1-2-3。
Bill Gates先是阐述了当前的严峻形势,Lotus公司第二年的销售额将要达到1.5亿美元,已经超越微软了!
大家纷纷表决心,一定要做出更加强大的电子表格软件Excel,把Lotus1-2-3 干翻在地。
四人就Excel的用户界面和关键功能进行了充分的讨论,最后做出了两个重要决定:
1. 智能的重新计算
现在的SpreadSheet都有一个缺陷,一个单元格的数值变化,所有的单元格都得重新计算,这在PC那可怜巴巴的16K内存中,运行速度太慢了。新软件Excel一定要只计算相关受影响的单元格,这样在性能上将会有巨大的优势,用户将会后神奇的体验!
Doug Klunder甚至提出了一个口号:Recalc or die ! 意思是,实现不了智能的重新计算,就去死。

2. 放弃DOS平台,让Excel运行在GUI上。
Lotus 1-2-3已经成为基于文本的DOS平台的霸主,不要和它正面竞争,而是专注于下一代GUI平台。
悲催的是Windows 1.0要在一年以后才能完成开发,市面上支持GUI的操作系统只有苹果的Macintosh。
Bill Gates还是决定先开发Excel的Macintosh版本,这是个在外人看来难以理解的决定:让别人的孩子在自己院子(MS-DOS)里撒野,而把自己的孩子寄居别人的家里(Macintosh)
不得不说,Bill Gates不但懂技术,还非常有商业头脑,他从Macintosh身上,已经意识到GUI才是未来,将来Excel对Lotus将会带来降维打击。
1985年,Excel的Macintosh版本正式推出,这是第一款图形化人机交互电子表格系统,有着漂亮的外观,下拉菜单,并且能够用鼠标操作!比基于文本的Lotus 1-2-3好太多了。
Excel开始蚕食Lotus 1-2-3的领地。

1987年11月,第一款适用于Windows系统的Excel也产生了。
Lotus1-2-3 行动迟缓,迟迟不能用于Windows系统,到了1988年,Excel的销量超过了Lotus !
这是一件标志性的事件,意味着新的软件霸主诞生了!
此后大约每两年,Microsoft就会推出新的版本来扩大自身的优势,把所有竞争对手都远远抛到了身后。

4
尾声
Excel对于微软有着特殊的意义,Microsoft Excel 1.0 的首席开发人员 Doug Klunder 回忆说:“微软将未来押在了 Excel 和 Windows 两个程序上,如果两者都失败了,微软就不可能活到今天。”
据说微软在开发Excel的时候,偷学了Macintosh的GUI技术,转而用到自家的Windows上,这让乔布斯怒不可遏,指着Bill Gates大骂:我那么信任你,你却偷走我们的东西!
Bill Gates没有愤怒以对,也没有反唇相讥,而是平静地讲了一个故事:“史蒂夫,我理解你的愤怒,不过我们可以从另外一个角度来看问题,我们都有个有钱的邻居,叫施乐,我闯进他们家准备偷电视的时候,发现你已经把它……偷走了。”
(施乐的故事,参见这篇文章《为什么美国的创新这么厉害?》)
(完)




相关文章:
世界上最流行的编程语言,用户数超过Python,Java,JavaScript,C的总和!
世界上最流行的编程语言是什么? Python? Java? JavaScript? C?都不是,是Excel!外媒估计,全球有12亿人使用微软的Office套件,其中估计有7.5亿人使用Excel!可是Excel不就是能写点儿公式&#x…...
杂谈:created中两次数据修改,会触发几次页面更新?
面试题:created生命周期中两次修改数据,会触发几次页面更新? 一、同步的 先举个简单的同步的例子: new Vue({el: "#app",template: <div><div>{{count}}</div></div>,data() {return {count…...
原生JS实现拖拽排序
拖拽(这两个字看了几遍已经不认识了) 说到拖拽,应用场景不可谓不多。无论是打开电脑还是手机,第一眼望去的界面都是可拖拽的,靠拖拽实现APP或者应用的重新布局,或者拖拽文件进行操作文件。 先看效果图&am…...
Coredump-N: corrupted double-linked list
文章目录 问题安装debuginfo之后分析参数确定确定代码逻辑解决问题 今天碰到一例: #0 0xf7f43129 in __kernel_vsyscall () #1 0xf6942b16 in raise () from /lib/libc.so.6 #2 0xf6928e64 in abort () from /lib/libc.so.6 #3 0xf6986e8c in __libc_message () from /lib/li…...
5个好用的视频素材网站
推荐五个高质量视频素材网站,免费、可商用,赶紧收藏起来! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材非常丰富,有平面、UI、电商、办公、视频、音频等相关素材,视频素材质量很高,全部都是…...
使用码匠连接一切|二
目录 Elasticsearch Oracle ClickHouse DynamoDB CouchDB 关于码匠 作为一款面向开发者的低代码平台,码匠提供了丰富的数据连接能力,能帮助用户快速、轻松地连接和集成多种数据源,包括关系型数据库、非关系型数据库、API 等。平台提供了…...
3.1.1 表的相关设计
文章目录1.表中实体与实体对应的关系2.实际案例分析3.表的实际创建4.总结1.表中实体与实体对应的关系 一对多 如一个班级对应多名学生,一个客户拥有多个订单等这种类型表的建表要遵循主外键关系原则,即在从表创建一个字段,此字段作为外键指向…...
Vue3 企业级项目实战:认识 Spring Boot
Vue3 企业级项目实战 - 程序员十三 - 掘金小册Vue3 Element Plus Spring Boot 企业级项目开发,升职加薪,快人一步。。「Vue3 企业级项目实战」由程序员十三撰写,2744人购买https://s.juejin.cn/ds/S2RkR9F/ 越来越流行的 Spring Boot Spr…...
Swagger2实现配置Header请求头
效果 实现 大家使用swagger肯定知道在代码中会写一个 SwaggerConfig 配置类,如果没有这个类swagger指定也用不起来,所以在swagger中配置请求头也是在这个 SwaggerConfig 中操作。 1、要实现配置请求头在配置swagger的Docket的bean实例中添加一个 globa…...
4-1 SpringCloud快速开发入门:RestTemplate类详细解读
RestTemplate类详细解读 RestTemplate 的 GET 请求 Get 请求可以有两种方式: 第一种:getForEntity 该方法返回一个 ResponseEntity对象,ResponseEntity是 Spring 对 HTTP 请求响应的封装,包括了几个重要的元素,比如响…...
【IDEA】【工具】幸福感UP!开发常用的工具 插件/网站/软件
IDEA 插件 CodeGlance Pro —— 代码地图 CodeGlance是一款非常好用的代码地图插件,可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区,可以快速定位代码的同时,并且提供放大镜功能。 使用:可以通过Settings—>Other Settings—&g…...
【蓝桥杯集训·每日一题】AcWing 1562. 微博转发
文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴宽搜BFS一、题目 1、原题链接 1562. 微博转发 2、题目描述 微博被称为中文版的 Twitter。 微博上的用户既可能有很多关注者,也可能关注很多其他用户。 因此&am…...
[busybox] busybox生成一个最精简rootfs(下)
书接上回:[busybox] busybox生成一个最精简rootfs(上) 本篇介绍几个rootfs中用到的“不是那么重要的”几个文件。 9 /etc/shadow 和 /etc/passwd 曾经,/etc/passwd 文件用于存储独立 Linux 系统中的所有登录信息。 后来,由于以下原因&…...
Java奠基】运算符的讲解与使用
目录 运算符与表达式的使用 算术运算符 隐式转换与强制转换 自增自减运算符 赋值运算符 关系运算符 逻辑运算符 三元运算符 运算符与表达式的使用 运算符是指:对字面量或者变量进行操作的符号。 表达式是指:用运算符把字面量或者变量连接起来&…...
开发一个会员管理系统
背景 由于现在公司内客户量剧增, 简单的靠电话及笔记本记录,来维护客户有些困难,但又不想去花钱购买那些专业版的会员管理系统,只能自己动手撸一个相对简易的会员系统来使用了。 开发语言及使用技术 后端:java、mys…...
华为OD机试题【找出通过车辆最多颜色】用 C++ 进行编码 (2023.Q1)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明找出通…...
如何根据子网掩码计算出网络前缀(prefix)
我们知道子网掩码是对IP地址的网络地址的标注。把IP地址中网络地址位设置为1,主机地址位设置为0,得到的就是子网掩码。除了用子网掩码表示IP地址的网络地址和主机地址外,还可以用network prefix(网络前缀),比如192.168.0.1/16,这里的16就是prefix,也就是网络地址位的位…...
【FATE联邦学习】Fateboard的使用
fateboard文档 https://fate.fedai.org/fateboard/ github Fateboard文档 https://github.com/FederatedAI/FATE-Board/blob/master/README-CN.md 背景 Fateboard是FATE框架的任务看板。 在配置FATE时,Fateboard一般是被安装好了的,安装过程查看这里 A…...
解决vue3没有this造成的无法使用vue2
在Vue2项目中可以使用this.$router.push等方法进行路由的跳转,但是在Vue3的setup函数里,并没有this这个概念,因此如何使用路由方法 1.// 在新的vue-router里面尤大加入了一些方法,比如这里代替this的useRouter,具体使用…...
百度前端二面vue面试题指南
Vue 组件间通信有哪几种方式? Vue 组件间通信是面试常考的知识点之一,这题有点类似于开放题,你回答出越多方法当然越加分,表明你对 Vue 掌握的越熟练。Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
