Visual Basic 兴衰记

这是一篇暴露年龄的文章。为什么这么说?因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月,Microsoft 发布了 Visual Basic 1.0 for Windows,次年 9 月,发布了 Visual Basic 1.0 for DOS。这在当时引起了很大的轰动,许多专家把 VB 的出现当做是软件开发史上的一个具有划时代意义的事件。以现在的眼光来看,VB1.0 版的功能其实非常弱,但它在推出时可是第一个 “可视” 的编程软件。这使得程序员欣喜之极,都尝试在 VB 的平台上进行软件创作。到了 1998 年夏天,Microsoft 发布了 VB 6,这是 VB.NET至今仍然无法完全取代的版本。但随着.NET 的兴起,VB 开始走上下坡路。它是如何兴起的,又是如何衰落的?让我们跟着 Matthew MacDonald 的脚步笑看 VB 的风起云落吧!

640?wx_fmt=png

28 年过去了,我们终于要目睹世界上最流行的语言之一,Visual Basic ,开始衰落了吗?

我要坦白一件事,在我成为一名受人尊敬的开发者,使用像 C# 和 Java(以及我们称之为 JavaScript 的热门平台)这样的现代大括号编程语言之前,我曾经是广受欢迎,又有些不合时宜的 Visual Basic 的忠实粉丝。

坦白说,我对 Visual Basic 的迷恋是这样开始的:当我还是个十几岁的孩童时,我就学会了使用 BASIC 语言编程,但不仅仅是任何 BASIC 语言。我是从 Microsoft 那个古董级的 DOS 操作系统上开创性的 QuickBASIC 环境开始的。至今我仍然记得在蓝色背景下用白色文本来编写代码的场景。

640?wx_fmt=png

对于 1998 年的编程来说,QuickBASIC 是不可思议的编程语言。你可以编写不带笨拙行号的代码,在键入代码时能够实时捕获语法错误,并直接从开发环境中启动程序,而不需要用命令行的方式来启动。当你完成代码编写后,你还可以用这些软盘来跟你的朋友分享你的程序:

640?wx_fmt=jpeg

如今,QuickBASIC 只是对遥远过去的另一种好奇心。真的是这样吗?一个叫做 QB64 的创新项目创造了现代的 QuickBASIC 复刻版。它无需模拟器就可以运行在 Windows、MacOS 和 Linux 上。当你用 QB64 运行一个程序时,它会运用一个很巧妙的手法:首先将你的 BASIC 代码翻译成 C++,然后再进行编译。

经典 VB 和可视化时代

对于古老的,基于文本的计算机系统来说,QuickBASIC 是一项令人印象深刻的壮举。但当 Microsoft 发布 Windows,将 PC 用户带到了一个由按键和点击组成的图形世界时,游戏规则发生了变化。在 Microsoft 发布第一个真正成功的 Windows 3.0 的同时,他们也发布了 Visual Basic 1.0。

这是个全新的事物。你可以通过在窗口的表面上绘制按钮来为程序创建按钮,就像它是某种艺术画布一样。要让按钮执行某些操作,你所要做的事就是在设计环境中,双击这个按钮并编写一段代码即可。而且,你没有使用神秘的 C++ 代码,也没有使用成堆的类、复杂的内存管理以及对 Windows API 的晦涩的调用。相反,你就像一个文明人一样编写了友好的 VB 代码。

640?wx_fmt=png

所有图形化的魅力让人印象深刻,但 VB 成功的真正秘诀在于它的实用性。开发人员根本就没有其他工具可以像 VB 那样绘制出一个完整的用户界面并快速编写代码。尽管历史学家喜欢谈论 Visual Basic 的可视化部分,但它的“招牌”能力却与图形化的小部件无关。相反,VB 是因一个传奇性的特性而出名,这个特性叫做“编辑并继续”(edit-and-continue),允许开发人员运行他们的程序,发现并解决问题,然后继续使用新的代码。这与人们已知的几乎所有其他编程环境截然不同,这些环境迫使开发人员重新编译他们的工作,并在每次更改之后重新开始。

