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

标签: java python 企业 | 发表时间:2012-10-04 08:28 | 作者:蓝飞
出处:http://www.clanfei.com/

昨日于V2EX见一贴,颇有收获,遂整理于此。

且Python也是There's only one way to do it,相信多人协作代码的控制也不是问题,此外Python也能跨平台。是因为大型项目一半不用解释型语言,因为效率的考虑吗?

skywinger:那是因为,那些大企业,比如像IBM等原先投入很多资金在JAVA上

powerfj:python做web也有呀,但是确实是太分散了,你说的There‘s only on way to do it,但是你看看python的web框架有多少..

linnchord 8 天前:java是静态类型语言,可规范性更强;

java相关平台产品在企业开发上更成熟更系统化;

java的平台文化更适合传统意义上的企业级开发;

java运行效率目前仅次于C,相比python高出一个数量级;

ritksm:@linnchord 最后一条未必吧....也得看代码和场景的呗....

zenomac:java像正规军 便于集体培训管理 做事得需要一大帮子人 干什么的都有

python这类的语言 像刺客 像间谍, 小团队搞 甚至单干.

dimfox 8 天前:
Why twitter switched away from Ruby on Rail to Java.

csx163:java运行效率目前仅次于C,相比python高出一个数量级;

那为啥安卓这么慢,能解释一下么

BOYPT:java运行效率目前仅次于C,相比python高出一个数量级;

----胡说

zxwind:因为java有人卖解决方案

jiazhoulvke:@linnchord 我也不太认同最后一条,看eclipse就知道

YUCOAT:Java用的人多……看看Java培训结构的数量就知道了!

Java的运行速度相对Python而言要快。

cloudzhou 8 天前:@jiazhoulvke

@csx163

@BOYPT

不能拿桌面程序特别是ui来衡量啊,这样的话linux也很“慢”,安卓之类的也是同样的道理。

java关键在于企业级支持和开源世界丰富的生态环境,效率虽然不知道是否一个数量级,但是比脚本语言高是真的。
我开发java几年了,对java是又爱又痛,最近又使用python,还开发一个网站 https://www.gitshell.com ,确实脚本语言开发起来非常惬意。现在很多人对java很有意见,其实不要有这种偏见,java是一门优秀的语言,非常适合中间件和严肃的场合,你如果深入就会发现java以及流行开源的libs都非常好,特别是NIO和多并发,现在java开发也不是ejb时代,同样有轻量方案。

clino:@BOYPT 我喜欢python,但是说起运行效率,java还是普遍比python强的,当然开发效率当然还是动态语言python更好了

@csx163 Android慢是因为Java慢吗?

fwee:@cloudzhou 优秀个P。你说的这些实际上另外的语言完全能做到。语言上来说就是一坨。这就是为什么JVM上这么多语言

cloudzhou:@fwee 不要激动,java的流行不是无道理的。从oo的语言历史来看的话,相当多的属性都是从java开始然后传播到其他语言,比如log4j,面向对象里面的aop,注入,注解,声明式事务,最起码来说wiki里面,这些内容java相关最多。语言上繁琐是一个问题,比如我在python可以使用 a = [i.name for i in xx],但是这是静态语言的问题,就像你不能在c语言里面这么做一样。JVM有那么多语言,这恰恰说明jvm上的优越,就是jvm设计上不单单为java服务,所以你看到jvm上可以跑多种语言,因为jvm是一种规范而已。

kernel1983:主流的语言中执行速度, C/C++, Java, 然后还算快的就是js那个v8

python和ruby真的不快, 但是在后端的都是并行计算, 开发效率才是关键, 不是php也可以写facebook吗?

OO这个东西在1985年已经烂大街了, 1995年出来的Java语言用这个做卖点确实算的上忽悠. 但是人家市场做的好.

不管是60年代的函数编程, 还是80年代的OOP, 都要看情况用, 无贵贱之分

cloudzhou:“另外的语言完全能做到”这个没什么说服力,我敢说使用.net也能给你开发一个大网站,但是我需要去找合适的mq,redis或者memcached的client lib,特别是开源的东西就没那么容易了。举个例子来说吧,我看过一些memcached clien lib的实现,在java实现里面,使用nio建立有限连接,然后网络复用服务调用者请求,而很多脚本语言框架实现很简单,就是每次请求每次都新建一个连接,用完就放弃,这个效率上相差就很大了。java相关的很多东西实现都很小心和严肃,所以是一个可靠的语言,注意,我并不是说其他不可靠,相反现在我更加喜欢脚本语言,如果现在我开发一个web网站,毫不犹豫使用python。

kevinv:暂且先不说执行效率的问题。java流行,人多,开发环境、框架成熟。开发风险小,解决方案多,可维护性高。

