Bill Gates 和 Linus Torvalds 同时推崇的编程语言,不可复制的经典

news2024/10/5 15:29:57

1

缘起

我们为什么没有这样的东西?!”  -- Bill Gates

1988年春天,Alan Copper坐在微软的大会议室中,给Bill Gates和微软的十几名员工做了一次著名的演示。

这是个叫做Tripod的开发工具,控制面板上面是一些按钮,列表框之类的东西,它采用事件驱动的方式,即当用户执行某个操作(如单击按钮)时,系统会触发特定代码执行执行。

很明显,这种开发方式把Bill Gates强烈地震撼了。

Bill Gates想到了自家刚刚发布的Windows操作系统:

3376235c144100e54fccbf49476d8993.png

GUI界面虽然对用户很友好,但是对程序员来说,在上面编程痛苦不堪,必须需要使用原始的 Win32 API。

这意味着使用C语言编写 WndProc()函数,在里边用丑陋无比的switch case 语句来处理各种Windows消息。

LRESULT CALLBACK WndProc(HWND hwnd, 
UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

即使想创建一个简单的窗口,没有几百行代码也是不行的。

编程模型乏味又枯燥,简直不是人干的活儿。 

相比之下,Alan Copper的Tripod可以把各种组件拖拽到表单设计器,然后对事件添加处理代码就可以了,又简单又直观。

这绝对是以后Windows开发的未来。

“我们为什么没有做这样的东西?!” Bill Gates扭头对着他的随从问道。 

Bill Gates买下了Tripod,并且让项目组对Tripod进行改造,用自己喜欢的Basic作为新工具的内置编程语言。

最终,Visual Basic问世了。

037bf5ac48bebf94d682f1fb96452441.png

Visual Basic的一大特点就是:有限的功能集使得学习曲线要短得多。

学习VB vs 学习 C++,就像学习开车vs 学习开飞机。

38b8057c0395fad625a858d8dc35c1d3.png

成为一名优秀的 Visual Basic 6 程序员比成为一名优秀的 C++ 程序员花费的时间要少得多。

2

发展

Visual Basic的出现也是恰逢其时。

八九十年代,个人电脑市场正在迅猛发展,疯狂地吞噬原来大型机和小型机的领地。

生活在那里的数百万COBOL程序员非常紧张,也想转型到PC开发上来,但是C/C++陡峭的学习曲线和非常低级的Win32 API成为最大的拦路虎。

正当他们无所适从的时候,提供了更简单抽象层的Visual Basic出现了,在组件化的编程模型下,你只需要把“控件”拖放到表单时,设置好属性,编写好事件处理代码,一个Windows应用程序就开发出来了。

从此,大型机COBOL程序员高兴地拥抱了Windows平台。

一些编程新手也被Visual Basic吸引,他们了解到函数如何工作,对象如何工作,迅速地开发出应用程序,第一次感受到了编程的乐趣和力量。

而Alan Copper当初的一个设计决策让Visual Basic一飞冲天。

在Visual Basic中,每一个控件(文本框,按钮,下拉框等)都是一个单独的,可以动态加载的DLL,也就是说,任何人都可以开发属于自己的控件,然后加载到Visual Basic当中。

这和后来Eclipse,IDEA,VS Code的插件思想非常类似,只是VB比他们早了一个时代。

无数软件开发厂商开始开发这种自定义控件(VBX),日历选择器,图标,条码扫描,报表...... 海量的VBX迅速发展成一个第三方的市场。

Visual Basic不断地推出新版本,不但支持快速开发桌面的GUI应用,还可以通过ADO等手段访问数据库,从而开发C/S架构程序。

到了1998年,Visual Basic 6.0发布时达到了巅峰,有三分之二的Windows商业应用是Visual Basic开发的,Visual Basic 在全球拥有350万开发人员,是C++程序员数量的十倍以上。

能和VB一战的,恐怕也只有Delphi了。

9984ffa95a5ad6cc1812d3bdb727af51.png

Alan Cooper和微软签署了严格的保密协议,在四年的时间内,一直保守秘密,不对外界透露他在做什么。

直到Visual Basic 发布以后,他的朋友Mitchell Waite 打电话问他,在VB那个about box中的Copper是不是你?此时Alan Copper才承认是他干的。

Mitchell Waite请Alan Cooper吃了一顿饭,亲耳听到了完整的故事,不由地感慨:这使你成为VB之父!

1994年,由于对可视化编程的杰出贡献,Visual Basic 之父Alan Cooper获得了微软第一个Windows先锋奖。 

6f8b620be518e6da23a575099395efad.png

3

衰落

Visual Basic在桌面开发中辉煌了10年,直到它撞上了互联网的大潮。

Sun公司的Java异军突起,独领风骚,让微软感受到了巨大的压力。

在开发了不成功的Visual J++,被Sun控诉说破坏了Write once ,run anywhere 之后,微软决定另起炉灶,开始做.NET。

Visual Studio的所有产品都摇身一变,加上了.NET后缀,Visual Basic也不例外,成了VB.NET。

VB.NET彻底改变了最初的产品精神,变成了更复杂,功能更全的编程语言,开始和C#一起共享很多复杂的概念,线程、继承、多态,学习曲线陡然升高。

但是在.NET平台上,C#才是亲儿子,是微软的战略产品,既然底层的概念都类似,为什么不选C#呢? 

在一篇微软的博客中,.NET 讲师 David Platt痛斥微软产品犯的错误:

几乎所有的VB6程序员都对VB6很满意,这是一辆非常不错的汽车,他们很愿意成为汽车的司机,至于VB6中缺乏运算符重载,多态,他们并不在乎。

但是,微软团队听到了3%的司机的意见,这帮人想成为战斗机飞行员,他们参加各种会议,写各种文章,在论坛上发帖,希望给汽车增加响尾蛇导弹,安装加力燃烧器,HUD显示屏,反导设施......

微软最终做到了,这就是VB.NET。

更糟糕的是,微软发布的迁移工具是不可靠的,代码从VB迁移到VB.NET非常困难,很多时候,用户需要手工重写。

这彻底打破了开发人员对VB的信任,VB程序员开始摇摆,要么从VB.NET从头开始,要么转向PHP,Python,JavaScript,大多数人选择了后者。

Visual Basic 6.0成了最后一个经典的VB版本,一些程序员依然坚守,2008年4月,微软宣布停止支持VB 6 IDE,但是直到今天,Windows依然支持运行VB6开发出来的程序,可见这里有一个庞大的、遗留VB6程序的部落,不容忽视。

4

反思

2006年,一个18岁的程序员在邮件列表中问了这么一个问题:编程的下一件大事是什么?

没想到,著名的 Linus Torvalds 竟然回复了:

帮助简化所有日常苦差事的工具, 例如我个人认为Visual Basic在编程方面比面向对象做得更多,但人们嘲笑VB是一种糟糕的语言,虽然VB不是一门伟大的语言,但是VB中的简单易用的数据库接口比面向对象要重要得多......”

转眼间,Visual Basic已经诞生30多年了,但是编程并没有变得比九十年代简单,相反变得更复杂了,还专门分离出了前端来处理UI相关的问题,还有层出不穷的框架,让人难受的、复杂的CSS,浏览器兼容问题...... 这些苦差事和30年前用拖拽的方式建立界面有天壤之别。

我们现在其实缺少像Visual Basic这样的隐藏复杂性的工具,它功能有限但是足够,学习曲线短,可以快速上手,迅速开发出应用出来。

下一个时代的Visual Basic会在哪儿呢?

参考资料:

http://www.ojodepez-fanzine.net/network/qbdl/history_of_visual_basic.html

https://web.archive.org/web/20170309062139/https://www.cooper.com/alan/father_of_vb.html

https://learn.microsoft.com/en-us/archive/msdn-magazine/2012/june/don-t-get-me-started-the-silent-majority-why-visual-basic-6-still-thrives

https://retool.com/visual-basic/#cover

(完)

ChatGPT最近非常火热,有可能彻底革新程序员编程的方式,我和闪客最近建立一个了一个专为程序员服务的知识星球“ChatGPT基地”。

1.帮助程序员尽快掌握ChatGPT这个优秀的工具,找到最优的使用方式,最佳的提升工作效率的方法。

如果不会用ChatGPT,肯定干不过熟练使用ChatGPT的程序员。别人用自然语言生成代码,你还在一行行敲,效率差了十倍百倍。这将直接影响一个人的工作绩效,工作机会,工资,奖金。 

一个初级程序员使用好ChatGPT,有可能可以和中级,甚至高级程序员抗衡。

2.探索ChatGPT给程序员带来的机会,如果iPhone出现带来app开发一样,把副业变成主业。

ChatGPT肯定会重构很多行业,比如各种培训,如果把ChatGPT封装成一个“苏格拉底式导师”,完全有可能实现高质量的导师24小时陪伴,完全涵盖小学,中学的各种学科,以及成人的IT培训,这里边肯定有很多机会。

当然,这是两个最主要的目的,加入星球,还可以查看ChatGPT的前沿资讯,优质资源和项目,ChatGPT的极客玩法等等。 

现在星球有这些活动:

加入星球即送ChatGPT账号(仅限今天进入星球的前100名)

输出优质内容即送100元红包

30天打卡挑战,退还星球费用

每周积分榜前三,大额红包奖励(第一名100元,第二名50元,第三名20元)

我和闪客聊天的时候说道:“这个星球可能会成为一个我们倒贴钱的星球!但是也没关系,我们如果能真正地把ChatGPT用好了,让我们自己更有竞争力,也就值了。”

现在星球处于试运行期,原价199元,现在有个100元的优惠券,相当于99元就可以加入,早点儿拥抱ChatGPT,成为第一批会用ChatGPT和用好ChatGPT的人,占据先机,吃到红利。

748793d881d5068c32d38654afe12f95.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电视剧是大众文化娱乐的载体,情感、喜剧、悬疑,你钟爱哪种题材?

电视剧作为一种重要的文化娱乐产品,一直以来都受到了人们的热爱和关注。它们通过故事情节、角色塑造、美术设计等方面的表现,向观众展现了生活中的各种情感和经历,同时也传递了一些价值观和思想观念 做为低成本的的娱乐方式,能够为…

1. 数据结构与算法概述

1. 数据结构与算法概述 1.1 什么是数据结构? 官方解释: 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 大白话: 数据结构就是把数据元素按照一定的关系组织起来的集合…

讲真的,我哭死,搞了一个画图软件

文章目录 👵回来咯👴一起画图吧👱画图软件👼项目地址 专栏Python零基础入门篇🔥Python网络蜘蛛🔥Python数据分析Django基础入门宝典🔥小玩意儿🔥Web前端学习tkinter学习笔记Excel自动…

数据结构——堆和优先队列

文章目录 前言堆堆的引入堆的定义堆的储存结构 优先队列优先队列简介优先队列的基础操作入队出队 优先队列的实现 堆的应用堆排序TOP-K问题什么是TOP-K问题TOP-K问题的排序解法TOP-K问题的堆解法 总结 前言 堆是一个比较基础,且实现起来难度也不算太大的一个数据结…

高性能RPC框架:TARS简介、设计思想、架构、特性学习

文章目录 一、TARS简介二、设计思想三、整体架构3.1 架构拓扑3.2 服务交互流程3.3 Web管理系统3.4 服务结构 四、Tars特性4.1 Tars协议4.2 调用方式4.3 负载均衡4.4 容错保护4.5 过载保护4.6 消息染色4.7 IDC分组4.8 SET分组4.9 数据监控4.10 集中配置 声明:以下内容…

文心一言 vs GPT-4 —— 全面横向比较

文心一言 vs GPT-4 —— 全面横向比较 3月15日凌晨,OpenAI发布“迄今为止功能最强大的模型”——GPT-4。我第一时间为大家奉上了体验报告《OpenAI 发布GPT-4——全网抢先体验》。 时隔一日,3月16日下午百度发布大语言模型——文心一言。发布会上&#…

开放式蓝牙耳机推荐,列举出几款值得入手的开放式蓝牙耳机

随着耳机市场的发展,骨传导耳机的出现也逐渐受到了市场的认可,骨传导耳机,是通过颅骨来进行声音传导的一种耳机。与传统的入耳式耳机不同,骨传导耳机不需要将耳朵堵上,而是通过颅骨震动将声音传到内耳,所以…

IDEA快速部署Spring Boot 项目到Docker

IDEA快速部署Spring Boot 项目到Docker 文章目录 IDEA快速部署Spring Boot 项目到Docker一、IDEA 连接 Docker自己的虚拟机远程服务器 二、Maven插件与Dockerfiledocker-maven-pluginDockerfile 三、项目打包上传镜像四、容器的创建与运行容器的创建环境的检查访问项目检验 一、…

4月18日第壹简报,星期二,农历闰二月廿八

4月18日第壹简报,星期二,农历闰二月廿八坚持阅读,静待花开1. 《中国卫生健康发展评价报告(2022)》蓝皮书发布,排名前十依次为:北京、深圳、杭州、上海、青岛、武汉、昆明、广州、厦门和宁波。2.…

【Docker学习三部曲】——进阶篇

Compose 1️⃣ 什么是 Docker-Compose ? Docker Compose 是Docker官方提供的一个用于定义和运行多个容器的工具,它采用了声明式的语法定义单个应用程序的多个容器以及它们之间的相互关系和依赖关系。 使用Docker Compose,您可以通过一个配置文件来管…

消防规范图集大全

总说明 A-800X650 (1)箱体长.煌尺寸代号(尺寸单位:mm) B-1000X700; C-1200X750 D-带灭火器箱组合式消防柜; E-非标准箱。 1本图集是依据现行有关国家标准和规范 在1999年编制的《室内消火栓安装》 (2)水带安置方式代号 (99S202)全国通用给水排水标准图集的基础上重新编制的。 P…

理解TreeMap结构及其实现

TreeMap是基于红黑树(Red-Black tree)的 NavigableMap 实现(是自平衡的二叉树)。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 一、对外开放API TreeMap提供了保证…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

全网最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

目录 一.快速排序 1.基本介绍 2.基本思想 二.Hoare快排 0.前情知识 1.交换数组中的两个元素 2.指定范围的插入排序 1.基本思路 2.代码实现 3.优化思路 三.挖坑法快排(校招中适用) 1.基本思路 2.代码实现 四.二路快排 1.基本思路 2.代码实现 3.优化思路 五.三…

浅谈ChatGPT(人工智能)

带你了解ChatGPT 1.ChatGPT是什么2.ChatGPT的特点3.ChatGPT的用途4.ChatGPT出现给社会带来的影响5.ChatGPT存在的问题6.ChatGPT的未来发展趋势7.总结 1.ChatGPT是什么 ChatGPT(全名:Chat Generative Pre-trained Transformer),是美…

如何通过开源项目搭建私有云平台--第三步:部署镜像仓库

第三步 部署镜像仓库 采用开源的harbor来进行部署,分别在两台服务器进行部署,然后实现两个镜像仓库数据同步 具体部署环境如下: 10.10.10.3 主harbor 操作系统: centos 8 10.10.10.4 备用harbor 操作系统:cen…

【使用者手册】手动改善IntelliJ IDEA和Scala插件性能

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 在…

解决webassembly pthread 子线程调用主线程js问题

解决webassembly pthread 子线程调用主线程js问题 背景: web端项目做了一段时间后,我们需求是加载工程是异步的,主线程会调用wasm方法,wasm内部用pthread创建出来线程,然后在这个线程里边处理任务,处理完…

园区智慧导览地图软件,智慧工厂导航定位怎么解决方案的

智慧工厂导航定位怎么解决方案的地图新基建是行业的核心数字基础需求之一,行业内中已构建了较为完整的城市级地理信息系统。园区管理涉及众多方面,因此园区的智慧信息化建设至关重要,需求越来越广泛。在智慧园区中,基于园区的电子…

【C++类和对象】类和对象(上){初识面向对象,类的引入,类的定义,类的访问限定符,封装,类的作用域,类的实例化,类对象模型,this指针}

一、面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。…