Por que o Java não é usado para o desenvolvimento moderno de aplicativos da web? [fechadas]


393

Como programador Java profissional, tenho tentado entender - por que o ódio contra Java por aplicativos da Web modernos?

Percebi uma tendência que, nas startups modernas da Web, uma porcentagem relativamente pequena delas parece estar usando Java (em comparação com a popularidade geral do Java). Quando perguntei alguns sobre isso, geralmente recebi uma resposta como "Odeio o Java com paixão". Mas ninguém parece realmente capaz de dar uma resposta definitiva.

Também ouvi essa mesma comunidade de inicialização da Web se referir negativamente aos desenvolvedores Java - mais ou menos implicando que eles são lentos, não criativos, antigos.

Como resultado, passei um tempo trabalhando para pegar o Ruby / Rails, basicamente para descobrir o que estou perdendo. Mas não consigo deixar de pensar comigo mesmo: "Eu poderia fazer isso muito mais rápido se estivesse usando Java", principalmente devido aos meus níveis de experiência relativos.

Mas também porque não vi nada crítico "ausente" do Java, impedindo-me de criar o mesmo aplicativo.

O que me leva à minha pergunta (s) :

Por que o Java não está sendo usado em aplicativos da web modernos?

  • É uma fraqueza da linguagem?

  • É um estereótipo injusto de Java porque existe há tanto tempo (tem sido injustamente associado a suas tecnologias mais antigas e não recebe reconhecimento por seus recursos "modernos")?

  • O estereótipo negativo dos desenvolvedores Java é muito forte? (Java simplesmente não é mais "legal")

  • Os aplicativos escritos em outros idiomas são realmente mais rápidos de construir, mais fáceis de manter e têm melhor desempenho?

  • O Java é usado apenas por grandes empresas que são lentas demais para se adaptar a um novo idioma?


142
Eu acho que você está incorreto: ainda é usado, apenas perdeu o fator legal.

41
@ Graham Lee: Java já foi legal? Eu devo ter perdido alguma coisa. Bem, acho que é café frio, mas legal? Eu acho que a principal razão é que o java, especialmente as estruturas java da empresa, foram e ainda são fortemente engendradas. Você não pode considerá-los leves, basta usá-los porque você precisa dos recursos de distribuição / balanceamento / escalabilidade da plataforma e deseja usar uma estrutura para o front-end que é feito com java também por uma questão de homogeneidade.
Falcon

20
Talvez, porque não é moderno ? : P E Java nunca foi legal, simplesmente porque jogou a parte de hackers fora da programação.
Aug2

28
O @Falcon Java era legal quando foi introduzido pela primeira vez, a Sun fez um ótimo trabalho em expor o Java, se o hype foi justificado ou não, não tem nada a ver com ser legal ou não, muitas coisas legais são sensacionalistas sem motivo.
Mahmoud Hossam

11
@Falcon, você deve criar aplicativos da Web com JSF 2.0 no Java EE 6 e compará-lo com suas experiências. Você pode ser agradavelmente surpreendido.

Respostas:


174

As startups modernas precisam chegar ao mercado o mais rápido possível. Eles não precisam gastar cerca de seis meses para liberar seu aplicativo da web Java.

O Twitter, por exemplo, foi criado usando Rails / Ruby, mas depois que se tornou escalável, eles migraram para a JVM.

Sem mencionar que o processo de desenvolvimento não é produtivo: código -> compilar -> implantar enquanto estiver em estruturas como (Rails / Django / Grails): execute o servidor de teste -> código -> mude as coisas e veja o que acontece.

A boa notícia é que o JRebel permite que você veja alterações de código instantaneamente.


81
O Play Framework também é como Ruby on Rails, mas para Java. Código -> atualize seu navegador.
Jonas

34
Apenas tente se livrar de alguns equívocos. Java EE não é a única coisa do lado do servidor Java, como muitos parecem pensar.
Jonas

22
O Facebook também faz algo semelhante. Sua base de código é em PHP, mas devido a problemas de velocidade e escalabilidade, eles tiveram que escrever um compilador (HipHop) que compilou o PHP em C ++, que é então compilado usando g ++. É engraçado como todo mundo fala sobre o quão bom é o ruby ​​e o PHP e que todos os sites são criados em torno deles, mas quando você olha como eles são ineficientes, a maioria das grandes organizações precisa mudar para outra coisa. Se bem me lembro, a Craigs List tem muitos códigos de back-end escritos em C / C ++ por esse mesmo motivo.
Kibbee

28
1) Usando o Eclipse, a compilação acontece à medida que você digita e você raramente notará. Além disso, executando o Tomcat no Eclipse, posso reiniciar um aplicativo em menos de um segundo. Eu raramente sou impedido por reiniciar meus aplicativos 2) Não há bala de prata, pessoal. Ruby ou qualquer outro idioma não o torna 10x mais rápido. O problema com o Java dev geralmente é o tempo de aceleração, mas se você souber o que está fazendo, poderá trabalhar em um projeto em <10 minutos.
alex

5
Java e qualquer outra linguagem estática têm dois enormes benefícios, refatoração quase sem preocupações e descoberta de API sem documentação.
Erã Medan

136

Na minha experiência, o Java para aplicativos da Web é um exagero para aplicativos pequenos. Um blog simples com uma tabela de banco de dados contém entradas de blog, por exemplo, poderia ser feito de maneira muito mais simples.

Normalmente, eu vejo o Java se saindo muito melhor em aplicativos da Web muito maiores (pense em bancos e companhias de seguros) que se comunicam com vários outros sistemas (como back-ends e bancos de dados de mainframe e bancos de dados e sistemas de processamento em lote de serviços da Web de mesmo nível ... tudo na mesma aplicação).

Pelo que vi, a arquitetura de um aplicativo da web JavaEE geralmente é mais do que o necessário para aplicativos da web pequenos / simples.


5
Para aplicativos "pequenos", isso é ainda mais verdadeiro se você precisar (porque esse é o "padrão" e a empresa o utiliza)) trabalhar com servidores de aplicativos monstro, como o Websphere, enquanto que, na maioria das vezes, o Tomcat, por exemplo, é bom o suficiente. .. Por que, oh, por que tenho que trabalhar com esse console de administração bagunçado? Suspiro ...
Jalayn

7
@Jalayn: Na minha experiência, é porque eles querem apenas manter um programa de servidor de aplicativos para tudo, em vez de administrar o WebSphere para o Time A, Tomcat para o Time B, Glassfish (ou qualquer outra coisa) para o Time C ... e posso entender que sentindo também, mas sim, é frustrante para mim também.
FrustratedWithFormsDesigner

3
Isso é verdade para o Java EE, mas agora existe o Play Framework que tornará seus aplicativos da Web Java tão leves e produtivos quanto o Ruby on Rails.
Jonas

9
O novo Java 6 EE - especialmente o perfil da web - permite alguns aplicativos da web bastante simples.

4
@ ThorbjørnRavnAndersen O aplicativo pode ser simples, mas o entendimento da estrutura não é, nem o entendimento das principais ferramentas, como Ant ou Maven. A curva de aprendizado de um novato é enorme e cheia de camadas aninhadas de acrônimos, confusão entre especificações (por exemplo, JAX-RS) e impls (por exemplo, Jackson) e muito mais. É IMENSAMENTE complicado fazer algo simples, se você realmente quer entender o que está fazendo.
Craig Ringer

135

Programei aplicativos da web em java por 10 anos antes de mudar para python, há mais de 4 anos. Sinto que sou muito mais produtivo usando python e posso fazer muito mais em um curto período de tempo. Para ser sincero, fico muito mais feliz quando desenvolvo em python. Aqui estão algumas das razões pelas quais eu acho que python é melhor que Java, com base na minha experiência pessoal, sua milhagem pode muito.

Estruturas da Web:

Quando eu comecei a programar aplicativos da Web em Java, o Struts acabou de sair, e não foi ótimo, mas foi a melhor coisa disponível. Criei vários aplicativos struts e alguns em outros frameworks ao longo do caminho. Sempre que surgia uma nova estrutura (Tapeçaria, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring, etc.), eu experimentava e veria se era melhor e, na maioria das vezes, era apenas um pouco melhor. e, às vezes, nem melhor. Eu tenho que dizer que a estrutura do jogo é um passo na direção certa.

Pilhas não incluídas:

Uma das partes mais irritantes do Java foi o fato de que a maioria das bibliotecas que você usa não foram incluídas no próprio java, você teve que incluir uma tonelada de bibliotecas de terceiros de lugares como apache commons. Se você usar algo como o hibernate com qualquer outra biblioteca grande, você acaba no inferno das dependências do Jar, onde o hibernate precisa de uma versão de um jar e outra coisa precisa de outra versão. Se você carregar os arquivos jar na ordem errada, estará sem sorte. Você precisa depender de ferramentas como maven e ivy para gerenciar suas dependências, e isso traz mais dependências para o seu projeto, o que resulta em projetos enormes. Eu tinha alguns arquivos de guerra com mais de 100 MB de arquivos de guerra para os aplicativos Web mais simples.

