it-swarm.cn

为什么不Java)用于现代Web应用程序开发?

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

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

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

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

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

这使我想到了我的问题

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

  • 这是语言的弱点吗?

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

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

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

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

393
Cliff

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

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

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

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

174
Chiron

以我的经验,对于小型应用程序,Java对于Web应用程序来说是过大的杀伤力。例如,一个具有一个数据库表的简单博客包含博客条目,这可以用简单得多的方式完成。

我通常看到Java)在与许多其他系统(例如大型机后端和数据库以及对等网络-服务后台批处理系统...全部都在同一应用程序中)。

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

136

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

Web框架:

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

不包括电池:

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

太多选择:

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

应用服务器:

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

应用托管:

如果您没有运行自己的服务器,那么很难以合理的价格为Java应用找到共享主机。主要原因是因为Java应用程序比其他语言需要更多的内存,因此共享托管服务提供商花宝贵的RAM运行Java网站,那么他们可以在同一位置运行5个php网站。这意味着提供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应用程序时,我尝试使用文本编辑器,但是我还没有完全掌握它。我个人需要IDE的Java,因为如果我弄乱了某些东西,则重新编译和重新部署将花费更长的时间,这会使我的速度变慢。

ORM:

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

范本:

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

135
Ken Cochrane

初创企业想要闪亮。不管是什么闪亮的东西:RoR,Groovy,Grails,OOP w/PHP,Foobar,Wibble,Narf等。

企业希望稳定,可靠和可扩展:Java ,. NET可以满足要求(正确完成时))。

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

以前的演出:

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

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

唯一看不起Java的人是那些没有或很少有实际经验的人,或者参与了较差的实现,现在却很害羞。酷孩子们正在使用它,为什么不使用我呢?

94
Adrian J. Moreno

FrustratedWithFormsDesigner's 的补充:由于我猜您的问题更多地针对较小的站点,因此有很多人需要考虑一个重要方面:对于(PHP),托管无处不在,但对于Java或ASP网站但是,这并不是那些语言的缺陷。

73
sebastiangeiger

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

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

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

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

70
mikera

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失败后可能是伦敦)的应用程序,网上银行(几乎所有应用程序),电子邮件(谷歌),拍卖(ebay)等。

从性能和规模的角度来看,Java平台)结合了Web应用程序的可伸缩性和性能(取决于您对Facebook应用程序分区的计数方式))无可比拟。例如,Twitter必须重写它的很大一部分Ruby基础结构Scala Java VM把失败的鲸鱼放回海里。我听说过其他一些大事例,但它们现在使我难以捉摸。

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

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

-

就个人而言,我经常使用Grails,因为它使我两全其美(JRuby也是如此,我听说JRuby在Ruby world)中越来越流行。

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

41
user56365

好吧,最近我遇到了一个Java),这个人对新的Spring Data项目真的很兴奋,因为它需要很少的代码来获得对数据库的基本CRUD访问。

我可以使用Rails(不仅是数据库访问,而且还有视图和控制器))和一些命令来构建CRUD app

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

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

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

38
Robbie

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

性能,可扩展性和稳定性在优先级列表上略低。

另外Java是非常不喜欢编程的语言。它在昨天才获得了在switch语句中使用字符串的革命性能力。)javascript是一种非常骇人的语言,因此开发前端后,当您返回Java。

因此,我认为这是网络启动程序避免使用Java的原因。

24
Daniel Iankov

我目前在一家有很多“我讨厌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概念。即使开发人员悄悄采用了Oops域。他们不喜欢它的全部。他们不喜欢当您编写包含10个应用程序时类,每个类仅做一件事。使您可以打开100多个文件,并想象在100多个类之间的交互,有时甚至与框架进行交互。使整个编程活动变得很繁琐。对于大多数语言而言,这都是正确的,但是我已经看到Java开发人员非常关注类的功能。其Java开发人员经常想出带有100个类的代码。从许多角度来看,这都是好事。但非Java开发人员讨厌它。

因此,总而言之Java在项目开始时就形成了一条陡峭的曲线,这意味着要投入太多资金。此外,Java还拥有庞大的社区,每个社区都以不同的方式思考,没有人能真正带动整个社区。他们也看不到社区进行的讲座和会议展示出所有很棒的新事物。没有新的漂亮书籍。Java因为几年前它被用来解决太多不同的问题。

18
arunmur

用于进行Java)Web开发的框架具有相当多的学习曲线,它们通常对于您所需的功能而言过于矫kill过正,而使工作正常进行所需的许多间接操作只是...很痛苦。 ...跟...共事。

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

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

14
Jessica Brown

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

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

