页面

2009年3月16日

我眼中的Python

我眼中的Python

python这种编程语言我很早就听说它了,早在1998年,我在玩Linux的时候,就接触过它,但是我对python的印象仅仅停留在它是一种流行的面向对象的脚本语言的认识上。

zope,基于python的app server,早在2000年我就已经对它如雷贯耳了,但是我对zope的印象仅仅停留在它是一种类似Apache HTTPD Server,AOL Server之类的web server上。

今年ozzzzzz多次向我提到python和zope,听得我耳朵都起了老茧了,dlee又建议我开设python版面,虽然我没有答应,但是架不住朋友们的左劝右劝,终究对python这门语言有了好奇心。

几天前,当我漫不经心的浏览了python和zope的网站之后,我突然有了一种"众里寻它千百度,那人却在灯火阑珊处"的感觉,悔不迭错过了那么多次相逢的机会。

对于软件开发,我和ozzzzzz有一个共识,就是脚本解释弱类型语言在开发效率上远远超过编译强类型语言,从软件开发角度来说,脚本语言具备天然的开发效率上的优势,这是由语言的内在属性决定的。

例如我们可以比较一下Web编程使用PHP和Servlet/JSP,比较一下Windows桌面应用使用VB和VC/Delphi,比较一下Unix环境下面Shell和C/Java,比较一下数据库环境下面的PL/SQL和JDBC/SQLJ。

我虽然使用Java开发软件已经有5年的历史了,但是能不用Java的时候,我一定不会用Java的。如果搭建一个小型的网站,我一定选择PHP而不是Java;如果针对数据库的小型编程,我一定使用PL/SQL而不是Java;如果是桌面应用,我一定选择VB而不是Java;如果是Unix环境我宁愿选择shell,perl甚至PHP,而不是Java。

做为一种严谨的,编译式的,面向对象语言,Java总是给我一种须正襟危坐,须一板一眼的按照OOAD的原则编程,才敢在键盘上敲下字符的感觉。即使编写一个最小规模的程序,我也不能够接受把所有的code塞到main里面的做法。Java似乎以不怒自威的威严使我不敢随意编码,不敢玷污Java的严谨。于是我即使写一个很简单的JDBC程序,也要一板一眼的try catch finally,一层层的处理Connection,PreparedStatement和ResultSet。

诚然,如果开发规模比较大的项目,或者开发自有的软件产品,必须应该按照严谨的方式,此时Java也是最适合的语言。但是我不想活的那么累,很多人也不想活的那么累,于是大家都怀念起来脚本语言的好来。对于小规模的应用,使用脚本语言快速简单完成的事情,当你使用Java的时候,你陷入了过多的层层代码包围中去。于是groovy出现了,bean shell出现了。大家终于明白,编译语言不是软件开发的全部,脚本语言才是最适合程序员的语言。

我喜欢脚本语言,喜欢的没边,Java是我的职业,但是我从来都没有在内心深处喜欢过它的语法,我更加讨厌C++变本加厉的复杂。我钟爱的语言包括小学就接触的BASIC和Logo,毕业以后才掌握的Unix Shell和PHP,Perl,PL/SQL。几乎我接触过的每种脚本语言,我都有浓厚的兴趣和感情,除了VBA是一个例外。

看看Java里面长长的对象,方法和属性命名,看看Java编程冗长的调用语句和愚蠢的对象赋值和经常长达几十行的getter/setter,我会时不时从心底泛起恶心的感觉,虽然我经常也是这种恶心感觉的制造者。但是恶心归恶心,我知道Java有它不可取代的作用,PHP有它无法弥补的缺陷。大部分脚本语言,包括perl,PHP,PL/SQL,VBA都不是真正意义上的面向对象编程语言,即使包括了部分面向对象语言的特性,这注定了脚本语言不能够承担大型项目的开发,甚至也不能够充当良好的可复用的组件存在。