reus:jvm比CPython快很正常,jvm优化很多
安卓只是用了java语言,虚拟机是dalvik,跟一般的java开发所用的jvm不是同一个。而且安卓框架那么庞大,慢的瓶颈只在图形渲染策略上(4.1有所改善),跟java语言没啥关系
而且python也有jvm上的实现,jython之类的。“语言”和“实现”是不同的概念,没分清楚就来讨论是没有意义的
eclipse慢,换python写CPython跑会更慢
静态类型,vm又有jit,比python/CPython快是很正常的事,不要因为不喜欢java语言而否定jvm

csx163:@clino 那请问是啥呢

darklowly:java还是不错的。在涉及到大项目的时候脚本语言会力不从心。这里的力不从心包括速度,包括架构。

reus:java:http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=java&lang2=gpp
python:http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python3&lang2=gpp
供参考

ufo22940268:@cloudzhou 爆粗有点太激动了

clino:@csx163 android的慢是有多种原因的,比如有的android设备内存太少也会导致系统缓慢,我的判断是android设备慢的瓶颈基本上不会在java上,楼上19楼也有一些具体的看法你可以参考

cloudzhou:@reus 从你这个测试来说,有一些部分还真是数量级差别

holmesabc:@csx163 说android的UI慢是因为java,您开开玩笑,无所谓。如果理直气壮的这么讲,有点太搞笑了。

居然我说不上来具体原因,但绝对是整体架构的问题。android的framework的底层实现大多都是native的。

还有,本来扯这种语言之间的比较,就不是我等渣渣可以评论的。

bulldozer:开什么玩笑,几乎所有的主流业务软件,如SAP,ORACLE erp,JDE或PLM、WMS等,几乎所有的主流数据库或其他应用服务器,如DB2,几乎所有的主流文档类型,如CAD文件,都提供JAVA和.net的SDK,所谓企业级开发,从来不是一个程序的问题。

python,还差得远呢。

这和linux桌面一样,你可能能搭出一个可用的桌面,但那么多软件无法兼容或适应用户习惯怎么办?牵扯的是方方面面的问题。网银不能用,qq不好用,就可能导致相当一部分人弃用。

一个大项目,是不能失败的,谁会去冒险玩个性?

jekkro 8 天前:Java的开发人员比较好找,因为静态语言的优势,在IDE这一级比其他任何的动态语言支持都要好。我们曾经用过rails2年,每个程序员对同一个逻辑,都可以有不同的写法,让一个刚刚熟悉的ruby的人去接手真得很难。

bulldozer 8 天前:如果你是亚马逊,仓库要用RFID扫描枪,这个枪仅仅提供JAVA或.net的SDK,你想要集成进你们的业务系统,怎么整呢?搞个反向工程然后再用python?

bulldozer:java是历史选择,短期内地位已经很难撼动,大多数语言都只能注定是非主流,边缘化,和是否优秀无关。

Kymair:把Java语言和Java平台等同起来是不行的喔...

就拿运行时来看,现在星球上能跟JVM相提并论的可能就只有浏览器上的JS引擎了。
要论语言灵活性,我不觉得Ruby/Python能比的上Clojure

myv2ex:@tedd,显然楼上的jekkro更有项目开发经验,对不同的企业逻辑,对于Python这种动态语言在运行时才能确定是否合法显然是不够严谨的,类型的不确定性,每个人的写法不同,调试也是动态语言的软肋。这些对于开发人员和企业级开发都是噩梦。总之,python不是软件工程和构建代码结构的最佳选择,显然只适合于脚本开发。

sohoer:JAVA的底蕴,后来者是无法比的

fwee:@cloudzhou 另外的语言我可以用同在jvm平台的,别用java语言来绑架jvm平台。我宁愿用jRuby

yetone 8 天前:因为 Java 能做前端开发(好吧,我是来捣乱的~)

jamiesun 8 天前:你不可能像招聘java人员这样轻易招到python开发人员,想想吧,招聘10个java开发人员多简单,大学的,北大青鸟等机构的,批发价,要多少有多少。

但是你想组一个10人的python团队,即使是初级班的都难,中高级班简直是奢侈。如果python开发人员好找,傻瓜才去批发Java开发人员。

效率,性能从来不是核心问题。

java发展这么多年,自然有她的本钱,很多现成的资源,方案,利于厂商更好忽悠骗钱。真正飞上java不可的项目没那么多,很多企业跟不就是稀里糊涂的上了船,没有自己的判断和没有选择的能力,自然也没的选择。

另外是长期以来的观念问题,根深蒂固,一个杯子盛满水,就再装不下了,接受新的东西是很难的。

clowwindy:1. Java 有成熟的设计工具。在设计与实现完全分离的大型项目上有绝对优势。

2. Java 规范化的接口有利于项目的横向切分,也有利于提高软件质量。

3. JVM 健壮可靠,性能比 Python、Ruby 高一个数量级。

4. 以销售为商业模式的产品,必须用编译型语言。

5. Java 有成熟的框架和社区。