Muitas opções:

Por alguma razão, parece haver muitas maneiras diferentes de fazer a mesma coisa em Java. Existem mais de 38 estruturas da web diferentes para java, de acordo com a wikipedia ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) e 23 ORMs diferentes ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) apenas para citar alguns exemplos. Se você olhar para outros idiomas, eles têm um número mais razoável. Algumas pessoas pensam que ter muitas opções é uma coisa boa, mas não leva a muito esforço desperdiçado na comunidade de desenvolvedores, todos estão reinventando a mesma roda e, se você é uma pessoa nova para o idioma que tem muitas opções para escolher.

Servidores de aplicativos:

Os aplicativos da web Java são realmente pesados ​​e exigem muitos recursos para serem executados. Eles são especialmente famintos por memória. Como qualquer software, eles podem ser ajustados para reduzir o consumo de recursos, mas em comparação com outros idiomas, a configuração imediata é horrível. No passado, usei weblogic, websphere, Jboss, tomcat e jetty. Eu usei apenas os três primeiros quando fui forçado a usar EJBs, mas mesmo se você não estiver usando EJBs, eles eram grandes servidores de aplicativos e, às vezes, difíceis de configurar e funcionar corretamente. O Tomcat e o Jetty são muito melhores e mais fáceis de configurar, mas ainda são recursos desnecessários.

Hospedagem de aplicativos:

Se você não está executando seu próprio servidor, é muito difícil encontrar hospedagem compartilhada para seus aplicativos java a um preço razoável. O principal motivo é que os aplicativos java requerem muito mais memória em comparação com outros idiomas, portanto, não faz sentido que um provedor de hospedagem compartilhada gaste sua valiosa RAM executando um site java, quando eles podem executar sites de 5 php no mesmo local. Isso significa que há menos provedores oferecendo hospedagem java, o que, por sua vez, significa custos mais altos para executar o seu site.

Tempo de desenvolvimento:

Quando desenvolvi em java, me vi muito mais lento do que o que posso fazer em python. Eu precisaria fazer uma alteração, compilar, reimplementar e testar, e isso atrasa o processo iterativo. Eu sei que existem maneiras de tornar isso mais rápido, mas mesmo assim, me senti muito mais lento do que o que posso fazer em python.

Também há muito menos código clichê para fazer a mesma coisa em python, portanto, passo menos tempo desenvolvendo o código também.

O Java parece superdimensionado em várias partes. Muitas APIs e interfaces são muito complicadas para o que você deseja fazer. E todos e seus irmãos pensam que são um arquiteto java e isso resulta em grandes sistemas complicados e difíceis de usar e desenvolver.

IDE:

Quando eu estava desenvolvendo em Java, me senti preso ao IDE, fiquei perdido sem ele. O IntelliJ é o melhor IDE do mercado, e foi difícil mudar para o python porque não havia nada parecido no python. Então, em vez de um IDE, eu apenas usei o textmate, que é apenas um editor de texto normal. Foi difícil no começo, mas como era apenas um editor de texto, era um aplicativo muito rápido e responsivo. Eu poderia abrir todo o meu projeto em alguns segundos, enquanto que quando eu quiser abrir um projeto em um IDE, pode levar um minuto ou mais, com uma máquina com uma tonelada de RAM. Os criadores do IntelliJ lançaram um editor de python chamado pycharm, eu o comprei quando ele foi lançado e é ótimo. Mas o que percebi é que não preciso de um IDE para python, estou bem com um editor de texto. Quando volto a trabalhar em aplicativos da Web Java, que tenho que fazer periodicamente, tento usar o editor de texto, mas ainda não o dominei. Pessoalmente, preciso mais do IDE para Java porque, se eu estragar algo, leva mais tempo para recompilar e reimplementar, o que me deixa mais lento.

ORM:

Quando comecei a usar o Hibernate como ORM, achei ótimo, tinha problemas e não era perfeito, mas era melhor do que o que estava fazendo antes. Fiquei feliz com isso, até fazer uma aplicação com o ORM do Django em um projeto python, e isso abriu meus olhos, é assim que um ORM deve funcionar. Depois desse projeto, voltei ao hibernar e fiquei decepcionado, e desejava voltar ao ORM do Django. Outro grande ORM python é o sqlalchemy, que é semelhante ao ORM do Django, mas um pouco diferente. Tenho experiência limitada com o ORM da ROR, mas pelo que me lembro, também foi muito bom.

Modelos:

Os sistemas de modelos da Web em Java não são tão bons e acho que já tentei todos eles (blocos, marcador livre, velocidade, etc.). A maioria deles oferece apenas funcionalidade básica e é uma dor de se trabalhar. No lado do Python, meus dois favoritos são modelos do Django e Jinja2, eles têm tudo o que eu poderia precisar em um mecanismo de modelagem e são realmente fáceis de usar.


10
Estou com você em muitos pontos, mas discorde de alguns. Loop de compilação / teste : use o módulo dinâmico da web do Eclipse, e / ou JRebel, e ele se foi; ótimo. Peso : O JBoss AS 7 é bem leve e rápido. e se você não quer o EE, pode usar o Tomcat ou o Jetty, que nem estão lá. Teste : o Arquillian é a melhor ferramenta de teste que já usei em QUALQUER idioma, embora apenas tenha amadurecido o suficiente para ser utilizável. Dependência do inferno : Basta usar o Maven; deve ser parte padrão e obrigatória do JAva.
Craig Ringer

Observe que tudo isso acima contribui para o problema "baterias não incluídas", que é enorme. Parece que o Java EE é uma sub-estrutura na qual você deve criar sua própria estrutura para criar seu aplicativo. Muito ineficiente. Todas as ferramentas também são horríveis e o JSF2 é simplesmente um instrumento de destruição da produtividade do desenvolvedor.
Craig Ringer

2
Também acho que você perdeu um ponto crítico: a curva de aprendizado e os bugs realmente atrasam as coisas.
Craig Ringer

@CraigRinger Eu não usei o módulo web dinâmico do eclipse ou o JRebel, então você está certo, ele pode ter sumido.
21712 Ken Cochrane

2
Se você gostou do IntelliJ, tente o PyCharm - ele é baseado no mesmo núcleo.
Tamlyn

94

Start-ups querem o brilhante. Qualquer que seja o brilho: RoR, Groovy, Grails, OOP com PHP, Foobar, Wibble, Narf, etc.

A empresa quer estável, confiável e escalável: Java e .NET se encaixam nessa proposta (quando feitos corretamente).

Show atual: Serviços Financeiros. Plataforma: ColdFusion (essencialmente uma Java Tag Library) e Java.

Shows anteriores:

  1. Serviços de teste educacional - ColdFusion
  2. Seguro de alto risco - ColdFusion e Java
  3. 401k - ColdFusion e Java
  4. Viagem - Java com aplicativos internos do ColdFusion
  5. Valores Mobiliários - ColdFusion (versão pré-Java)

Todos esses são sites de alto volume e alta segurança. Ninguém em nenhuma dessas empresas jamais considerou PHP, alguns olharam para o RoR e viram muitos problemas. A empresa 401k tinha uma empresa irmã executando um aplicativo .NET com desenvolvedores competentes, o aplicativo continuava travando toda semana. Eles finalmente o converteram em Java e ganharam estabilidade.

As únicas pessoas que menosprezam o Java são aquelas que têm pouca ou nenhuma experiência real com ele ou que estiveram envolvidas em implementações ruins e agora são tímidas. Eles vêem o brilho e a figura, se todas as crianças legais estão usando, por que não eu?


23
"A empresa 401k tinha uma empresa irmã executando um aplicativo .NET com desenvolvedores competentes, o aplicativo continuava travando toda semana. Eles finalmente o converteram em Java e ganharam estabilidade". Lol :), já ouvi falar do caso oposto.
Den

12
Bem, claro que você tem. Os aplicativos da Web são muito mais do que escrever código, você precisa saber como ajustar seus servidores, escrever o SQL ideal e assim por diante. Essa empresa tinha 2 desenvolvedores .NET e nenhum administrador de servidor real. A empresa que comprou a empresa com a qual eu estava também recebeu esse aplicativo no negócio. Eles eram uma enorme loja Java e, portanto, tinham mais recursos disponíveis para garantir a estabilidade.
Adrian J. Moreno

48
Parece-me falso que você tenha escrito essa frase declarada como causa e efeito. Converter em Java = ganho de estabilidade? Todos sabemos que não é por isso. Além disso, sinto muito por tudo o que a experiência ColdFusion;)
Jordan

3
Seja justo, os investidores tendem a querer ver o sabor do ano. Mas, pessoalmente, ainda não consigo pensar em uma escolha pior para o desenvolvimento rápido de protótipos, com exceção de desenvolvedores Java de alta qualidade que não são fáceis de encontrar.
Erik Reppen

