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?
fonte
Respostas:
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.
fonte
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.
fonte
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.
fonte
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:
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?
fonte
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.
fonte
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".
fonte
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. :)
fonte
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.
fonte
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.
fonte
Syntax sugar
Java 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.IRepository<T>
com umIQueryable<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.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
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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".
fonte
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.
fonte
strpos
ouin_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.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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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".
fonte
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
fonte
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.
fonte
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.
fonte
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.
fonte
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. . .
fonte