aa88kk:貌似这里好像在软件行业工作的不多, 回答都没到点子上.企业级(这个很重要)开发为什么用java的多? 原因很简单:因为有J2EE. 其他语言还真没有类似开发框架. 至于速度,性能之类就不是考虑重点了.

kongruxi:我觉得影响一个东西有两个很重要的因素:商业和教育

商业上有 IBM 等大企业撑 Java
教育上,请问中国有多少个老师会 Python/Ruby

turing:java好招人

jamiesun 8 天前:所谓的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 8 天前: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:@jamiesun
ejb 不是成功,这个已经有结论,否则不会有di或ioc模式spring为代表的革命,你不能拿这个说java的不足。
你对接口理解完全不正确,面向接口编程是为了程序的重新注入,就是只要实现了接口,对其中组件做到可替代。
中小公司支持使用脚本语言,其他观点我也赞同你的。
我们说的是java和其他脚本语言的对比,不是j2ee,现在已经很少提到j2ee这个概念了。
java一些代表性的东西应该拿 apache基金会 下面的java组件来说,比如hadoop,lucene。

cloudzhou:举个例子来说,我关注过一些 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:@cloudzhou 记得高司令说过他很后悔设计了接口这个语法。

cloudzhou:@fwee 这个有可能,他的境界太高,我不理解,我是在现实开发中觉得接口有用,阅读代码的时候都是先看看接口,就知道是提供什么功能,.net在设计上貌似更好。

ayang23:1. 使用java做的系统客户会觉得很牛逼,这是商业炒作和宣传的结果;

2. 可以把活分开放心交给初级程序员,做出的东西还不算太差;

3. python会的人太少。

clowwindy 8 天前:@csx163

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

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

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

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

这不代表 Windows 以前用重绘就不对。因为以前内存和显存有限,重绘是唯一的选择。

jamiesun:@cloudzhou 我对接口的观点只是我对java的吐槽,没有接口java一无是处。更不可能有好的架构了,我想说的是对java而此重要的接口对于python完全是可有可无的,动态性和自省能力是python的优势,而且python本身也支持多重继承。

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

lucene也不算特牛B的,python也有可替代框架。

jamiesun 8 天前:用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:@clowwindy 谢谢啊,请教的问题就您答了,今天看了A6处理器的透视,才知道苹果把触摸这块下了那么多的功夫。

Kymair:@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:@jamiesun 语言讨论的确容易偏激,比如Lisp hacker的一些文章… 但是说老实话,Python还真是达不到吐槽Java的程度。不能老拿自己的长处跟别人的短处比啊,得看综合实力。
我喜欢Python,它是一门好语言,库的质量也非常高,也有很多优秀的思想涌现过,但我个人感觉最近几年有点稍稍没落的意思了。作为Google的三大语言之一,在Dart和Go出来后,其实也挺尴尬的。

akann:每种语言都有每种语言在某个方面的优势,关键不在于哪种语言整体上比哪种语言整体上更有优势,而在于实现哪一部分功能用哪种语言更好,更适合于市场需要,包括终端消费市场和中间开发市场,比如说前端就适合用javascript和flash,你不太可能用c或c++去设计前端,虽然说c和 c++在其他方面会很有优势。

cloudzhou:刚好看到这篇文章,有兴趣看看 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: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:@cloudzhou 循环/递归/数值运算这些python被java甩开几个量级很正常, 毕竟除了本身效率差比较大,python(还有ruby)默认就支持大数运算....倒是ruby比python快,luajit比java/go/scala慢,倒是很意外...

不过解决方法也很方便,把那个c直接成so/dll,然后用ctypes直接开调就能插队到java前面去了....

jamiesun:@Js 所以说python+c,比性能比效率,java都是往后靠。因为python并不是单独作战嘛。

werty:有点歪楼了啊,觉得有几点原因;

第一Java的积累多,大企业投了那么多钱,一下子换平台,之前的 投入怎么算;

第二Python的人比Java的人少,高校里本科生很多都是Java或者C起步的,虽然谭浩强的书很烂,Python更多是自学的,基数就少很多,而且很多都是图快不图精,相对Java,精通的人Python很少;

第三Python没有大企业支持,虽然是Google内部的第三大语言,但是还是让人觉得是个游击队,Java就正规的多,18M,sun,oracle,说起来都是响当当的企业;

恩,楼下补充~

fwee:@cloudzhou @js ruby居然还挺快的。。

bwlinux:java已经建成了很大的生态链。很多大公司都是靠java吃饭。
套进去的,就出不来了。继续用。

bitsmix:RT@werty "...相对Java,精通的人Python很少;..."

Kymair:@jamiesun 我说的是JetBrains系列的IDE起码是用Java写的,各方面都经受住了考验,Guido van Rossum也是用的PyCharm。

你关注的Python东西,就是值得期待,或者不破不立;其他语言的,就是叫好不好座,就是“探索性的东西”,流行度不够 =_=... 双重标准太明显了

Ricepig:@cloudzhou "注解,声明式事务"是从java开始?C#表示内牛满面啊!

