我与Visual Basic的那些事儿

公元2000年,IEEE计算机协会的一份期刊《Computing in Science & Engineering》上,两位客座编辑Francis Sullivan和Jack Dongarra遴选出了20世纪科学与工程的实践与发展上最具影响力的十大算法 [1] 。随后,Barry Cipra又在SIAM News上发表文章对这十大算法进行了综述 [2] 。2016年,SIAM的主席Nick Higham对原来的十大算法列表进行了些许调整,并给出了自己的名单 [3] 。两份名单在十大算法中的七项上基本达成了一致,而著名的快速傅立叶变换算法(FFT,Fast Fourie Transform)则两次均入选十大算法之列。

快速傅立叶变换算法由James Cooley和John Tukey于1965年共同提出,因此FFT又称为Cooley–Tukey算法。FFT是离散傅立叶算法(被认为是数字信号处理的基石)的一种快速算法,其时间复杂度仅为O(Nlog(N));比时间效率更为重要的是,快速傅立叶算法非常容易用硬件实现,因此它在电子技术领域得到极其广泛的应用。John Tukey曾经在普林斯顿大学担任教授,期间他曾指导过的博士生之一便是托马斯·库茨(Thomas E. Kurtz)。


Thomas E. Kurtz从普林斯顿大学毕业之后,进入常春藤盟校之一的达特茅斯学院教授统计和数值分析课程。后来他与同在达特茅斯学院任教的约翰·凯默尼(John G. Kemeny )共同发明了著名的BASIC语言,时间是在1964年。二人(如下图所示)也因BASIC语言之父的名声而享誉学术界。Thomas E. Kurtz是ACM的会士。John G. Kemeny 则在1970到1981年间担任达特茅斯学院的第13任校长。John G. Kemeny 还曾经担任“三里岛事件”调查委员会的主席。

BASIC是一种高级程序设计语言,英文全称是 ” BeginnersAll-PurposeSymbolicInstructionCode “,取其首字母后简称为”BASIC”,就名称的含意来看,是”适用于初学者的通用符号指令码”,是一种在计算机发展史上应用最为广泛的程序设计语言。与C或C++语言不同(它们都属于编译型),BASIC是一种解释型的计算机语言。

在486、586直到奔腾计算机的时代,BASIC语言曾经非常流行。一个我们非常熟知的事实是清华大学谭浩强教授编著的《BASIC语言》发行量超过1250万册,创科技书籍发行量的世界纪录。他还曾在中央电视台系统地向全国观众讲授包括BASIC在内的7种计算机语言,观众超过500万人,引领无数人进入计算机世界大门。笔者所系统地学习的第一门计算机语言也正是BASIC,彼时大约应该是小学五年级左右。就一个初学者而言,BASIC确实是非常好的入门选择,它的语法规则非常简单,而且又不涉及像C语言中的指针概念,即使对于小学生而言,也可以藉此体会计算机编程的乐趣。

在20世纪80年代中期,美国国家标准化协会(ANSl)根据结构化程序设计的思想,提出了一个新的BASIC标准草案。在此前后,出现了一些结构化的BASIC语言,主要有True BASIC、Quick BASIC、Turbo BASIC等。其中,True BASIC是由两位发明者约翰·凯默尼和托马斯·库茨于1985年推出的严格遵循ANSI标准的BASIC。

1987年微软公司推出了Quick BASIC,它提供了一个开发程序的集成环境,用户在编程序、修改、编译、调试、运行时均可通过菜单进行操作、十分方便。后来伴随着MS-DOS 5.0的推出,微软公司也同时推出了QBASIC,并作为MS-DOS 5.0的一个组成部分免费提供给用户。QBASIC与Quick BASIC完全兼容,是Quick BASIC的简化版本,除不能编译及减少了初学者暂时用不着的一些调试工具外,它具有Quick BASIC的大部分功能。QBASIC采用先进的解释方式,速度更快,是一种会话式的语言,编写的程序可以立即运行并得到结果。

这一时期,微软公司BASIC产品的主要竞争对手是Borland公式的Turbo BASIC。作为一个完整的编译器和开发环境,Turbo BASIC同样提供了方便用户编辑和调试程序的环境,而且还能编译出MS-DOS底下的原生程序码。

随着Windows 3.0的推出,越来越多的开发商对这个图形界面的操作系统产生了兴趣,大量的Windows应用程序开始涌现。但是,Windows程序的开发相对于传统的DOS有很大的不同,开发者必须将很多精力放在开发GUI上,这让很多希望学习Windows开发的人员怯步。1991年,微软公司展示了一个叫Thunder的产品,所有的开发者都惊呆了,它竟然可以用鼠标“画”出所需的用户界面,然后用简单的BASIC语言编写业务逻辑,就生成一个完整的应用程序。这种全新的“Visual”的开发就像雷电(Thunder)一样,给Windows开发人员开辟了新的天地。这个产品最终被定名为Visual Basic。

1991年4月,由微软公司开发的Visual BASIC 1.0 版本正式发布,这在当时引起了很大的轰动,许多专家把Visual BASIC的出现当作是软件开发史上的一个具有划时代意义的事件。Visual BASIC,顾名思义,就是“可视的BASIC”,它源自于BASIC编程语言。不同点在于它是图形界面的BASIC,它是用于Windows系统开发的应用软件,采用事件驱动,并使用Quick BASIC的语法和可视化的IDE。

从1992到1995的四年时间里,微软也不失时机地接连推出了 2.0、3.0、4.0 三个版本。并且从 VB 3.0 开始,微软将Access的数据库驱动集成到了 Visual BASIC 中,这使得其数据库编程能力大大提高。从 Visual BASIC 4.0 开始,Visual BASIC 也引入了面向对象的程序设计思想。此时,Visual BASIC已经取得巨大成功,并逐渐成长为一种结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言