9
desenvolvedores Java de alta qualidade que não são fáceis de encontrar - De fato.
Luis.espinal 03/08

73

Uma adição à resposta do FrustratedWithFormsDesigner : Como acho que sua pergunta é mais direcionada a sites menores, há um aspecto importante que você precisa considerar para muitas pessoas: a hospedagem é onipresente para PHP, mas é mais difícil para sites Java ou ASP. No entanto, isso não é um defeito desses idiomas.


Acho que isso mudou, agora você pode hospedar aplicativos da Web Java no GAE, sem nenhum custo.
Mahmoud Hossam

+1 para hospedagem de Java. Embora o ASP.Net não seja difícil de encontrar e seja barato. Pago US $ 8 por mês pela minha hospedagem ASP.Net compartilhada. Por outro lado, eu queria tentar criar um site em Java e não consegui encontrar um host compartilhado que execute Java e ter que usar um VPS não me interessa para um projeto de aprendizado.
Jetti

9
+1 para isso. É muito mais fácil hospedar muitos sites em um servidor para PHP do que para Java e, além disso, é muito mais fácil encontrar soluções baratas de hospedagem na Web para PHP do que para Java.
Jonas

Você está certo @ Mark, fixo.
sebastiangeiger

1
@Kibbee - Arvixe É assim que eu uso. Eu tenho o plano personalASP Pro.
Jetti

70

Java é absolutamente utilizado para o desenvolvimento de aplicativos da web modernos. Particularmente quando você chega ao final um pouco maior / mais complexo / escalável do espectro de aplicativos da web.

Se você estiver interessado em ferramentas e estruturas modernas e produtivas, consulte:

Mas acho que o desenvolvimento da Web verdadeiramente moderno na plataforma JVM provavelmente será feito em uma das novas linguagens da JVM, em vez de usar o Java diretamente, com o Java simplesmente fornecendo a espinha dorsal em termos de bibliotecas subjacentes e infraestrutura de back-end. Há muito desenvolvimento web acontecendo no Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) e Clojure ( Noir , Ring / Enlive + muitas estruturas personalizadas), para citar apenas algumas.

Com toda a inovação ocorrendo no novo espaço de linguagem da JVM, eu pessoalmente suspeito que o Java acabará se tornando o "montador da programação do lado do servidor".


O Vaadin é uma ótima ferramenta para criar aplicativos de intranet e grandes empresas. Não é tão adequado para uma startup, eu acho. Isto é, a menos que você adote a aparência, porque é muito difícil mudar isso.
naugtur

7
Acordado; O Java EE 6 é ótimo assim que você solta o JSF2 e usa algo sensato e produtivo. A curva de aprendizado ainda é imensa .
Craig Ringer

1
Você pode adicionar o Tapestry5 ( tapestry.apache.org ) à sua lista de estruturas da Web Java modernas.
21912 Neeme Praks

@CraigRinger JSF é fácil. O seu comentário lê como a questão em si: um discurso religioso
jwenting

@jwenting Bem, já faz três anos , então melhorou um pouco em termos de documentação e ferramentas externas desde então. Na pilha EE 6, quando eu estava trabalhando com ele era maldita horrível, mais ainda se apoiando Glassfish 3 e AS 7.
Craig Ringer

41

Google, Amazon ou LinkedIn contam como modernos?

Java é usado para aplicativos da web modernos. Se você procurar na empresa, é o idioma mais usado para aplicativos da Web (interno).

Dito isto, o Java passou por um período em que seus padrões de desenvolvimento da web tentavam ser tudo para todos (provavelmente ainda o fazem). "Não se repita" foi uma resposta ao inferno xml e aos longos ciclos de desenvolvimento do desenvolvimento da web em Java. Como resultado, Java (EJB, Struts, JSF, etc) passou a ser visto como algo que todos os novos paradigmas estavam tentando superar.

Java, a linguagem é detalhada. Isso é um profissional e um contra (ótimo para manutenção, é péssimo para dev). Existem vários recursos de linguagem moderna que ainda não foram criados para Java que podem reduzir substancialmente o tempo de codificação (propriedades, eventos, encerramentos, geradores, compreensão de lista etc.). Portanto, pode ser frustrante quando proveniente de uma linguagem mais moderna. Dito isso, é difícil adicionar uma linguagem madura sem se tornar o ninho de ratos que o C # está se tornando.

Muitos idiomas usados ​​no desenvolvimento moderno da Web são dinamicamente digitados. Isso permite ferramentas que podem recarregar dinamicamente o código conforme ele é gravado (isso é mais difícil de ser realizado em uma linguagem estática - jrebel). Como o desenvolvimento web se presta a iterações rápidas, o recarregamento dinâmico é uma grande vitória. Reduz significativamente o ciclo de desenvolvimento em projetos greenfield e facilita a obtenção correta da interface do usuário e do UX (tentativa e erro por natureza).

As línguas estáticas também têm seu lugar. Para uma lógica de back-end complexa, que deve ser executada por anos, deve ser dimensionada sem problemas, deve ser muito rápida e deve estar completamente livre de erros, são preferidas as linguagens estaticamente tipadas (como Java ou C).

Além disso, conforme a contagem / rotatividade de desenvolvedores cresce e os produtos amadurecem, a probabilidade de pessoas bem-intencionadas introduzirem disparos de bugs. O rigor e a disciplina que um projeto Java bem projetado (interfaces, padrões e água benta para esses vampiros php :)) impõe ajuda a reduzir o risco a longo prazo. Embora isso também possa ser alcançado por meio de teste de unidade, a rede de segurança derivada da verificação estática (e analisadores estáticos como findbugs e clang) oferece um nível de cobertura de código embutido que é difícil de replicar com testes manuscritos. Não me interpretem mal, deve haver testes de unidade e testes funcionais, mas organizações reais nunca alcançam 100% de cobertura. Pelo que eles verificam, os analisadores estáticos fazem.

Portanto, em grandes projetos (conforme definido mais pelo tamanho da equipe do que pelo tamanho do código), onde há uma interoperação complexa entre blocos de código desenvolvidos independentemente, linguagens como Java ainda são preferidas. Exemplos incluem aplicativos Web grandes / complexos, como os de corretores financeiros (ameritrade), trocas financeiras (nasdaq, nyse, talvez londres após a falha do .net), serviços bancários on-line (quase todos), email (google), leilão (ebay) , etc.

De uma perspectiva de desempenho e escala, nada supera a plataforma Java por sua combinação de escalabilidade e desempenho para aplicativos da Web (dependendo de como você conta o particionamento de aplicativos do Facebook). O Twitter, por exemplo, teve que reescrever grandes partes de sua infraestrutura Ruby em Scala na Java VM para colocar a baleia falida de volta ao mar. Já ouvi falar de outros grandes exemplos, mas eles me escapam agora.

Também vale a pena considerar a segurança. Embora os plug-ins do navegador Java tenham sofrido seu quinhão de vulnerabilidades de segurança, a plataforma java em si é uma das plataformas mais seguras criadas. Os aplicativos da web Java têm a reputação de serem muito seguros. Suas práticas de codificação, bibliotecas e arquitetura há muito tempo desencorajam erros que tornam possíveis ataques como injeção de sql ou estouros de buffer. Enquanto outras plataformas da web (trilhos) têm uma boa reputação de segurança, nenhuma supera o Java.

Resumindo, a maioria dos aplicativos da web é tecnicamente simples. Para simplificar, o Java geralmente é um exagero (como nos velhos tempos em que os escrevemos em C :)). Se, no entanto, o aplicativo da web for complexo (back-end ou não) ou se tiver mais de 100 desenvolvedores, é difícil vencer o Java.

-

Em uma nota pessoal, eu uso muito o Grails porque me dá o melhor dos dois mundos (o mesmo pode ser dito do JRuby, que eu ouvi dizer que está se tornando cada vez mais popular no mundo do Ruby).

BTW - Acho que a ascensão do PHP é verdadeiramente desconcertante. PHP como linguagem é o equivalente aproximado a perl na legibilidade e VB na qualidade dos resultados. Ele incentiva práticas horríveis, é quase impossível de manter, as bibliotecas de terceiros raramente funcionam como o esperado e tem uma sintaxe que levaria Larry Wall a subir ... bem ... uma parede. A única explicação que posso conjurar é que ela se presta a um aprendizado incremental (como o VB). Em outras palavras, você pode realizar algo útil sabendo muito pouco sobre programação / administração e pode ampliar seu conhecimento um pequeno pedaço de cada vez. Há muito a ser dito sobre isso da perspectiva da adoção. No entanto, para qualquer um que já tenha suportado ou substituído um dos bilhões de aplicativos VB escritos por "programadores" no mundo corporativo / MFG, você provavelmente está balançando a cabeça e planejando sua aposentadoria. :)


