ti-enxame.com

Por que o Java é usado para o desenvolvimento moderno de aplicativos da web?

Como programador profissional Java, estou tentando entender - por que o ódio por Java para aplicativos da web modernos?

Percebi uma tendência de que, nas startups modernas da Web, uma porcentagem relativamente pequena delas parece estar usando Java (comparado à popularidade geral do Java)). isso, normalmente recebi uma resposta como "Eu odeio Java com paixão." Mas ninguém realmente parece capaz de dar uma resposta definitiva.

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

Como resultado, passei algum 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 de Java é muito forte? (Java 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?

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

393
Cliff

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 JRebel permite ver alterações de código instantaneamente.

174
Chiron

Na minha experiência, 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 uma maneira muito mais simples.

Eu normalmente vi Java se sair muito melhor em aplicativos Web muito maiores (pense em bancos e seguradoras) que se comunicam com vários outros sistemas (como back-end e bancos de dados de mainframe e bancos de dados serviços em segundo plano sistemas de processamento em lote ... tudo no mesmo aplicativo).

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

136
FrustratedWithFormsDesigner

Programei aplicativos da web 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 do 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. Eu criei um monte de 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 Java em si, você teve que incluir uma tonelada de bibliotecas de terceiros de lugares como o 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 compartilhado gaste seu valioso RAM executando um site Java, quando eles poderiam rodar 5 sites php no mesmo lugar. Isso significa que há menos provedores oferecendo hospedagem Java, o que, por sua vez, significa custos mais altos para executar seu site.

Tempo de desenvolvimento:

Ao desenvolver 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, então 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 com o 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 realmente 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 demorar um minuto ou mais, com uma máquina com uma tonelada de RAM. Os criadores do IntelliJ lançaram um editor python chamado pycharm, eu o comprei quando ele saiu pela primeira vez 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 do IDE para Java mais porque se eu estragar alguma coisa, leva mais tempo para recompilar e reimplementar, o que me atrasa.

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 templates 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 Python, meus dois favoritos são modelos Django e o Jinja2, eles têm tudo o que eu poderia precisar em um mecanismo de modelagem e são realmente fáceis de usar.

135
Ken Cochrane

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

A empresa deseja estável, confiável e escalável: Java e .NET se ajustam a essa conta (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 analisaram 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 se envolveram com implementações ruins e agora são tímidas.) Elas vêem o brilho e a figura, se todas as crianças legais estão usando, por que não eu?

94
Adrian J. Moreno

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

73
sebastiangeiger

Java absolutamente é usado para o desenvolvimento moderno de aplicativos da web. Particularmente quando você chega ao final ligeiramente 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á realizado em uma das novas linguagens JVM em vez de usar Java diretamente, com Java simplesmente fornecendo o backbone em termos de bibliotecas subjacentes e infraestrutura de back-end. Há muito desenvolvimento da Web acontecendo no Groovy ( Grails) ), Scala ( Lift e Play ), JRuby ( JRuby on Rails ) e Clojure ( Noir , Ring/Enlive + muitas estruturas personalizadas) para citar apenas algumas.

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

70
mikera

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, 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 construção do desenvolvimento da web 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 de tipo estaticamente (como Java ou mesmo 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 os 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 os trechos de código desenvolvidos independentemente, idiomas como Java ainda são os preferidos. 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 no 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 (Rails) têm uma boa reputação de segurança, nenhuma supera o Java.

Resumindo, a maioria dos aplicativos da web é tecnicamente simples. Para simplificar, 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, Java será difícil de vencer.

-

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 Ruby).

BTW - Acho que a ascensão de PHP é verdadeiramente desconcertante. PHP como idioma é 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 quem já teve que apoiar ou substituir um dos bilhões de VB aplicativos que foram escritos por "programadores" no mundo corporativo/MFG, você provavelmente está balançando a cabeça e planejando sua aposentadoria. :)

41
user56365

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

