6.3 前台语言——视觉与交互的艺术
世人反不难而易之,用是通者亦罕。
——《欧阳修·诗解统序》
关键词:前台语言;VB;Delphi;JavaScript;AJAX
摘 要:简谈VB;Delphi和JavaScript
预览
Delphi让复杂的事情变得简单,VB让简单的事情变得更简单。
它(JavaScript)宛如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝。
待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如是。
大道相通,难者亦易,易者亦难。
得道者化腐朽为神奇,离道者化神奇为腐朽。
提问
Visual Basic和Delphi有何共同点和不同点?
相比其他的富客户端技术,JavaScript的前景如何?
JavaScript是一门严肃的语言吗?
前台编程、后台编程与系统编程,哪个最难?
讲解
稍事休息后,冒号切换了话题:“接下来简单聊聊Visual Basic和Delphi。”
叹号略带得色:“Visual Basic最好用了,建个窗体,从工具箱中拖些控件,再定义一下它们的属性和行为,搞定!”
冒号点点头:“VB最大的优点就是易学易用、上手快开发快,对非计算机专业人士尤其具有吸引力。”
引号咬文嚼字:“言外之意,VB对于专业人士就不那么合适了?”
“恐怕也不好这么说。”冒号打了个哈哈,“当然简单易用不是没有代价的,随便拖放一个控件,就生成了一大堆代码,程序员的发挥余地自然受限,代码效率也难以保证。不过VB多用于前台的可视化开发,对运行效率要求相对较低,因此还是很有市场的。另外,VB进化到VB.NET后,从单纯的事件驱动式的编程范式发展为对象式、泛型式和函数式等多种范式,越来越强大、越来越严格,也越来越复杂,不再是人们戏称的‘玩具语言’了。”
逗号插话:“用Delphi来开发图形界面不也很快吗?”
冒号接过话来:“正因为它们擅长可视化快速应用开发(RAD),才常常作为前台语言来使用。事实上,它们不单单是语言,也是开发环境。没有IDE,人们照样能写C、C++、Java、Perl等代码,但恐怕很少人会抛开IDE去开发VB或Delphi程序。Delphi又称Object Pascal,前身是教学语言Pascal,VB的前身是入门语言BASIC(Beginner's All-purpose Symbolic Instruction Code),故而均具有易学易用的特点。”
问号要求:“能否比较一下二者的优缺点?”
冒号回应:“引用Computerworld的评论:‘Delphi让复杂的事情变得简单,VB让简单的事情变得更简单’。Delphi优秀的VCL框架使得它作为前台语言略胜一筹,更高的运行效率使得它同样能胜任后台工作。VB仅限于Windows,而Delphi可移植到Linux下的Kylix,对指针的支持则是便利与复杂的双刃剑。反过来,VB的学习曲线更短。如果专注微软技术,VB更便于扩展开发包括MS Office在内的应用程序,VB.NET更能充分利用.NET平台上的资源。不过VB版本更新较快,在紧跟时代的同时,也给程序员带来恼人的兼容性问题。”
句号再次体会到:“正如在Java和C#中作选择一样,平台是语言选择的一个重要因素。”
“说得没错。”冒号表示认可,“由于BASIC是微软的起家语言,VB的门槛又低,同时VB.NET也是.NET的一部分,它的前景还是乐观的,有些不利的是 微软明显把重心放在C#上。谈到Delphi,不得不提Borland公司。这位曾经的软件巨人开发了无数经典的产品,却因经营不善而日渐没落,不久前将子公司CodeGear连同包括Delphi在内的产品贱卖给了他人[1]。”
“也许,从当初Delphi的首席架构师Hejlsberg被微软挖走的那一天起,这样的结局就已注定了。”冒号不由得轻叹一声,惋惜之情溢于言表,“这再次说明技术的成功并不意味着商业的成功,同时语言的发展与背后支持的公司也是休戚相关的。Borland和微软是两面最好的镜子。”
叹号听出弦外之音:“看来Delphi前景不妙啊。”
冒号不置可否:“这也很难说,毕竟Delphi的铁杆拥护者也不少。不过随着基于internet的应用日趋广泛,桌面应用受到网络应用的猛烈冲击,VB和Delphi的市场份额必然都会有所下降。在以网络为中心的企业解决方案中,作为平台语言的Java和C#是两棵比肩而立的大树,在它们周围生长着郁郁葱葱的动态语言的小草。”
话题自然而然地转到了动态语言。
引号看了看笔记:“按计划,是不是该谈动态语言Perl、PHP、Python、Ruby 和JavaScript了?”
冒号说道:“在这些语言中,JavaScript是个异类,虽然也有服务器端的JavaScript(SSJS),但用得最多的还是在客户端。从这种意义上说,它也是一种前台语言。”
逗号微有疑惑:“您是说将它与方才的VB和Delphi并列?”
“有一点不同的是,JavaScript必须与HTML、CSS、XML和XSLT等语言配合才能完成前台工作。”冒号作了补充。
问号似乎明白了:“您指的就是流行的AJAX技术吧。”
“不完全是。”冒号轻轻摇了摇头,“动态HTML技术(Dynamic HTML,简称DHTML)照样可以胜任前台事务,事实上以前B/S应用[2]都是靠它来完成浏览器端工作的。DHTML在静态标记语言如HTML、XHTML等的基础上,添加客户端脚本语言如JavaScript、VBScript等,并辅以样式语言如CSS。不少人以为动态HTML与**页是同义词,但实际上前者的动态效果来自客户端,后者的动态效果还会来自服务端。至于AJAX(Asynchronous JavaScript And XML),比DHTML无非多了个XHR (XMLHttpRequest) 的API。XHR最大的功用是能与后台服务器进行异步通信,从而实现页面的局部刷新[3],而在此之前类似的效果只能通过IFrame来实现。正是这种异步技术大大提升了用户体验,使得网页效果开始前所未有地逼近桌面效果。虽然它并非一项新技术——早在2000年的IE5便实现了,但真正流行开来还只是近几年的事。”
引号不无担忧:“目前富客户端技术层出不穷,JavaScript的前景如何呢?”
冒号给了一颗定心丸:“JavaScript在网页技术中的主流地位在很长时间内恐怕都难以撼动。相比其他的RIA(Rich Internet application)技术,如Adobe的Flex、微软的Silverlight、Sun的JavaFX等,以JavaScript为核心的AJAX技术最大的优势在于:标准、普及、成熟;不须安装插件,只要浏览器支持JavaScript即可;因其文本特征而对搜索引擎更加友好。”
叹号谈及他的感受:“JavaScript给人的感觉是:看起来很简单,写起来很随意,用起来很头痛。”
“原因是多方面的。”冒号谆谆而言,“从JavaScript语言本身来说,其弱类型和动态语言的特征给了程序员更多的*,也带来更多的混乱;基于原型(prototype-based)的OOP特征远不如基于类(class-based)的OOP那样为人熟知;缺乏丰富的API;不同的浏览器不同的版本之间兼容性差。更主要的是,JavaScript一直被严重低估和误解,自视甚高的程序员往往不屑去编写网页,大多数JavaScript代码由不那么专业的程序员编写。此外,IDE与调试工具的缺乏也给开发带来掣肘。这些都加深了人们对JavaScript的简单随意乃至丑陋难用的印象。其实JavaScript作为一门动态语言,集过程式、对象式、函数式、事件驱动式、元编程等于一身,其强大和优雅绝对是超乎想象的。它宛如一只神奇的魔袋,乍看平淡无奇,却总能变出意想不到的宝贝。各位若有机会深入地学习和运用JavaScript,定知我所言非虚。”
问号追问:“JavaScript最大的缺点是什么?”
“最大的缺点是起了个极无个性的名字。”冒号半开玩笑地说,“为了沾Java的光,Netscape愣将LiveScript改成JavaScript,带来不少混乱。”
引号也注意到:“书店、图书馆常常将JavaScript的书与Java的放在一起。”
冒号话锋一转:“谈论JavaScript的缺点并没有什么实际意义,因为它一时半会还没有同类的替代品。VBScript仅限于微软的IE,在追求跨浏览器和强调标准的今天是不具备竞争力的。ActionScript具有强大的多媒体功能,但必须借助Flash插件,与JavaScript应该是互补共生的关系。另请记住:待友之道,贵在放大其优点而缩小其缺点,对待语言亦当如是。这既是一种态度,也是一种境界。”
句号发现一个有趣的现象:“初级程序员往往偏爱前台编程,中级以上的偏爱后台编程,有些人则认为只有底层编程的才是真正的高手。”
冒号解释道:“前台编程涉及面专,绚丽花哨的界面更容易让初涉编程者产生成就感;后台编程涉及面广,需要深厚的技术积累和缜密的设计思维;底层编程涉及面深,给人神秘莫测之感。然大道相通,难者亦易,易者亦难。设计一个用户友好的界面与设计操作系统的一个模块,一边是与人直接打交道,一边是与机器直接打交道,孰难孰易、孰轻孰重,焉能一概而论?”
见冒号说得铿锵有力,问号虽不忍置喙,然终难掩疑窦:“用C写操作系统的内核难道不比用VB做一个图形界面难得多吗?”
“不可否认,系统编程的门槛确实要高得多,需要程序员具备更多的硬件和操作系统知识,以及更强的编程能力。”冒号以退为进,“它最大的挑战在于:在相对贫乏的软件资源和相对简陋的开发环境下,能高效、安全地管理包括CPU、内存等在内的系统资源。再说前台编程,虽然入门容易,要想登堂入室却是大为不易。且不说VB、Delphi和JavaScript各具奥妙,连看似简单的HTML和CSS中也蕴含着种种奇思妙想。得道者化腐朽为神奇,离道者化神奇为腐朽,凡事皆然。当然前台最大的挑战还不在代码编写,而在界面设计。软件最终是为人服务的,如果没有良好的用户体验,无论背后的设计如何高明、算法如何精妙,用户也是不会买账的。”
叹号充分表示理解:“一个女孩无论多么蕙质兰心、冰雪聪明,如果相貌丑陋、脾气古怪,我也是不会买账的。”
逗号故意把脸一沉:“岂有此理,竟然自比为人家的用户!”
众人嘎嘎而笑。
问号仍有不解:“界面设计不是美工的职责吗?”
“美工设计的一般是静态的视觉界面,更重要的是动态的交互界面。相貌再好,脾气不好也不行啊!”冒号顺手拾起了叹号的比方,“虽然近来出现了交互设计师的职位,专门负责UI / UE(User Interface / User Experience),但毕竟不是每个公司都有的。即便有,程序员如果缺乏充分的认识,也难以达到设计要求。这可是融美学、心理学、统计学、计算机科学等于一体的高难度的技术活儿啊!”
问号心底泛起的串串疑问的泡泡渐渐开始消散。
总结
Ø Visual Basic和Delphi均擅长可视化快速应用开发,易学易上手,常用于前台的桌面应用。
Ø Delphi相对VB的优势在于:可视化框架更优秀;运行效率更高;不限于Windows;支持指针。
Ø VB相对Delphi的优势在于:学习曲线更短;便于扩展开发包括MS Office在内的应用程序;与.NET平台更融合(主要指VB.NET);有大公司(微软)的支持。
Ø 以JavaScript为核心的DHTML和AJAX技术,相比其他的富客户端技术有其明显的优势:标准、普及、成熟、毋需插件、对搜索引擎友好。
Ø 作为弱类型的动态语言,JavaScript有它的一些问题:基于原型的对象式令人陌生;API相对贫乏;浏览器标准不够统一;IDE和调试工具不够理想;多由不够专业的程序员编写,等等。但它本身是一门功能齐全、强大而优美的语言,只要严肃地对待它,它就是一门严肃的语言。
Ø 前台编程涉及面专,更关注界面设计;后台编程涉及面广,更关注业务逻辑;底层编程涉及面深,更关注系统资源。它们只是侧重点有所不同,并无真正的难易之别、高下之分。
参考
[1] Ernesto De Spirito.A comparison between Delphi and Visual Basic.
http://www.latiumsoftware.com/en/articles/00010.php
[2] David Flanagan.JavaScript: The Definitive Guide, 4th ed..Sebastopol, CA:O'Reilly,2001
插语
[1]2008年5月,Borland将CodeGear以两千多万美元卖给Embarcadero Technologies。
[2]B/S指Browser/Server(即浏览器/服务器)架构,区别于传统的C/S(Client/Server客户机/服务器)架构。
[3]严格说来,局部页面刷新本身并不需要XHR,但刷新的数据来自XHR。
欢迎转载,转载时请注明:
本文出自电子工业出版社博文视点(武汉)新书《冒号课堂——编程范式与OOP思想》。