Ricepig:@cloudzhou 此外a = [i.name for i in xx]这种在java里暂时不支持也不是静态语言的问题,参见LINQ

Ricepig:我认为主要的问题就在于没有大公司支持。

Python虽然Google内部支持,但是并没有特别有力的工具释放出来,可能性有两个,一、Google只拿Python做脚本,并不用它来构建应用程序。二、Google雪藏了自己的大杀器。

而Java由于有巨型商用软件支持,因此无论是编译器、运行环境还是类库,都是有质量保证的。这和Python,Ruby这类语言差异很大。

说得极端一点,Python,Ruby这些都是游击队,小而灵活,必须有杀手锏否则就活不下去了。我相信一旦有大厂支持以后,它们也能成为正规军,前途无可限量。但是就现在的情况来说,还是java吧。

再举个栗子,JIT,这种对性能提升很大而广受支持的东西,到了Ruby,Python这里,直到现在还未见成熟~~~

另一个原因,Java已经成为企业开发的common interface了,这个很重要。保不齐什么时候就需要第三方组件、需要系统对接了。碰到小众语言就完蛋了。

skywinger:动态语言谈性能,都很可笑,真要比性能,任何高级编程语言都比不过c,这也就是为啥c语言历久而不衰的原因。

其实c语言也是在不断地更新变化的,目前最新的gnu c的特性也越来越多了。

java语言其实就是对性能的妥协,相对C++而言,java的开发效率提高了很多,真正能够做到了让广泛的程序员熟悉掌握,并用于团队协同开发大型商业系统。这个就是Java语言流行的真正原因。

这么看来真正比较失败及尴尬的语言是C++,特性太多,太复杂了。

Mr_Vangogh 7 天前:IE 6这么烂,万人骂,为什么份额还这么高呢?感觉是一样的道理,由企业市场的特性决定的。

jamiesun 7 天前:Guido 大多时间用的是emacs,不要看见提交了几次代码就认定是PyCharm,作为python发明者,关注一下pythonide是很自然的,但显然Guido并不只是只写python,在一次email采访中他提到自己常用的是emacs。

java在gui发展最好的是eclipse rcp,如各种报表系统,mis类系统。

java在新版本里加入各种语法糖不过是取巧讨好程序员罢了,实际反而弄得复杂混乱。那个神马泛型编程自动装箱拆箱就是饱受争议的例子。

python最缺的商业驱动。

从语言上讲,java优势过度夸大,比如对中小企业,java就是泥潭,所谓商业支持不等于保证质量,质量在于你的管理。

而python优势常被人忽略,缺陷被放大,比如性能,比如gil

说起gil,很多人认为python在并发方面难有建树,python的协程模型已经证明了单线程的高并发能力,通过多进程模式,并发根本不是问题,相反java常用的多线程模型在多核利用上并没有太大优势。

对于计算密集型的应用,python可以通过C语言的扩展来发挥优势。

python最让人为之神往的是效率,投入比java团队少得多的成本获得更好的产出,一旦换作java,必将大动干戈。

大多数java程序员观念是非常顽固的,很难说服,没有几个人相信用一个编辑器能完成一个项目,他们不相信少了ide还能写代码发布项目,如果他试探性的学习一下,第一件事是打听用什么ide好。一个快捷键生成一坨坨get/set这就是他们认为的高效率。我身边7,8个java程序员,我和他们在一起工作的几年,我一直悄悄的用python。

如果还是只停留在脚本的认知程度,那你只好继续深陷java的泥潭而浑然不觉。

你觉得商业驱动不够而置之不理,你可以说苦逼程序员要随主流,不然怎么混饭吃,这么想也没错。

luckyduck:①在国内互联网开发用Python的普及率都不及Java,更何况那些对技术选型相对保守的企业级开发?

②Android的慢很明显与Java无关,因为Android开发只不过借用了Java的语法规范,它用的JVM是Dalvik,而Java常用的则是HotSpot,更何况现在的Android真心不慢了,毕竟任何技术都有个成长期。

③Python的确要比Java慢,内存利用率,多线程,I/O等方面都很明显,还有就是JVM把.class解释成机器码时,要比PVM解释.pyc时,优化得更好,整个Rumtime更加高效稳健。

最后还有一篇老文,估计很多人也都看过。
http://www.csdn.net/article/2009-11-16/273155-214803

darasion:从根源上讲,就是 java 里边投的钱太多了。
什么运行效率什么特性什么标准化什么企业级支持什么什么..... 之类的,都是从根源里边一生二、二生三、三生万物.... 出来的..

liuxurong:Python很好。

JAVA属于浪费生命的产物。

RisingV 7 天前:知道当年java的受欢迎程度吗?sun的销售只要说带java,基本不用费口舌,机器就直接卖出去了。

最害怕的就是拍脑瓜下结论的,一两点微不足道的论据,就下结论;或者连论据都没有,直接下结论。这样的人不适合做技术,对于他做的东西我相信也无法安心让人使用。

