综合
首页 > 学术社区 > 文章 > 正文

Basic :“青春长驻”还是“菜鸟陷阱”


评论(0)|2017-07-22|发布:andazon |收藏

Basic :“青春长驻”还是“菜鸟陷阱”

Basic语言已经四十多岁了,在计算机技术发展史中,能被广泛使用四十年以上的语言实在数不出几个,可谓青春长驻。有趣的是,一方面许多人都在使用它,另一方面Basic又被人们冠以“初学者语言”的帽子,而且好象永无摘帽的日子。
Basic语言能长盛不衰,与微软公司有着太大的关联,更确切地说(个人猜测),是与微软老板比尔盖茨的“Basic情结”有关,毕竟在老比同志最初的发家史上,Basic语言是微软帝国的“开国元勋”之一(另一“开国元勋”则是微软养子MS-DOS)。正如许多人都对初恋情人念念不忘,想必老比同志对Basic也是情有独钟的,因此微软公司几十年来一直对Basic语言给以全力支持,进行了不断的完善,使之成为了世界上使用率最高的几种高级语言之一。
Basic之所以生命力旺盛,与其设计者不断进取、兼容并包的精神有着很大的关系,事实上,Basic语言总是在积极汲取先进的思想与技术这一过程中不断地进步与完善自己。
最早的Basic是一种解释型的语言,“化繁为简”是其设计者的最初想法,但这种“简单”可不简单,具有不可思议的魔力,迅速得到了业界的认可,早期的电脑,比如Apple II,甚至将Basic解释程序固化在ROM中。
随着结构化编程理论的成熟,Basic语言及时地引入了Sub和Function的概念,并支持递归调用。接着又把编译语言的特性引入到Basic的开发工具中,出现了编译型的Basic。
巨大的变化发生于PC操作系统由DOS向Windows的转移时期,Visual Basic横空出世,其“所见即所得”的用户界面设计方法,其“事件驱动”的编程方式,无不体现出设计者的创新精神,代表当时软件技术的新高度,也正是从这时起,Basic日益脱离了纯计算机语言的范畴,与具体技术的结合日趋紧密,事实证明,这条路能有效地提升软件开发效率,不久,VB3、VB4、VB5相继推出,一步一个台阶,不断进取的VB取得了巨大的成功,使VB成为了全世界使用者最多的计算机语言之一。
VB的出现与兴盛,体现出一个简单的道理——创新才是产品的生命力。
1998年VB6发布,这个版本虽然在功能上并未全面采用面向对象技术,但在各方面都使传统的VB开发方式达到完善的境地,借助VB3,4,5三个版本的打下的成功基础,VB6使VB达到了一个顶峰,全世界使用者达到百万!
辉煌的同时,潜在的危机开始显现,主要体现在Delphi上,强大而灵活,全面向对象的Delphi成了真正的“VB杀手”,攻城掠地,让VB由盛转衰。
面对Delphi的强大攻势,VB节节败退,渐渐地,使用VB开发的人都被看成是“水平有限公司”的成员,VB成了“菜鸟语言”,并在许多论坛上引发了多场“语言优劣”的大论战,其激烈程度远比所谓的“大学生辩论会”好看得多。
事实上,90年代面向对象技术开始兴起时,VB的设计者就看到了这点,并从5.0版本开始引入OO的思想,然而其进展的脚步太慢了,一直到VB6,都只是个“半吊子”的OO语言,这反映出设计者的思想开始趋于保守,不愿对VB进行大的改进了。唉,一个人,小有成就之后就容易骄傲,过去的成功会成为进步的障碍。
但话又说回来,如果没有VB6的固步自封,怎会有后来Delphi的辉煌?
1998年起到2002年为止,微软公司在开发工具上没有新品推出,这也是第三方厂商产品(比如Borland公司的Delphi)的黄金时光。2002年,随着VS.NET 2002的推出,大家终于发现微软公司这些年来并未闲着,其实在卧薪尝胆。
在VS2002中,VB变成了VB.NET,变得让老VB们认不出了!VB.NET的设计者冒着不再兼容以前开发模式的风险,让VB来了个脱胎换骨,成为了一个全面向对象的编程语言。VB.NET比之VB,除了保留了VB原先的语法特性,其内里已完全改变。我一直觉得与其把VB.NET看成是VB6的升级,还不如说是一种新的语言,也许改名“B#”更确切。
敢于放下旧包袱,轻装上阵,向新的领域进军,这是勇者的行为!不容易啊,这世上有多少人在小有成就之后就“小富即安”了?对VB.NET的设计与开发者的勇气敬礼!
那重新出山的新一代VB.NET还能重整旧山河吗?
但“青山依旧在,几度夕阳红!”。 VB的昔日辉煌已不可重现。
首先,VB.NET变革的彻底使原来VB程序员很不适应,VB.NET学习曲线与C#不分高下,加上原来VB所拥有的“坏”名声,使老的VB程序员被分化——只有部分升级到VB.NET,另有一部分转向了C#;对于初学者而言,由于微软宣传工具的巨大力量,都跟风去学C#去了。
其次,软件技术发展到虚拟机大行其道的时代,编程语言已退居次要地位,在.NET平台之上,岂可能有一门独大的语言?
所以,新一代的VB.NET虽然在功能不上弱于其它的OO语言,但也只能“无可奈何花落去”。技术的进步的重点在不断地转移,新的计算机语言技术研发不再是软件技术发展的中心,这也是当前所有计算机语言所面临的共同问题。
第三,所有的计算机语言都还面临着一个定位的问题,定位不准,就有被淘汰的危险。
C#与VB.NET,这两个.NET上的主流语言,到底有何差别?在语言功能上,两者实在难分伯仲,一个是后起之秀,一个是沙场老将,微软会如何取舍,给这两名大将在“微软帝国”朝廷中什么样的“官”当呢?
在VS.NET 2003中,这两者的定位还看得不清楚,而2005年VS2005的发布,让我感受到了两种语言不同的发展方向。
VS2005中,VB.NET语言有了一些重要的变化,虽然不象从VB6到VB.NET那样惊天动地,却也意味深长。
1.回到VB6的时代
建立VB6的工程后第一个看到的就是Form1,可以直接通过窗体名访问窗体上的控件。
到了VB.NET 2003,这种方式被完全面向对象的方式所取代,一个窗体是一个对象,而在使用一个对象之前,必须先NEW它,而要访问另一个窗体上的控件是比较麻烦的,程序员必须建立起OO的思想后才能真正灵活地在各窗体间建立各种关联(参见本人拙著《编程的奥秘》一书)。
VB2005中,现在又可以直接使用Form1了。其实,VB2005在内部还是以面向对象的方法管理窗体的,但仅从使用角度,程序员已“看不到”这点了。
2. 实在太方便的My名字空间。
这个东东实在太好了,从系统API到资源文件,从多媒体、网络到计算机硬件信息,包容各种各样的功能,其使用之方面,真让其它语言(比如C#)的使用者垂涎三尺!
3. .NET新特性的引入
(1)范型:范型的引入,使创建强类型的集合成为很Easy的一件事,对于其元素是值类型的而言,对性能的提升实在很大。
(然而,VB2005的范型语法使用了一个Of关键字,实在是丑陋,不如C#中的尖括号简洁,C#的范型语法是模仿C++的,但却不是机械地照搬。事实上,C++中的范型编程语法也不好,经常会出现一长串的数据类型定义,看得让人头昏。)
(2)部分类:提供了扩充组件库的新方式。
上述两个特性应用得当,都可以减少代码总量,减少系统中类的数量,从而降低系统的复杂度。
其它还有一些小改进,就不说了。
从VB2005的新特性来看,设计者除了引入.NET 2.0的新特性,还是回到了以“追求简便”,“追求高的开发效率”的路子上,各种新语言特性的引入都是为了能在最短的时间内开发出应用系统。这可以看成是从纯OO向传统VB编程方式的部分回归,降低了学习曲线。相比C# 2.0,初学者学VB2005更容易上手些。
然而,VB2005对于初学者而言,在方便性的背后却隐藏着“可怕”的陷阱,引诱人去犯错误。
1. 代码编辑器的Insert snippet功能:所谓snippet,其实就是完成特定功能的代码段,在VB2005项目中,有大量的snippet可供插入,将这些预制好的可复用代码块插入后,即进入同步代码修改状态,非常方例。这就引诱人到处去Insert snippet,其结果是项目中出现大量的重复代码。这可不是一件好事。
这种功能还让人偷懒,不想费脑筋在系统设计上下功夫(好的系统设计可以大大地减少重复代码,从而提升项目的可维护度),是一种变相的“Copy & Paste”编程方式。出现大量的重复代码,属于“菜鸟”所写代码的主要特征。看来,VB“菜鸟语言”的帽子带得更紧了。
但此功能对于有经验的程序员来说,应用得当,实在是可以大大地提高开发效率。
2.Form1的回归:从表面上看通过Form1、Form2等名字直接访问窗体好象很省事,但对于初学者而言,这种方式却阻碍了他理解面向对象的思想,不掌握OO思想,在给程序排错时往往会“昏菜”,而且当需要转用C#开发时会不知所措。事实上,大多数真正的项目中,还是采用先new对象再使用对象这一OO基本方式的,VB2005的这种设计,很容易引诱初学者对面向对象技术“不求甚解”。
3.大量的封装:My名字空间太好用了,好用到可使初学者不知道.NET Framework的体系结构,不知道API的概念也可以编程的境地。这样下去,人可能真的会变成“懒猪”了。
4.“无用”的向导:VB2005中提供了不少的向导,这些向导除了把人变成“木偶”之外,好象没多大用。比如数据库窗体向导,真实的项目会用吗?如果初学者只会使用这个向导写数据库程序,他是不太可能会理解为什么当前系统大多采用分层架构,将界面层与逻辑层功能分开。
“向导”引诱人们写出各种代码“混成一团”的软件。
其实,向导是有用的,我总结了一下,至少有两个用途:
(1)学习:认真研读一下向导生成的代码,可以深入理解许多技术。
(2)快速开发:软件工程中有一种“原型法”,因此在实际开发中可使用这些向导快速地开发出一个系统原型用于捕获用户需求,非常方便。
还可以再列出一些“陷阱”,以后想到了再补充。
编程语言本质上是一种工具。
对于一个工具,必须知其“利”,亦需知其“害”,方可御之而不为其所御。我在这篇小文中说了不少VB2005的“坏话”,其实我是很喜爱她的,因此,才不希望看到她被误用,被误解,更不希望她凭“资色”去引诱一些“涉世未深”的“少年”去“犯错误”,走弯路。
其实,VB还是很“秀色可餐”的,而且Basic语言能几十年长盛不衰,难您不想了解了解其“青春长驻”的秘密吗?

——(转贴请注明作者名及出处)

系统分类:编程语言 >> C#

评论
请登录再发布评论,所有评论仅代表网友意见,本网站保持中立