最初的 Visual Basic 蓬勃发展了大约十年。一开始是一个对初学者友好的开发环境,后来发展成了一个足以让严肃的程序员使用的工具。通过 VB 6 的发布,这是经典 Visual Basic 的最后一个版本,据估计,用 VB 编写的代码量是很难用的 C++ 编写的代码量的十倍。而且,它们并不仅仅是在模仿玩具应用程序。Visual Basic 通过 ASP(Active Server Pages,动态服务器网页)进入了公司的办公室,甚至连到网络,这是另一种非常流行的技术。现在,你可以创建于 VB 组件交互的 Web 页面,称为数据库,并动态编写 HTML。所有这些几乎都是在没有结构的情况下发生的,除非你自己选择创建一个结构。这是 Visual Basic 的一个不成文主题,它给了你现在的自由,以后你会后悔的。

经典 VB 的问题

经典 VB 在很多圈子里声名狼藉。面向对象的狂热分子经常抱怨 VB 缺乏对继承的支持。(其实这是一个奇怪的批评,因为对于不太熟练的开发者来说,继承常常是搬起石头砸自己的脚的好方法,而这正是 VB 不需要的那种功能。)事实上,经典的 VB 并非面向对象的“懒汉”。在它的生命周期结束时,它已经支持接口、多态性和类库,而所有这些都是从 COM 借鉴来的,COM 是组件技术的核心部分,它硬链接到 Windows 的每个版本中。

经典 VB 的真正问题在于它太过成功。它极为有效地降低了新程序员的学习障碍,使得几乎任何人都可以使用 VB 进行编程。粗心大意的新手、无聊的公司员工和暑期学生都纷纷涌进来,解决了在任何其他平台上更为困难的挑战,到处都是意大利面条式的代码。

换句话说,因为 VB 很容易使用,即使你不是一名训练有素的程序员,VB 也很容易使用,所以很多没有受过专业训练的程序员都在使用 VB。而 VB 却从来没有采取任何措施来鼓励他们纠正自己的坏习惯。

VB.Fred 与 .NET 解决方案

快进到 2002 年,Microsoft 正在做它最擅长的事情,通过引入一种全新的做事方式,颠覆了自己的开发生态系统。

这一次,这个项目是对 COM 的大规模重构,而组件技术是支撑 Windows (以及间接的经典 VB)的基础。对于一家已经下过几次这样的赌注的软件巨头来说,这是一个孤注一掷的时刻。

640?wx_fmt=jpeg

Microsoft 之所以将这次重新启动命名为 .NET,是因为一些可疑的原因,包括互联网技术仍然是崭新的、令人兴奋的事实,以及因为 .NET 包含了 Microsoft 一心要推广的 Web 服务功能。它深受 Java 的影响,并且包含了许多工具,用于与数据库通信、构建网站、编写多线程程序、通过套接字建立连接的工具,这些几乎是所有业务开发人员能想象到的用例。

唯一的问题是,为了获得这些新特性,Microsoft 不得不放弃几乎所有的经典 VB。

640?wx_fmt=jpeg

如果你仔细看的话,就会发觉,新版本 VB.NET 看起来还是个老样子。但它还是有许多大大小小的突破性变化。从大的方面来说,旧的 VB 程序将受困于老旧的编程世界中,而一个极其糟糕的迁移向导几乎没有改变这一点。从小的方面来说,经典 VB 的程序员必须改变他们计算数组元素的方式。他们再也不能像普通人那样从 1 开始了。现在他们必须从 0 开始,就像正式的程序员一样。

还有一个大的方面:开发人员是众所周知的抱怨者,而 VB 开发人员尤甚。不久,一群有影响力的 VB 开发人员将 Microsoft 的新编程环境命名为 VB.Fred,并强调无论它是什么,这种新语言都不是 Visual Basic。

是什么宣判了 Visual Basic 的命运