小型和IO密集的场景,python可能是更明智的选择。java有效率上的优势,对于支撑大的业务系统,java有丰富成熟而又稳定的中间件,而且更加软件工程友好。

不想为这样的问题,多费笔墨。也请发言的人多为自己的言论负责任,别误导别人。

世上鲜有错的技术,多的是不会正确使用技术的人。

cloudzhou:@liuxurong
看看,其实我最反对的就是这样的言论,对参与者来说一点价值都没有,完全口水贴。

ysong:大家都容易结果导向 ,并将其标为“根本原因”,这是本末倒置。

jamiesun:java程序员总是跳不出“天朝唯我独尊”的怪思想。

各位看官若有自己的想法,根本不会被误导,被误导的都是那些被表象牵着鼻子走的人。

在商业的博弈中,sun已经倒下去了,还拿sun来说事。在整个商业大潮流中,java不过是厂商们博弈的工具而已,那些流水线上java程序员不过是一颗颗小棋子,我敢断定百分之80的java程序员都在流水线上作业,毫无趣味,虽然混的一日三顿全家温饱,但是毫无趣味,浪费生命。要赚钱,早日改行才是正确的选择。java的优势那是对厂商大鳄们的恩赐,不是给程序员的礼物。还在扯性能有意思吗?

小公司学大公司 整自己的java开发框架平台,那是最傻不过的事情了,不知道有多少公司乐此不疲。

python还有一个不同于java的是python是自由开放的,python有一些商业大佬们不喜欢的因素。但是对于程序员绝对是最好的恩赐。“人生苦短,我用python”是有其渊源的。

当然ruby也是很好的。

bulldozer:java沦为鄙视路径最右端了么?“哈哈,你们也有今日!”

khotyn:我看到的程序员里面倒是 Python 的程序员总是带着一种莫名其妙的优越感,他们会人云亦云地去鄙视搞 Java 的程序员;倒是 Java 程序员心胸比较开阔,比较会去包容,接受各种语言的优缺点,为自己所用。

khotyn:在上条的 Python 之前加上有一些~~,有些 Python 程序员还是非常不错的。

newtonisaac:go..............................

kenshin:发现大家讨论的很激烈,但都是从代码层面来分析,我想从生态系统来分析一下这个问题。

我是做企业开发的,从生态系统方面阐述一下这个情况:
- Java已经耕耘企业市场很多年了,企业开发的项目一般情况下都不是一朝一夕可以实现的,需要长期更新、维护和投入,所以早就有了“惯性”。试想一个使用Java开发n年的项目,投入了十几万个人月、甚至几十万人月后,突然全部换掉,改为Python?肯定不现实。再例如COBOL这个古老的编程语言,在很多银行系统中仍在发挥作用,例如日本的很多银行体系就用的COBOL作为其开发语言,在看看COBOL的开发者数量,这些例子足以说明“开发惯性”是不可忽视的。

- 全国各大高校基本上全部开设了Java课程,早在02年的时候,我的母校就已经开设了Java的相关课程。基于此,试想一下:每年会有数以万计的Java程序员诞生,这还不包括各种培训机构,所以庞大的开发者基数也是Python所无法比拟的。更何况,刚才第一点也说了,企业开发一般都具有时效性长的特点,这就需要其从业人员“高密度”特性,而Java则完全能满足这个条件。

- 由于Java进入企业市场这么久的时间,也因此产生了很多基于企业级的各种大型开发项目案例,这也变成了很多企业在做技术选型时唯一可以参考的编程语言之一(.Net则是另外一个可参考对象)

- 由于企业开发市场相对比较封闭,通常其有技术能力的人却没有决定技术选型的权力,而能决定技术选型的人往往都是“门外汉”,估计他们可能都没有听过Python的存在...在外行领导内行的情况下,选择Java势必会成为他们最为稳妥的方案。

- 在中国凡是涉及到企业、事业等相关行业,势必会依证办事,你需要有“XXX相关证书”才好做项目。(还记得高铁出事后,拿两个无证的程序员当替罪羊的事情吗?就是这个道理...)而Java则完全能符合其特点,基于Java的认证比比皆是,除此以外,其他语言则不具有这个优势。(.Net是另外一个有此优势的编程语言...)

- 目前的Java所有者Oracle公司在国内的市场推广/运作已经非常趋于成熟,看看国内各大银行、证券等各种企业、国有项目有多少采用他们的数据库?所以自然Java有其他语言所不具有的优势(按照搜狐的战略,这叫“三级火箭”)

- IBM对Java的在国内的推广也起到了至关作用。在很多企业开发的Java项目,经常会看到IBM的身影,因为他们在各种企业级Java项目中经常作为“技术顾问”入驻,这样至少决策者会觉得比较安心。(他们会想:万一出问题,我还可以花点钱请更牛X的解决方案团队来帮我解决...)