Eu posso criar um CRUD app usando Rails (não apenas 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. Posso inserir o código por exemplo, Padrino ou Rails (estruturas da web em Ruby) com muito mais facilidade do que usar o código para dizer o Spring Roo. Isso pode ser devido ao fato de eu conhecer Ruby muito melhor do que Java.

38
Robbie

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 mudanças que seu aplicativo exige.

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

Também Java é uma linguagem muito difícil de codificar. Ele adquiriu a capacidade revolucionária de usar string em uma instrução switch apenas ontem. E o javascript é uma linguagem muito hacker, portanto, depois de desenvolver seu frontend, você sente muita restrição você retorna ao Java.

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

24
Daniel Iankov

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 é muito complicada para a maioria das aplicações. Este não é o caso de Ruby, Django e outras coisas. Eles 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 pedaço de código em poucas horas.
  2. Estruturas de teste fracas. Embora as estruturas de teste sejam muito semelhantes em Java e Ruby, Ruby avança um passo à frente, tornando as coisas facilmente disponíveis para testes. 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 Oops. Mesmo que os desenvolvedores tenham adotado silenciosamente o domínio Oops. 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 dos idiomas, mas vi que os desenvolvedores Java prestam muita atenção ao que uma classe faz. São os desenvolvedores Java que geralmente criam um código com centenas de classes. Isso é bom de muitas perspectivas, mas não os desenvolvedores do Java odeiam isso.

Portanto, tudo Java impõe uma curva acentuada no início do projeto, o que significa muito dinheiro para ser comprometido. Acrescente 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 coisas legais. Não há novos livros legais. Java parece que vai cair porque foi usado para resolver muitos problemas diferentes alguns anos atrás.

18
arunmur

As estruturas para fazer Java da Web tem um pouco de curva de aprendizado, muitas vezes são um exagero para o que você precisa, e grande parte do indireto necessário para fazer as coisas funcionarem é apenas ... doloroso ...trabalhar com.

Eu trabalhava para uma empresa que desenvolvia Spring/Java e achei a estrutura complicada na melhor das hipóteses. Eu 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 achava 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 possui 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 Ruby programação na web e atesta que coisas difíceis de fazer Java requer muito menos código e complexidade para obter no Ruby. Certamente há uma curva de aprendizado para as diferentes regras de sintaxe e linguagem, mas para protótipos de aplicativos, ela possui vantagens em termos de quantidade de código necessária Como outros já mencionaram, a escalabilidade também é um problema a ser considerado, e um dos motivos pelos quais aplicativos mais antigos não são vistos com tanta frequência em idiomas mais modernos.

14
Jessica Brown

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 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. Sei que o cenário está mudando por 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" (por incrível que pareça, vi desenvolvedores com currículos dizendo 7 anos experiência que ainda mostra o conhecimento de um programador de seis semanas.) Usar 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 a Ruby ou Scala fora de um requisito de emprego. Este é o maior indicador para mim de 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.

14
Michael Brown

Java é muito complicado. Eu trabalho muito 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 Java aplicativos 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 está prontamente disponível.

Também acho que você tem pelo menos PHP muitos desenvolvedores que, como eu, começaram 14/15 anos atrás com HTML estático. À medida que as coisas progrediam, 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, muitos PHP desenvolvedores que conheço veem Java como um gorila gigante excessivamente complexo de 800 libras, quase como sair do caminhão de 18 rodas para dirigir até a mercearia 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 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. Eu acho que a maioria das pessoas hoje em dia acha um festival de soneca.

14
Cyrus

Minha equipe e eu estamos atualmente desenvolvendo um aplicativo Web greenfield em Java 6 + Stripes. No ano passado, eu também trabalhei em outro aplicativo da web greenfield usando o Java 6 + Stapler (uma estrutura da Web um tanto desconhecida, desenvolvida por Kohsuke Kawaguchi, da fama de Hudson/Jenkins).

Java é absolutamente usado para o desenvolvimento web moderno. Certamente, ele não tem o apelo "sexy" de 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 modernos servidores de aplicativos Java 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 linguagem dinâmica VM que eu conheça.

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

12
Daniel Pryden
  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. Java IDE como o Eclipse, embora muito poderoso com recursos surpreendentes, é difícil de configurar para um desenvolvimento web eficaz 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 encontrará Java uma Ordem de Magnitude mais difícil que o Rails, python ou php para seguir adiante), assim eles seguem o que é fácil de aprender.