你可能会认为,是 .NET 的变化毁坏了 VB 的基础,并让 VB 不可避免地走向衰落。但事实并非如此。事实上,尽管 VB.NET 朝着一个新的方向发展,并作出了一些突破性的改变,这些改变使优秀的经典 VB 代码成为无人能识的代码,但它却变得非常受欢迎。那是因为 VB.NET 提供了 VB 开发人员以前从未有过的东西:尊重。

在 .NET 世界中,VB 和 C# 处于平等的地位。每一行 VB 代码都可以转换成等效的 C# 代码行,反之亦然。两种语言都具有相同的功能,使用相同的组件,并编译为完全相同的形式,我们称其为中间语言(intermediate language)。VB 终于摆脱了“丑小鸭综合症”。

但是,作为另一种受人尊敬的编程语言,它也存在一个问题。人们对 VB 的热情消失了,不再是许多人的首选语言了。这不是因为 VB 变了,而是因为 C# 变了。

正如 VB 获得了与 C# 相同的功能一样,C# 也获得了与 Visual Basic 相同的便利。例如,.NET 的类型安全和内存管理功能意味着 C# 开发人员永远无须担心内存泄漏问题,就像 VB 开发人员一样。

换句话说,C# 现在有了保护业余爱好者、学生和新程序员的“护栏”,而又不放弃它的力量。突然之间,VB 不再是什么特别的东西了,它只不过是一个有能力的程序员工具包中的另一个工具罢了。

Visual Basic 当前的现状

今天,Visual Basic 正处于一个奇怪的位置。在专业开发人员中,几乎没有人使用 Visual Basic,它甚至都没有出现在专业开发人员调查中的清单,也没有出现在 GitHub 存储库中。然而,Visual Basic 仍然在那儿,将 Office 的宏连接在一起,为旧的 Access 数据库和古老的 ASP 网页提供支持,并吸引 .NET 新手。TIOBE 索引 试图通过查看搜索引擎的结果来衡量语言的流行程度,它仍然将 VB 排在最受关注的五大编程语言之列。

但这种势头似乎已经发生了最后一次变化。2017 年,Microsoft 宣布,它将开始为 C# 添加新的语言功能,而这些功能可能永远不会出现在 Visual Basic 中。这一变化并没有使 VB 回到丑小鸭状态,但它确实消除了 VB 的一些 .NET 状态。

事实上,将 VB 边缘化的趋势已经存在多年了。严肃的开发人员都知道,.NET 的关键部分是用 C# 编写的。他们知道 C# 是演示文稿、书籍、课程和开发者研讨会的首选语言。如果你想使用 VB,它并不会影响你构建的应用程序,但它可能会妨碍你和其他开发人员交流的能力。

Visual Basic 本应在教育市场有一个天然的契合点。但即便如此,它仍然是个“败家子”,像 C# 和 Python 这样的现代语言现在已经足够简单、安全,完全可以作为他们的第一门语言来学习。如果你需要教给小孩更简单的东西,市场上充斥着像 Scratch 等图形化编程工具。像 C#、C、JavaScript 这样的大括号编程语言也有另一种吸引力,因为它们都有自己的语法。因此,学过一种编程语言的人很快就能熟练掌握另一种语言。

随着 Web 开发的发展,Microsoft 正眼睁睁地看着机会流失。谁不会被和 VB6 一样容易使用,还可以编译成 JavaScript,并与 HTML 表单设计器配对的 VB 版本所吸引呢?是的,它并不是构建下一个 Google Maps 的适合工具,但它可以重新唤起 Visual Basic 的吸引力,让商业开发人员、学生和爱好者创建简单的在线应用程序,而不必像 JavaScript 那样笨拙。相反,Microsoft 创造了一个基于 VB 的产品,叫做 LightSwitch,但它随着 Silverlight 浏览器插件的消失而消失。如果 Microsoft 开发出另一款面向大众的编码产品,它更有可能是一种低代码模板驱动的工具,比如 PowerApps。