综上,在国内企业开发这个圈子里面,只能是浸淫多年的Java(Oracle),财大气粗的微软才玩得起的,其他编程语言都无法比拟的。如果想进入企业开发,势必要依附这两名编程语言,这样的例子也挺多,例如我一直从事的Flex开发就是如此 :)

PS:从语言特性角度而言,Java与Python肯定各有特点,例如Google公司的著名四大开发语言:Java、C++、Python、JavaScript就把他俩放到一起。存在即合理,即是这个道理。语言都是为人服务的,用哪种语言实现的更好就用哪种语言,没必要“较真”一样的纠结孰优孰劣~

jamiesun:@khotyn 你这话就外行了,python程序员一般不都是纯粹的python程序员,往往浸淫各类语言与技术的。

我做java开发比我使用python开发的时间要多上4,5年。对我来说说不是什么优越感,而是解脱感。

RisingV:本来不想说什么,竟然有人扯出“厂商们博弈的工具而已,那些流水线上java程序员不过是一颗颗小棋子”,“要赚钱,早日改行才是正确的选择。”

如果自己有这样的经历就别不负责任地推断到别人身上。自己也不过是商业公司的一个无名小卒,讲话何必带那么多优越感,好像自己多么超脱,不被摆布似的。别忘了软件本身就是为了商业服务的,能为商业良好服务的技术就是好的技术。

本来好好的关于语言之间的优缺点的讨论,总有人要扯些乱七八糟的,甚至放地图炮,一棍子打死一帮人,方才显得自己英明神武。

正如Bjarne Stroustrup说的“世上只有两种编程语言:一种是总是被人骂的,一种是从来没人用的。”。

jamiesun:@RisingV 正因为亲身参与了搭建这样的流水线,管理过这样的流水线才为这些java程序员不值。

那些北大青鸟之类忽悠年轻人上船,成批成批地往流水线输送。

话说得是难听点,但这都是事实,企业有选择java的理由,但是个人,没必要自己往泥潭里跳。

世上只有一种程序员,那就是有选择能力的,知道为自己选择的,不论水平高低,他们才是真正的程序员。

貌似现在用C++的是越来越少了,连骂的人都少了。

RisingV:@jamiesun
青鸟的恶名听过,也见识过。
但是哪天如果python流行到了java的程度,搞不好也冒出个黑鸟、白鸟的。
而且高手从来不是从培训机构里出来的,青鸟针对的多是大专类院校的,
一般正牌科班SE和CS出身都不可能去。但是既然存在,必然有市场的需求。

富士康的血汗工厂的员工和建筑工地的建筑工人都还离不开手头的工作赚钱糊口。
你劝他们辞职别干,另谋高就,但这也不是他们能选择的。

我体会过从C++到java的解脱感,现在搞hadoop自然是离不开java。另外也接触erlang和ruby。
我喜欢物尽其用,合适的场景作合适的取舍就行。也不随便针砭,对于有争议的东西还是让别人自己去体验才好。

另外,至少我认识做windows桌面、计算机视觉、图形方面的基本还是少不了C++的。

jekkro 7 天前:哈哈,每次语言的讨论总是很激烈!对于一个公司来讲,用什么语言取决于内部人力资源有什么样的人或者市场上可以招聘到什么样的人,如何把系统做得快速、稳定点。我用过n多语言,现在主要是Python和Java,Python的确不错,大家写的代码比较一致,但因为没有足够的人力资源,所以没有把它作为主力语言,Java作为开发语言真得很规范,至于它带的那些EJB,SSH之类的,你也可以完全无视,我们公司除了hibernate之外其他一律不用任何框架,就用自己的类似rails的程序(不想叫做框架,虽然已经用了8年了),我们放弃rails的唯一理由就是每个人写的代码都很不一样。

至于语言本身的性能,现在的机器已经不需要考虑这个了,我们要考虑的恰恰是算法,数据结构,数据库索引的设计,软件的部署方式,这些才会真正的影响用户性能体验。

所以个人选何种语言不是很重要,重要的是你必须选择一门语言到精通的程度(这里的精通也绝对不是简历上的精通,你必须知道它为什么好,也必须知道它为什么不好,能随意的写出基于简单算法的程序而不参考任何互联网资料)。

skywinger:@jamiesun 不要太偏激了,一切语言都是工具,既然你会多种语言,那也应该能够充分发挥你手上所掌握的各种语言,发挥出语言的优势,我相信有能力的人,是能在自己的所掌握的语言基础上搭建出一个异构的系统的,就如google公司,他们能发挥自己所用的4大语言,你为啥就容不下个java呢?何况java的jvm确实是个好东西,java 语言也还在不断的进化,java的NIO的性能也是非常的高效。
我本人目前用的是linux c/c++ 配合java的NIO做交易转发系统,感觉java NIO在性能上已经和我用c编写的通讯服务性能差不多了,有的时候还会胜出。

