来源(编程手记 - DonewsBlog)

From: http://blog.donews.com/filus/archive/2004/09/08/92819.aspx

http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39041213,00.htm

Python是软件开发领域一朵诱人的奇葩:人们经常把Python看作是一种起到缝合作用的严格脚本语言,不过却很少有人意识到Python已经足够强大到应用于工业级软件开发领域。Python的年岁比Java老,到现在,这种语言已经发展出了规模虽然不大但仍然在成长中的自描述企业应用 Pythonistas。

虽然人们经常把Python同Perl相比较,把它们看作一种专门应用于Internet的脚本语言,然而,Python已确实在大规模的软件开发领域占据了自己的一席之地。这种脚本编程语言具有以下显著特点:

· 面向对象

· 解释语言

· 交互式

· 模块化

· 动态性

· 高级语言

· 可移植

· 可用C和C++扩展

Python整合了各种模块、异常、动态输入、高级动态数据类型和类等概念。它同多种系统函数和系统库乃至各类Windows系统建立了接口。

如果说Python并不一定能渗透到任何计算领域的话,至少在企业开发这一行它的处境就是这样。在企业开发领域, Python还被当成一种可以替换Perl的脚本语言。本文就对Python构造企业级应用这一问题做简短阐述。

优点

Python语言的某些特点使其成为企业应用的合理选择:

免费可用(像Perl一样,Python也是开放源代码软件)。

稳定(Python目前已发布到2.2版,我刚才已经提到,它的年头比Java还老)。

良好地支持对象、模块和其他可重用机制。

采用C和Java语言的集成方便性和扩展性。

以上这些特性非常有利于Python在企业中的应用,不过,Python还具有一些适合企业应用但却不太令人注意的其他合理因素。

开发和维护的成本节约

IT部分通常要完成的任务相当繁重但支撑这些工作的资源却很少,这已经成为公开的秘密。任何承诺提高编码效率、降低软件总成本的IT解决方案都应该进行周到的考虑。Python所具有的一个显著优势就是可以在企业的软件创建和维护阶段节约大量资金,而这两个阶段的软件成本占到了软件整个生命周期中总成本的50%到95%。

Python清晰可读的语法使得软件代码具有异乎寻常的易读性,甚至对那些不是最初接触和开发原始项目的程序员都能具有这样的强烈感觉。虽然某些程序员反对在Python代码中大量使用空格,不过,几乎人人都承认Python代码的可读性远胜于C或者Java,后两者都采用了专门的字符标记代码块结构、循环、函数以及其他编程结构的开始和结束。提倡Python的人还宣称,采用这些字符可能会产生显著的编程风格差异,使得那些负责维护代码的人遭遇代码可读性方面的困难。

Python明晰的语法使其成为一种学习曲线平和的编程语言。有经验的程序员甚至可能在一天之内就掌握Python的基础知识,至多不过一周作用就可以上手,而编程语言的专家则肯定会比他掌握C、C++、Java甚至Perl要快很多。

Python因其语法的明晰而获得的最大好处或许该算是开发时间的大大降低了。一名从事企业级应用程序开发工作的开发人员告诉我,他所在单位的开发时间因为Python的采用而大大节约,同时却并没有给软件性能带来任何负面影响,他说:“就我们的业务而言,快速地开发出新产品比开发出性能惊人的软件产品要重要得多,开发时间相比软件的优化要贵得多(以每小时计算)。

对开发速度采用何种评价标准一直是个很难确定的问题,不过通常情况下,普遍认为开发Python应用程序的速度大约是用Java开发同类应用程序速度的10倍。要是相比C/C++节约的时间就更多了。

内容管理框架

用Python创建的Zope是开放源代码领域使用最广泛和最容易理解的内容管理框架。这种工具可以让了解Python的程序员以相比JSP/ASP更少的时间来创建和部署具有高度交互性的网站,在这种框架下,网站属主可以非常轻松地修改网站的内容而无须程序员的介入。

Zope投入实用已经有若干年的时间了,目前,特别在欧洲地区已经获得了普遍的应用。Zope在美国也赢得了广泛的欢迎,目前对Zope的开发主要集中于简化开发过程和进一步将功能同内容的表示相分离,从而再度增加了Zope的普及率,同Python一样Zope也是开放源代码软件。

Zope确实引入了相当的系统负荷,从而在开发期间降低了系统的性能,但是采用某些技术可以有效地把部署网站时产生的问题最小化。

Jython