Visual Basic 以前也不是没受到过威胁,但这一次感觉不一样了。作为世界上曾经最流行的编程语言之一的太阳,似乎终于要落下了。即使这是真的,Visual Basic 在几十年内也不会消失。相反,它将会成为另一种遗留产品,一个被忽视的工具,没有激情,也没有未来。不管我们失去了什么特别的东西,或者,最终让一条老狗摆脱痛苦,这一切,都由你来决定。

作者介绍:
Matthew MacDonald,技术作家、教师、程序员。著有几十本图书,现在教育孩子学习编程和科学。

 原文地址:https://www.infoq.cn/article/oKQS4-KFJsUBGYMrcYN7


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

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

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

相关文章

Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated) D. Kuroni and the Celebration 交互 + 思维

传送门 文章目录题意:思路:题意: 给你一颗树,每次可以询问两个点的lcalcalca,询问次数不能超过⌊n2⌋\left \lfloor \frac{n}{2} \right \rfloor⌊2n​⌋,求它的根。 n≤1e3n\le1e3n≤1e3。 思路&#xf…

【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】

传送门 题意:给一个NMN \times MNM的空棋盘,每次选取两个曼哈顿距离为3的空格子放上棋子,问最多能放多少个。 1≤N,M≤1e91 \leq N,M \leq 1e91≤N,M≤1e9 暴力讨论 假装N≤MN \leq MN≤M ①N1N1N1 容易得到,详见代码 ②N2N…

函数式编程里的Materialization应该翻译成什么?

Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程.首先, 搜了一下中文资料, 暂时没有对该词的中文翻译, CSDN\博客园\阿里云上所有关于它的文档都没有做中文翻译, 直接沿用这个英文单词.难道轮到我来创造这个词的中文翻…

Ozon Tech Challenge 2020 (Div.1 + Div.2) E.Kuroni and the Score Distribution 构造

传送门 文章目录题意:思路:题意: 思路: 不难想到,长度为nnn的数组最多的满足条件的三元组序列是1,2,3....,n1,2,3....,n1,2,3....,n,对于每一个位置贡献为i−12\frac{i-1}{2}2i−1​,那么如果m…

【CF1209E】Rotate Columns【状压DP】【位运算】【贪心】

题意:给一个NMN \times MNM的矩阵,可以进行任意多次操作将一列轮换,求每一行的最大值之和的最大值。多组数据。 Easy VersionN≤4N \leq 4N≤4,M≤100M \leq100M≤100 Hard VersionN≤12N \leq 12N≤12,M≤2000M \leq2000M≤2000 看这数据…

Exceptionless(二) - 使用进阶

作者:markjiang7m2原文地址:https://www.cnblogs.com/markjiang7m2/p/11100563.html官网地址:http://letyouknow.net在上一篇文章Exceptionless - .Net Core开源日志框架中就说到如何对Exceptionless进行本地化部署,不过我也跟大家…

Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化

传送门 文章目录题意:思路:题意: 给你nnn个数,每次操作可以选择将某个数1,−11,-11,−1,求最少进行多少次操作使得所有数都为正数且gcd>1gcd>1gcd>1。 思路: 考虑gcd2gcd2gcd2的情况&#xff0…

【洛谷P4841】城市规划【指数型生成函数】【麦克劳林级数】【多项式对数】

传送门 题意:求NNN个点的带标号无向连通简单图的个数。 N≤130000N \leq 130000N≤130000 这个问题的主要矛盾在于连通 这个并不好表示,但可以用这个表示出不要求连通的方案数 由于带标号,先构造答案的EGF f(x)∑i0∞aii!xif(x)\sum_{i0}…

基于 Kong 和 Kubernetes 的 WebApi 多版本解决方案

前言大家好,很久没有写博客了,最近半年也是比较的忙,所以给关注我的粉丝们道个歉。去年和朱永光大哥聊的时候提了一下我们的这个方案,他说让我有空写篇博客讲一下,之前是非常的忙,所以这次趁着有些时间就写…