所以我很遗憾,我欣赏PHP脚本语言的开发效率,我也欣赏Java的面向对象的能力,我欣赏PHP的低部署成本高可靠运行,我也欣赏Java App Server带来的开发复杂运算的强大能力,但是鱼与熊掌不可得兼。

直到我看到了python和zope,我终于找到了梦寐以求的东西,兼有脚本语言开发的高效率,兼有低部署成本的易用性,同时又有完备的面向对象的强大支撑能力,同时又具备完善的强大的app server支持。最令我生气的还是plone,这个运行在zope之上的软件,你可以称之为portal,或者称之为cms,或者其他的什么名词,但是我知道它几乎可以实现任何网站想要实现的功能。默认安装下,这个东西很像confluence,一个Java的商业的cms,但是比confluence功能强大的太多,可定制性,可开发性又强的太多了。plone在默认安装情况下你就可以把它当做cms来用,比较类似***nuke类软件(PHPNuke, PostNuke, JBossNuke,...),通过插件的扩展,你可以让plone里面集成了forum,blog,wiki的功能,再加上plone本来就支持的WebDAV,功能强大的基于文档的权限控制,多用户多组的管理,你可以在很短的时间内实现一个全功能的门户网站。可笑的是,我从去年到今年一直在考虑把JavaEye建设成为一个集成forum,blog,wiki,cms功能的网站,甚至雄心壮志的想要做一个这么的软件产品来,但是现在我发现plone已经漂亮的实现了这一切,最令我沮丧的是,ozzzzzz在听过我的软件产品计划之后提出一个用关键词来组织网站内容的设想,结果我发现plone已经这样做了,我能说的只有惭愧!

我只能感叹自己没有在一年之前就发现plone,否则的话现在的JavaEye将完整的使用plone来架设。更令我惭愧的是,当我刚刚意识到zope/plone的价值的时候,上海已经有人成立了专业的zope/plone解决方案的软件厂商,并且拿下了好几个大型的客户,(http://www.zopechina.com)。有时候我们真的不能把眼睛盲目的盯着大厂商强行推广的标准了,应该好好的审视自己真正需要的是什么,并且围绕它构建自己的核心竞争力,否则我们只有永远做IT行业食物链最底层的命运。

ozzzzzz曾经对我说,zope是B/S应用中的VB,快速原型开发中小型企业应用的最佳武器,我现在真切的理解了他的话。我觉得我们确实不能够眼睛光盯着Java/C#不放,也应该了解一下zope/plone,它应该成为中小型企业应用,特别是基于文档管理的企业应用的最重要的解决方案。

zope/plone虽然很好,但是我知道它不会如Java/J2EE,C#/dotnet那样在国内成为一种主流的软件开发解决方案。原因就在于国内的软件开发行业长期处于国际分工产业链的底层,缺乏创新意识和开拓的精神,而往往满足于跟随跨国公司的标准,啃啃人家剩下的肉骨头。位于食物链顶层的厂商,例如MS,IBM,Sun,BEA,CA,Oracle等等,争夺的是标准。他们是规则的制订者,制订好了规则,放大家进场,他们负责收费,钱收的差不多了的时候,他们又重新竞争,制订新一轮的规则,继续坐地收费。很多时候,市场的真实需求并没有被真实的体现,真实的需求被顶级厂商掩盖了。他们创造了一个市场需求,有了市场需求,就有钱赚,赚的差不多了,就摧毁这个市场,然后创造下一个市场需求。因此本质上来说,IT行业就是几个寡头在博弈,不管谁赢谁输,我们都是输家,我们只是人家的筹码。大家可以回顾一下这些年软件技术发展的历程,寡头厂商制造了EJB市场赚大发了,寡头厂商了制造了ERP市场赚大发了,寡头厂商继续在制造着SOA,等着继续收钱。我们不能够被满天飞的技术迷惑了,我们不能被人卖了还替人家数钱。

所以多多关注一下我们真正需要的技术吧。

没有评论: