为什么Java不用于现代Web应用程序开发?[关闭]


393

作为专业的Java程序员,我一直在试图理解-为什么现代Web应用程序讨厌Java?

我注意到一种趋势,在当今的网络初创企业中,相对较小的比例似乎正在使用Java(与Java的整体普及率相比)。当我问了一些有关此问题的信息时,通常会收到诸如“我满怀热情地讨厌Java”之类的回复。但是似乎没有人真的能够给出明确的答案。

我也听说过,同一网络启动社区对Java开发人员的评价是负面的-或多或少地暗示他们很慢,没有创造力。

结果,我花了一些时间来学习Ruby / Rails,基本上是要找出我所缺少的东西。但是我忍不住想自己:“如果使用Java,我可以更快地完成此工作”,这主要是由于我的相对经验水平。

但这也是因为我没有看到Java遇到任何严重的“遗漏”,因此无法构建相同的应用程序。

这使我想到了一个问题

为什么在现代Web应用程序中不使用Java?

  • 这是语言的弱点吗?

  • 这是Java的一种不公正的刻板印象吗,因为它已经存在了很长时间(它与较早的技术存在不公平的联系,并且没有因为其“现代”功能而获得认可)?

  • Java开发人员的负面刻板印象是否太强了?(Java不再是“酷”了)

  • 用其他语言编写的应用程序真的可以更快地构建,更容易维护并且性能更好吗?

  • Java是否仅由太慢而无法适应新语言的大公司使用?


142
我认为您是错误的:它仍在使用,只是失去了酷炫的因素。

41
@Graham Lee:Java曾经很棒吗?我一定错过了什么。好吧,我想这是冷咖啡,但是凉吗?我认为主要原因是Java,尤其是企业Java框架已经并且仍然进行了过度设计。您不能认为它们是轻量级的,只是使用它们是因为您需要平台的分布/平衡/可伸缩性功能,并且出于同质化的考虑,也希望使用Java进行的前端框架。
猎鹰

20
也许是因为它不现代?:P而且Java 从来都不是很酷的,仅仅是因为它把编程中的黑客部分扔掉了。
back2dos

28
@Falcon Java刚推出时就很酷,Sun在炒作Java方面做得很好,无论炒作是否合理与它是否酷都没有关系,很多很酷的东西都是无缘无故地被炒作。
Mahmoud Hossam

11
@Falcon,您应该看一下用Java EE 6中的JSF 2.0创建Web应用程序并将其与您的经验进行比较。您可能会感到惊喜。

Answers:


174

现代初创企业需要尽快进入市场。他们不需要花费大约六个月的时间来发布Java Web应用程序。

例如,Twitter是使用Rails / Ruby构建的,但是一旦变得不可扩展,便将其迁移到JVM。

更不用说开发过程没有效率:代码->编译->在(Rails / Django / Grails)这样的框架中部署:运行测试服务器->代码->更改并查看会发生什么。

好消息是JRebel 使您可以立即查看代码更改。


81
Play Framework也类似于Ruby on Rails,但适用于Java。代码->更新浏览器。
乔纳斯(Jonas)

34
只是尝试摆脱一些误解。正如许多人认为的那样,Java EE并不是Java服务器端唯一的东西。
乔纳斯(Jonas)

22
Facebook也做类似的事情。他们的代码库使用PHP,但是由于速度和可伸缩性问题,他们不得不编写一个将PHP编译为C ++的编译器(HipHop),然后使用g ++对其进行编译。有趣的是,每个人都谈论ruby和PHP的强大之处,以及围绕它们构建的所有站点,但是当您查看它们的效率如何时,大多数大型组织都不得不改用其他东西。如果我没记错的话,出于这个原因,Craigs List有很多用C / C ++编写的后端代码。
Kibbee

28
1)使用Eclipse,在您键入内容时会进行编译,因此您几乎不会注意到。另外,在Eclipse中运行Tomcat,我可以在一秒钟内重新启动应用程序。重启我的应用很少受到阻碍2)伙计们,没有万灵药。Ruby或任何语言都无法使您快10倍。Java开发人员的问题通常是增加时间,但是如果您知道自己在做什么,则可以在10分钟内完成项目。
alex

5
Java和任何其他静态语言都有两个巨大的好处,几乎无忧地进行重构,并且无需文档即可发现API。
伊兰·麦丹

136

以我的经验,适用于Web应用程序的Java对于小型应用程序而言过于矫kill过正。例如,一个具有一个数据库表的简单博客可以保存博客条目,这可以通过简单得多的方式完成。

我通常看到Java在与许多其他系统(例如大型机后端和数据库以及对等Web服务后台批处理系统)进行通信的大型Web应用程序(例如银行和保险公司)中表现更好。都在同一个应用程序中)。

从我所看到的来看,JavaEE Web应用程序的体系结构通常仅比小型/简单Web应用程序所需的体系结构要多。


5
对于“小型”应用程序,如果您必须(因为这是“标准”并且该公司使用它)与诸如Websphere之类的庞然大物的应用程序服务器一起工作,则更是如此,而例如Tomcat通常就足够了。 ..为什么哦,为什么我必须使用那个混乱的管理控制台?感叹……
Jalayn 2011年

7
@Jalayn:根据我的经验,这是因为他们只希望为所有内容维护一个应用程序服务器程序,而不是为Team A管理WebSphere,为Team B管理Tomcat,为Team C管理Glassfish(或其他)...我可以理解感觉也一样,但是是的,这也让我感到沮丧。
FrustratedWithFormsDesigner

3
对于Java EE来说确实如此,但是现在有了Play Framework,它将使您的Java Web应用程序像Ruby on Rails一样轻巧高效。
乔纳斯(Jonas)

9
新的Java 6 EE(尤其是Web配置文件)允许一些非常简单的Web应用程序。

4
@ThorbjørnRavnAndersen该应用程序可能很简单,但是对框架的了解却并非如此,对诸如Ant或Maven之类的主要工具的理解也是如此。新手的学习曲线非常庞大,充满了嵌套的首字母缩略词层,规格(例如JAX-RS)和impls(例如Jackson)之间的混淆等等。如果您想真正了解自己在做什么,那么做简单的事情非常复杂。
Craig Ringer 2012年

135

在4年前改用python之前,我已经为Java Web应用程序编程了10年。我觉得使用python可以提高工作效率,并且可以在更短的时间内完成更多工作。老实说,当我使用python开发时,我会感到更加快乐。根据我的个人经验,以下是我认为python比Java更好的一些原因,您的年龄可能会非常大。

Web框架:

当我第一次开始用Java对Web应用程序进行编程时,Struts刚问世,虽然效果并不理想,但这是最好的选择。我创建了许多struts应用程序,并在此过程中创建了其他一些框架。每当出现一个新框架(Tapestry,Wicket,GWT,stripe,grails,AppFuse,Play,RichFaces,Spring等)时,我都会尝试一下,看看它是否更好,而且大多数时候它只会好一点,有时一点也不好。我必须说,游戏框架是朝着正确方向迈出的一步。

不包括电池:

Java最令人讨厌的部分之一是您使用的大多数库都不包含在Java本身中,您必须从apache commons之类的地方包含大量的3rd party库。如果将hibernate之类的东西与其他任何大型库一起使用,则会导致Jar依赖地狱,其中hibernate需要一个版本的jar,而其他版本则需要另一个版本。如果以错误的顺序加载jar文件,那么您很不走运。您需要依靠诸如maven和ivy之类的工具来管理您的依赖关系,这只会给您的项目带来更多的依赖关系,从而导致项目庞大。我有一些用于最简单的Web应用的战争文件100MB +战争文件。

太多选择:

由于某种原因,在Java中似乎有太多不同的方法可以完成相同的事情。根据维基百科(http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java)和Java ,有23种不同的ORM(http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java)仅举几个例子。如果您查看其他语言,它们的数量会更合理。有人认为拥有很多选择是一件好事,但这不是,这会导致开发人员社区浪费大量精力,每个人都在重蹈覆辙,如果您是这种语言的新手,选择太多了。

应用服务器:

Java Web应用程序确实很繁重,并且需要大量资源才能运行。他们特别渴望记忆。像任何软件一样,它们都可以进行调整以减少资源占用,但是与其他语言相比,它们的开箱即用设置非常可怕。在过去,我使用过weblogic,websphere,Jboss,tomcat和jetty。当我被迫使用EJB时​​,我只使用了前三个,但是即使您不使用EJB,它们也是大型应用服务器,有时难以配置和正常运行。Tomcat和Jetty更好,更容易设置,但仍然是资源浪费。

应用托管:

如果您没有运行自己的服务器,那么很难以合理的价格找到Java应用程序的共享托管。主要原因是因为与其他语言相比,Java应用程序需要更多的内存,因此,当共享托管服务提供商可以在同一位置运行5个php站点时,花宝贵的RAM运行Java站点没有意义。这就意味着提供Java托管的提供商减少了,这反过来又意味着运行您的网站的成本更高。

开发时间:

当我使用Java开发时,发现自己的速度要慢于python的速度。我需要进行更改,编译,重新部署然后进行测试,这会减慢迭代过程。我知道有一些方法可以使此速度更快,但是即使是最好的情况,我也觉得比Python中的速度慢得多。

在python中执行相同操作的样板代码也少得多,因此我也花了更少的时间来开发代码。

Java只是在许多部分上过度设计,许多API和接口只是使您想做的事情变得复杂的方式。每个人和他们的兄弟都认为他们是Java架构师,这导致难以使用和开发的大型复杂系统。

IDE:

当我用Java进行开发时,我感到受困于IDE,没有它我迷失了。IntelliJ是市场上最好的IDE,并且很难切换到python,因为python没有类似的东西。因此,我没有使用IDE,而是使用了textmate,它只是一个普通的文本编辑器。刚开始时很难,但是因为它只是一个文本编辑器,所以它是一个非常快速且响应迅速的应用程序。我可以在几秒钟内打开我的整个项目,而当我想在IDE中打开一个项目时,可能需要一分钟或更长时间,而这需要一台具有大量RAM的机器。IntelliJ的制造商推出了一个名为pycharm的python编辑器,我在它首次发行时就购买了它,它很棒。但是我意识到我不需要Python的IDE,使用文本编辑器就可以了。当我不时地去做Java Web应用程序时,我尝试使用文本编辑器,但是我还没有完全掌握它。我个人更需要Java的IDE,因为如果我弄乱了某些东西,则重新编译和重新部署将花费更长的时间,这会使我放慢速度。

ORM:

当我刚开始使用Hibernate作为ORM时,我认为它很棒,有问题,虽然不是完美的,但是比我以前做的要好。我对此感到满意,直到我在python项目上使用Django的ORM开发了一个应用程序,然后打开了我的眼睛,这就是ORM应该如何工作的方式。完成那个项目后,我回到了休眠状态,只是感到失望,并渴望回到Django的ORM。另一个很棒的python ORM是sqlalchemy,它与Django的ORM相似,但有些不同。我对ROR的ORM的经验有限,但是据我所记得,它也相当不错。

范本:

Java中的Web模板系统并不是很好,我想我已经尝试了所有这些系统(平铺,freemarker,speed等)。它们中的大多数仅提供基本功能,并且很难使用。在Python方面,我最喜欢的两个是Django模板和Jinja2,它们具有我在模板引擎中可能需要的一切,并且非常易于使用。


10
我在很多方面与您保持一致,但是有些问题。编译/测试循环:使用Eclipse的动态Web模块和/或JRebel,它就消失了;大。重量:JBoss AS 7非常轻便,快速。如果您不希望使用EE,则可以使用Tomcat或Jetty,它们甚至都没有。测试:Arquillian是我用任何一种语言使用的最好的测试工具,尽管它只是变得足够成熟而可以使用。依赖地狱:只需使用Maven; 它应该是JAva的标准和强制性部分。
克雷格·林格

请注意,以上所有内容都会增加“不包括电池”的问题,这是一个很大的问题。像Java EE这样的感觉是一个子框架,您应该在该子框架上构建自己的框架,然后构建应用程序。效率很低。每个工具都令人毛骨悚然,而JSF2只是破坏开发人员生产力的一种工具。
Craig Ringer 2012年

2
我还认为您错过了一个关键点:学习曲线错误确实使事情变慢了。
Craig Ringer 2012年

@CraigRinger我没有使用过eclipse的动态Web模块或JRebel,所以您说的对,它可能不见了。
肯·科克伦

2
如果您喜欢IntelliJ,请尝试PyCharm –它基于相同的内核。
塔林2015年

94

初创企业想要闪亮。无论有什么光泽:RoR,Groovy,Grails,带有PHP的OOP,Foobar,Wibble,Nalf等。

企业想要稳定,可靠和可扩展的:Java和.NET符合要求(正确完成后)。

当前演出:金融服务。平台:ColdFusion(本质上是Java标记库)和Java。

以前的演出:

  1. 教育测试服务-ColdFusion
  2. 高风险保险-ColdFusion和Java
  3. 401k-ColdFusion和Java
  4. 旅行-带内部ColdFusion应用程序的Java
  5. 证券-ColdFusion(Java之前的版本)

这些都是高容量,高安全性的站点。在这些公司中,没有人曾经考虑过PHP,有些人看着RoR,看到了太多的问题。这家401k公司有一个姊妹公司,它与有能力的开发人员一起运行.NET应用程序,该应用程序每周都在崩溃。他们最终将其转换为Java,并获得了稳定性。

唯一看不起Java的人是那些没有Java经验或很少有Java实际经验,或者参与了较差的实现并且现在很害羞的人。如果所有酷孩子都在使用它们,他们会看到闪闪发亮的身影,为什么不选择我呢?


23
“这家401k公司的姊妹公司与优秀的开发人员一起运行.NET应用程序,该应用程序每周都在崩溃,他们最终将其转换为Java并获得了稳定性。” 大声笑:),听说过相反的情况。

12
当然有。Web应用程序比编写代码要多得多,您必须知道如何调整服务器,编写最佳SQL等。该公司只有2位.NET开发人员,没有真正的服务器管理员。购买了我所在公司的公司也获得了该应用程序。他们是一家大型Java商店,因此有更多可用资源来保证稳定性。
阿德里安·莫雷诺