CodeCraft-20 (Div. 2) D. Nash Matrix 构造 + dfs

传送门 文章目录题意:思路:题意: 给定一个n∗nn*nn∗n的矩阵,每个点上面都有一个xi,yix_i,y_ixi​,yi​,表示这个点到xi,yix_i,y_ixi​,yi​这个点停下,当xi−1,yi−1x_i-1,y_i-1xi​−1,yi​−1的时候代表…

【HAOI2018】染色【反向二项式反演】【NTT卷积】

传送门 题意:NNN个位置染MMM种颜色,恰好出现SSS次的颜色数量恰好为kkk时的愉悦度为wkw_kwk​,求所有方案的愉悦度之和。对100453580910045358091004535809取模。 N≤1e7N \leq 1e7N≤1e7,M≤1e5M \leq 1e5M≤1e5,S≤150S \leq 150S≤150 本题的恶心之处…

从严治码-别人在项目中下毒,我该怎么治?

01 从软考说起从4月份开始,由于备考《系统集成项目管理工程师》的原因,博客没有持续更新,在上半年考试结束之后,又对项目进行了一些收尾的工作。下面就这段时间的学习作一个记录和总结吧。在学习的过程中,提炼了一些自…

CodeCraft-20 (Div. 2) C. Primitive Primes 思维 + 数论

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个长度分别为n,mn,mn,m的多项式&#xff0c;将他们乘起来&#xff0c;问系数modp0\bmod p 0modp0的项的指数是多少&#xff0c;两个多项式所有项的系数gcd1gcd1gcd1。 n,m<1e6n,m<1e6n,m<1e6…

【LOJ166】拉格朗日插值2【拉格朗日插值】【NTT卷积】

传送门 题意&#xff1a;给定n,m,f(0),f(1),......,f(n)n,m,f(0),f(1),... ...,f(n)n,m,f(0),f(1),......,f(n)&#xff0c;求f(m),f(m1),......f(mn)f(m),f(m1),... ...f(mn)f(m),f(m1),......f(mn) 模998244353998244353998244353 n≤100000,m≤1e8,n<mn \leq 100000,m \…

学习MVVM设计模式后第一次用于生产

WPF的MVVM设计模式从winform转变到WPF的过程&#xff0c;难点主要还是在MVVM的设计模式。当然&#xff0c;如果依然采用winform的涉及方式&#xff0c;在每个控件背后绑定事件的方式运用在wpf中&#xff0c;依然可行&#xff0c;但是假如GUI改版&#xff0c;其背后绑定的特别为…

剑指 Offer 14- II. 剪绳子 II

给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n>1并且m>1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少&#xff1f;例如&#xff0c;…

Educational Codeforces Round 108 (Rated for Div. 2) D. Maximum Sum of Products 思维 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个长度为nnn的数组a,ba,ba,b&#xff0c;你可以至多反转一段连续区间&#xff0c;求∑i1nai∗bi\sum _{i1}^n a_i*b_i∑i1n​ai​∗bi​最大是多少。 n<5e3n<5e3n<5e3 思路&#xff1a; 首…

【CF1215E】Marbles【状压DP】

传送门 题意&#xff1a;给一个长为NNN的序列aaa&#xff0c;每次操作交换两个相邻位置&#xff0c;求最少操作次数使得所有相同的值连成一片。 N≤400000N \leq 400000N≤400000,ai≤20a_i \leq20ai​≤20 我们发现aia_iai​很小&#xff0c;盲猜单独考虑 我们重新确认一个…

netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统用户管理菜单管理角色管理权限管理[精确到按钮]&#xff09;代码生成器代码克隆到本地 用vs2017或以上版本 打开工程。项目结构如下&#xff1a;找到DbModel下面的初始化db脚本里面包含4张表的schema和初始化数据…

剑指 Offer 25. 合并两个排序的链表

输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4 限制&#xff1a; 0 < 链表长度 < 1000 思路&#xff1a;和…