Java能做的事Python也都能做,但是为何(企业级)开发项目大多还是会选择Java? 是效率?

2012-09-26 00:01:28 +08:00
 tedd
且Python也是There's only one way to do it,相信多人协作代码的控制也不是问题,此外Python也能跨平台。是因为大型项目一半不用解释型语言,因为效率的考虑吗?
96565 次点击
所在节点    Python
151 条回复
jamiesun
2012-09-26 15:28:04 +08:00
所谓的java某些优势只是对java而言,而python来说可有可无。

python实现原型的效率是java无法比的。设计与实现分离,没看到Java强到哪里,反而看到的是一堆一堆笨重的玩意,ejb算是成功典范吗,鼓吹到人见人吐的东西。

接口只是java为了避免质量低下的手段,当然可以说是为了提高质量,而对python接口没有这么重要,java世界里吹的跟神一样的aop所谓面向切面的东西在python里不过是装饰器这样的内置能力。

JVM 要是不健壮,java早死翘翘了,这是python的不足之处,但也算不上要命之处,python和c的完美结合比起jni舒服多了。

java的字节码并不是机器码,java不过是混合型的,要真正编译型那要算c/C++,所谓以销售为商业模式的产品,必须用编译型语言,这是什么话。

成熟的框架和社区,这不是java的专利。python扩展库之多涵盖之广谁用谁知道。
jamiesun
2012-09-26 15:53:11 +08:00
J2ee他妈的根本就不是个东西,所谓的那些J2ee企业应用都是什么,12306算不。我2001年学java到一些企业观摩j2ee,原来就是servlet+jsp。后来参与移动一个项目,高价聘请原BEA公司顾问来培训,那讲的叫一个牛B,各种重量级的产品都上了,最后团队实际项目开发时,这些玩意全扔一边去,乖乖ssh干活。那些被商业巨头鼓吹的j2ee产品从来就没有流行过。被忽悠的企业转过头来乖乖用ssh干活,电信,移动,联通,网通这些算不算企业,他们的系统算不算企业应用,算吧,大多数就是ssh做的,换句话说,ssh就是j2ee。

业界把java/J2ee鼓吹的那么神,而实际上大多数企业使用java并没有体现java在技术上的一些优势,从管理,节约成本方面上看java体现了不少优势,大的软件企业,华为,中兴,东软都会有一套java流水线生产平台,它并没有使用多先进的技术,它的目的就是把软件开发做到和富士康流水线一样的程度。只有java在这方面做的最好。整合合各种商业非商业工具,打造一个赚钱机器,这才是主题。

中小公司如果可以选择python,ruby等,我觉得应该尽量避开java,受国内人才环境所限,选择java都是无奈之举。
cloudzhou
2012-09-26 16:09:50 +08:00
@jamiesun
ejb 不是成功,这个已经有结论,否则不会有di或ioc模式spring为代表的革命,你不能拿这个说java的不足。
你对接口理解完全不正确,面向接口编程是为了程序的重新注入,就是只要实现了接口,对其中组件做到可替代。
中小公司支持使用脚本语言,其他观点我也赞同你的。
我们说的是java和其他脚本语言的对比,不是j2ee,现在已经很少提到j2ee这个概念了。
java一些代表性的东西应该拿 apache基金会 下面的java组件来说,比如hadoop,lucene。
cloudzhou
2012-09-26 16:19:39 +08:00
举个例子来说,我关注过一些 kv db,之前还读过 Amazon DynamoDB 的论文,DynamoDB是java实现的,之后的Cassandra,Hbase都是java实现,更多例子可以看 http://nosql-database.org/ , kv db和mq是重要组件,要求非常高,所以说明java在一些领域已经能和c/c++竞争,你能找出一个完全python,ruby编写的kv db吗?
所以说一些我认为java适合的地方,和脚本语言差异:
1 java 适合中间件,一些时常是c/c++领域的东西也可以代替,比如kv db和mq。
2 java 可以做web开发,但是很繁琐,但是规范化,开发效率优势不及脚本语言,性能优于脚本语言,如何选择自己衡量。
这些东西争论的意义并不大,市场和开源产品就是答案,不要对语言有偏见。
fwee
2012-09-26 16:19:50 +08:00
@cloudzhou 记得高司令说过他很后悔设计了接口这个语法。
cloudzhou
2012-09-26 16:25:48 +08:00
@fwee 这个有可能,他的境界太高,我不理解,我是在现实开发中觉得接口有用,阅读代码的时候都是先看看接口,就知道是提供什么功能,.net在设计上貌似更好。
ayang23
2012-09-26 16:29:36 +08:00
1. 使用java做的系统客户会觉得很牛逼,这是商业炒作和宣传的结果;
2. 可以把活分开放心交给初级程序员,做出的东西还不算太差;
3. python会的人太少。
clowwindy
2012-09-26 17:01:23 +08:00
@csx163