48
对我来说,您写的那句话是因果关系,这似乎对我不屑一顾。转换为Java =稳定增益?我们都知道那不是原因。另外,对所有ColdFusion体验表示抱歉;)
乔丹

3
太公平了,投资者往往希望看到今年的风采。但是我个人仍然认为快速的原型开发有一个更糟糕的选择,除非找到不容易找到的非常高质量的Java开发人员。
Erik Reppen 2013年

9
很难找到的非常高质量的Java开发人员 -的确如此。
luis.espinal 2013年

73

FrustratedWithFormsDesigner的回答的补充:由于我猜您的问题更多地针对较小的站点,因此对于很多人来说,您需要考虑一个重要方面:托管对于PHP来说是无处不在的,但对于Java或ASP站点则更为困难。但是,这不是那些语言的缺陷。


我认为这已经改变了,但是,现在您可以免费在GAE上托管Java Web应用程序。
Mahmoud Hossam

+1用于托管Java。尽管ASP.Net并不难找到,而且很便宜。我每月为共享的ASP.Net托管支付8美元。另一方面,我想尝试使用Java建立一个站点,却找不到运行Java的共享主机,而不得不使用VPS对我的学习项目不感兴趣。
杰蒂2011年

9
为此+1。在PHP上比在Java上在服务器上托管许多站点要容易得多,此外,与Java相比,为PHP找到便宜的Web托管解决方案要容易得多。
乔纳斯(Jonas)

您是正确的@Mark,已修复。
sebastiangeiger

1
@Kibbee- Arvixe那是我使用的人。我有personalASP Pro计划。
2011年

70

Java的绝对用于现代Web应用程序开发。特别是一旦您到达了Web应用程序范围的更大/更复杂/可扩展的一端。

如果您对现代高效的工具和框架感兴趣,请查看:

但是我认为,在JVM平台上进行的大多数真正现代的Web开发很可能是使用一种新的JVM语言完成的,而不是直接使用Java,而Java只是提供了基础库和后端基础结构方面的基础。仅举几个例子,Groovy(Grails),Scala(Lift and Play),JRuby(JRuby on Rails)和Clojure(Noir,Ring / Enlive +很多自定义框架)正在进行着很多Web开发。

随着所有新的JVM语言空间的创新,我个人怀疑Java最终将成为“服务器端编程的汇编程序”。


Vaadin是创建Intranet和大型企业应用程序的绝佳工具。我猜这不太适合初创公司。除非您接受外观,否则很难更改它。
naugtur 2012年

7
同意 删除JSF2并使用理智而富有成效的工具,Java EE 6就很棒。虽然学习曲线仍然很大
Craig Ringer 2012年

1
您可以将Tapestry5(tapestry.apache.org)添加到现代Java Web框架列表中。
Neeme Praks 2012年

@CraigRinger JSF很简单。您的评论听起来像是问题本身:一名宗教咆哮者
jwenting

@jwenting好,已经三年了,因此从那时起,它在文档和外部工具方面有了一些改进。在我使用EE 6堆栈时,如果支持Glassfish 3 AS 7 ,那简直太可怕了!
Craig Ringer

41

Google,Amazon或LinkedIn是现代的吗?

Java用于现代Web应用程序。如果您查看整个企业,则它是Web应用程序(内部)使用最多的语言。

话虽如此,Java经历了一段时期,当时它的Web开发标准试图将所有人的一切都做到了(可以说仍然可以做到)。“不要重复自己”是对xml地狱和Java Web开发的较长构建周期的回应。结果,Java(EJB,Struts,JSF等)被视为所有新范例都试图克服的事情。

Java,语言很冗长。这是一个利弊(对于维护来说很棒,对于开发来说很糟糕)。有许多现代语言功能尚未将其纳入Java中,从而可以大大缩短编码时间(属性,事件,闭包,生成器,列表理解等)。因此,当您使用更现代的语言时,可能会感到沮丧。也就是说,如果不成为C#正在变成的老鼠巢,就很难将它们添加到成熟的语言中。

现代Web开发中使用的许多语言都是动态键入的。这使得工具能够在编写代码时动态地重新加载代码(这很难用静态语言jrebel完成)。由于Web开发适合快速迭代,因此动态重载是一个巨大的胜利。它显着减少了未开发项目的开发周期,并使得更容易获得正确的UI和UX(自然而然的尝试和错误)。

静态语言也有自己的位置。对于复杂的后端逻辑,必须运行数年,必须无问题地扩展,必须非常快,并且必须完全无错误,因此首选静态类型的语言(例如Java或C)。

此外,随着开发人员人数/营业额的增长和产品的成熟,有好心的人们可能会引入错误的火箭。精心设计的Java项目(这些php吸血鬼的接口,模式和圣水:)所执行的严格性和纪律性有助于降低长期风险。虽然这也可以通过单元测试来实现,但是从静态检查(以及诸如findbugs和clang的静态分析器)派生的安全网提供了内置的代码覆盖级别,很难用手写测试来复制。不要误会我的意思,应该有单元测试和功能测试,但是真正的组织从来没有达到100%的覆盖率。对于他们检查的内容,静态分析器会执行。

因此,在大型项目中(由团队规模而不是代码规模来定义),在独立开发的代码块之间存在复杂的互操作性时,仍然首选Java之类的语言。示例包括大型/复杂的Web应用程序,例如金融经纪人(ameritrade),金融交易所(纳斯达克,纽约证券交易所,.net失败后可能是伦敦)的应用程序,在线银行业务(几乎全部),电子邮件(google),拍卖(ebay)等

从性能和规模的角度来看,Java平台将Web应用程序的可伸缩性和性能相结合(取决于您对facebook应用程序分区的计数方式),这无可比拟。例如,Twitter必须在Java VM的Scala中重写其大部分Ruby基础结构,以便将失败的鲸鱼抛诸脑后。我听说过其他大型示例,但它们现在使我难以理解。

还值得考虑安全性。尽管Java浏览器插件在安全漏洞方面应有尽有,但Java平台本身是创建的更安全的平台之一。Java Web应用程序具有非常安全的声誉。长期以来,其编码实践,库和体系结构一直不鼓励使用错误,这些错误使诸如sql注入或缓冲区溢出之类的攻击成为可能。尽管其他Web平台(轨道)具有良好的安全性声誉,但是没有一个可以超越Java。

最重要的是,大多数Web应用程序在技术上都很简单。简单来说,Java常常过于矫kill过正(就像以前用C编写它们时一样:)。但是,如果Web应用程序很复杂(后端或其他),或者预计将有100多个开发人员,那么Java很难被击败。

-

就个人而言,我经常使用Grails,因为它为我提供了两全其美的优势(关于JRuby的说法也是如此,我听说JRuby在Ruby世界中越来越流行)。