Tendo dito tudo isso, tomei a decisão de usar Java para minha Inicialização porque um configurado corretamente Java Ambiente de Desenvolvimento) é muito produtivo para trabalhar. Por configurado corretamente, quero dizer.

  1. Menos de 10 segundos de tempo de inicialização
  2. Espaço de trabalho do 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
12
ams

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 achei 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 Java por vários motivos. 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. O mesmo acontece com o Ruby etc.

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

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

12
Ar Wen

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 startups que têm recebido tanta imprensa recentemente.

Eu acho que a razão de muitas empresas iniciantes estarem usando outras tecnologias é porque elas são mais sexy e têm um código aberto mais divulgado.

11
Greg Guida

A pergunta deve ser "Por que não é usado Java usado por startups ou para pequenos projetos?". Java certamente usado para "aplicativos modernos da Web".) , Java é usado no back-end para muitos serviços e JS ou GWT compilado de fechamento é usado para o front-end. O problema é 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 capacidade de manutenção. chegar a esse estágio, é um sinal de que sua implementação inicial o ajudou a superar a expectativa inicial de obter clientes ou investimentos. Você pode reescrever o aplicativo nesse momento.

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.

9
cromwellian

Como você mencionou desenvolvimento web e Java, muitas pessoas tendem a esquecer que, no início, os Java Applets em um navegador da web não tiveram um bom desempenho, não apenas isso, mas a "caixa de areia" para os applets não era totalmente desenvolvido e houve problemas de segurança com os applets Java sendo 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 [Java era sólido no back-end e em aplicativos independentes, mas acho que associar Java a linguagem com Java applets (executados no navegador) juntos meio estragados algumas percepções sobre Java como um componente de desenvolvimento web. Eu acho que eles nunca se recuperaram disso.

9
LocoTx

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 IDEs Java também se livraram da codificação manual ... mas ela 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.

7
Lucas McGregor

Os aplicativos da 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, era o único aplicativo da Web que eu havia escrito 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 que o 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, Ruby no 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 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 novos recursos de suporte à linguagem dinâmica do Java 7 , mas ainda não fiz a pesquisa.

7
Brian

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

6
Paul

Depende de como você define "desenvolvimento moderno de aplicativos da web". Se você estiver 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
cdkMoose

Na inicialização em que trabalho, optamos por usar o Java e o 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 frouxo (JSON) usando um método vagamente 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 todas as coisas de Java EE - é enorme, pesado e anti-ágil.

5
David Semeria

Eu ainda tenho a sensação de que o Java está sendo usado em muitos desenvolvimentos da Web. Mas geralmente é nos desenvolvimentos mais orientados para negócios, não principalmente para grandes empresas de tecnologia, que normalmente, 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 não se importará em contar 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, Java é detalhado e tende a precisar de mais código para fazer coisas semelhantes, mas não são apenas os recursos da linguagem, mas 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 está mais focado em fornecer (e cobrar)) serviços. Por exemplo, o = Ruby é realmente realmente orientada para o desenvolvimento da Web, portanto, todo desenvolvedor que é capaz de usar Ruby saberá sobre os problemas e as ferramentas disponíveis para um projeto da Web. Isso não é necessariamente verdade para os desenvolvedores Java, que poderiam estar trabalhando em outros tipos de sistemas, como sistemas de relatórios. É claro que qualquer bom desenvolvedor irá recuperar o atraso, mas a percepção é de que a média = Java desenvolvedor está menos preocupado com l ganhando novas tecnologias e novos idiomas.

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

O estereótipo negativo de Java é muito forte? (Java não é mais "legal") Isso também tem alguma verdade nele. Java ainda é a linguagem para aprender "conseguir um emprego". Então, se você não se importa, mas quer apenas aprender algo para ganhar dinheiro, você finalize um pouco a aprendizagem Java e não se preocupe mais em melhorar. Novamente, é muito sobre percepção e visibilidade. Há toneladas de ótimas Java que são codificação sem compartilhar seu conhecimento, enquanto há muitos desenvolvedores PHP, talvez não tão bons) que estão escrevendo blogs e colaborando em código aberto. Isso leva a pensar que o PHP são melhores que os 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 um desempenho melhor? Eu diria que eles são mais rápidos de construir. Os princípios de linguagens como PHP, Python ou Ruby) os tornam muito bons para gerar software que pode mudar constantemente. Por exemplo, a digitação dinâmica facilita a alteração de uma interface. Em Java ter uma interface bem definida é importante, 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 você fica sem dinheiro. Sobre o desempenho, é muito 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". A realidade é mais difícil do que.