精通Java)的步骤是复杂和/或昂贵的。我知道那里的情况正在发生变化,但是是否太少太迟了?

在初创公司获得发展动力之后,便开始了增长。招聘有才能的开发人员很困难。大多数“在六周内成为一名程序员”的程序会教Java(或.NET),并且市场已被“六周程序员”所饱和(这很奇怪,我见过开发人员说了7年的简历)经验仍然显示了六周的程序员的知识。)对于六周的程序员来说,使用非主流的非“企业”环境是一种自然的过滤条件。学习Ruby或Scala超出工作要求。这对我来说,最大的指标是潜在候选人。

知识是经验带来的,但是与没有那种奉献精神/热情的人相比,敬业/热情的程序员会(平均)更快地获取知识。就像一个喜欢弹吉他的孩子会比一个上课的孩子更快,因为他的父亲造就了他。

14
Michael Brown

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

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

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

我试图学习Java,这是它缠绕很久并诱发腕管的第一印象。此外,从开始它还给我带来了很多问题,这些问题对于Java老手来说似乎很容易。 OpenJDK还是Sun? Tomcat,还是Glassfish,还是?另外,似乎Java本书的每一篇介绍都可以让您开始编写命令行代码。我认为这些天大多数人都发现贪睡节。

14
Cyrus

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

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

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

别误会我的意思……我不是说Java是总是最佳选择(不是远程!),但也不是总是错误或“过时”的选择。

12
Daniel Pryden
  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订阅
12
ams

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

我用大约80行Java代码得出了全部内容,而我的同事花了一周时间,大约进行了20次Java类和更多行Java代码的编写。不用说,他的代码被选中了。

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

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

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

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

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

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

12
Ar Wen

Google的技术主管Joseph Snarr在 最近的一次采访 中,解释了应用程序如何使用Java Servlets作为后端,JavaScript为前端)。

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

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

11
Greg Guida

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

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

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

9
cromwellian

自从您提到了Web开发和Java以来​​,许多人往往会忘记一开始在Web浏览器中使用Java Applet的表现并不理想,不仅如此,而且Applet的“沙盒”还不够完善。 Java Applets能够在浏览器中运行并访问本地计算机数据(又称为客户端安全问题),并且存在安全问题。当然Java在后端和独立应用程序中表现良好,但我认为将Java语言与Java小程序(在浏览器上运行)相关联关于Java作为Web开发组件的一些看法。我认为他们从未从中恢复过。

9
LocoTx

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

诸如RoR之类的基于框架的系统倾向于将“魔术”置于语言/语法中。增强您的基本RoR语法并启动和运行应用程序非常容易。

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

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

但是,如果您观察一下Facebook和Twitter,随着它们的扩展,他们发现开箱即用的框架无法处理这些事情,因此他们必须使用较低级别的技术。

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

7
Lucas McGregor

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

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

7
Brian

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

6
Paul

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

6
cdkMoose

在公司的起步阶段,我们选择同时使用Java和JRuby来实现我们的API,因为它们相互补充。

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

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

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

关键是要避免所有Java)EE东西-它既庞大又笨拙且反敏捷。

5
David Semeria

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

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

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

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

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

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

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

5
Khelben

的确如此,但这并不是因为Java及其生态系统。而是因为人们在使用Java时往往会造成大混乱和可憎之物。

有足够的框架(spring-mvc,grails,play等)可让您快速构建事物。人们过度设计自己的系统是一个事实,随着人们在使用Java生态系统-您知道更多的东西,并且可以使用它们了,有一些工具,一切),以及“一切看起来像钉子”。

如果您是“ hacky”,则可以使用Java)与其他语言进行相同的操作,这是一项研究表明:

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

5
Bozho

要增加一点点,我认为这很大程度上与从无内容(功能上)到功能性Web应用程序的转换速度有关。

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

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

3
Matt Ryan

谁说不是?

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

3
Martin Spa

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

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

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

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

3
Asgeir S. Nilsen

我认为它的使用量比您想像的要多-该用途就在水线以下。 Ruby包装上有很多很多Rails,它们围绕着厚实的Java服务。特别是当您开始处理任何接近大数据的事物时。 。 。

2
Wyatt Barnett

Java很酷,Java很酷,Java将来很酷。我正在开发一个Web App。使用Java。

Java的主要问题是需要7至10人的中型团队才能看到实施结果。后端开发人员必须具备从ORM到Application Framework的应用程序架构知识,表示层。开发人员在桌子上有太多选择,这引发了一个问题,是否使用ORM是一个好主意?使用哪个ORM框架?使用哪个应用程序框架?如何实现前端?全部这使开发人员感到挣扎,并使最终用户无休止地选择开发人员不熟悉的框架来使用这项技术。IDE插件;太多的选择,很多时间花费在安装,配置和测试此版本的插件是否与此版本的IDE等上。等等。最后一件事是托管;许多开发Java应用程序不公开,因为对于Java Web应用程序,gett对于太多开发人员而言,每月收费80美元的一个VPS并不是一个选择,大多数应用程序都需要多个VPS。