顺便说一句-我发现PHP的兴起确实令人困惑。PHP作为一种语言,在可读性和结果质量上与Perl大致等效。它鼓励令人毛骨悚然的做法,几乎无法维护,第三方库很少能按预期工作,并且它的语法会使拉里·沃尔(Larry Wall)……...……墙。我能想到的唯一解释是,它适合进行增量学习(如VB)。换句话说,您几乎不了解编程/管理就可以完成一些有用的事情,并且可以一次扩展一小部分知识。从采用的角度来看,有很多要说的。但是,对于每个人都必须支持或替换企业/制造世界中“程序员”编写的数十亿个VB应用程序之一,您可能正在摇头并计划退休。:)


3
要详细阐述“ C#正在成为老鼠的巢”的观点吗?
XåpplI'-I0llwlg'I -

1
我不太确定为什么您说“不要重复自己”是对xml地狱和Java Web开发的较长构建周期的回应。DRY成为敏捷社区中的一个概念,当时大多数人使用的不是Java语言。
Jules 2014年

38

好吧,最近我遇到了一个Java专家,他对新的Spring Data项目感到非常兴奋,因为获得数据库的基本CRUD访问所需的代码很少。

我可以使用Rails(不仅是数据库访问,还包括视图和控制器)和一些命令来构建CRUD 应用程序

(在我的头上:新项目,每个实体1个脚手架命令,1个命令迁移数据库,1个命令启动服务器。)

它与语言无关,与工具有关。动态语言似乎倾向于具有可以删除大量样板代码的工具和框架。(以弥补我们缺乏为我们生成样板的功能强大的IDE。)

我还觉得动态语言往往使编写这样的工具和框架变得容易得多。我可以轻松编写代码,例如Padrino或Rails(ruby Web框架),而不是轻松编写Spring Roo的代码。这可能是由于我对Ruby的了解比对Java的了解要好得多。


24
我个人不喜欢动态语言。当我可以在IDE中快速查看所有类型错误并使用重构工具时,静态语言使我的工作效率更高。您应该看看Play框架,它是一个受Ruby on Rails启发的Java Web框架,可以使您使用Java高效。
乔纳斯(Jonas)

4
强大的框架(如Rails)也意味着,如果某些东西实施不好,那么大多数人就不能用其他东西代替它,因为该组件与框架太紧了。对于Java,如果我不喜欢Hibernate,则可以使用诸如cayenne或JPA之类的其他东西。
Coyote21

2
作为与Django战斗的人,请允许我说:Coyote21是绝对正确的。您可以在五分钟内启动并开始基本的CRUD,但是第二分钟您开始向CRUD中添加业务逻辑(当更新此记录时,必须在该表中插入一条记录,然后...), 。
asthasr 2012年

如果您喜欢Rails但需要Java,请查看Seam Forge。当心,它使用了令人讨厌的JSF2,但是Forge的自我表现还不错。
Craig Ringer 2012年

您可以在几分钟内使用Roo在Java中构建CRUD应用程序,与Grails(不是完全Java,但仍然是JVM)相同,Play 1.0具有生成器/脚手架,我想知道它去了哪里……
Eran Medan 2012年

24

近年来,Java被定位为“企业”。在初创企业需要的另一侧。在Web应用程序开发中,您需要4件事-无痛的数据库访问,出色的字符串操作,语法糖和快速的迭代过程,以使您的应用程序需要进行许多小的更改。

性能,可伸缩性和稳定性在优先级列表上略低一些。

同样,Java是一种非常不适合编程的语言。就在昨天,它具有在switch语句中使用字符串的革命性功能。而且javascript是一种非常骇人听闻的语言,因此开发前端后,当您返回Java时会感到非常局限。

因此,我认为这些是webstartups避免使用Java的原因。


12
无痛的数据库访问?Spring JDBC或Hibernate可以很好地工作。伟大的字符串操作?不要认为在任何项目中字符串操作都不会超过5%。语法糖?你什至是什么意思。快速的迭代过程?Java拥有它(Eclipse内的Tomcat很轻松)。Java不好玩吗?唯一缺少的是简洁的匿名类/ lambdas / etc。其他语言中的“有趣”功能往往会混淆并且使事情变得不清楚。开关中的字符串...是的,我必须承认这很糟糕(但是,大多数时候,您应该使用枚举)。
alex

4
@alex:Syntax sugarJava实际上不能用于DSL,例如,Play的config和routes文件不是Java文件,它是一种外来语法,其作用不如django的settings.py和urls.py;没有清单的理解;关键数据类型(例如地图,列表)默认情况下不导入;愚蠢的一档一档真的很碍事;Java API往往会变得不必要地冗长。另外,在从GET / POST参数接收的字符串之间切换时,不能使用枚举。
Lie Ryan 2012年

4
@alex有趣。我倾向于在C#的任何地方使用泛型-尽管从外部看,这可能是由于lamdas功能的增强-所以我可以使用IRepository<T>with IQueryable<T> Where(Expression<Func<T, Boolean> Expression)。我想知道当它们得到lambda时,它们是否会在Java中变得更流行?这可能是一个舒适区,但Java只是感觉很冗长-非常像我已经受够了一些东西来制造50种不同类型的汽车,但不能保证任何2个零件都能组合在一起。
基本的

3
我不敢相信两个人争辩说Eclipse内的Tomat是轻松的,并且可以提高Java开发的效率。我发现它使每个开发周期都快得多,但是需要日常维护,包括反复刷新,重建,清理tomcat,重新部署,重新启动,有时重新启动Eclipse并重复前面的步骤。如果我的汽车需要这么多的维护,我将永远无法上班。
布兰登

1
@布兰登,我将第二。我从来没有,从来没有为Node或Python / Django中的配置问题而苦恼。我对RoR失去耐心。依赖于Ant / Mvn / Spring / Hibernate / eclipse的Java代码库在您进入代码之前是一场噩梦。
Erik Reppen 2013年

18

我目前在一家有很多“我讨厌Java”开发人员的公司里工作。它曾经也使我震惊。我当然讨厌Java提供的所有技术。这使得做出决定太困难了。就像当您有太多选择时,您别无选择。您必须花费100个框架的时间才能真正找到适合您的框架。对于大多数应用程序而言,标准的Servelt架构非常复杂。Ruby,Django和其他东西不是这种情况。它们更多是单一框架而不是语言。

我收到开发商最大的抱怨

  1. 语法太长。为了打印某些内容,我们必须编写System.out.print。您真的不能使用像编辑器这样的简单VI并在几个小时内写出一段有效的代码。
  2. 弱测试框架。尽管Java和Ruby中的测试框架非常相似,但Ruby通过使事物易于进行测试而向前迈进了一步。如果您在应用程序中广泛使用DB,则尤其如此。甚至许多Web框架都不考虑测试。
  3. 模板很麻烦。使相对简单的语言成为面条汤。
  4. 不酷 大多数Java应用程序都是由大型公司编写的,这与官僚主义相关,而官僚主义在开发人员中并不那么好。人们在考虑Java时不会想到Google。Google == Python。它也必须做很多事情,没有书出示Y天X。
  5. 不喜欢编译。对大多数开发人员而言,编译已经有十年的历史了。在80年代,使用C有意义,但是现代计算机可以做的更多。他们不使用编译语言编写代码。Java是被编译并用于编写Web应用程序的极少数语言之一。
  6. 太多糟糕的概念。即使开发人员已经悄悄采用了Oops域。他们不喜欢它。他们不喜欢您编写具有10个类的应用程序,而每个类仅做一件事。使您可以打开100多个文件,并想象一下100多个类之间的交互,有时还需要使用框架。使整个编程活动变得很繁琐。大多数语言都可能如此,但是我已经看到Java开发人员非常关注类的作用。是Java开发人员,他们经常想出带有100多个类的代码。从许多角度来看,这都是好事,但非Java开发人员讨厌它。

因此,总的来说,Java在项目开始时就形成了一条陡峭的曲线,这意味着要投入太多资金。再加上一个庞大的Java社区,每个社区都以不同的方式思考,没有人真正带领整个社区。他们还看不到社区举办的讲座和会议炫耀所有新鲜事物。没有新的好书。看起来Java将会失败,因为几年前它被用来解决太多不同的问题。


(2)由JBoss Arquillian(arquillian.org)很好地解决了。其余的更多的是JSF2问题而不是Java问题。IMO最大的问题是学习曲线和框架的大量错误,但是如果您避免使用JSF2,则可以做得很好。
Craig Ringer 2012年

5
我爱OOP。我也知道OOP,这就是为什么我不同意绝大多数Java开发人员所做的太多事情的原因。您可以编写一个类,但是如果您的代码仍然是混乱的意大利面混乱,那么您真正要做的就是找到一种方法(bean)来编写带有毫无意义的结构的废话过程代码,这些结构最好是简单的函数或结构。
埃里克·雷彭

2
“人们在考虑Java时不会想到Google。” ...当我想到Google时,我确实考虑过Android及其Dalvik VM(这是Java VM)。我还考虑了一些很棒的东西,例如GWT(从Java自动生成JavaScript)。如果有一家公司对Java的评价很高,那就是Google。比苹果或微软大得多。诚然,甲骨文和IBM与Java的联系甚至比Google更为紧密,但如果不建立牢固的Google / Java链接,数十亿个在Java VM上运行Java应用程序的Android设备是很难想到的。
Cedric Martin

在这些评论中,对JSF2形式@CraigRinger充满了仇恨。:-)惹恼您的是什么?我发现开始时很复杂,但是一旦开始,我就会喜欢它。当然,在此之前,我一直在使用Spring,所以其他任何事情都看起来像是一种改进... :-)
Brian Knoblauch

1
我是Java的OOP开发人员,我不能高估OOP对开发人员的好处。是的,开发确实花费了更多时间,但是较低的错误率,可读性和易于维护的代码是值得的。更不用说通过正确完成OOP,单元测试变得更容易。
IntelliData,2016年

14

进行Java Web开发的框架有相当多的学习曲线,它们对于您所需的东西通常过于矫kill过正,并且使事情正常进行所需的许多间接操作只是...痛苦的...而已。

我曾经在一家从事Spring / Java开发的公司工作,但我发现该框架充其量是繁琐的。关于Spring的框架,我没有什么可高兴的事要说,除了我以前曾经做过Struts开发的一个朋友,他认为Struts更糟。网络框架与台式机应用程序或移动(例如android)应用程序完全不同,并且具有很多非常抽象的想法,需要一些时间才能真正掌握(尽管,当然,如果您拥有这样的能力和能力,是一位专业人士,并且做一些非常复杂的事情(例如企业级应用)。我喜欢为移动设备或桌面设备编程Java,但是为网络应用程序编程Java?没那么多。

我还没有亲自在Ruby / Rails中进行任何编程,但是我曾经做过Struts的朋友现在正在进行Ruby Web编程,并证明Java Web编程中难以完成的事情需要更少的代码和复杂性来实现。红宝石。当然,对于不同的语法和语言规则,还有一条学习曲线,但是对于原型应用程序而言,它在获得所需结果所需的代码量方面具有优势。正如其他人提到的那样,可伸缩性也是一个要考虑的问题,也是成熟的应用程序在更多的流行语言中不被频繁使用的原因之一。


+1为框架过大。它变得疯狂,spring j2ee maven ant休眠,您花费所有时间编写xml配置。
理查德

1
为框架+1。最初的框架不仅尝试了P ** s Poor(JSP,STRUTS),而且现在我们有三十种选择,而不是RoR之一。
詹姆斯·安德森

不只是框架。毫无意义的是符合事物的淫秽程度。公开很多属性意味着您做错了。对此添加一个普通的getter和setter只会添加一个毫无意义的方法调用,并且什么也不会改变,但是没有一个Java开发人员会仅仅将属性悬停在这样的对象上,因为社区加强了某种程度上比他们已经在做的错误。但是认真的是,用XML代替代码的东西……持续时间超过5分钟是怎么回事?
Erik Reppen 2013年

14

归结为成本和趋势。Web 2.0 Startup由30岁以下的有远见卓识的人创建,他的才能比金钱还多(我是在概括一下,但这是您平均会看到的)。他将使用自己熟悉的语言,因为他正在编程(可能还有几个朋友)。他很可能是一个自学成才的程序员。

Java已被定位为企业环境(对于Java,我指的是语言,框架和标准)。世界各地的IBM,Oracle和BEA都希望向企业出售大量昂贵的工具。

精通Java的步骤非常复杂和/或昂贵。我知道那里的景观正在改变,但是为时已晚呢?

在初创公司获得发展动力之后,便有了增长。招聘有才能的开发人员很困难。大多数“在六周内成为一名程序员”程序会教Java(或.NET),并且市场上充斥着“六周程序员”(这很奇怪,我已经看到开发人员的简历说7年的经验仍然显示出六周的知识。周程序员)。对于六周的程序员来说,使用非主流的非“企业”环境是一种自然的选择。在工作要求之外学习Ruby或Scala需要付出奉献精神和个人投入。这对我来说是潜在候选人的最大标志。

知识随经验而生,但是一个专心/热情的程序员会比没有这种奉献/热情的人更快(平均)获得知识。就像一个喜欢弹吉他的孩子会比一个上课的孩子更快,因为他的父亲造就了他。


我认为这是一个非常好的观点+1
sfrj 2011年

1
我不同意这段话:他很可能是一个自学成才的程序员。如今这是不正确的,如今,该程序的大多数30年代的人都是有能力的程序员,并且至少具有学位。
Coyote21年

1
??? 我正在绘制原型网络启动程序。我没有说他们有能力。您可以同时自学成才和胜任。我不确定您不同意什么。
迈克尔·布朗

1
这是我的答案。Java几乎是当前唯一未经设计的Web技术,因此任何有能力的开发人员都可以选择并使用它。您的答案的第二部分与Paul Graham在Python Pardox中
user16764 2012年

14

Java太复杂了。我做了很多PHP工作,在大多数情况下,它变得越来越容易。仅通过SSH进入服务器即可打开php文件,使更改得以保存并完成的功能非常棒。我从事过的少数Java应用程序总是需要重新启动才能进行最简单的更改。(并不是说我一直都想这么做)。另外,PHP托管很便宜,并且随时可用。

我还认为,至少与PHP一样,有很多像我一样的开发人员在14/15年前就开始使用静态HTML。随着事情的进展,我们开始将PHP添加到我们的站点,因为它简单,简单且价格合理。多年来,语言已经发展壮大,其能力已经超出了不起眼的起点,现在努力成为我认为很多事情,实际上并不是。

另一方面,我知道大多数PHP开发人员都将Java视为这种过于复杂的巨型800磅大猩猩,几乎就像从18轮式半卡车驶到杂货店并得到一条面包一样。

我曾尝试学习Java,这是我的第一印象,因为它缠绕得很长,并且会产生腕管。另外,从入门开始,我还遇到了很多问题,这些问题对于Java资深人士来说似乎很容易。OpenJDK还是Sun?Tomcat,还是Glassfish,还是?另外,似乎每本Java入门书籍都可以让您开始编写命令行代码。我认为这些天大多数人都发现贪睡节。


3
与PHP的9000多种内置方法相比,我将有更多选择和更多复杂性。
Kaleb Brasee

1
PHP非常容易设置。
Barfieldmv

9
但这只会使编写好的代码变得如此困难……更容易设置,更容易启动,更无聊不是您选择语言的标准。好的编程需要纪律,耐心和努力...如果您在选择时没有这些,那就不好了……
Alex

除非他们俩都发臭,否则要建立一个PITA比另一个要大得多。
埃里克·雷彭

12

我和我的团队目前正在用Java 6 + Stripes开发一个未开发的Web应用程序。去年,我还使用Java 6 + Stapler(由Hudson / Jenkins着名的Kawaguchi的Kohsuke Kawaguchi开发的一个未知的Web框架)开发了另一个未开发的Web应用程序。

Java绝对用于现代Web开发。当然,它没有Ruby或其他动态语言的“性感”吸引力,但是我远不能相信一旦项目开始扩展,动态语言就是一件好事。

现代Java应用程序服务器在性能方面与ASP.NET竞争非常激烈,而且两者都比我所知道的任何动态语言VM快几个数量级。

别误会我的意思……我并不是说Java 永远是最好的选择(不是遥不可及!),但是它也不总是一个错误或“过时”的选择。


1
我倾向于不同意“更快”。从理论上讲应该是这样,但是那里有大量的php站点,几乎所有有关性能问题的轶事都与MySQql或其他基础数据库有关。另一方面,几乎所有我接触过的J2EE应用程序都需要进行广泛的调整,才能使性能令人满意。
詹姆斯·安德森

1
@James:除了模糊的轶事之外,你还有什么要备份的吗?所有排名前十的网站都可以在托管平台上运行(在Java上运行Amazon,在Scala IIRC上运行Twitter,在Java和C ++的自定义后端上运行Google),或者拥有高度自定义的基础架构(Facebook和Wikipedia使用PHP,他们俩都有大量的自定义本地代码以提高速度)。Java通常会在基准测试中胜过动态语言。我不是Java狂热者,但是性能不是Java的问题。
丹尼尔·普里登

Java本身没有性能问题,“不比C快,但比其他任何东西都快”。但是,几乎可以保证J2EE,框架,ORM,依赖项注入以及过大的设计无法执行。隐藏的瓶颈和无法预料的互动的潜力太大了
James Anderson

1
@Basic:您的意思是?对于任何一种语言,都有很多损坏的库和框架。是的,有很多繁琐且过时的文档-但这也不罕见。相反,有一些很棒的Java库,框架和工具。您是否认真地建议对每个应用程序都应该有一个端到端框架?
Daniel Pryden 2013年

1
@Basic:从何而来?自从我第一次写这个答案以来的一年半里,我一直在前进,目前在Google工作。我可以向您保证,Java在Google的Web应用程序开发中被大量使用。当然,Google的需求与许多其他公司的需求截然不同,但是当您使用正确的库和框架时,Java完全是另一种野兽-只需检查一下Google开源的一些东西(Guava,Guice, GWT,协议缓冲区等)。
Daniel Pryden 2013年

12
  1. Java比PHP / Python / Ruby更复杂
  2. Java生态系统非常复杂,非常庞大,初学者很困惑
  3. 历史上有很多不良的框架都与Java相关联并具有负面声誉,您必须知道哪些框架才能避免浪费时间
  4. Java构建工具是实现复杂(Maven和Ant)的方法
  5. Java没有易于使用的模块系统(OSGI太复杂了)
  6. 如果没有大量经验,很难配置Java IDE(例如Eclipse)而使其功能强大且具有惊人的功能,以进行有效的Web开发。
  7. 如果您将Tomcat或Jetty以外的任何东西用作服务器,那么WebSphere / WebLogic / JBOSS的启动时间长会令您沮丧
  8. Java EE解决了许多人没有的问题,例如分布式事务

从事专业开发的新开发人员会发现Java比Rails,Python或php难于实现数量级,因此他们遵循了易于学习的内容。

综上所述,我决定使用Java进行启动,因为正确配置的Java开发环境可以非常有效地工作。所谓正确配置是指。

  1. 少于10秒的启动时间
  2. 正确配置的Eclipse工作区,整理并配置了所有框架
  3. 很好的库选择(Spring,Spring MVC,Spring Social,Spring Security,JPA,Hibernate,Velocity等)
  4. 带SSD的快速开发人员机器
  5. Orielly Safari订阅

8
让我们清楚一点。Java语言并不难学习。这就是PITA的全部缺陷,它弥补了Java的缺点(冗长,通过全力以赴而不灵活地保护您自己和您的团队成员,依赖于荒谬的库数量等等),这就是PITA。学习。
Erik Reppen

2
@ErikReppen非常正确。我必须从事Java项目,但具有.Net背景。语言和语法很简单,就像我所了解的任何东西一样。冗长的语气确实让我发疯。我以前在1行中使用的内容现在需要5-10,并且(通常)需要XML配置文件编辑。更不用说不花大量时间在阅读上,选择一个“正确的”工作框架是一场噩梦-那是在您发现您的情况被认为是边缘情况,不被支持,如果您不喜欢的话重写它。我想花费我的时间解决重大问题
2013年

“Java是更复杂的” -任何人都可以永远记住PHP的参数订单strposin_array?而且PHP的XML DOM接口是荒谬的(将属性显示为字符串以检索它们吗?)。OSGi绝对出色并且与语言无关。
jevon 2013年

@jevon:PHP文档非常好,我的IDE仍然很想提醒我。另外,SimpleXML。
DanMan 2013年

12

大约5年后,我和一位同事被要求执行一些内部项目的编程任务。一个足够简单的任务,需要命令解析。

我用大约80行Java代码想出了全部内容,而我的同事花了一周时间,大约有20个Java类和更多行Java代码来完成相同的工作。不用说,他的代码被选中了。

这让我感到奇怪。到处都赞赏复杂性。(我曾在最大的软件产品公司之一工作。)Java是首选工具,设​​计模式是编码的方式。

现在,拒绝简单性的是心态还是仅仅是自大。好吧,我一直认为常识应该占上风。无论是企业还是简单的Web应用程序,基本用例都是相同的。它应该是正确且可验证的。

由于某些原因,我不再使用Java。但是其中一个因素-复杂性是大量Java开发人员在开发软件时的普遍心态。

关于扩展动态语言,JVM是数十年来研究的结果。Ruby等发生了很多相同的事情。

Scala是我发现的一种非常聪明和实用的语言。玩!与Scala一样,它对于Web /企业应用程序开发同样出色。

至于Ruby和Rails对于初创公司来说是闪亮的新事物,要雇用一个可靠的Rails开发人员非常困难。实际上,这是任何初创企业的障碍,而过多的Java开发人员应该具有更多的商业意义。


我不是Java迷,但是您所指的“复杂性”很可能是抽象的。抽象对于测试和可维护性都非常有用(当适度使用时)。无法比较代码就很难确定
基本的更新时间

11

google plus的技术主管Joseph Snarr 在最近的一次采访中解释了该应用程序如何在后端使用Java Servlet,在前端使用JavaScript。

因此,回答您的问题Java仍用于非常现代的Web开发中。只是对于最近受到如此广泛关注的初创公司而言,并不是这样。

我认为许多初创公司之所以使用其他技术,是因为它们更具吸引力,并且在其背后进行了更为公开的开源活动。


4
初创企业使用其他技术是因为他们想立即完成它。不晚 他们去它来获得现在就像3人,而不是30做
埃里克Reppen

报价人只能提供他的观点和选择,而不能验证他/她选择的是正确的决定。
DivKis01

9

自从您提到了Web开发和Java以来​​,许多人往往会忘记一开始在Web浏览器中使用Java Applet的表现不佳,不仅如此,而且Applet的“沙盒”还没有得到充分开发,并且存在安全性问题。 Java Applet能够在浏览器中运行并访问本地计算机数据(又称为客户端安全问题)。当然,Java在后端和独立应用程序中是可靠的,但是我认为将Java语言与Java小程序(在浏览器上运行)相关联,某种程度上使人们对Java作为Web开发组件的看法更加混乱。我认为他们从未从中恢复过。


9
绝对不!实际上,Java是服务器端世界中的主导语言。小程序可能在十年前灭绝。
Chiron

5
Flash做了Applet想要做的事情。快速启动,快速下载,低内存占用。

4
我知道很多人甚至无法区分Java和Javascript。即使它们是完全无关的。这是给Java取坏名声的另一件事。
Kibbee

5
@Kibbee ...或者它给Javascript取了一个坏名字:)
Matthew Schinckel 2012年