3
Gostaria de elaborar o ponto "o ninho de ratos que C # está se tornando"?
XåpplI'-I0llwlg'I -

1
Não sei ao certo por que você diz '' Não se repita '' foi uma resposta ao inferno xml e aos longos ciclos de construção do desenvolvimento da web em Java. ' O DRY surgiu como um conceito na comunidade Agile, a maioria dos quais usava outras linguagens além do Java na época.
Jules

38

Bem, recentemente me encontrei com um cara de Java que estava realmente empolgado com o novo projeto Spring Data, devido ao pouco código necessário para obter acesso básico CRUD ao seu banco de dados.

Posso criar um aplicativo CRUD usando o Rails (não apenas o acesso ao banco de dados, mas visualizações e controladores) com alguns comandos.

(Em primeiro lugar: novo projeto, 1 comando de andaime por entidade, 1 comando para migrar o banco de dados, 1 comando para iniciar o servidor.)

Não tem nada a ver com a linguagem, é tudo sobre as ferramentas. E parece que as linguagens dinâmicas tendem a ter as ferramentas e estruturas que removem grande parte do código padrão. (Para compensar nossa falta de IDEs poderosos que geram clichês para nós.)

Também sinto que linguagens dinâmicas tendem a facilitar a escrita de tais ferramentas e estruturas. Eu posso inserir o código por exemplo, Padrino ou Rails (ruby web frameworks) com muito mais facilidade do que o código por dizer Spring Roo. Isso pode ser devido ao fato de eu conhecer Ruby muito melhor do que Java.


24
Pessoalmente, não gosto de linguagens dinâmicas. Linguagens estáticas me tornam mais produtivas quando consigo ver todos os erros de tipo rapidamente no meu IDE e usar ferramentas de refatoração. Você deve dar uma olhada no Play Framework, que é um framework Web Java inspirado no Ruby on Rails e que o torna produtivo com Java.
Jonas19

4
Uma estrutura poderosa, como rails, também significa que, se algo está mal implementado, a maioria das pessoas não pode substituí-la por outra, porque esse componente é muito rígido com a estrutura. Enquanto para java, se eu não gostar do Hibernate, posso usar outra coisa como pimenta de Caiena ou JPA, por exemplo.
precisa saber é o seguinte

2
Como alguém lutando contra o Django, permita-me apenas dizer: Coyote21 está absolutamente certo. Você pode obter CRUD básico em cinco minutos, mas no segundo em que começar a adicionar lógica de negócios (quando esse registro for atualizado, um registro deverá ser inserido nesta tabela e ...) no CRUD, você terá problemas .
asthasr

Se você está no Rails, mas precisa de Java, consulte o Seam Forge. Cuidado, ele usa JSF2, que é horrível de se trabalhar, mas o Forge é muito bom.
Craig Ringer

você pode construir aplicativos CRUD em Java usando Roo em questão de minutos, a mesma coisa com Grails (não exatamente Java, mas ainda JVM) Jogar 1.0 tinha geradores / andaimes, gostaria de saber onde ele foi embora ...
Eran Medan

24

O Java foi posicionado nos últimos anos para ser "corporativo". Que está do outro lado do espectro do que uma startup precisa. No desenvolvimento de aplicativos da web, você precisa de quatro coisas: acesso indolor ao banco de dados, excelente manipulação de strings, açúcar de sintaxe e processo iterativo rápido para fazer as inúmeras pequenas alterações que seu aplicativo exige.

Desempenho, escalabilidade e estabilidade são um pouco mais baixos na lista de prioridades.

Além disso, Java é uma linguagem muito difícil de codificar. Ele teve a capacidade revolucionária de usar string em uma instrução switch ontem. E o javascript é uma linguagem muito hacker; portanto, depois de desenvolver seu front-end, você se sente muito constrangido ao retornar ao java.

Então, suponho que essas são as razões pelas quais as webstartups evitam o java.


12
acesso db indolor? Spring JDBC ou Hibernate funcionam muito bem. Ótima manipulação de cordas? Não pense que a manipulação de strings é muito superior a 5% em qualquer projeto. Sintaxe de açúcar? O que você quer dizer com isso. Processo iterativo rápido? Java possui (o Tomcat no Eclipse é indolor). Java não divertido? A única coisa que falta são classes anônimas concisas / lambdas / etc. Os recursos "divertidos" em outros idiomas tendem a ofuscar e tornar as coisas menos claras. Strings in switch ... Sim, eu tenho que admitir que é uma porcaria (no entanto, na maioria das vezes, você deve usar enums).
alex

4
@alex: Syntax sugarJava praticamente não pode ser usado para DSL, por exemplo, o arquivo de configuração e rotas do Play não é um arquivo Java, está em uma sintaxe estrangeira que faz menos do que dizer settings.py e urls.py do django; nenhuma compreensão de lista; tipos de dados cruciais (por exemplo, mapas, listas) não são importados por padrão; uma classe idiota por arquivo realmente atrapalha; e APIs Java tendem a ser desnecessariamente detalhadas. Além disso, você não pode usar enumerações ao alternar entre as strings recebidas do parâmetro GET / POST.
Lie Ryan

4
@alex Interessante. Eu costumo usar genéricos em todos os lugares em C # - embora, olhando de fora, provavelmente seja devido ao aumento da funcionalidade das lamdas - Para que eu possa usar um IRepository<T>com um IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Gostaria de saber se eles se tornarão mais populares em Java quando receber lambdas? Provavelmente é uma zona de conforto, mas o Java parece detalhado - e muito como se eu tivesse recebido bits suficientes para construir 50 tipos diferentes de carros, sem garantia de que duas partes se encaixariam.
Básico

3
Não acredito que duas pessoas argumentaram que o Tomat no Eclipse é indolor e torna o desenvolvimento Java eficiente. Acho que isso torna cada ciclo de desenvolvimento muito mais rápido, mas requer manutenção diária, incluindo atualização, reconstrução, limpeza do tomcat repetidamente, reimplantação, reinicialização e, algumas vezes, reinicialização do Eclipse e repetindo as etapas anteriores. Se meu carro precisasse de tanta manutenção, eu nunca iria trabalhar.
Brandon

1
@Brandon Eu vou concordar com isso. Nunca, nem uma vez, lutei com um problema de configuração no Node ou no Python / Django. Perco a paciência com o RoR. Nossa base de código Java baseada em dependências Ant / Mvn / Spring / Hibernate / eclipse é um pesadelo antes de você chegar ao código.
Erik Reppen

18

Atualmente, trabalho em uma empresa que possui muitos desenvolvedores "Eu odeio Java". Isso costumava me surpreender também. Eu certamente odeio todas as hordas de tecnologias que estão disponíveis com Java. Isso torna a tomada de decisões muito difícil. É como quando você tem muita escolha, você não tem escolha. Você precisa gastar tempo com centenas de estruturas para realmente criar a estrutura que funciona para você. A arquitetura padrão do Servelt é complicada para a maioria das aplicações. Este não é o caso do Ruby, Django e outras coisas. São mais uma estrutura única do que linguagem.

As maiores reclamações que ouço dos desenvolvedores

  1. A sintaxe é muito longa. Apenas para imprimir algo, precisamos escrever System.out.print. Você não pode realmente usar um VI simples como editor e escrever um trecho de código em poucas horas.
  2. Estruturas de teste fracas. Embora as estruturas de teste sejam muito semelhantes em Java e Ruby, o Ruby dá um passo à frente ao tornar as coisas facilmente disponíveis para teste. Isso é especialmente verdade se você estiver usando o banco de dados extensivamente em seu aplicativo. Mesmo muitas das estruturas da Web não pensam em testar.
  3. Modelos são uma dor. Transforma a linguagem relativamente simples em uma sopa de macarrão.
  4. Não é legal. A maioria dos aplicativos Java são escritos em grandes empresas, associadas à burocracia, que não é tão boa para os desenvolvedores. As pessoas não pensam no Google quando pensam em Java. Google == Python. Também tem muito a ver com a publicação de livros indicando X em Y dias.
  5. Não gosto de compilar. Para a maioria dos desenvolvedores, a compilação é um fenômeno de uma década. Fazia sentido nos anos 80 com C, mas os computadores mordern podem fazer muito mais. Eles não escrevem código em linguagens compiladas. Java é uma das poucas linguagens compiladas e usadas para escrever aplicativos da web.
  6. Muitos conceitos de ops. Embora os desenvolvedores tenham adotado discretamente o domínio Ops. Eles não gostam disso por completo. Eles não gostam quando você escreve um aplicativo com 10 classes, cada uma fazendo apenas uma coisa. Faz você abrir centenas de arquivos e imaginar a interação entre centenas de classes, às vezes com estruturas. Torna toda a atividade de programação uma tarefa árdua. Isso pode ser verdade na maioria das linguagens, mas vi que os desenvolvedores Java prestam muita atenção ao que uma classe faz. São os desenvolvedores Java que frequentemente criam um código com centenas de classes. Isso é bom de muitas perspectivas, mas os desenvolvedores não java o odeiam.

