我眼中的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,等着继续收钱。我们不能够被满天飞的技术迷惑了,我们不能被人卖了还替人家数钱。
所以多多关注一下我们真正需要的技术吧。
分享到:
相关推荐
### Python引用DLL文件的方法 #### 引言 在Python编程中,有时我们需要调用外部库中的函数或功能,特别是那些由C/C++编写的库。这些库通常被编译成动态链接库(Dynamic Link Library,简称DLL)的形式。Python通过...
Python中则不同,下面来看看这个例子。 目录结构: a.py 要 import dir目录下的 b.py 文件。a.py代码如下: 复制代码 代码如下: # coding=utf-8 “import dir 目录下的 b.py 文件” import dir.b print dir.b...
Python全套教程 Python基础python基础课代码+文档2023最新教程【樵夫教你学Python】Python全套教程 Python基础python基础课代码+文档2023最新教程【樵夫教你学Python】Python全套教程 Python基础python基础课代码+...
标题:“Python在Web2.0网站的应用” 描述:本文档主要介绍了Python在Web2.0网站中的应用,通过洪强宁在QCon Beijing 2010的演讲,深入探讨了Python作为编程语言的优势,以及它如何在豆瓣等网站中扮演关键角色。 #...
"Python-查询论文的引用格式支持批量查询"项目正是基于这个理念,它利用了百度学术的强大搜索引擎,通过编写Python脚本来批量获取和格式化引用信息。 该项目的核心在于发送HTTP请求,这是网络编程中的基本操作。...
在IT行业中,跨语言交互是常见的需求,例如在Java项目中有时需要利用Python的强大功能,如数据处理、科学计算或机器学习等。本篇将详细探讨如何在Java中调用Python代码,以便充分利用两种语言的优点。 首先,我们...
python3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython3.7_python3.8_python3.9_python3.10对应的dlib安装包.whl.zippython...
每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 import ctypes def get_ref(obj): """ returns a c_size_t, ...
Python下载 Python下载
python小游戏 游戏 我的世界 源码 可自行修改
集成PythonForDelphi的过程包括设置项目路径、添加Python库引用、编写Delphi调用Python的代码等步骤。在Delphi IDE中,开发者可以创建一个新的工程,然后导入PythonForDelphi的组件,通过组件的接口调用Python脚本或...
Python Python Python Python
Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python源码Python BBS论坛源码 Python...
pythonpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txtpython.txt...
python教程python教程python教程python教程python教程python教程python教程python教程python教程
然而,由于Python的动态类型特性,大多数情况下它采用的是一种特殊的引用传递方式,这与传统的引用传递有所不同。 首先,我们要理解值传递和引用传递的基本原理。值传递是将实参的值复制一份给形参,两者独立,互不...
而Python,作为另一种广泛应用的高级语言,拥有强大的科学计算、数据分析和机器学习能力。当易语言需要利用Python的能力时,就需要进行跨语言调用。本文将深入探讨如何使用易语言调用Python源码,并通过具体的例程来...
8. 引用和导入:Java的包和类引用需转换为Python的模块导入机制,例如import语句。 9. 多线程:Java的多线程模型(Thread类)与Python的多线程(threading模块)有差异,转换时需要考虑线程安全和并发控制。 10. ...
"Python Python Python Python Python"这个标题可能是在强调Python语言的重要性或者是在提示我们要深入探讨Python的相关知识。描述中的重复同样强调了Python在编程领域的主导地位。 在Python编程语言的核心概念中,...
类的方法可以使用self关键字引用实例的属性。 6. 异常处理: Python使用try/except语句来捕获和处理异常。异常是程序运行时发生的错误,可以被程序员捕获并做出相应处理,避免程序中断。 7. 文件操作: Python提供...