Kymair:@jamiesun 你的双重标准实在是太严重了。Python程序员就浸淫多种语言和语言和技术,其他语言包括Java程序员难道就不行吗?你自己选择Python就是心之所向,别人选择语言就是被逼无奈?

jamiesun 6 天前:@skywinger 交易转发系统这类IO密集型的Java并不比python优势,用过gevent就知道了。密集计算的java又干不过c++。java优势在于大型分布式。现在很多大型计费系统转向java并不是直接冲着java性能去的。单纯的server类系统没有什么优势。可以说大多数中小企业对java的开发挖掘如果换作python或ruby他们会做的更好。

@Kymair 你根本就没明白我在说什么,我说的很清楚:

大规模的应用,比如电信系统这类的使用java是最合适的,能充分发挥java的优势,资源整合,项目管理可以做的很好,但是在这种环境下,java程序员们的日子不好过,各种苛刻的环境待遇,要骂的是这些唯利是图的企业。

中小企业,尤其是初创企业,如果使用python或ruby会更好,更能充分发挥团队机动性与开发能力。在条件不错的情况下(比如北上广人才集中地),应该去朝着这个方向努力。

而对于个人,作为程序员在技术上应该有自己的自由选择,而且主动去选择,如果你是大公司的项目经理,架构师,把精力花在java研究上这无可厚非,如果只是一名中小企业的员工,何不在技术上做更好的探索,而python,ruby是我极力推荐的。花大力气在java上研究,没有大规模的应用场景实践,有个屁用。把python,ruby学好,轻松解决百分之七八十的问题,何乐不为。

vicalloy:+ java在商业方面的生态环境方面比较好。比如你要用“工作流”。用java你可以找到一堆还不错的实现。python能用的就没几个,而且都比较简陋,需求稍微复杂点就无力了。

+ IBM等大公司的广告不是白做的。

+ java作为工程化语言,限制和规范比较多。需要堆人的时候比用python、ruby啥的脚本容易些。水平烂的程序员可能写出的代码很烂,但通常还能跑。如果换成python和ruby,连跑都跑不动。

作为一个python用户,最后吐槽一下python(社区)。

- python相比ruby、js,算是脚本语言里比较缺乏活力的。python世界似乎就没怎么出现什么让人眼前一亮的东西。比如ror和node.js,比如用ror实现的github。不论是bitbucket还是hg,都只能给人平庸的感觉。

- 以前有篇文章讲到python为啥这么丑,排除个例,python做的东西确实都很丑。

- 很多pythoner都以python什么都能做而自豪。结果python就是个万精油,没有哪方面真正能让人眼前一亮的。

- python的语法比ruby看的更顺眼,所以吐槽后好是忍了。

skywinger:@jamiesun 屁话,你用python原生写一个大并发的IO类的demo,我用Java NIO也写一个,咱们在相同的设备环境下比较下,你看看是你的python的处理速度快,并发量大,还是java NIO的性能好,速度快,并发量大。
你不要再一直的误导大家了,python的性能是没法与静态编译类型语言媲美的,这是事实。

jamiesun:@vicalloy

啥叫工程化语言,真没找到这个定义。

有多少中小企业会上ibm等厂商的商业产品服务,上的起吗,有必要吗,有多少企业在用websphere ,有多少企业在用jboss。ibm的广告都是白做的。ibm真要把服务产品推出去,靠得是公关回扣啥的,你看他的客户是谁就明白了。

工作流啥的,zope,plone老早就做的不错了,国内的易度一直在做,不比java差。

至于你作为一个python用户对python的吐槽水平,让我作为另一个python用户都觉得难堪,你现在都还没有发现python世界让人眼前一亮的东西,我都不知道你为什么还在用python。

jamiesun:@skywinger 废话就不说了,这是python的一些服务器基准测试结果:http://nichol.as/benchmark-of-python-web-servers,其他的不用看,只看gevent,单进程9500r/s,你自己用java写个helloworld server跑一下看看。

jetty,tomcat,jboss,你也可找些基准测试的数据来看看。

“python的性能是没法与静态编译类型语言媲美”这是针对cpu运算能力利用而言,python用c扩展下就甩java一条街了,不要孤立的看python,前面回复提了好几次了。当然你也可以用jni来扩展java,如果觉得对性能提升巨大的话。

bhuztez:@jamiesun 电信级别的项目不选Erlang而选Java,这个是不是自己和自己过不去啊

bhuztez:@vicalloy node.js也能让人眼前一亮?Twisted的历史都能追溯到2002年了吧。

bhuztez:@vicalloy 为啥我觉得GitHub越来越难用了,bitbucket却没有。

bhuztez:@skywinger 请定义设备环境、速度、并发量、性能。

jamiesun:@bhuztez 你了解Erlang吗,你知道Erlang在电信系统中如何应用的吗,电信系统包括哪些东西?