Portanto, tudo em Java impõe uma curva acentuada no início do projeto, o que significa muito dinheiro para ser comprometido. Adicione a isso uma enorme comunidade ligada ao java, cada uma pensando de maneiras diferentes e ninguém para realmente liderar toda a comunidade. Eles também não veem palestras e conferências conduzidas pela comunidade mostrando todas as novidades. Não há novos livros legais. O Java parece que vai cair porque foi usado para resolver muitos problemas diferentes alguns anos atrás.


(2) é maravilhosamente abordado por JBoss Arquillian ( arquillian.org ). Muito do resto é mais um problema de JSF2 do que de Java. Os maiores problemas da IMO são a curva de aprendizado e o imenso bugs das estruturas, mas se você evitar o JSF2, poderá se sair bem.
Craig Ringer

5
Eu amo POO. Eu também sei OOP, e é por isso que discordo que a grande maioria dos desenvolvedores Java está fazendo muito disso. Você pode escrever uma classe, mas se o seu código ainda estiver uma bagunça espaguete emaranhada, tudo o que você realmente fez foi encontrar uma maneira (beans) de escrever código processual de porcaria com estruturas inúteis envolvidas no que poderia ser funções ou estruturas simples, na melhor das hipóteses.
quer

2
"As pessoas não pensam no Google quando pensam em Java". ... Eu certamente penso no Android e na sua Dalvik VM (que é uma Java VM) quando penso no Google. Também penso em coisas legais como o GWT (geração automatizada de JavaScript a partir de Java). Se há uma empresa "alta" em Java, é o Google. Muito mais que Apple ou Microsoft. É verdade que a Oracle e a IBM estão mais associadas ao Java do que ao Google, mas ainda assim: bilhões de dispositivos Android executando aplicativos Java em uma VM Java são algo meio difícil de pensar sem estabelecer um vínculo muito forte entre Google / Java.
Cedric Martin

Muito ódio contra o formulário JSF2 @CraigRinger nesses comentários. :-) O que é que irrita você? Eu achei complexo, para começar, mas depois que comecei, adorei . Claro, eu estava usando Spring antes disso, de modo que qualquer outra coisa está indo olhar como uma melhoria ... :-)
Brian Knoblauch

1
Sou desenvolvedor OOP em Java e não posso exagerar os benefícios do OOP para desenvolvedores. Sim, leva um pouco mais de tempo durante o desenvolvimento, mas vale a pena a menor taxa de erros, legível e mais fácil de manter o código. Sem mencionar que o teste de unidade se torna muito mais fácil com o POO feito corretamente.
IntelliData

14

As estruturas para o desenvolvimento de web Java têm um pouco de curva de aprendizado, geralmente são um exagero para o que você precisa, e grande parte do indireto necessário para fazer as coisas funcionarem é apenas ... doloroso ... trabalhar.

Eu trabalhava para uma empresa que desenvolvia Spring / Java e achava a estrutura complicada, na melhor das hipóteses. Não tenho muitas coisas agradáveis ​​a dizer sobre o framework do Spring, exceto que eu tinha um amigo que costumava fazer o desenvolvimento do Struts e ele pensava que o Struts era ainda pior. A estrutura da Web não se parece em nada com aplicativos de desktop ou móveis (por exemplo: android), e tem muitas idéias abstratas que levam algum tempo para serem realmente compreendidas (embora, certamente, isso lhe dê muita capacidade e capacidade se você você é profissional e está fazendo algo realmente complexo, como um aplicativo de nível empresarial). Adoro programar java para dispositivos móveis ou de mesa, mas java para aplicativos da web? Não muito.

Eu não fiz nenhuma programação pessoalmente no Ruby / Rails, mas meu amigo que costumava fazer Struts agora está fazendo a programação da web em Ruby e testemunha que coisas difíceis de fazer na programação da web em Java exigem muito menos código e complexidade para serem alcançados. Rubi. Certamente há uma curva de aprendizado para as diferentes regras de sintaxe e idioma, mas para aplicativos de prototipagem, há vantagens em termos de quanto de código é necessário para alcançar o resultado desejado. Como outros já mencionaram, a escalabilidade também é um problema a ser considerado, e um dos motivos pelos quais aplicativos mais maduros não são vistos com tanta frequência em idiomas mais modernos.


+1 para o excesso de estrutura. Está ficando louco, você gasta todo o seu tempo escrevendo a configuração xml.
Richard As

1
+1 para estrutura. Não apenas as estruturas originais tentaram P ** s Poor (JSP, STRUTS), agora temos cerca de trinta para escolher, dentre as quais uma não funciona tão bem quanto a RoR.
James Anderson

Não são apenas as estruturas. São os níveis obscenos de conformidade com as coisas que não fazem sentido. Expor muitas propriedades significa que você está fazendo errado. Colocar um getter e um setter de baunilha apenas adiciona uma chamada de método inútil e não muda nada, mas nenhum desenvolvedor Java irá apenas desviar propriedades de um objeto como esse, porque a comunidade reforça que isso é algo mais errado do que o que eles já estão fazendo. Mas sério, o XML em vez do código ... como isso durou mais de 5 minutos?
Erik Reppen

14

Tudo se resume a custos e tendências. A Inicialização da Web 2.0 é criada por um visionário com menos de 30 anos que tem mais talento do que dinheiro (estou generalizando, é claro, mas é isso que você verá "em média"). Ele vai usar uma linguagem que ele está familiarizado porque está fazendo a programação (junto com talvez alguns amigos). Ele provavelmente é um programador autodidata.

O Java foi direcionado como um ambiente corporativo (por Java, quero dizer a linguagem, a estrutura e os padrões). Há um monte de ferramentas caras que a IBM, a Oracles e a BEA do mundo querem vender empresas.

As etapas para se tornar proficiente em Java são complexas e / ou caras. Eu sei que a paisagem está mudando lá, mas é tarde demais?

Depois que a startup ganha força, vem o crescimento. Recrutar desenvolvedores talentosos é difícil. Muitos programas "se tornam programadores em seis semanas" ensinam Java (ou .NET) e o mercado está saturado com "programadores de seis semanas" (curiosamente, vi desenvolvedores com currículos dizendo 7 anos de experiência que ainda mostram o conhecimento de seis programador semanal). O uso de um ambiente não mainstream e não "corporativo" pode ser um filtro natural para programadores de seis semanas. É preciso dedicação e investimento pessoal para aprender Ruby ou Scala fora de um requisito de trabalho. Este é o maior indicador para mim do potencial para um candidato.

O conhecimento vem com a experiência, mas um programador dedicado / apaixonado ganhará conhecimento mais rapidamente (em média) do que alguém sem essa dedicação / paixão. Assim como uma criança que adora tocar violão se tornará melhor mais rapidamente do que uma criança fazendo aulas porque seu pai o criou.


Eu acho que esse é um ponto realmente bom +1
sfrj

1
Não concordo com o parágrafo que diz: Ele provavelmente é um programador autodidata. Isso não é verdade atualmente, hoje em dia a maioria das pessoas de 30 anos de idade é programadora e tem pelo menos um diploma.
precisa saber é o seguinte

1
??? Estou pintando a inicialização da web prototípica. Eu não disse nada sobre eles serem competentes. Você pode ser autodidata e competente ao mesmo tempo. Não tenho certeza do que você está discordando.
Michael Brown

1
Esta seria a minha resposta. Java é praticamente a única tecnologia da web atual que não foi projetada para que qualquer desenvolvedor competente possa buscá-la e usá-la. A segunda parte da sua resposta é muito bonito o que Paul Graham escreveu em O Python Pardox
user16764

14

Java é muito complicado. Faço muito trabalho em PHP e é mais fácil e rápido para a maioria das situações. A capacidade de apenas fazer o SSH em um servidor abrir um arquivo php faz com que as alterações sejam salvas e feitas, é excelente. Os poucos aplicativos Java em que trabalhei sempre exigiram uma reinicialização para a alteração mais simples. (sem dizer que é sempre o caso com o que eu me divirto). Além disso, a hospedagem PHP é barata e facilmente disponível.

Também acho que o que você tem pelo menos com PHP são muitos desenvolvedores que, como eu, começaram 14/15 anos atrás com HTML estático. À medida que as coisas avançavam, começamos a adicionar PHP aos nossos sites porque era fácil, simples e acessível. Ao longo dos anos, a linguagem cresceu e expandiu suas habilidades muito além de seus humildes começos e agora se esforça para ser o que eu acho que são muitas coisas que realmente não são.

Por outro lado, a maioria dos desenvolvedores de PHP que conheço vê o Java como um gorila gigante excessivamente complexo, com quase 300 quilos, quase como sair do caminhão de 18 rodas para dirigir até o supermercado e pegar um pedaço de pão.