9

问题应该是“为什么初创企业或小型项目不使用Java?”。Java当然用于“现代Web应用程序”。在Google,许多服务都在后端使用Java,前端使用闭包编译的JS或GWT。问题是速度与规模的关系之一。初创企业需要将可行的产品降至最低。他们通常是由1-3名工程师组成的小型团队,他们重视迭代速度而不是性能或可维护性。遇到可伸缩性问题或团队代码维护问题是“您希望拥有的”问题,也就是说,当您到达该阶段时,这是您的最初实施帮助您克服了最初吸引客户或客户的麻烦的迹象。投资。此时您可以负担重写应用程序的费用。

像Google这样的公司可以负担得起预先构建事物的奢侈,尽管他们可能会浪费时间实施可能没有用户的事物的扩展,因为他们可以吸收损失。

至少,这是我的观点,许多“酷”,“ hip”,“现代”公司都使用小型团队来构建小型应用程序,而迭代速度和简便性是最大的要求。


1
您的消息来源在哪里说明创业公司不使用Java?请用一些事实来支持您的假设。
Walter

7

Java上的传统Web应用程序虽然结构良好,但与“快速开发”相距甚远。尽管我只编写了一个完整的Web应用程序(Java / Tomcat / Struts),但是它非常挑剔,调试所需的时间比预期的要长,并且在实现业务逻辑层时通常很痛苦。在Java的潜在防御中,这是我用Java编写的唯一Web应用程序(尽管我习惯于用Java对系统级应用程序进行编程),而且我相信第二遍可以更快地编写另一个Web应用程序。

话虽这么说,我也已经用PHP和C#编写了应用程序,它们工作得更好,并且比Java宽容得多。不仅如此,Ruby on Rails专为快速的应用程序开发而编写,就像Robbie所说的那样,它允许对数据库的轻松CRUD访问。问题在于,您将自己开发的大多数网站都不需要Java提供的自定义级别(并且不需要您执行)。此外,每个数据库连接对象都必须手工编写,并且很难模板化。周围可能会有更好的框架,尤其是可以利用Java 7的新动态语言支持功能的框架,但是我尚未进行研究。


3
您应该看一下Play Framework,它是一个Java Web框架,可让您使用Java高效工作,并且受到Ruby on Rails的启发。
乔纳斯(Jonas)

2
@Jonas,请考虑撰写一些简短的博客文章,以简洁地说明所有这些。

@乔纳斯·索比约恩说了什么!我会仔细阅读。:)
Brian

@Thorbjørn:我没有博客。简而言之:使用Play Framework,您只需保存Java源代码,然后更新Web浏览器。该代码是使用Eclipse编译器在服务器端自动编译的。JPA用于数据库访问。这是有关它的文章播放!框架可用性
Jonas

2
@Thorbjørn&Brian:请看播放框架网站首页上的视频,我会很好地解释它。
Bjarke Freund-Hansen

7

简单的答案:学习提高基本生产力的曲线。

像RoR这样基于框架的系统倾向于将“魔术”放在语言/语法中。增强您的基本RoR语法并启动和运行应用程序非常容易。

Java首先是一种语言,后来出现了工具和框架。因此,您必须先学习Java,然后再学习Spring或Grails或您的super IDE或其他任何东西。最喜欢的Ruby示例,它不需要setter和getter。事实是,Java IDE也摆脱了手动编码...但是仍然在您的源代码中。这种方法的好处是,在框架下,有一种语言可以与所有Java开发人员一起使用。

对于时间至关重要的小型初创公司来说,这种好处是可疑的。通常,他们所做的很少,甚至是开箱即用的框架也做不到。因此他们可以选择自己的RAD系统,并在第二天上线应用程序。

但是,如果您看看Facebook和Twitter,随着它们的扩展,它们发现了开箱即用的框架无法处理的事情,因此他们不得不使用较低级别的技术。

框架开发人员要求他们可以更快地执行任何操作的这场圣战是虚假的,他们可以更轻松地完成许多他们需要的工作,而学习曲线却更少。对于很多事情来说,这已经足够了。使用正确的问题。


6

取决于您如何定义“现代Web应用程序开发”。如果您正在谈论启动,快速周转的网站,则需要考虑为此目的设计的语言和框架。如果您正在寻找稳定,可扩展的企业级Web开发,则需要支持这些理想的语言和框架。在我的书中,这是两个非常不同的目标。RoR,Groovy等对于前者是有好处的,而Java通常更适合后者。


6

Google App Engine支持Java,因此您可以使用Eclipse作为IDE和部署界面以及合理记录的Google API以Java编写整个Web应用程序-所以我不会说它未被使用或未被使用可用的。


5

在初创公司工作时,我们选择使用Java和JRuby来实现我们的API,因为它们彼此互补。

