世界上最流行的编程语言,用户数超过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 类通信:父子组件通信、隔代组件通…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...