Eu tentei aprender Java, minhas primeiras impressões foram muito longas e indutoras do túnel do carpo. Além disso, isso me deixou com muitas perguntas que provavelmente parecem fáceis para um veterano de Java. OpenJDK ou Sun? Tomcat, ou Glassfish, ou? Além disso, parece que toda introdução ao livro Java faz você escrever código para a linha de comando. Acho que a maioria das pessoas hoje em dia acha que é um festival de soneca.


3
Vou fazer mais escolhas e um pouco mais de complexidade em relação aos mais de 9000 métodos internos do PHP.
Kaleb Brasee 19/08/11

1
PHP é tão fácil de configurar.
Barfieldmv

9
mas torna difícil escrever um bom código ... mais fácil de configurar, mais fácil de iniciar, menos chato não deve ser o critério usado para escolher um idioma. Boa programação exige disciplina, paciência e esforço ... é um mau sinal se você não tem aqueles ao escolher ...
alex

A menos que ambos cheiram mal, mas um deles é muito mais um PITA para configurar do que o outro.
quer

12

Atualmente, minha equipe e eu estamos desenvolvendo um aplicativo Web greenfield em Java 6 + Stripes. No ano passado, eu também trabalhei em outro aplicativo Web greenfield usando o Java 6 + Stapler (um framework da Web um tanto desconhecido desenvolvido por Kohsuke Kawaguchi, da fama de Hudson / Jenkins).

Java é absolutamente usado para o desenvolvimento web moderno. Certamente, ele não tem o apelo "sexy" do Ruby ou de outras linguagens dinâmicas, mas estou longe de me convencer de que linguagens dinâmicas são boas quando o projeto começa a crescer.

Os servidores de aplicativos Java modernos são muito competitivos com o ASP.NET em termos de desempenho, e ambos são ordens de magnitude mais rápidas do que qualquer VM de linguagem dinâmica que eu conheça.

Não me entenda mal ... Não estou dizendo que Java é sempre a melhor opção (não remotamente!) - mas também não é sempre uma escolha errada ou "desatualizada".


1
Eu costumo discordar do "mais rápido". Em teoria, deveriam existir, mas existem alguns sites php maciços por aí e quase todas as histórias sobre problemas de desempenho estão relacionadas ao MySQql ou outros bancos de dados subjacentes. Por outro lado, quase todos os aplicativos J2EE com os quais eu entrei em contato precisaram de um amplo ajuste antes que o desempenho fosse aceitável.
James Anderson

1
@ James: você tem alguma coisa além de anedotas vagas para apoiar isso? Todos os 10 principais sites existentes estão rodando em plataformas gerenciadas (Amazon em Java, Twitter no Scala IIRC, Google em um back-end personalizado de Java e C ++) ou possuem uma infraestrutura altamente personalizada (Facebook e Wikipedia usam PHP, mas ambos têm grandes quantidades de código nativo personalizado para velocidade). O Java supera regularmente as linguagens dinâmicas nos benchmarks. Não sou fanático por Java, mas desempenho não é problema de Java.
Daniel Pryden

Não há problemas de desempenho com o próprio Java "não tão rápido quanto C, mas mais rápido do que qualquer outra coisa". No entanto, é quase garantido que o J2EE, mais estruturas, mais ORM, mais injeção de dependência e mais projeto de exagero; há tão muito pouco potencial para gargalos ocultos e interações imprevistas
James Anderson

1
@ Basic: Qual é o seu ponto? Existem muitas bibliotecas e estruturas quebradas para qualquer idioma. Sim, há muita documentação obsoleta e desatualizada - mas isso também não é incomum. Por outro lado, existem algumas bibliotecas, estruturas e ferramentas fantásticas para Java. Você está seriamente tentando sugerir que deve haver uma estrutura de ponta a ponta para cada aplicativo?
Daniel Pryden

1
@ Basic: Para trás de quê? No ano e meio desde que escrevi esta resposta, segui em frente e estou trabalhando no Google e posso garantir que o Java é muito usado no desenvolvimento de aplicativos da Web no Google. Obviamente, as necessidades do Google são muito diferentes das necessidades de muitas outras empresas, mas o Java é um animal totalmente diferente quando você usa as bibliotecas e estruturas certas - basta verificar algumas das coisas que o Google tem código aberto (Goiaba, Guice, GWT, buffers de protocolo etc.).
Daniel Pryden

12
  1. Java é mais complexo de aprender do que PHP / Python / Ruby
  2. O ecossistema Java é muito complexo, muito grande e bastante confuso para iniciantes
  3. Existem muitas estruturas historicamente ruins com reputações negativas associadas ao java. Você precisa saber em quais estruturas evitar desperdício de tempo.
  4. As ferramentas de construção Java são complexas (maven & ant)
  5. Java não possui sistemas de módulos fáceis de usar (OSGI é muito complexo)
  6. É difícil configurar o IDE Java, como o Eclipse, apesar de muito poderoso, com recursos surpreendentes, para um desenvolvimento eficaz da Web sem muita experiência.
  7. Se você estiver usando algo diferente de Tomcat ou Jetty como servidor, ficará frustrado com os longos tempos de inicialização do WebSphere / WebLogic / JBOSS
  8. Java EE resolve problemas que muitas pessoas não têm, como transações distribuídas

Um novo desenvolvedor que ingressar no desenvolvimento profissional considerará o Java uma Ordem de Magnitude mais difícil do que rails, python ou php para seguir adiante, para que eles sigam o que é fácil de aprender.

Tendo dito tudo isso, tomei a decisão de usar Java para minha inicialização, porque um ambiente de desenvolvimento Java configurado corretamente é muito produtivo para trabalhar. Por configuração adequada, quero dizer.

  1. Menos de 10 segundos de tempo de inicialização
  2. Espaço de trabalho eclipse configurado corretamente, com todas as estruturas agrupadas e configuradas
  3. Boa seleção de bibliotecas (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... etc)
  4. Máquinas de desenvolvimento rápidas com SSDs
  5. Assinatura Orielly Safari

8
Sejamos claros. A linguagem Java, não é difícil de aprender. São todas as camadas de lixo criadas para trabalhar com Java para compensar suas deficiências (verbosidade, protegendo você de você e de seus colegas de equipe por ser inflexível como todo getout, a quantidade absurda de bibliotecas em que se baseia, etc.). aprender.
quer

2
@ErikReppen Very true. Estou tendo que trabalhar em um projeto Java, mas tenho experiência em .Net. A linguagem e a sintaxe são fáceis como qualquer coisa que eu tenha entendido. É a verbosidade que realmente está me deixando louco. O que eu costumava fazer em 1 linha agora leva de 5 a 10 e (geralmente) uma edição de arquivo de configuração XML. Sem mencionar que, sem gastar horas e horas lendo, escolher a estrutura "certa" para um trabalho é um pesadelo - e isso é antes de você descobrir que seu cenário é considerado um caso extremo, não é suportado e se você não gosta reescreva. Eu quero gastar meu tempo resolvendo os grandes problemas #
Basic

"Java é mais complexo" - alguém pode se lembrar das ordens de parâmetro para PHP strposou in_array? E a interface XML DOM do PHP é ridícula (converter atributos em strings para recuperá-los?). O OSGi é absolutamente brilhante e independente do idioma.
Jevon

@ jevon: Os documentos do PHP são muito bons e meu IDE está ansioso para me lembrar de qualquer maneira. Além disso, SimpleXML.
DanMan 12/12

12

Cerca de cinco anos atrás, eu e um colega recebemos uma tarefa de programação para algum projeto interno. Uma tarefa bastante simples que exigia a análise de comandos.

Eu criei a coisa toda em cerca de 80 linhas de código java e meu colega levou uma semana, cerca de 20 classes java e muito mais linhas de código java para fazer o mesmo. Escusado será dizer que seu código foi escolhido.

Isso me fez pensar. Em todos os lugares, a complexidade foi apreciada. (Eu estava trabalhando em uma das maiores empresas de produtos de software.) Java era a ferramenta de escolha e os padrões de design eram a maneira de codificar.

Agora, é a mentalidade ou apenas a arrogância que rejeita a simplicidade. Bem, eu sempre pensei que o bom senso deveria prevalecer. Seja uma empresa ou um aplicativo da web simples, os casos de uso básicos são os mesmos. Deve ser correto e verificável.

Eu não uso mais o java por várias razões. Mas um dos fatores - complexidade, é a mentalidade predominante em uma tonelada de desenvolvedores java quando se trata de desenvolver software.

Quanto ao dimensionamento de linguagens dinâmicas, a JVM é o resultado de décadas de pesquisa. Acontece o mesmo com Ruby, etc.

Scala é uma língua que eu acho extremamente inteligente e prática. Toque! O Scala é tão excelente para o desenvolvimento de aplicativos Web / Corporativos quanto qualquer outro disponível no mercado.