É Java usado apenas por grandes empresas que são lentas demais para se adaptar a um novo idioma? Definitivamente, já tendo um A equipe existente de desenvolvedores Java 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 é tecnologia Mas, enfim, Java não é usado SOMENTE em grandes empresas, ainda existem muitas startups que usam Java para coisas legais (por exemplo, - FightMyMonster ou Swrve usa Java extensivamente), mas eu diria que a tendência geral no cenário de inicialização é usar outras linguagens. também é uma maneira de atrair pessoas, pois a maioria das pessoas será mais empolgante ao trabalhar com Ruby, Python ou PHP, percebida como linguagens mais "amigáveis" e "divertidas") do que trabalhar com Java.

5
Khelben

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

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 você os tem disponíveis (existem ferramentas para tudo) e "tudo parece uma unha".

Se você é "hacky", pode fazer o mesmo com Java como em outros idiomas, 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

5
Bozho

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ê usa Linux e PHP/Python/Ruby, as ferramentas e a plataforma sã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.

3
Matt Ryan

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.

3
Martin Spa

Muitos podem associar Java e desenvolvimento de aplicativos da Web aos horrores do J2EE, que, junto com monstruosos servidores de aplicativos J2EE de grandes empresas azuis e vermelhas, equivaleram a semanas de trabalho antes que o básico "Hello World" 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.

3
Asgeir S. Nilsen

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

2
Wyatt Barnett

Java era legal, Java é legal e Java será legal no futuro. Estou desenvolvendo um aplicativo da Web. Usando Java.

O principal problema com Java é que precisa de uma equipe de tamanho médio de 7 a 10 pessoas para ver os resultados da implementação. Os desenvolvedores do back-end devem ter o conhecimento da arquitetura de aplicativos, do ORM ao framework de aplicativos para Muitas opções para os desenvolvedores na tabela, e isso levanta as questões: é uma boa idéia usar um ORM ou não? Qual estrutura do ORM usar? Qual estrutura de aplicativo usar? Como implementar o front end? isso faz com que os desenvolvedores se esforcem e faça com que as combinações sejam infinitas para o usuário final escolher essa tecnologia com aquela estrutura com a qual os desenvolvedores não estão familiarizados. O mesmo ocorre com os IDE; muitas opções, muitas é gasto tempo na instalação, configuração e teste se esta versão de um plug-in funciona com esta versão do IDE e assim por diante. A última coisa é hospedar; muitos desenvolveram Java não são publicados porque não há hospedagem adequada para Java aplicativos da web, gett ingerir um VPS por US $ 80/mês não é uma opção para muitos desenvolvedores, e a maioria dos aplicativos precisa de mais de um VPS.

2
newphoenix

Estou usando muito Java para criar aplicativos da web. Portanto, quando se trata do idioma * itsel * f, encontro apenas um (mas grande) problema - a falta de suporte multilinha. Isso torna a impressão/modelagem em puro código Java muito ilegível.

Mas o verdadeiro problema é o falta de boas estruturas da web. Eu trabalhei com muitas soluções, e nenhuma delas eu poderia citar como boa ou até satisfatória.

A maioria deles é de fato programação XML. Em JSF você produz toneladas de XML e, se quiser alterar algum recurso geral, como reorganizar os rótulos na parte superior dos campos de texto, você terminará fazer a mesma mudança em vários lugares. Sim, você possui inclusões, mas compare-as com as inclusões do PHP ...

Além disso, o novo JSF inclui recursos "extras" que eram conhecidos pelos frameworks JavaScript anos antes ...

ZK é um pouco melhor porque permite criar os elementos da web no código Java, que facilita as modificações (se você usa OOP corretamente - herança etc.). Entretanto, esse código Java é executado no lado do servidor, o que é um grande problema de desempenho - cada clique será fazer com que um pacote seja enviado ao servidor.

Bem, GWT é a melhor estrutura da web com a qual trabalhei. Permite a programação de objetos no design web. Cada elemento da tela é representado pelo objeto Java, que oferece flexibilidade total, mas ... O tempo de compilação é muito longo e o Javascript gerado está longe de ser o ideal, simplesmente porque o GWT não é utilizando totalmente as possibilidades de JavaScript (sem suporte para a reflexão, pelo menos na versão que eu estava usando, e implementação fatal do HashMap).

Você pode usar modelos, como Velocity, mas como acima, eles são uma versão pobre das possibilidades de modelos fornecidas por linguagens como PHP.

Portanto, não é um ódio ao Java, mas a falta de suporte para escrever aplicativos da Web que se obterá ao usar PHP, Python etc ...

1
Danubian Sailor

O problema com Java é que essa linguagem é aprendida na escola, portanto é a linguagem mais conhecida pelos novos programadores. Portanto, se você quer se diferenciar da massa, precisa aprender um novo idioma, Java é o idioma de todos.

O segundo motivo é que, na escola ou nas grandes empresas, quando você deseja criar um aplicativo da Web, professores ou pessoas já existentes oferecem toneladas de estruturas Java para ajudá-lo a criar esse aplicativo mais rapidamente. Mas, de fato, dessa maneira, você constrói seu aplicativo da Web sem realmente entender a Web (HTTP, HTML, CSS, Javascript, etc ...). Essa tendência é menos visível em outras linguagens como RoR ou Python, os desenvolvedores que usam essas linguagens têm um melhor entendimento da web.

Portanto, os statups que desejam criar aplicativos da web modernos preferem usar o RoR, PHP ou Python para atrair bons desenvolvedores da web, aqueles que entendem a web e não apenas uma linguagem de programação.

1
Alexandre Vivien

Se por "moderno" você quer dizer popular (como conseguir a maior parte da cobertura da imprensa), a razão pela qual Java não é usada é muito simples - porque todos os "garotos legais" estão usando Ruby (ou Python, ou Clojure, ou Scala, ou o que for "legal" hoje em dia).

Há um significado mais profundo nisso: essas mesmas pessoas que usam Ruby ou Python para escrever seus aplicativos da web "modernos" geralmente são realmente grandes inovadores. Pessoas que gostam de resolver problemas irritantes de maneiras simples e eficazes, poupando tempo e energia cerebral. Alguns podem dizer que essas são qualidades de bons programadores.

Essas pessoas geralmente também criam a maioria dos meios de comunicação em torno de seus projetos, o que as grandes empresas raramente fazem. Seja criando muitos blogs de código aberto ou escrevendo, ou o que for.

Portanto, é fácil entender a atração gravitacional dessas pessoas para o mundo das linguagens dinâmicas, onde são oferecidas maneiras mais simples/menores/mais rápidas/mais enxutas de resolver problemas. Infelizmente, isso significa que as mesmas pessoas que foram ótimas desenvolvedores Java amadurecem e abandonam o vagão Java porque é irritante e difícil (para eles) usar e resolver esses mesmos problemas.

Se a criação de um aplicativo Web simples com o MVC framework X, for necessário escrever/editar apenas 100 linhas de código no Rails/Django, e ao contrário disso, serão necessários 10.000 linhas de código em Java para fazer a mesma coisa - é muito evidente por que isso pode parecer irritante.

Em relação à sua afirmação "Eu não vi nada crítico" ausente "do Java, impedindo-me de criar o mesmo aplicativo". A questão é - se você tivesse a mesma experiência em Rails/Django/tanto faz ... como esses dois aplicativos Java e não Java se comparam, medindo tempo e esforço e qualquer outro métricas que você pode criar.

1
Evgeny

Uma resposta interessante é dada por Dries Buytaert, que fundou o drupal. Embora seu doutorado fosse sobre Java, ele escolheu php para drupal, e não se arrependia de fazê-lo. Você pode lê-lo (e alguns de seus comentários) aqui: http://buytaert.net/why-php-and-not-Java

Teria sido muito difícil obter massa crítica se o Drupal fosse escrito em Java.

0
johanvdw