jekkro:@jamiesun 哈哈,喜欢你的风格!自己喜欢的东西就是最棒的。每次关于语言的争论都是这样子,曾经我学C的时候有人一定要辩论说汇编语言好的不得了,那个时候可以举出很多理由,比如内存啊,速度啊。所以强力推荐自己喜欢的语言的人都是对这门语言真正的喜欢上了,可以干他想干的事情了,我想你必定是如此之人。

Smartype:我觉得无所谓好坏。合适的时候选合适的(拿手的)。

企业市场上Java的占有多是商业运作的结果,而且Java码农资源足,门槛低。(比如我们的党,你敢说他说最好的么?)

Java 由于定位企业应用,以及过分的强调OO,导致类库庞大,效率是在不该作为优点来说。

Java 用户基数大,所有有很多很差的用户,这也是导致 Java 被鄙视的原因之一。特别是一些所谓的高手。正与 @tweetbot_paul 说的 I'd rather cut off my hands than code Java, this is why we don't develop for Android.

整理自: http://v2ex.com/t/48721?p=1

相关 [java python 企业] 推荐:

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

- - 蓝飞技术部落格
昨日于V2EX见一贴,颇有收获,遂整理于此. 且Python也是There's only one way to do it,相信多人协作代码的控制也不是问题,此外Python也能跨平台. 是因为大型项目一半不用解释型语言,因为效率的考虑吗. skywinger:那是因为,那些大企业,比如像IBM等原先投入很多资金在JAVA上.

python/java操作linux系统命令

- 天朝小民 - ITeye论坛最新讨论
看来python的确是做为脚本语言来使用的话,非常的方便. 来看一个处理linux命令的脚本. #coding:utf-8 import os import commands ''' 采用os.popen(cmd)来执行命令,要获取输出,需要read()来读取 ''' cmd = 'ls -l' values = os.popen(cmd).read() #print values for v in values.split('\n'):.

Python语言在企业级应用上的十大谬误

- - 极客范 - GeekFan.net
语言多元化是PayPal编程文化中一个重要的组成部分. 在C++和Java长期流行的同时,更多的团队选择了JvaScript和Scala. 同时, Braintree的收购也引入了一个久经世故的Ruby社区. Python作为一门特别的语言,在eBay和PayPal有很长的历史. eBay的开发者支持Python这个应用于基层领域多年的语言.

搜狐武汉工程院招聘Python工程师、Java工程师...

- sun - BT的花 blogs
搜狐将在武汉成立工程院,我目前负责武汉工程院的筹备和初期建设工作. 武汉工程院的目标是吸引华中地区的优秀工程师,配合北京总部的规划进行项目实施;为将来的业务发展储备人才. 武汉工程院也会逐步配置独立的产品和运营团队,争取早日主动驱动业务增长. 初期的办公地点离华科大不远,办公室预计元旦前可交付使用.

疑Google员工把8w行Python项目用4w行Java重写了

- - est's blog
发信人: daluobu (阿土仔), 信区: Python. 标 题: 终于把一个8万行的Python程序用Java重写了. 发信站: 水木社区 (Fri Dec 6 08:10:26 2013), 转信. 在噩梦般地维护了一年多一个8万多行的Python程序之后,终于争取到机会把这个破烂玩.

NutzWk 4.0.5 发布,Java 企业级开源开发框架

- - 开源中国社区最新新闻
NutzWk 基于Nutz的开源企业级开发框架 . 本项目源于2010年,那时老东家还在使用Jsp和Struts1,需要手动创建并释放连接池、需要配置XML请求路径和类映射关系、要支持刚刚兴起的JSON非常痛苦等等的原因,开始选择适用“快速开发、功能丰富、扩展性强、性能优越”等技术要求的框架产品,讨厌Spring的繁杂配置、Hibernate及Mybatis的繁琐,讨厌一切让开发变得低效和繁杂的技术,这和Nutz的设计理念不谋而合.

dropbox讲python

- chuang - Initiative
dropbox定制优化CPython虚拟机,自己搞了个malloc调度算法. 那个 !!!111cos(0). 期待这次PyCon China 2011.

Python调试

- - 企业架构 - ITeye博客
原文地址: http://blog.csdn.net/xuyuefei1988/article/details/19399137. 1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:. IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:.

Python WSGI 初探

- - 坚实的幻想
在构建 Web 应用时,通常会有 Web Server 和 Application Server 两种角色. 其中 Web Server 主要负责接受来自用户的请求,解析 HTTP 协议,并将请求转发给 Application Server,Application Server 主要负责处理用户的请求,并将处理的结果返回给 Web Server,最终 Web Server 将结果返回给用户.

Java EE企业系统性能问题的原因和解决建议

- - InfoQ cn
Pierre-Hugues Charbonneau(昵称是P-H)是加拿大CGI公司的高级IT顾问和系统架构师. 近日他发表了题为《 导致Java EE企业性能问题的十大原因》的文章,列举了对Java EE企业系统性能影响最大的因素,并做出了很好的建议. 在文中,P-H首先指出,在设计和实现Java EE相关技术的时候,性能问题是我们所要面临的最大挑战之一.