Quanto ao Ruby e Rails ser a novidade para as startups, é extremamente difícil contratar um desenvolvedor sólido do Rails. Na verdade, é um impedimento para qualquer start-up, enquanto a infinidade de desenvolvedores java deve fazer mais sentido para os negócios.


Eu não sou um fã de java, mas essa "complexidade" a que você se refere pode muito bem ter sido abstração. A abstração é muito útil tanto para teste quanto para manutenção (quando usada com moderação). É difícil dizer com certeza sem ser capaz de comparar o código
Básico

11

Em uma entrevista recente com Joseph Snarr, líder técnico do google plus, explicou como o aplicativo usa Java Servlets para back-end e JavaScript no front-end.

Portanto, para responder à sua pergunta, o Java ainda é usado para o desenvolvimento da Web muito moderno. Apenas não para as start-ups que têm recebido tanta imprensa recentemente.

Eu acho que a razão pela qual muitas empresas iniciantes estão usando outras tecnologias é porque elas são mais sexy e têm um impulso de código aberto mais divulgado por trás delas.


4
As empresas iniciantes usam outras tecnologias porque desejam fazê-lo agora. Mais tarde não. E foram-lo de ser feito agora por uns 3 pessoas, e não 30.
Erik Reppen

Citar uma pessoa pode apenas fornecer seus pontos de vista e suas escolhas, mas não confirma que tudo o que ela escolheu é / foi a decisão certa.
DivKis01

9

Como você mencionou desenvolvimento web e Java, muitas pessoas tendem a esquecer que, no início, o uso de Java Applets em um navegador da web não teve um bom desempenho, não apenas isso, mas a "caixa de areia" para os applets não estava totalmente desenvolvida e havia problemas de segurança com os Java Applets capazes de executar no navegador e acessar os dados da máquina local (também conhecido como problema de segurança do lado do cliente). Claro que o Java era sólido nos aplicativos back-end e autônomos, mas acho que associar a linguagem a Java aos applets Java (executados no navegador) juntos meio que estragou algumas percepções sobre o Java como um componente de desenvolvimento web. Eu acho que eles nunca se recuperaram disso.


9
Absolutamente não! Na verdade, Java é uma linguagem dominante no mundo do lado do servidor. Applets extintos talvez dez anos atrás.
Quíron

5
O Flash fez o que os Applets tentaram ser. Inicialização rápida, download rápido, pouca pegada de memória.

4
Conheço muitas pessoas que nem conseguem distinguir entre Java e Javascript. Mesmo que eles sejam completamente independentes. Isso é outra coisa que dá ao Java um nome ruim.
Kibbee

5
@Kibbee ... ou dá Javascript um mau nome :)
Matthew Schinckel

9

A pergunta deve ser "Por que o Java não é usado por startups ou para pequenos projetos?". Java certamente usado para "aplicativos modernos da Web". No Google, o Java é usado no back-end para muitos serviços e o JS ou GWT compilado no fechamento é usado no front-end. A questão é de velocidade versus escala. As startups precisam obter o produto viável mínimo. Geralmente são equipes pequenas de 1 a 3 engenheiros e valorizam a velocidade da iteração sobre o desempenho ou a manutenção. A execução de problemas de escalabilidade ou de manutenção de código de código de equipe é um problema "que você gostaria de ter", ou seja, quando chegar a esse estágio, é um sinal de que sua implementação inicial o ajudou a superar o problema inicial de obter clientes ou investimento. Você pode reescrever o aplicativo nesse ponto.

Uma empresa como o Google pode se dar ao luxo de construir itens para escala inicial, mesmo que eles estejam perdendo tempo implementando a escala para algo que pode não ter usuários, porque eles podem absorver a perda.

Pelo menos, é minha opinião, que muitas empresas "descoladas", "descoladas" e "modernas" constroem aplicativos pequenos com equipes pequenas, onde a velocidade e a simplicidade da iteração são os maiores requisitos.


1
Onde está sua fonte afirmando que as startups não usam Java? Faça backup de sua suposição com alguns fatos.
20512 Walter Walter

7

Os aplicativos web tradicionais em Java, embora bem estruturados, estão muito longe de serem "rapidamente desenvolvidos". Embora eu tenha escrito apenas um aplicativo Web completo (Java / Tomcat / Struts), ele era extremamente exigente, demorava mais que o esperado para depuração e geralmente era doloroso ao implementar a camada de lógica de negócios. Na defesa potencial de Java, foi o único aplicativo da web que eu escrevi em Java (embora eu esteja acostumado a programar aplicativos em nível de sistema em Java) e acredito que poderia escrever outro aplicativo da Web um pouco mais rápido na segunda vez.

Dito isto, também escrevi aplicativos em PHP e C #, e eles funcionam melhor e são muito mais tolerantes que Java. Mais do que isso, o Ruby on Rails foi escrito especificamente para o rápido desenvolvimento de aplicativos, que, como Robbie disse, permitem fácil acesso CRUD aos bancos de dados. O problema é que a maioria dos sites que você desenvolverá por conta própria não precisa do nível de personalização que o Java oferece (e exige que você execute). Além disso, todo objeto de conexão com o banco de dados deve ser escrito à mão e não é tão fácil de modelizar. Pode haver uma estrutura melhor, especialmente uma que aproveite os novos recursos de suporte à linguagem dinâmica do Java 7 , mas ainda não fiz a pesquisa.


3
Você deve dar uma olhada no Play Framework, que é um framework web Java que o torna produtivo com Java e é inspirado no Ruby on Rails.
Jonas

2
@Jonas, considere escrever algumas boas postagens de blog explicando tudo isso de forma concisa.

@Jonas o que Thorbjorn disse! Eu daria uma leitura completa. :)
Brian

@ Thorbjørn: Eu não tenho um blog. Em resumo: com o Play Framework, você apenas salva seu código-fonte Java e atualiza o navegador da web. O código é compilado automaticamente no lado do servidor usando o compilador Eclipse. O JPA é usado para acesso ao banco de dados. Aqui está um artigo sobre isso Play! Usabilidade do framework
Jonas

2
@ Thorbjørn & Brian: Veja o vídeo na primeira página do site do framework de brincadeiras, ele explica muito bem, eu diria.
Bjarke Freund-Hansen

7

Resposta simples: curva de aprendizado para basear a produtividade.

Sistemas baseados em frameworks como o RoR tendem a colocar a "mágica" na linguagem / sintaxe. É muito fácil aprimorar sua sintaxe básica de RoR e instalar um aplicativo.

O Java foi a primeira linguagem e as ferramentas e estruturas apareceram mais tarde. Então você precisa aprender Java primeiro e depois aprender Spring, Grails, ou seu super IDE, ou qualquer outra coisa. Exemplo favorito de Ruby, ele não requer setters e getters. O fato é que os Java IDEs também se livraram da codificação manual ... mas ainda está na sua fonte. O benefício dessa abordagem é que, abaixo da estrutura, existe uma linguagem consistente com a qual todos os desenvolvedores Java podem trabalhar.

Esse benefício é duvidoso para pequenas startups onde o tempo é essencial. Geralmente, eles estão fazendo muito pouco que não poderiam fazer com uma estrutura pronta para uso. Para que eles possam pegar o sistema RAD de sua escolha e ter um aplicativo ativo no dia seguinte.

Mas se você olhar para o Facebook e o Twitter, à medida que se expandem, descobrem coisas que não podem ser tratadas por estruturas prontas para uso e, portanto, precisam usar tecnologias de nível inferior.

Essa guerra santa que os desenvolvedores de estruturas têm de que podem fazer qualquer coisa mais rapidamente é falsa, eles podem fazer muito do que precisam mais simples e com menos curva de aprendizado. E para muitas coisas, isso é "bom o suficiente". Use o que é certo para o problema.


6

Depende de como você define "desenvolvimento moderno de aplicativos da web". Se você está falando de sites de inicialização e retorno rápido, precisará considerar idiomas e estruturas projetadas para esse fim. Se você está procurando um desenvolvimento da Web estável, escalável e de nível corporativo, procura por linguagens e estruturas que suportem esses ideais. No meu livro, esses são dois objetivos muito diferentes. RoR, Groovy etc. são bons para o primeiro e Java é mais apropriado, em geral, para o último.


6

O Google App Engine suporta Java, para que você possa gravar todo o seu aplicativo Web em Java, usando o Eclipse como IDE e interface de implantação, com uma API do Google razoavelmente documentada - então eu não diria que ele não é usado ou não é utilizável.


5

Na inicialização em que trabalho, optamos por usar Java e JRuby para implementar nossa API porque eles se complementam.

Para infraestrutura, distribuição de processos e comunicações, aproveitamos a robustez do Java, enquanto que para a implementação real dos pontos de extremidade da API escolhemos o JRuby, pois todas as chamadas envolvem JSON e faz muito mais sentido manipular uma representação de tipo fraco (JSON) usando linguagem de tipo (Ruby).