1994年,微软公司为了表彰七位杰出人士为Windows的成功而做出的巨大贡献,决定授予他们视窗先锋(Windows Pioneers)奖。被称为Visual Basic之父的阿兰·库珀(Alan Cooper)即位列其中(下图即为阿兰·库珀)。


七位视窗先锋(及他们的主要贡献)分别是:
  • 阿兰·库珀(Alan Cooper):以 Visual Basic 之父而闻名于世;
  • 莱尔·格里芬(Lyle Griffin):开发了Micrografx Designer,这是视窗系统上最早的图形化应用程序;
  • 乔·古思里奇(Joe Guthridge): 领导了 Samna Amí 的开发,这是首个Windows文字处理程序,后来被命名为 Lotus Word Pro;
  • 泰德·约翰逊(Ted Johnson):领导了 PageMaker 桌面出版软件的开发,还是 Visio 公司的联合创始人;
  • 艾·凯尼格(Ian Koenig):领导了 Reuters Terminal 财务信息软件的开发;
  • 雷·奥兹(Ray Ozzie): Lotus Notes的作者,并于2005-2010之间任微软公司首席软件建构师;
  • 查尔斯·佩措尔德(Charles Petzold):Windows编程系列图书的作者, 同时以其他多本针对Microsoft产品的经典编程书籍而著称。

值得一提的是,笔者有幸还是视窗先锋奖得主查尔斯·佩措尔德经典著作《编码——隐匿在计算机软硬件背后的语言》一书中文版的译者(下图即佩措尔德和他的经典著作)。

1998年6月15日,微软公司推出Visual BASIC 6.0。Visual BASIC 6.0作为Microsoft Visual Studio 6.0工具套件之一,在数据访问方面有了很大的改进,新的ADO组件让对大量数据快速访问成为可能,提供了与Oracle和SQL Server的数据库链接工具。Visual BASIC 6.0的Web开发特性可以使得开发人员以更方便、组件式的方法,开发各种HTML和动态HTML的应用程序。这些新特性,使得Visual Basic 6.0成为建立可扩展的企业级应用开发平台的理想选择。可以说,Visual Basic 6.0 在当时已经是非常成熟稳定的开发系统,也是历史上最为经典、最受欢迎的Visual Basic 版本之一。

我个人跟Visual BASIC的第二个缘分也跟Visual Basic 6.0有关。记得在学校做TA的时候,我所指导的一门课程就是”User-Centered Design and Testing“。作为介绍软件开发中的界面设计与测试方法的课程,这门课选择了绘制GUI非常方便的Visual Basic 6.0作为课程作业实现的配套工具。大约也就是在那个时候,我同步参与了《Visual Basic 6.0程序设计》一书的翻译工作(后由电子工业出版社出版)。该书英文原版的名称是《Programming with Microsoft Visual Basic 6.0》,作者是Diane Zak。


2002年开始,微软将.NET Framework与 Visual Basic 结合而成为 Visual Basic .NET,重新打造 Visual Basic,新增许多特性及语法,又将 Visual Basic 推向一个新的高度。此后,Visual Basic 一直作为Visual Studio中的重要成员而不断完善和演进。毫无疑问,Visual Studio是目前最流行的Windows平台应用程序的集成开发环境,其最新版本为 Visual Studio 2017 版本,基于.NET Framework 4.5.2。

但是,似乎很多人对于Visual Basic的感观并不理想,觉得这是与实际应用离得非常遥远的一门计算机语言。觉得一般用C、C++、C#、Java和Python的情况要远远多于Visual Basic。甚至有人会怀疑Visual Basic还活着呢吗?事实上,在计算机编程语言排行榜TIOBE上Visual Basic(或者写成Visual Basic. Net)一直在十名左右的位置上。下图是2002到2013年各年度计算机语言的热度情况。可见,Visual Basic一直占有一席之地。


下表是本文撰写时,世界排名前十的计算机语言。

如果你觉得Visual Basic已经被淘汰了,那明显与事实不符。如果你觉得身边好像也没什么人在真正用Visual Basic做开发,那或许是中国软件行业中(或者仅仅是你身边)用Visual Basic比较少。但事实证明如果在从全世界范围内来看,Visual Basic的使用仍然非常广泛。即使就个人来说,在开发一些Windows系统上的小型桌面应用的话,Visual Basic绝对是最便捷、最好用的工具之一。即使是一些非计算机专业出身的人,像一些数学系、物理系的学生,如果要开发一些实用的GUI程序来帮助提升自己的工作效率,那么Visual Basic简直是不二之选。

我觉得我个人跟Visual Basic还是挺有缘分的。我所学习的第一个计算机语言就是BASIC。之前当学生时候做TA,Tutorial的课也是用Visual Basic,还参与过一本Visual Basic外版书籍的翻译,尽管我的名字并未出现在封面上(而是出现在前言中的参与者列表里)。过去也用Visual Basic开发过不少小的桌面应用程序,都觉得很好用。今年以来,我准备陆续发一个讲授Visual Basic程序开发的快捷系列教程(已经发布的内容如下),希望可以帮助更多人走进编程的世界。

Visual Basic快捷教程

参考文献

[1]: Francis Sullivan,Jack Dongarra,Guest Editors’ Introduction: The Top 10 Algorithms,Computing in Science & Engineering 2000 vol. 2 Issue No. 01 - January/February
[2]: Barry A. Cipra,The Best of the 20th Century: Editors Name Top 10 Algorithms,SIAM News,Volume 33,Number 4,(原文获取链接)
[3]: Nicholas J. Higham,The Top 10 Algorithms in Applied Mathematics,(原文获取链接)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")