对于基础设施,流程分配和通信,我们利用Java的健壮性,而对于API终结点的实际实现,我们选择JRuby,因为所有调用都涉及JSON,并且使用松散的方式操作松散的表示形式(JSON)更具意义。类型语言(Ruby)。

如果我们看到我们的一个JRuby类正在成为瓶颈,我们可以直接在Java中重新实现它(基本上是逐行转换)。在必须进行大量计算的类中,这种情况经常发生。在这种情况下,JRuby的行为很像原型语言。

我们实现了自己的动态类加载器,这意味着我们可以在不重新启动服务器的情况下即时更改Java类,我们对此选择感到非常满意。因此,“每次都需要编译并重新启动”参数不太重要。

关键是要避免所有Java EE内容-它庞大,繁琐且具有敏捷性。


5

我仍然有很多Web开发都使用Java的感觉。但这通常是基于面向业务而非主要是技术大公司的开发,与那些需要吸引一些人并推广自己的工作以及对技术更感兴趣的新创业公司相比,它们通常不那么开放。因此,即使它在很多公司网站中使用,您也可能永远不会知道,因为他们并不愿意公开谈论其技术堆栈。

也就是说,评论所有原始问题...

这是语言的弱点吗? 与其他语言(例如Python或Ruby)相比,Java非常冗长,并且往往需要更多代码来完成类似的工作。但这不仅是语言的功能,还包括语言的社区以及使用这些工具的开发人员的类型。因此,Python,Ruby,PHP等上的大多数模块和工具都是开放源代码的,并且比Java世界中更容易找到,这仅仅是因为该模块和工具更着重于提供(和收费)服务。例如,Ruby社区确实面向Web开发,因此每个能够使用Ruby的开发人员都将了解Web项目的问题和可用工具。对于Java开发人员来说并不一定如此,因为Java开发人员可能已经在其他类型的系统上工作,例如报告系统。当然,任何优秀的开发商都会追赶,

它是Java的一种不公正的刻板印象,因为它已经存在了很长时间(它与其较早的技术存在不公平的关联,并且因其“现代”功能而没有得到认可)? Java并不是真的那么老,而且公平地说,它已经得到了很大的改进。大约10年前,这是一个很酷的相关平台。但是从那时起,出现了一些新的平台,其中就包括了Ruby on Rails等新问题。Java的核心部门主要是企业界,存在着不同的问题,因此人们在寻找新项目之外一直在寻找不同的工具。而且,Java设计的主要优势是多平台,如今已不如从前。

Java开发人员的负面刻板印象是否太强了?(Java不再是“酷”了) ,其中也有一些道理。Java仍然是学习“找工作”的语言。因此,如果您不在乎,而只是想学习一些赚钱的方法,您将结束对Java的学习,而不再关心改进。同样,关于感知和可见性还有很多。有大量优秀的Java开发人员在编写代码时却没有分享自己的知识,而许多PHP开发人员(可能不那么出色)正在撰写博客并将其协作成开源程序。导致您认为PHP开发人员比Java开发人员更好,因为您对此有一定的反馈。

用其他语言编写的应用程序真的可以更快地构建,更容易维护并且性能更好吗? 我会说,它们的构建速度更快。PHP,Python或Ruby之类的语言原理使它们非常适合生成可以不断变化的软件。例如,动态键入使更改界面更加容易。在Java中,具有定义良好的接口很重要,这将导致更稳定(且难以更改)的接口。这对于新成立的初创公司来说非常重要,主要的问题是在用完钱之前先获得产品。关于性能,很容易误解需求,并尝试使用魔术技巧来达到所需的性能,例如“ Java比Ruby。Period更快”或“ MongoDB是Web规模”。

Java是否仅由太慢而无法适应新语言的大公司使用? 毫无疑问,公司中已有Java开发人员团队,因此可以更轻松地在新项目中继续使用相同的语言。这被认为是“安全的赌注”,特别是在公司的核心不是技术的情况下。但是,无论如何,Java不仅适用于大公司,仍然有很多创业公司使用Java来制作有趣的东西(例如,FightMyMonsterSwrve广泛使用Java),但是我要说的是创业公司的普遍趋势场景是使用其他语言。这也是一种吸引人的方式,因为大多数人使用Ruby,Python或PHP会更加令人兴奋,它们被认为是“友好的”和“有趣的”


5

的确如此,但这并不是因为Java及其生态系统。由于人们的原因,在使用Java时往往会造成大麻烦和沉重的可憎之处。

有足够的框架(spring-mvc,grails,play等)可让您快速构建事物。人们对系统进行过度工程设计的事实是人们在使用Java生态系统时获得的知识增加的问题-您知道更多的东西,并且可以使用它们(所有工具都有),并且“一切看起来像钉子”。

如果您是“ hacky”,那么使用Java可以与使用其他语言做几乎相同的事情,下面的一项研究表明:

对49位程序员的研究:静态类型系统对开发时间没有影响... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

要说的只是一点点,我认为这很大程度上与从无内容到功能性Web应用程序的快速迁移有关。

如果您今天所拥有的只是一个主意,那么无论您选择托管提供商还是自己的基础架构(例如EC2映像),从现在到编写Web应用程序都几乎像崩溃一样容易。根据我的经验,选择Java通常会花费更多的工作,而且通常也会花费更多。

此外,如果您使用Linux和PHP / Python / Ruby,则这些工具和平台是互补的,旨在相互支持。使用Java时,有时似乎两个世界(OS和Java)有时工作不协调。


学习曲线绝对垂直。您将用头几周的时间来弄清楚首字母缩写词是什么,这些标准如何与它们的实现相关联,如何将所有内容分层等等。然后在接下来的几周中,要弄清楚要使用哪种库和框架。然后在接下来的几周内报告其中的错误...
Craig Ringer 2012年

3

谁说不是?

Spring MVC + Spring Data JPA或Mongo + Thymeleaf用于模板+ Coffee-Maven-plugin用于将Coffee转换为JS,您很高兴。


我完全同意您的
观点

3

许多人可能将Java和Web应用程序开发与J2EE的恐怖联系在一起,J2EE与来自大型蓝色和红色公司的庞大J2EE应用服务器捆绑在一起,相当于在基本的“ Hello World”上线之前需要花费数周的时间。

的确,最近的JEE规范和实现比较轻巧,但是在为短期快速开发项目提出类似建议之前,我仍然会考虑三次。

这仍然是使用Java进行Web应用程序开发的基于标准的方法。在其他答案中提到了许多替代方案,这些方案传达了更加混乱和混乱的画面,可供选择的选项过多。

其他语言则描绘了一个单一的交钥匙解决方案,而不是众多的解决方案。当您有更多重要的鱼要油炸时,这使此选择看起来更适合用途。


Java EE 6可能是“轻量级的”(JSF2除外),但是它仍然是一个难以置信的巨大学习曲线,一大堆复杂的规范以及非常复杂的分层系统。也许轻巧,但肯定不简单。
Craig Ringer

2

我认为它的使用量比您想像的要多-该用途就在水线以下。在浓密的,精美的Java服务周围的导轨包装上有很多红宝石。特别是当您开始处理任何接近大数据的事物时。。。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.