-
对目前主流开发技术的分析和总结
一、引言
我为什么要写这篇文章
首先,
我要限定我文章的范围,
p>
我讨论的问题局限于桌面应用
开发领域和企业应用开发领域,所以我
的结论并不适用于整个软件开发界,比如我说
C
语
言已经退出历史舞台,这对于写嵌入式系统的人和编写操作系统内核的人来说显然是错了。
我写这篇文章的目的主要是:
*
简单的介绍并评价当前主流技术
*
比较当前的主流技术
*
预计技术的演变
如果你想做程序员或者已经是个程序员,你可能会面对这些困惑:
*
学什么语言呢?
Delphi
< br>、
C++
、
VB
、
Java
、
C#
、
PHP
、
Python
?
*
选择什么开发工具呢?
Del
phi
、
VC
、
C++Builder
、
JBuilder?
当你已经入了门,有了一定的基础
之后(可能已经通晓了几种语言)
,你会面临进一步
的困惑:<
/p>
p>
*MFC
和
VCL
之间是什么关系?
*J2EE
到底是什么?
.Net
到底是什么?两者
有什么本质的区别,我
应该学习哪一个呢?
*COM
那么复杂,为什么很多地方
都用
到它?我必须学习它吗?
如果是作为一个软件公司,如果不是那么大,如果你的公司<
/p>
还没有一个真正的技术上的灵魂人物,
那么你也会面临同样的困惑
。
技术问题纷繁复杂,
让
你不知所从,
而且真正的精通每一项技术都需要巨大的时间和人力的投入
,
你怎么办?选择哪种技术作为公司的主流技术呢?选择的方向是否正确是个关乎你的公
司
的生死存亡的问题。你面临着这些困惑吗?如果是,那么请让我试着为你拨云见日。<
/p>
我的故事
在我上大学之前,我从没见过计算机。大学的时候,正是
p>
Dos
和
FoxBASE
< br>的年代,也
正是计算机软件开发世界几件伟大的事情发上的时候:
(Windows
3.1
、
Borland
C++3.1
、
Visua Basi
c1.0
的推出也是伟大的事情,但那时候我还不知道计算机为何物
)Widnows
95
推
出,并开始应用;
Visual
Basic5.0
推出,开发工具中第一次出现了成熟的、被广泛应用的<
/p>
Auto
Code
Completion
技术
;
Java
推出;
ASP
技术开始盛行
,Windows
< br>DNA
技术被理解
和接受;标准
C++
诞生
;Visual
C++6.0
推出;
J2EE
< br>规范推出。
成为一个程序员对我而
言并不顺利,
因为我不是科班
出身。
我入门的程序语言是
FoxBASE
,
这让我一直对
FoxBASE
有
种特殊的感情,我也正是通过
VisualFoxPro3.0
转写
Windows
程序的,
p>
如果没有它,我也许就不会成为一个程序员了。后来,在大学期间接触到了
< br>InterDEV
,那
是个写
A
SP
程序的开发工具,
还有
Java<
/p>
,
也是那时候接触的,
当时有点盲目崇拜
的意思
(我
想我喜欢
Java
的一个原因可
能是刚开始学
< br>C
的时候很受挫折)
。毕业之后,我就是凭借着
自己写的一个
ASP
网站找到了自己的第一份工
作——说来惭愧,我从来也没有成为一个
C
程序员。
我真正的熟悉<
/p>
Java
是在我翻译了一本
Java
p>
数据结构的书和写了一套完整的
GIS
系统
之
后(说起此事,
我要感谢一下我的公司,
但因为这些故事与本文的主题无关,所以这里就不
多说了)
。
再后来,
我自己学习了标
准
C++
和
COM
p>
技术。
有点像履历表了是吗?提到这些,
我
只是希望作为读者的你能够了解一下我的知识体系,
从而能够知道我大概要讲些什么;<
/p>
同
时也希望你能够原谅我可能犯的错误——我在这里说的话,并不
一定就是最后
的结论,虽然“共同探讨”
< br>这个词几乎是粗制滥造的书的作者专用语了,
但我在这里引用它
< br>是真诚的,
我愿意看到你的反馈。
要涉及的话题在开始文
章的正题之前,
我先大概地介绍这
篇文章将会涉及到哪些知识。
如果你是初学者
,希望你不要被吓倒,这虽然是一篇技术文<
/p>
章,但我不会过多的讨论技术细节,
如果你不懂我说的这些东西,
也没关系,我本来就希望
通过我的文章帮助你做出一个选择,<
/p>
不再走很多人已经走过的弯路,
你这要记住结论就可以
了,随着你知识的增长,以后你会渐渐明白;如果你已经通晓了这些技术或其中的大部分,
那么我相信读了这篇文章你会有一些另外的收获。
主流的程序设计语言:
C++
、
Delphi(ObjectPascal)
、
Java
、
C#
桌面应用程序框架:
MFC
、
VCL
、
QT
、
JavaAWTSWING
、
.Net
企业应用程序框架:
WindowsDNA
(
ASP
、
COM
、
p>
COM+
)
、
J2
EE
、
.NetFramework
开发工具:
VisualBasic
、
Delphi
、
VisualC++
、
C++Builder
、
Visua
lC#
二、正文
现在让我们开始我的正文吧。
p>
首先,
我来完成这篇文章的第一个目标:
介
绍并评价当前
主流技术。我指的今天的主流技术是:
*
p>
程序设计语言:
C++Delphi
(本来
应该是
ObjectPascal
,但为了简单,我就语言和工
具混为一谈吧)
JavaC#(
虽然他
刚刚推出,但因为微软为之倾注了大量心血,一定会成为一
种重要
的开发语言
)
*
桌面应用程序框架
:MFCVCL
*
企业应用程序框架
:
*CO
M
技术:
我单独提出这项技术,
是因为
它无法简单的被视为语言、
桌面应用程序
框架或企业应用程序框
架,它与这些都有关系。
2.1
程序设计语言
2.1.1
C++
语言的演进
最初要从二进制代码和汇编说起,
但那太遥远了。
我们就从面向过程的语言说起吧
(包
括
BasicCFortranPascal
p>
)
。这种面向过程的高级语言终于把计算机带入了寻常的应用领域。
其中的
C
语言因为它的简单和灵活造就
了
Unix
和
Windows
这样的伟大的软件。
面向对象的语言是计算机语言的一个合乎逻辑的进化,
因为在没有过多的影响效率、
简
单性的前提下
提供了一种更好的组织数据的方法,
可使程序更容易理解,
更容
易管理——这
一点可能会引出不同意见,但事实胜于雄辩,
C
++
终于让
C
语言的领地越来越小,当
今还
活着的计算机语言或多或少的都具备面向对象的特征,所以这一点并不会引起太多困
惑。
C++
的成功很大程度要归因于
C
,
C++
成为它今天的样子是合乎逻辑
的产物。因为在面向
过程的时代,
C
几乎已经统一天下了。今天著名的语言象
JavaC#
都从
C
借鉴了很多东西,
C#
本来的意思就是
C++++
。
其实
C++
曾经很有理由统一面向对象
程序设计语言的天下来着,
但可惜的是,
C++
太复杂了
。
即使是一个熟练
的程序员,
要你很清楚的解释一些问题你也会
很头痛。举几个还
不是那么复杂的例子来说:
<
/p>
对
=
的重载
p>
成员转换函数
拷贝构造函数
转化构造函数之间有什么区别和联系呢?
定义一个类成员函数
private:virtualvoidMemFun()=0;
是什么意
义呢?
int(*(*x(int))[4])(double);
是什么意思?
还有其他的特征
,比如说可以用来制造一种新语言的
typedef
和宏(虽然
宏不是
C++
的
一部分,但它与
C++
的关系实在太密切了)
,让你一不小心
就摔跤的内存问题(只要
new
和
de
lete
就可以了吗?有没
有考虑一
个对象存放在容器中的情况?)??诸如此类,
C++
是如
p>
此的复杂以至于要学会它就需要很长的时间,
而且你会发现即使你用
C++
已经好几年了,
你
还会发现经常有新东西可学。
你想解决一个应用领域的问题——比如说从数据
库里面查询数
据、
更改数据那样的问题,
可是你却需要首先为
C++
头痛一阵子才可以,
是的,
你精通
C++
,
p>
你可以很容易的回答我的问题,
可是你有没有想过你付出了多大的代
价呢?我不是想过分的
谴责
C++
,我
本人喜欢
C++
,我甚至建议一个认真的开发普通的应用系统的
程序员也去学
习一下
C++
,
C++
中的一些特性,比如说指针运算
模板
STL
几乎让人爱不释手,宏可以用
几个字符代替很多代码,对系统级的程序员来说
,
C++
的地位是不可替代的,
J
ava
的虚拟
机就是
C++
写的。
C++
还将继续存在而且有旺盛的生命力。
2.1.2
Java
和
C#
Java
和
C#
相对于
C++
< br>的不同最大的有两点:第一点是他们运行在一个虚拟环境之中,
第二点是语法简单
。对于开发人员而言,在语法和语言机制的角度可以把
Java
和
C#
视为同
一种语言。
C#
更多的是个政治的
产
物而不是技术产物。如果不是
Sun
为难微软的话,我想
微软不会费尽心力推出一个和
Java
差不多
的
C++++
,记得
Visual
p>
J++
吗,记得
WFC
吗?
看看那些东西就会知道微软为
Java
曾经倾注了多少心血
。而
且从更广泛的角度来说,两者
也是非常相似的——
C#
和
Java
面对的是同样的问题,面向应用领域
的问题:事务处理、远
程访问、
Webservice
、
Web
页面发布、图形界面。那么在这一段中
,我暂且用
Jav a
这个名
字指代<
/p>
Java
和
C#
两种语言——尽管两者在细节上确实有区别。
Java
是适合解
决应用领域的
问题的语言。最大的原因
Java
对于使用者来说非常简单。想想你学会并且能够使用
Java
< br>需
要多长时间,学会并
且能够
使用
C++
要多长时间。由于
Java
很大程度上屏蔽了内存管理问
题,
而且
没有那么多为了微小的性能提升定义的特殊的内容
(比如说,
在
Java
里面没有
virtual
p>
这个关键字
,Java
也不允许你直接在栈
上
创建对象,
Java
明确的区分
bool
和整型变量)
< br>,他
让你尽量一致的方式操作所有的东西,
除了基本数据
类型,
所有的东西都是对象,
你必须通
过引用来操作他们;除了这些之外,
Java
还提供了丰富的类
库帮助你解决
应用问题——因
为它是
面向应用的语言,它为你提供了多线程标准、
JDBC
标准、<
/p>
GUI
标准,而这些标准在
C++
中是不存在的,
因为
C++
< br>并不是直接面向解决应用问题的用户,
有人试图在
C++
中加入
这些内容,但并不
成功,因为
C++
本身太复杂了,用这种复杂的语
言来实现这种复杂的应
用程序框架本身就是一件艰难的事情,稍后我们会提到这种尝试—
—
COM
技术。渐渐的,
人们不会再用
C++
开发应用领域的软件,象
MFC
QTC OM
这一类的东西最终也将退出历
史舞台。
2.1.3
Delphi
Delphi
是从用
C++
开
发应用系统转向用
Java
开发应用系统的一个中间产物。它比
C++
简单,
简单的几乎象
Java
一样,
因为它的简单,
< br>定义和使用丰富的类库成为可能,
而且
Delphi
p>
也这么做了,结果
就是
< br>VCL
和其他的组件库。而另一方面,它又比运行于虚拟环境的
< br>Java
效率要高一些,
这样在简单性和效率的平衡之中
,
Delphi
找到了自己的生存空间。
而且预计
在未来的一段时间之内,这个生存空间将仍然是存在
的。可以明显的看出,微软放弃了这
个领域,他专注于两方面:
系统语言
C++
和未来的
Java(<
/p>
其实是
.Net)
。也许这对于
Borland
来说,是一件很幸运的事情。如果我能够给
Borland
提一些建议的话,那就是不要把
De
lphi
弄得越来越复杂,如果那样,就是把自己的用户赶到了
C++
或
Java
的领地。在虚拟机没
有
最终占领所有的应用程序开发领域之前,
Delphi
和
Delphi
的用户仍然会生存得很好。<
/p>
2.2
桌面应用程序框架
目前真正成功的桌面应用程序框架
只有两个,一个是
MFC
,一个是
VC
L
,还有一些其
他的,
但事实上并未进
入应用领域。
遗憾的是我对两个桌面应用程序框架都不精通。
但
这不
妨碍我对他做出正确的评价。
2.2.1MFC
MFC
(还有曾经的
OWL
)是
SDK
编程的正常
演化的结果,就象是
C++
是
C
的演化结
果一样。
MFC
本身是一件了不起但不那么成功的作品,而且它过时了。这就是我的结论。
MFC<
/p>
凝聚了很多天才的智慧——当然,
OWL
和
VCL
也一样,侯捷的《深入浅出
M
FC
》把
这些智慧摆在了我们的面前。
但是这件东西用起来估计不会有人觉得很舒服,
如果你一直在
用
Java
、
VB
或者
Delphi
,再回过头来用
M
FC
,不舒服的感觉会更加强烈。我不能够解释
MFC
为什么没有能够最终发展成和
VCL
一样简单好
用的桌面程序框架,
也许是微软没精力
或者没动力,总之
MFC
就是那个样子了,而且也不会再有发展,它已经被抛弃了。我有
时
候想,
也许基于
C++
这种复杂的语言开发
MFC
这样的东西本身就是错
误的——可以开发这
样的一个框架,
但不应当要求使用它的人熟
悉了整个框架之后才能够使用这个系统,
但很显
然,如果你不了
解
MFC
的内部机制,是不太可能把它用好的,我
不能解释清楚为什么会出
现这种现象。
2.2.2VCL
相比之下
VCL
要成功的得多。我相信很多使用
VCL
< br>的人可能没有像
MFC
的用户研究
MFC
那样费劲的研究过
VCL
的内
部机制。
但这不妨碍他们开发出好用好看的应用程序,
这
就足够了,还有什么好说的呢?
VCL
给
p>
你提供了一种简单一致的机制,让你可以写出复杂
的应用程序。在李维的
Borland
故事那篇文章中
曾经说过,在
Borland
C++
3.1
推出之后
Borland
就有人提出开发类似
C++
Builder
一类
的软件,后来竟未成行。是啊,如果
C++
Builder
是在那个时候出现的,
今天的软
件开发领域将会是怎么样的世界呢?真的不能想象。
也许再过一段时间,
这些都将不再重要。
因为新生的语言如
Java
和
C#
都提供了类似于
VCL
的桌面应用程序框架。
那个时候,
加上
Java
和
C#
本身的简单性,
如果他们的速度有足够块,
连
Delphi
这种语言也要消失了,还有什么好争论的呢?只是对于今
天的桌面程序开发人员
来说,
VCL
确
实
是最好的选择。
2.3
企业应用程序框架
2.3.1
Windows
DNA
Windows
DNA
的起源无从探究了。随着
.Net
的推出,事实上<
/p>
Windows
DNA
将成为
历史的陈迹。
Windows
< br>
DNA
虽然是几乎所有的企业应用程序开发人员都知道
的一个名词,
但我相信
Windows
DNA
事实上应用的最广泛的是
ASP
而不是
COM+
。真正的
COM
开发
有多少人真正的掌握了呢,
更不要提
COM+(
我有必要解释一下:
COM+
是
COM
的执行
环境,
它提供了一系列如事务处理、
安全等基础服务,
让应用程序开发人员尽量少在基础架构设计
上花精力
)
——当然我这里指的
COM
开发
不是指
VB
下的
COM
开发,
所以要这么说,
是因
为
我觉得如果不能理解用
C++
进行
CO
M
开发,
也就不能真正的理解
COM<
/p>
技术。
如果以一
种技术没有被广泛理解和应用作为失败的标志,那么
Windows
< br>
DNA
实际上是失败了,但
这
不是它本身的错,而是基于
C++
的
C
OM
技术的失败造成的。多层应用、系统开发角色分
离的概念依
然没有过时。
2.3.2
J2EE
J2EE
是第一套成功的企业应用程序开发框架。因为它把事务处理、远程访问、安全这
些概念带
入了寻常百姓家。
这种成功我认为要归因于
Java
的简单性。
Java
的简单,
对于
J2EE
容器供应商来说一样重要。开
发一个基于
Java
的应用
服务器要比基于
C++
的更容易。而且
由于
Java
的简单性,应用系统开发者出错的机会也会少一些
,不会像
C++
的开发者那样受
到那么
多挫折。开发基于
Java
的企业应用系统的周期会更短,这恐
怕是不容争辩的事实。
不论如何,是
J2EE
< br>让事务处理、远程访问、安全这些原来几乎都是用在金融系统中的概念
也被一般的
企业用户使用并从中获得利益。
2.3.3
.NET
.Net
有什么好说的呢?其实,它不过是微软的
J2EE
。事务处理、
安全、远程访问,这
些概念在
.Net
中都找得到。更有力的说明是,微软也利用了
.Net
实现了一
个
PetStore
。所
以,
.Net
与
J2E E
几乎是可以完全对等的。
但微软确实是一家值得尊敬的公司——我指从技
术上,象
Web
form<
/p>
这种东西,我相信很多
Web
应用开发者
都梦想过甚至自己实现过,但
Sun
却一直无动于衷,而且似乎
Borland
也没
有为此作过太多努力,好像有过类似的东西,
-
-
-
-
-
-
-
-
-
上一篇:c#基本概念
下一篇:谈谈怎样架构你的单片机程序