在考虑企业中的Python应用时,有一点往往被人们所忽略了,这就是Python的变种Jython。Jython完全用Java语言编写,实现快速地开发和应用程序测试,以远低于Java编辑-编译-测试的开发时间提升Java类库的运用。Jython还紧凑地集成了Python和Java的代码,令两者都可以充分利用对方的优点。而这正是Microsoft .NET的CLR技术所要实现的目标之一,但今天对Python来说这一切已经成为现实。

缺点

缺点

显然,Python的企业应用也应该严肃对待反对方的意见。反对Python作为企业级编程可行语言的主要观点如下:

相比其他编程语言,比如Java,Python的开发人员少很多。

缺乏真正的多处理器支持。

缺乏商业支持。

软件性能(不过各种评测都反复表明Python在大多数应用中堪与Java媲美)。

当然,缺乏商业支持是大多数开放源代码技术都面临的问题。对Python而言,一时也找不出个应景的法子。然而,最近一些关注Python的欧洲公司新组成了一个商务团体,也许这一举动标志着Python发展的一个崭新阶段(请参考Python商务论坛的网站)。

缺乏预包装的解决方案

PHP 在企业软件领域赢得了辉煌的成功,主要原因就在于其广泛实用的产品门类,比如讨论板、聊天服务器和分组日历以及即时消息系统等。相比之下,Python提供的解决方案就少多了。Python语言的分发版中确实包含了一些扩展的类库,越来越多的程序员也在致力于开发等价PHP的Python工具,但是考虑到市场的时间紧迫性,而且你所面临的问题已经有现成的PHP解决方案可以对付,那么PHP自然会成为你的首选。

Python在软件开发领域的劣势

大多数开发经理几乎很少了解Python。在现代IT领域的高压力环境下,项目管理人员缺乏对Python及其工具的了解、缺乏其软件开发方面的知识自然成为Python获得接受的死穴。毕竟,CIO或者开发主管受到最终胜利完成开发任务的沉重压力。在可能的收益却缺乏具体和诱人的证据这一现实条件下,大多数开发经理宁肯选择他们知道的东西。所以很少有人了解Python也就不奇怪了。

数据库访问层的局限性

相比现有的成熟技术,比如ODBC和JDBC,Python的数据库访问层看起来就过于原始了。虽然这一方面也在发生变化,但是,开发部门需要平滑地接合现有的复杂遗留数据,同时需要快速的SQL数据库访问,所有这一些使其在短时期内难以对Python表现出什么太大的兴趣。

不过,Python在这一领域发展的也很快,在半年左右的时间里,Python完全可能在其中踏上一只脚。

文档差距

相比其对手语言,比如Perl、Java,在某种程度上再算上PHP,Python确实深受文档缺乏之苦,Python没有广泛、易于获得的文档和图书。市面上冠以PHP标题的图书数量几乎是Python的两倍多;而Prel就更多了,它有400多种呢!

Python的在线文档 倒还组织得比较好,但是这些文档几乎全是些参考资料。幸而Python相当容易的学习曲线减轻了对图书资料的过多需要。

缺乏GUI和团队协作工具

给Python应用程序创建图形用户界面未必复杂。Python分发版本随带的Tk就是Python开发人员最常用的工具。但是Tk就缺乏可访问、易用的GUI工具。刚启动的PythonCard项目目前虽然还处于原型阶段,但可能在将来填补这一鸿沟。boa-constructor这种产品已经吸引了某些Python程序员,但是用它来创建全功能的IDE确实太复杂了。

相比GUI工具的缺乏更要命的是Python几乎没有支持团队开发的协议工具。 Java在这些工具领域可谓相当丰富,至少和C++可比。在企业软件开发市场上,这一缺陷简直可视为致命的要害。没有这类工具要让很多程序员共同开发同一项目几乎是不可能的。Python利用其模块化和命名空间分析等特性减轻了这一方面的需求,这些特性可以让多个程序员开发项目时不可能发生代码冲突的情况。但是,这同样改变不了其协同性能缺乏的严重性。

小结

说也说了做也做了,是否在企业中尝试或接受Python仍然是一个复杂的问题,具体问题具体分析。咱们把各种争论先放一边,至少可以得到下面的一些共识:

如果你已经拥有大量的PHP代码或者PHP应用程序,那么迁移到Python不可行。

如果你的Java代码基础雄厚但你需要大量的小型应用程序、小程序和代码接口,那么Python/Jython可能会为你节约大量开发时间。

如果你正好手下有一到两个程序员工作比较清闲,那么我建议你不妨让他们研究下Python看能不能在将来派上用场。

Trackback: http://tb.donews.net/TrackBack.aspx?PostId=92819

[点击此处收藏本文] 发表于2004年09月08日 5:54 PM

Link: http://www.asm32.net/article_details.aspx?id=4603