2
newphoenix

我使用很多Java来创建Web应用程序。因此,当谈到*语言itsel* f时,我发现只有一个(但很大)的问题-缺乏多行支持。这使得以纯Java代码)的打印/模板非常不可读。

但是真正的问题是缺乏良好的Web框架。我已经使用了很多解决方案,但是我都无法说出哪怕是令人满意的解决方案。

实际上,大多数都是XML编程。在[〜#〜] jsf [〜#〜]中,您生成大量的XML,并且如果您想更改某些常规功能,例如将标签重新排列到文本字段的顶部,则将结束在多个地方进行相同的更改。是的,您已经包含了,但是将它们与PHP中的包含进行了比较...

另外,新的JSF包括“额外”功能,这些功能是几年前JavaScript框架已知的...

[〜#〜] zk [〜#〜]更好一点,因为它允许在Java代码中创建web元素,这使得修改变得更容易(如果您可以使用OOP正确-继承等)。但是,此Java代码在服务器端执行,这是一个很大的性能问题-每次单击都会使程序包发送到服务器。

好吧,[~~~] gwt [〜#〜]是我使用过的最好的Web框架。它允许在Web设计中进行对象编程。屏幕上的每个元素都由Java对象表示,它为您提供了充分的灵活性,但是..。。。。。。。。。。。。。。没有充分利用JavaScript的可能性(至少在我使用的版本中不支持反射,以及HashMap的致命实现)。

您可以使用模板,例如Velocity,但是如上所述,它们是PHP语言之类的穷人版本的模板。

因此,这并不是对Java的仇恨,而是缺乏对编写使用PHP时会获得的Web应用程序的支持,Python等...

1
Danubian Sailor

Java)的问题在于,这种语言是在学校学习的,因此它是新程序员最熟悉的语言。因此,如果您想与众不同,就必须学习一种新的语言。语言,Java是所有人的语言。

第二个原因是,在学校或大公司中,当您要构建Web应用程序时,老师或已经到位的人会为您提供大量Java框架,可帮助您更快地构建此应用程序。但是实际上,通过这种方式,您在构建Web应用程序时并没有真正理解Web(HTTP,HTML,CSS,Javascript等)。这种趋势在其他语言(例如RoR或Python)中不太明显,使用这些语言的开发人员更好地了解网络。

因此,想要构建现代Web应用程序的注册人员更喜欢使用RoR,PHP或Python,以吸引优秀的Web开发人员,不仅是了解Web的人,一种编程语言。

1
Alexandre Vivien

如果用“现代”来表示受欢迎(因为获得最多的新闻报道),那么Java的原因很简单-因为所有“酷孩子”都使用Ruby(或Python,Clojure,Scala或当今最“酷”的东西)。

这有更深层的意义,这些使用Ruby或Python)编写其“现代” Web应用程序的人通常是非常伟大的创新者。喜欢以简单有效的方式解决烦人的问题,同时又省时又省力。有人可能会说,这是优秀程序员的素质。

这些人通常还会围绕他们的项目创造最多的媒体报道,而大型公司却很少这样做。通过做很多开源的事情,或者写博客,等等。

因此,很容易理解这些人进入动态语言世界的引力,在这里他们可以以更简单/更小/更快/更精简的方式解决问题。可悲的是,这意味着那些伟大的人Java开发人员,已经成熟并放弃了Java潮流,因为对他们而言这很烦人并且很难使用)解决这些相同的问题。

如果使用MVC Framework X创建简单的Web应用程序,则需要在Rails/Django中仅编写/编辑100行代码,相反,在Java同样的事情-很明显为什么这看起来很烦人。

关于您的声明“我没有看到Java出现任何严重的“缺失”,从而阻止我构建相同的应用程序。”问题是-如果您在Rails/Django/Whatever中拥有相同的经验,这两个应用程序Java和非Java的应用程序如何相互比较,从而测量时间和精力?以及您可以提出的任何其他指标。

1
Evgeny

创建drupal的Dries Buytaert给出了一个有趣的答案。尽管他的博士学位是关于Java的,但他选择了php来进行drupal,他并不后悔这样做。您可以在这里阅读它(以及他的一些评论): http://buytaert.net/why-php-and-not-Java

如果Drupal)是用Java编写的,这将很难获得临界质量。

0
johanvdw