Se vemos que uma de nossas classes JRuby está se tornando um gargalo, apenas a reimplantamos diretamente em Java (basicamente uma tradução linha por linha). Isso pode acontecer com frequência em classes que precisam fazer muita computação e, nesse contexto, o JRuby se comporta como uma linguagem de prototipagem.

Implementamos nosso próprio carregador de classes dinâmico, o que significa que podemos alterar as classes Java em tempo real sem reiniciar o servidor, e ficamos muito felizes com a escolha. Portanto, o argumento "você precisa compilar e reiniciar cada vez" não tem muito peso.

A chave é evitar todo o material do Java EE - é enorme, pesado e anti-ágil.


5

Ainda tenho a sensação de que o Java está sendo usado em muito desenvolvimento web. Mas geralmente é no tipo de desenvolvimento mais orientado para os negócios e não para grandes empresas de tecnologia, que geralmente são menos abertas do que as novas startups que precisam obter alguma tração e promover seu próprio trabalho, além de mais interessadas em tecnologia . Portanto, mesmo que seja usado em muitos sites corporativos, você provavelmente nunca saberá, pois eles não se importarão em falar publicamente sobre sua pilha de tecnologias.

Dito isto, comentando todas as perguntas originais ...

É uma fraqueza da linguagem? Comparado com outras linguagens como Python ou Ruby, o Java é detalhado e tende a precisar de mais código para fazer coisas semelhantes. Mas não são apenas os recursos da linguagem, também a comunidade que a cerca e o tipo de desenvolvedor que usa essas ferramentas. Portanto, a maioria dos módulos e ferramentas em Python, Ruby, PHP etc. são de código aberto e são mais fáceis de encontrar do que no mundo Java, apenas porque este é mais focado em fornecer (e cobrar) serviços. Por exemplo, a comunidade Ruby é realmente realmente orientada para o desenvolvimento da Web; portanto, todo desenvolvedor capaz de usar o Ruby saberá sobre os problemas e as ferramentas disponíveis para um projeto da Web. Isso não é necessariamente verdade para os desenvolvedores de Java, que poderiam estar trabalhando em outros tipos de sistemas, como sistemas de relatórios. Obviamente, qualquer bom desenvolvedor o alcançará,

É um estereótipo injusto de Java porque existe há tanto tempo (tem sido injustamente associado a suas tecnologias mais antigas e não recebe reconhecimento por seus recursos "modernos")? Java não é realmente tão antigo e, sendo justo, melhorou bastante. Era a plataforma legal e relevante cerca de 10 anos atrás. Mas desde então, surgiram novas plataformas com novos problemas em mente, como o Ruby on Rails. O setor principal do Java tem sido principalmente o mundo corporativo, com problemas diferentes, de modo que as pessoas que buscam novos projetos externos buscam ferramentas diferentes. Além disso, a principal vantagem do design Java, sendo multiplataforma, não é tão relevante hoje como era antes.

O estereótipo negativo dos desenvolvedores Java é muito forte? (Java simplesmente não é mais "legal"). Isso também tem alguma verdade. Java ainda é a linguagem para aprender "conseguir um emprego". Portanto, se você não se importa, mas quer apenas aprender algo para ganhar dinheiro, vai acabar aprendendo um pouco de Java e nunca mais se importando em melhorar. Novamente, é muito sobre percepção e visibilidade. Existem muitos desenvolvedores Java excelentes que estão codificando sem compartilhar seus conhecimentos, enquanto muitos desenvolvedores de PHP, talvez não tão bons, estão escrevendo blogs e colaborando em código aberto. Isso leva a pensar que os desenvolvedores de PHP são melhores que os de Java, pois você tem um certo feedback sobre eles.

Os aplicativos escritos em outros idiomas são realmente mais rápidos de construir, mais fáceis de manter e têm melhor desempenho? Eu diria que eles são mais rápidos de construir. Os princípios de linguagens como PHP, Python ou Ruby os tornam bastante bons para gerar software que pode mudar constantemente. Por exemplo, a digitação dinâmica facilita a alteração de uma interface. Em Java, é importante ter uma interface bem definida, o que leva a interfaces mais estáveis ​​(e difíceis de mudar). Isso é muito importante em uma nova inicialização, cujo principal problema é obter um produto antes que você fique sem dinheiro. Sobre o desempenho, é muito fácil entender mal as necessidades e tentar usar truques de mágica para obter o desempenho necessário, como "Java é mais rápido que Ruby. Período" ou "MongoDB é escala na web".

O Java é usado apenas por grandes empresas que são lentas demais para se adaptar a um novo idioma? Definitivamente, já ter uma equipe de desenvolvedores Java existente na empresa, facilita o uso da mesma linguagem para novos projetos. Isso é percebido como "a aposta segura", especialmente se o núcleo da empresa não é a tecnologia. Mas, de qualquer forma, o Java não é SOMENTE usado em grandes empresas, ainda existem muitas startups que usam Java para coisas legais (por exemplo, FightMyMonster ou Swrve usa extensivamente o Java), mas eu diria que a tendência geral na inicialização cena é usar outros idiomas. Essa também é uma maneira de atrair as pessoas, pois a maioria das pessoas será mais empolgante ao trabalhar com Ruby, Python ou PHP, percebida como mais "amigável" e "divertida".


5

Isso é verdade, mas não por causa do Java e de seu ecossistema. É por causa das pessoas que, ao usar Java, tendem a criar grandes confusões e abominações pesadas.

Existem estruturas suficientes (spring-mvc, grails, play, etc.) que permitem criar coisas rapidamente. O fato de as pessoas superengenharem seus sistemas é um problema que vem com o aumento do conhecimento que as pessoas obtêm quando trabalham com o ecossistema Java - você sabe muito mais e as tem disponíveis (existem ferramentas para tudo) e "tudo parece uma unha".

Se você é "hacky", pode fazer o mesmo com Java e com outras linguagens, e aqui está um estudo indicando que:

Estudo de 49 programadores: o sistema de tipo estático não teve efeito no tempo de desenvolvimento ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

Para adicionar um pouco ao que já foi dito, acho que muito disso tem a ver com a rapidez com que você pode ir do nada (literalmente) para um aplicativo da web funcional.

Se tudo o que você tem hoje é uma idéia, ir de onde você está agora para escrever seu aplicativo Web é quase tão fácil quanto cair, se você escolhe um provedor de hospedagem ou sua própria infraestrutura (como uma imagem do EC2). Escolher Java, na minha experiência, geralmente é mais trabalhoso e muitas vezes custa mais.

Além disso, se você optar pelo Linux e PHP / Python / Ruby, as ferramentas e a plataforma serão complementares e projetadas para oferecer suporte umas às outras. Com Java, às vezes parece que os dois mundos (SO e Java) às vezes parecem não estar trabalhando em harmonia um com o outro.


A curva de aprendizado é absolutamente vertical. Você passará as primeiras SEMANAS apenas descobrindo quais são os acrônimos, como os padrões se relacionam com suas implementações, como tudo está em camadas, etc. Em seguida, as próximas semanas relatando erros neles ...
Craig Ringer

3

Quem disse que não é?

Spring MVC + Spring Data JPA ou Mongo + Thymeleaf para modelagem + coffee-maven-plugin para transpilar Coffee to JS e pronto.


Eu concordo totalmente com você +1
Arshad Ali 22/06

3

Muitos podem associar o desenvolvimento de aplicativos Java e da Web aos horrores do J2EE que, junto com os monstruosos servidores de aplicativos J2EE de grandes corporações azuis e vermelhas, equivaleram a semanas de trabalho antes que o "Hello World" básico estivesse online.

É verdade que as especificações e implementações recentes do JEE são mais leves, mas eu ainda pensaria três vezes antes de sugerir algo assim para um projeto de desenvolvimento rápido de ciclo curto.

Essa ainda é a maneira baseada em padrões de desenvolver aplicativos da Web em Java. As alternativas, muitas das quais mencionadas em outras respostas, transmitem uma imagem mais confusa e confusa, com muitas opções a serem feitas.

Outros idiomas retratam uma solução turnkey única em vez dessa multidão. Isso faz com que essa escolha pareça mais adequada quando você tem peixes mais importantes para fritar.


O Java EE 6 pode ser "leve" (exceto o JSF2), mas ainda é uma curva de aprendizado incrivelmente grande, uma pilha gigante de especificações complicadas e um sistema em camadas imensamente complicado. Talvez leve, mas com certeza não é simples.
Craig Ringer

2

Eu acho que é usado muito mais do que você imagina - o uso está logo abaixo da linha de flutuação. Existem muitos, muitos pacotes de ruby ​​on rails em torno de serviços java grossos e sofisticados. Especialmente quando você começa a lidar com qualquer coisa que se aproxime de big data. . .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.