涉及到显示或者网络的性能的时候,你真的不能怪语言。这个纯粹看设计的原理。

Android 以前慢,是因为它不缓冲已渲染的部分,每一帧都重绘改变的了 rect,就像 Windows 的古老做法一样。你可以回忆一下引入 DWM 之前,Windows 上快速拖动一个窗口,特别是比如在打开了一个复杂文档的 Word 窗口上方拖另一个窗口,CPU 耗光,下面的窗口却来不及刷新的情景。ARM 比 x86 慢一到两个数量级,在 ARM 上用重绘去实现拖动,帧率自然很低。

cocoa touch 是苹果最 NB 的东西。它好像是最早在手机上把硬件加速广泛用在 UI 框架上的吧。把 CPU 从平移、旋转、缩放中解脱出来,往下拖动的时候只渲染一次下面的内容,再把它一点点往上挪,自然优于每一帧都重绘。

iOS 上有不少写的很烂的 App,拖动的时候卡的要死,一看就是每一帧都重绘的。

这不代表 Windows 以前用重绘就不对。因为以前内存和显存有限,重绘是唯一的选择。
jamiesun
2012-09-26 17:49:20 +08:00
@cloudzhou 我对接口的观点只是我对java的吐槽,没有接口java一无是处。更不可能有好的架构了,我想说的是对java而此重要的接口对于python完全是可有可无的,动态性和自省能力是python的优势,而且python本身也支持多重继承。

在zope架构中就有对接口的大量应用,延伸至plone这样的系统,各种可配置的组件都是基于接口实现,但是zope,plone并不算python界成功典范,其中有太多j2ee架构的影子,过于笨重。而另外一个twsited也是有大量接口应用的框架,但这个框架似乎和他的名称一样纠结的很,和gevent这样的框架比,优势也不大。可以说使用python实现更好的架构和应用接口没那么重要,反而为接口而接口写出更臃肿的代码。

lucene也不算特牛B的,python也有可替代框架。
jamiesun
2012-09-26 18:05:14 +08:00
用python去实现一个kvdb是很傻的事情,因为与C整合是python最擅长的,对C开发的kvdb做binding才是正道,mongodb,redis,leveldb等等这些都远胜java开发的db,java写db实际上是牺牲了性能的,混合式语言与纯编译型语言的效率是有差别的,而且性能也并不是直接亮点,往往是架构。

不要只是拿python去和java比性能,python强调的是效率,在需要性能时,结合C语言扩展就能获得很大改善。而java & jni显然没那么好。

如果给应用系统加上重量属性,我认为只有达到一定的量级才可能发挥java的优势。

