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

2012-09-26 00:01:28 +08:00
 tedd
且Python也是There's only one way to do it,相信多人协作代码的控制也不是问题,此外Python也能跨平台。是因为大型项目一半不用解释型语言,因为效率的考虑吗?
96624 次点击
所在节点    Python
151 条回复
kenshin
2012-09-27 13:40:56 +08:00
发现大家讨论的很激烈,但都是从代码层面来分析,我想从生态系统来分析一下这个问题。

我是做企业开发的,从生态系统方面阐述一下这个情况:
- 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
2012-09-27 13:41:11 +08:00
@khotyn 你这话就外行了,python程序员一般不都是纯粹的python程序员,往往浸淫各类语言与技术的。

我做java开发比我使用python开发的时间要多上4,5年。对我来说说不是什么优越感,而是解脱感。
RisingV
2012-09-27 14:31:04 +08:00
本来不想说什么,竟然有人扯出“厂商们博弈的工具而已,那些流水线上java程序员不过是一颗颗小棋子”,“要赚钱,早日改行才是正确的选择。”

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

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

正如Bjarne Stroustrup说的“世上只有两种编程语言:一种是总是被人骂的,一种是从来没人用的。”。
jamiesun
2012-09-27 14:47:53 +08:00
@RisingV 正因为亲身参与了搭建这样的流水线,管理过这样的流水线才为这些java程序员不值。

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

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

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

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

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

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

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

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

所以个人选何种语言不是很重要,重要的是你必须选择一门语言到精通的程度(这里的精通也绝对不是简历上的精通,你必须知道它为什么好,也必须知道它为什么不好,能随意的写出基于简单算法的程序而不参考任何互联网资料)。
skywinger
2012-09-28 12:14:06 +08:00
@jamiesun 不要太偏激了,一切语言都是工具,既然你会多种语言,那也应该能够充分发挥你手上所掌握的各种语言,发挥出语言的优势,我相信有能力的人,是能在自己的所掌握的语言基础上搭建出一个异构的系统的,就如google公司,他们能发挥自己所用的4大语言,你为啥就容不下个java呢?何况java的jvm确实是个好东西,java 语言也还在不断的进化,java的NIO的性能也是非常的高效。
我本人目前用的是linux c/c++ 配合java的NIO做交易转发系统,感觉java NIO在性能上已经和我用c编写的通讯服务性能差不多了,有的时候还会胜出。
Kymair
2012-09-28 12:39:03 +08:00
@jamiesun 你的双重标准实在是太严重了。Python程序员就浸淫多种语言和语言和技术,其他语言包括Java程序员难道就不行吗?你自己选择Python就是心之所向,别人选择语言就是被逼无奈?
jamiesun
2012-09-28 14:17:37 +08:00
@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
2012-09-28 15:57:26 +08:00
+ 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
2012-09-28 17:30:53 +08:00
@jamiesun 屁话,你用python原生写一个大并发的IO类的demo,我用Java NIO也写一个,咱们在相同的设备环境下比较下,你看看是你的python的处理速度快,并发量大,还是java NIO的性能好,速度快,并发量大。
你不要再一直的误导大家了,python的性能是没法与静态编译类型语言媲美的,这是事实。
jamiesun
2012-09-28 18:02:40 +08:00
@vicalloy

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

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

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

至于你作为一个python用户对python的吐槽水平,让我作为另一个python用户都觉得难堪,你现在都还没有发现python世界让人眼前一亮的东西,我都不知道你为什么还在用python。
jamiesun
2012-09-28 18:48:59 +08:00
@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
2012-09-28 18:50:18 +08:00
@jamiesun 电信级别的项目不选Erlang而选Java,这个是不是自己和自己过不去啊
bhuztez
2012-09-28 18:51:19 +08:00
@vicalloy node.js也能让人眼前一亮?Twisted的历史都能追溯到2002年了吧。
bhuztez
2012-09-28 18:52:06 +08:00
@vicalloy 为啥我觉得GitHub越来越难用了,bitbucket却没有。
bhuztez
2012-09-28 18:53:27 +08:00
@skywinger 请定义设备环境、速度、并发量、性能。
jamiesun
2012-09-28 19:02:57 +08:00
@bhuztez 你了解Erlang吗,你知道Erlang在电信系统中如何应用的吗,电信系统包括哪些东西?
jekkro
2012-09-28 19:09:12 +08:00
@jamiesun 哈哈,喜欢你的风格!自己喜欢的东西就是最棒的。每次关于语言的争论都是这样子,曾经我学C的时候有人一定要辩论说汇编语言好的不得了,那个时候可以举出很多理由,比如内存啊,速度啊。所以强力推荐自己喜欢的语言的人都是对这门语言真正的喜欢上了,可以干他想干的事情了,我想你必定是如此之人。
Smartype
2012-09-29 13:27:45 +08:00
我觉得无所谓好坏。合适的时候选合适的(拿手的)。
企业市场上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.

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

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

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

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

© 2021 V2EX