一直在考虑假如让我开发网站我会选择什么语言? j2ee?.net?还是ruby,python,php? 现在每一种语言都是一套完整的体系和平台,有很多的支撑点(服务器软件,框架,开源API,官方API,文档),不可否认哪种语言用好了都会开发出完美的网站。因为上面这五种都是很适合网站开发的语言。
不过我还是想找出一个我心目中的选择。所以我先列了一个表,把几个比较知名的网站罗列了以下,看看人家都在用什么?不过后来发现也是百花齐放。
当当网 .net
赶集网 .net
卓越 java?
淘宝 java
MYSPACE .net
FACEBOOK php
豆瓣 python
Youtube python
Twitter ruby
javaeye ruby
据我所知,java和.net应该是迄今为止最为完善的两种企业级开发“平台”,它们包括了一整套可以解决问题的方案,而不仅仅是单纯的语言。如果采用它们来开发网站,那么上至页面展示,下至数据映射,乃至远程访问,集群等都有数种解决方案可以让人选择,尤其是java有无数的开源项目可以充当 demo.
从页面展示来说,java有JSF,Tapestry,Webwork,Struts等集大成的框架(包括页面组件,页面跳转,缓存,URL自定义等等),也有sitemesh,velocity等一系列模板框架;.net也有asp的组件库(跟tapestry类似)和template功能。应该说不相上下,但是易用性上.net 胜出,因为IDE集成了拖拽组件和对组件属性进行修改功能。只是.net世界少了些选择的乐趣。
从中间层来说,java有spring和EJB(session bean),这两种解决方案都是杀手级的,要效率有效率,要简单有简单,而且EJB的分布式解决方案几乎是perfect,真是大型应用的必要选择。众所周知EJB3.0之后的开发越来越轻松了。不过现在也冒出了spring.net,但是.net世界的分布式解决方案还没听到,也许WCF就是为了这一目的而产生的?总之感觉.net世界总是追着java的屁股走。今年是个关键时刻,看看oracle收购sun之后java是不是还能推陈出新,不断前进。
持久化层不用说了,hibernate,EJB(JPA)对Nhibernate,LinQ,个人感觉还是java纯正一些, Linq的语言写出来感觉怪怪的。
异步处理方面也是如此,java的解决方案要远远多于.net.
如果这个世界上只有java和.net两种开发语言,我会选择java。虽然.net有良好的开发工具(visual studio)可以显著加快页面的开发速度,但是要用.net作出一个典型的MVC应用你就会知道有多别扭了(不能成功的分层,代表不适合协作开发),而且用了.net就等于放弃了 unix/linux。另外java世界充斥着N多成功的开源项目,要开发任何东西都有前车之鉴。
问题在于并不是只有.net和java两种选择。事实上很多专家都在预测动态语言(ruby,python,php)将会超过静态语言(java , .net)的流行程度。这与动态语言开发的敏捷性是分不开的,选择动态语言开发网站会大大节省开发时间。我们肯定不应该忽略专家的意见,况且sun被收购,微软被google在互联网领域压得抬不起头来是客观事实。
三者选其一php会被我首先排除掉,当然可能是我的偏见。php分层,php面向对象都很弱,程序员用php开发本身就会降低程序员的竞争力。不过php发展多年,有很多的经验和成果可以借鉴,这是ruby和python所欠缺的。
ruby近几年的流行势头极其迅猛,这与它的杀手级框架ruby on rails是分不开的,据javaeye的创始人之一robbin宣称javaeye网站开发,三个人只用了2个月左右的时间,真是不得不惊叹,而且"截止目前,JavaEye网站仅仅使用了总价格2.6万人民币的两台低端PC服务器,就支撑了网站每天高达140多万动态请求的访问量"。不过ruby on rails开发起来真是一个人一个写法,非常不适合团队开发(或者说还没找到方法去团队协作)。而且ruby on rails大企业和开源的支持都比较少,这是不得不考虑的问题,背靠大树好乘凉,没有大树自然就晒得很疼。
说到最后只剩下一个python了,总得来说它没有那么多出人意料的亮点,但是它的开发速度也很快,曾经让两个高手做实验,两个人分别用ruby on rails和用python的django开发同一个东西,用django居然比ruby on rails还要快。python也足够面向对象,而且python有google的支持,发展时间也比ruby要长,因此积累的资源就要更加丰富。用django开发出来的东西可以足够规范,让每个人都能读懂其他人的代码,适合团队开发。说到这里我的选择就很清楚了,如果让我现在做一个网站,我会选择 python。
当然由于经历和积累的原因,我的见解可能是很片面的,有什么问题,大家可以帮我提出来,非常感谢。
相关资源:后台语言选择