java不擅长的多了,系统管理运维别提,GUI只有oracle这些企业喜欢,web开发在django,raise面前无优势。
csx163
2012-09-26 18:56:57 +08:00
@clowwindy 谢谢啊,请教的问题就您答了,今天看了A6处理器的透视,才知道苹果把触摸这块下了那么多的功夫。
Kymair
2012-09-26 19:47:34 +08:00
@jamiesun 现在拿Java语言跟Python语言比实在是没什么可比性。
说到语言的表达性灵活性以及开发效率,Python跟Ruby和JavaScript如何?更别说Clojure这种Lisp方言了。跟Groovy, Scala之类的JVM语言比也很难讲。
说到runtime, 显然达不到Java和JS的水准。VM和compiler这种东西有时候还真是真金白银砸出来的。
轮社区活跃度,个人感觉,仅仅是个人感觉,最近几年的新东西貌似是JS和Ruby比较多。说到系统管理运维,DevOps似乎是Ruby的地盘吧?
Web开发的话,Django是不错,不能说跟Rails孰优孰劣,但应该是Rails所带来的影响更大。Java社区也有Play Framework这种东西。
GUI的话Java至少有JetBrains一系列顶级的IDE撑门面啊,Python的话... 我不熟悉,反正没大听说过。
Kymair
2012-09-26 19:51:29 +08:00
@jamiesun 语言讨论的确容易偏激,比如Lisp hacker的一些文章… 但是说老实话,Python还真是达不到吐槽Java的程度。不能老拿自己的长处跟别人的短处比啊,得看综合实力。
我喜欢Python,它是一门好语言,库的质量也非常高,也有很多优秀的思想涌现过,但我个人感觉最近几年有点稍稍没落的意思了。作为Google的三大语言之一,在Dart和Go出来后,其实也挺尴尬的。
akann
2012-09-26 20:21:25 +08:00
每种语言都有每种语言在某个方面的优势,关键不在于哪种语言整体上比哪种语言整体上更有优势,而在于实现哪一部分功能用哪种语言更好,更适合于市场需要,包括终端消费市场和中间开发市场,比如说前端就适合用javascript和flash,你不太可能用c或c++去设计前端,虽然说c和 c++在其他方面会很有优势。
cloudzhou
2012-09-26 20:26:25 +08:00
刚好看到这篇文章,有兴趣看看 fibonacci(40) benchmark
http://fengmk2.github.com/blog/2011/fibonacci/nodejs-python-php-ruby-lua.html
Results
(^_^) c > java > go > scala > luajit > nodejs > pypy > ruby 1.9.3+ > lua > php > python > perl > ruby 1.8.x (T_T)
jamiesun
2012-09-26 20:34:44 +08:00
Clojure,Groovy, Scala都是叫好不叫座的,流行度都不够,Dart和Go虽然产自google,但真正流行的只有v8。

java的Play Framework并不流行,只是一种探索性的东西,ssh还是主流。

linux发行版都是内置python的。Clojure,Groovy, Scala这种jvm寄生语言显然不能比。老实说,go还有待时间考验。

目前中小企业对python的渴求越来越强烈,何来没落之说。

jit的话,虽然pypy还不那么稳定,但是发展很快,值得期待。

python3也越来越近,很多人抱怨兼容性,但“不破不立”,python3是一个巨大的进步,值得期待。

gui方面不是比ide,比的是gui应用的开发,python和wx ,qt,gtk都是结合的相当好的,尤其是qt,java和qt的的整合貌似还停留在4.5的阶段,几乎停滞,swing就不提了。java在gui发展比较好的是基于swt的rcp平台,但是谁又知道swt竟然曾经都不被sun公司接纳的。java开发的gui应用至少得带一个jre,系统资源占用总是贪得无厌。实在让人不喜。
Js
2012-09-26 20:38:36 +08:00
@cloudzhou 循环/递归/数值运算这些python被java甩开几个量级很正常, 毕竟除了本身效率差比较大,python(还有ruby)默认就支持大数运算....倒是ruby比python快,luajit比java/go/scala慢,倒是很意外...

不过解决方法也很方便,把那个c直接成so/dll,然后用ctypes直接开调就能插队到java前面去了....
jamiesun
2012-09-26 20:49:38 +08:00
@Js 所以说python+c,比性能比效率,java都是往后靠。因为python并不是单独作战嘛。
werty
2012-09-26 21:22:18 +08:00
有点歪楼了啊,
觉得有几点原因;
第一Java的积累多,大企业投了那么多钱,一下子换平台,之前的 投入怎么算;
第二Python的人比Java的人少,高校里本科生很多都是Java或者C起步的,虽然谭浩强的书很烂,Python更多是自学的,基数就少很多,而且很多都是图快不图精,相对Java,精通的人Python很少;
第三Python没有大企业支持,虽然是Google内部的第三大语言,但是还是让人觉得是个游击队,Java就正规的多,18M,sun,oracle,说起来都是响当当的企业;
恩,楼下补充~
fwee
2012-09-26 21:44:14 +08:00
@cloudzhou @js ruby居然还挺快的。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX