O que você escolheria para o seu projeto entre .NET e Java neste momento? [fechadas]

13

Você está apenas começando um novo projeto e tem essas duas tecnologias para escolher, Java e .NET. O projeto que você está trabalhando não envolve recursos que facilitariam a escolha entre as duas tecnologias (por exemplo, o .NET tem isso que eu preciso e o Java não) e as duas devem funcionar muito bem para você (embora você apenas precisa de um curso). Leve em consideração:

  • atuação
  • Ferramentas disponíveis (mesmo ferramentas de terceiros)
  • Compatibilidade entre plataformas
  • Bibliotecas (especialmente bibliotecas de terceiros)
  • Custo (a Oracle parece tentar gerar receita com Java)
  • Processo de desenvolvimento (mais fácil / rápido)

Lembre-se também de que o Linux não é sua plataforma principal, mas você também gostaria de portar seu projeto para Linux / MacOs. Definitivamente, você deve ter em mente os problemas que vêm girando em torno da comunidade Oracle e Java e as limitações do Mono e Java também. Seria muito apreciado se as pessoas com experiência em ambos pudessem fornecer uma visão geral e sua própria visão subjetiva sobre a qual escolheriam e por quê.


fonte
Não há informações suficientes sobre os requisitos para responder efetivamente a essa pergunta.
Vermelho-sujidade
3
Mono é uma dor (por exemplo, tempo esgotado). Mesmo um designer básico do WinForm não está lá.
Job
Na verdade, o MonoDevelop possui um designer de GUI para o GTK #, já que o WinForms ainda não é de código aberto.
Mahmoud Hossam
Sim, mas como está o Mono com bibliotecas de terceiros? Eles "simplesmente trabalham"? E (talvez o mais importante) os fornecedores fornecem suporte se você os usar com o Mono?
TMN

Respostas:

26

A decisão mais importante (editar: técnica) é:

  • Neste momento, você comprometerá 100% para usar o Windows como sua futura plataforma de implantação?

Se não, você deve ir com Java.


A conclusão do Mono é freqüentemente usada para dizer "Sim, o .NET é multiplataforma". Qual é a validade dessa reivindicação? foi que o Mono é apenas uma opção IFF que você desenvolve contra ele!

Você não pode esperar que aplicativos .NET funcionem imediatamente.


A @Basic disse que isso era mais um comentário do que uma resposta. Para ser mais preciso, considero uma questão ficar no topo da lista, porque talvez essa seja a decisão técnica mais importante que você precisa tomar ao lidar com o .NET. Como o Basic diz que ele testará o Mono, isso está fora do caminho, e eu consideraria o Java e o .NET igualmente bem adequados. Tenho muito pouca experiência com o .NET, mas um pouco em Java.

  • Desempenho - o Java funciona muito bem, mas ainda tem bastante tempo de inicialização. Isso ocorre porque uma JVM inicia do zero ao ser inicializada e o acesso aleatório do arquivo jar da biblioteca de tempo de execução é bastante lento quando é necessário ler o disco. Os Java 6 recentes têm um processo em segundo plano para tentar manter os arquivos jar da biblioteca de tempo de execução no cache do disco, para que o acesso seja rápido quando necessário.

  • Ferramentas disponíveis. Existem muitas ferramentas e há muito disponível como código-fonte aberto de alta qualidade. A IBM possui algumas ferramentas muito avançadas disponíveis, mas elas também exigem um pouco de dinheiro. Você pode dar uma olhada no MyEclipse, que ganha a vida reunindo as melhores partes do mundo Java e as torna acessíveis por um baixo custo, para ver o que está disponível. O Netbeans tem um editor de GUI muito bom. O JDeveloper possui um bom depurador Swing. O Sun 6 JDK possui o VisualVM, que é um bom gerador de perfil de entrada, que pode analisar programas já em execução (que é um recurso matador).

  • Compatibilidade entre plataformas. Muito bom, tendendo a excelente. A JVM é muito, muito confiável e previsível. Os problemas são exibidos apenas quando as diferenças do sistema operacional se infiltram nos separadores de arquivos, como a distinção entre maiúsculas e minúsculas no nome do arquivo e o comportamento do menu.

  • Bibliotecas. Existem muitos e muitos deles estão disponíveis e disponíveis gratuitamente, mas escritos principalmente em Java, pois é bastante difícil extrair o código escrito em linguagens não-JVM.

  • Custo. Java é basicamente disponível gratuitamente. O que a Oracle está indicando é que as ferramentas elétricas - provavelmente provenientes do JRocket - terão um custo. Observe também que o suporte estendido ("Java for Business") também custa um preço. Plataformas não-x86 são uma raça em extinção, mas a IBM tem muitas e fornece uma excelente implementação Java para elas. O preço faz parte do sistema operacional - provavelmente para uma melhor adoção.

  • Processo de desenvolvimento. É gasto muito tempo com Java pesquisando e escolhendo a tecnologia apropriada e aprendendo-a, mas, quando isso é feito, acho que existem muitas tecnologias que são bastante rápidas de desenvolver. A versão mais recente do Java EE permite a criação de páginas da Web muito poderosas usando Facelets, que podem ser recarregadas pelo menos tão rápido quanto as páginas PHP.

Eu acho que se você não está qualificado em nenhum Java ou .NET, você vai economizar tempo e dinheiro ao escolher a tecnologia que você e sua organização são os mais familiarizados.

Comunidade
fonte
14
Quem garante que o programa Java que você escreve no Windows será executado em qualquer outro lugar? É preciso apenas uma chamada JNI para quebrar essa garantia. O mesmo problema ocorre com a CLI - se você usar uma API de plataforma não cruzada, perderá a portabilidade. Portanto, a única pessoa que pode garantir a portabilidade é você mesmo - o programador, independentemente da estrutura que você está usando.
Mark H
3
@ Thorbjørn, você confiaria na Oracle no clima atual?
Radekg
12
+1 porque Thorbjørn disse que se você não está 100% comprometido com Windows que você deve ir com Java, não que você deve ir com Java. E eu concordo - sim, o Mono existe como um substituto, mas se seus planos atuais não estiverem comprometidos com o Windows, salve-se da dor e siga a tecnologia que se destina a ser executada em outras plataformas. E digo isso como desenvolvedor .NET e entusiasta do .NET.
Carson63000
4
Eu queria saber se existe alguma da "mono-existe-on-outro" -downvoters que realmente tentou fazê-lo ...
4
"O Java está basicamente disponível gratuitamente (...) as ferramentas elétricas terão um custo (...) o suporte estendido também tem um preço" . Exatamente o mesmo para o .NET, certo?
1113 Konamiman
19

OK, vamos tentar dividir isso:

Leve em consideração:

Ferramentas de desempenho disponíveis (mesmo ferramentas de terceiros)

As plataformas Java e .NET possuem muitas ferramentas de teste de bom desempenho disponíveis, eu sei que no espaço Java existem muitas ferramentas gratuitas de código aberto que são adequadas para a maioria dos cenários. Não posso falar pelo lado do .NET.

Compatibilidade entre plataformas

O Java tem uma vantagem aqui - o projeto Mono (ou similar) é necessário para que o .NET seja executado em algumas plataformas. Não tenho certeza se o Mono é 100% à prova de balas e desempenho, algo que espero que alguém possa usar.

Bibliotecas (especialmente bibliotecas de terceiros)

Ambos têm um forte apoio aqui. Inicialmente, o ecossistema Java lidera o caminho (existe literalmente uma biblioteca de código aberto gratuita para qualquer coisa que você possa imaginar), mas eu diria que o .NET certamente alcançou o que importa (NHiberante para persistência, NUnit para testes de unidade para citar dois básicos + tenho certeza de que há mais um caminhão métrico).

Custo (a Oracle parece tentar gerar receita com Java)

Todas as empresas tentam monetizar até certo ponto, mas, no caso de Java, acho que sua afirmação é um pouco enganadora. O Java foi de código aberto a partir da versão 6 (o projeto OpenJDK) e a Oracle não mostrou inclinação para monetizar o Java além do que a Sun estava fazendo. Então, sim, eles vendem servidores e extensões de aplicativos para a JVM (extensões de gerenciamento em particular), mas o próprio Java principal? Não, e eles nunca serão (isso foi declarado publicamente várias vezes).

Acho que a MS e a Oracle se beneficiam enormemente devido à receita indireta com suas plataformas repsepctive.

Custo total de propriedade (TCO)? Nem vou entrar nesse debate, já que não há como provar (a programação é uma atividade humana criativa, afinal). Pessoalmente, acho que os sistemas baseados em Java tendem a ter um custo inicial mais baixo, pois na maioria dos casos, você pode utilizar uma pilha de código aberto gratuita de cima para baixo. No entanto, as grandes empresas tendem a preferir ter contratos de suporte para anular esse benefício específico.

Processo de desenvolvimento (mais fácil / rápido)

Depende do que você está tentando construir! Pessoalmente, eu argumentaria que eles são praticamente iguais, embora o C # tenha alguns recursos extras na linguagem principal sobre Java no momento. No entanto, com linguagens (múltiplas interoperáveis ​​com Java) na JVM (Groovy, Scala, Clojure etc.), você pode ter todos os recursos de idioma que desejar.

O .NET teve uma vantagem distinta na criação de 'coisas' de front-end da Web por um tempo (Desenvolvimento rápido de aplicativos, se você preferir), mas acho que o JEE6 e / ou o Spring e outras estruturas de aplicativos / web fecharam essa lacuna.

Lembre-se também de que o Linux não é sua plataforma principal, mas você também gostaria de portar seu projeto para Linux / MacOs. Definitivamente, você deve ter em mente os problemas que vêm girando em torno da comunidade Oracle e Java e as limitações do Mono e Java também. Seria muito apreciado se as pessoas com experiência em ambos pudessem fornecer uma visão geral e sua própria visão subjetiva sobre a qual escolheriam e por quê.

Se você deseja portar para o Linux, UNIX e, em particular, o Mac OS, conforme indicado acima, o Java tem uma vantagem.

Espero que ajude!

Martijn Verburg
fonte
4

Levando em conta sua lista de pontos, eu seria dividido e dependeria realmente do que eu preciso construir.

.Net vence por estes aspectos:

  • atuação
  • Processo de desenvolvimento (mais fácil / rápido)

O Java vence por estes aspectos:

  • Compatibilidade entre plataformas
  • Bibliotecas (especialmente bibliotecas de terceiros)

É um empate para esses aspectos:

  • Custo (a Oracle parece tentar gerar receita com Java)
  • Ferramentas disponíveis (mesmo ferramentas de terceiros)

.Net é, para todos os efeitos, uma pilha de tecnologias de plataforma única. Sim, existe o Mono, mas até o Mono ser 100% compatível com a implementação do Windows, ele não fornece uma verdadeira experiência entre plataformas. O único subconjunto com o qual você pode contar para suporte a várias plataformas é o que caberia no Silverlight.

Dito isto, o .Net tem melhor desempenho percebido (medições reais TBD). Aos olhos do usuário, o desempenho percebido é a única coisa que importa. Depois de ter desenvolvido em Java nos últimos 12 anos e recentemente fazer o .Net, posso apreciar o poder da plataforma.

Por outro lado, o Java tem um IDE muito mais rico para escolher, e o custo desses IDEs superiores é muito menor que o custo da variação .Net. Por outro lado, o custo dos mecanismos J2EE profissionais diminui facilmente os custos do ambiente de desenvolvimento. Em .Net, tenho a percepção de ser nulo e obscuro até a morte. Em Java, existem soluções alternativas para os enormes custos - que podem ser facilmente compensados ​​com o tempo do desenvolvedor configurando-os. Fora do IDE, para as ferramentas importantes (perfilador, cobertura etc.), os custos são iguais.

No final, isso realmente depende da necessidade . Se eu vou implantar no Windows de qualquer maneira, o .Net é um acéfalo. Eu tenho clientes que são apenas lojas do Windows. Se eu pretendo implantar no Unix ou precisar oferecer suporte a sistemas hetérgenos, o Java não é acéfalo. Eu posso até ser radical e sugerir uma pilha de tecnologia mista. Afinal, só porque o cliente exige que o servidor seja Unix não significa que ele seja executado em seus desktops. Nem todo aplicativo é melhor transformado em um aplicativo Web.

Berin Loritsch
fonte
4

Desempenho - Par

Ambas as plataformas têm um desempenho extremamente bom para praticamente todos os aplicativos.

Não há muito para diferenciá-los, embora minha experiência subjetiva seja que o Java tenha uma ligeira vantagem para aplicativos de longa execução, enquanto o .Net é mais rápido para o tempo de inicialização do aplicativo.

Ferramentas disponíveis (mesmo ferramentas de terceiros) - discutível

Depende de quais ferramentas você precisa e com o que você está familiarizado.

O .Net certamente possui ótimas ferramentas fornecidas pela Microsoft. Por outro lado, existem igualmente boas ferramentas no mundo Java, por exemplo, nos ambientes Eclipse, Netbeans do IntelliJ.

Compatibilidade entre plataformas - vitória em Java

.Net está fundamentalmente vinculado às plataformas Microsoft (Windows, Xbox etc.). Implementações completas não estão disponíveis para nenhuma plataforma que não seja da Microsoft .

O mono é bom, mas na verdade não oferece capacidade completa para várias plataformas, porque não suporta todas as bibliotecas .Net (por exemplo, você não pode esperar que todo o material da GUI do Windows funcione corretamente, portanto, a menos que você mude para um kit de ferramentas de plataforma cruzada, como GTK #, você não poderá executar seu aplicativo em plataformas diferentes)

Java é genuinamente portátil. Não apenas a linguagem, mas muito mais importante: todas as bibliotecas Java são portáteis. Se você aderir às bibliotecas Java puras (por exemplo, Swing for GUI), seu código será executado em qualquer lugar em que você tenha um ambiente de tempo de execução Java.

Bibliotecas (especialmente bibliotecas de terceiros) - vitória em Java

Provavelmente, a melhor força da plataforma Java é o vasto ecossistema de bibliotecas, especialmente as de código aberto. Alguns exemplos:

  • Todas as bibliotecas e ferramentas Apache
  • Todas as bibliotecas no vasto ecossistema Eclipse
  • Todas as bibliotecas contribuídas / mantidas pelo Google
  • JBoss e todas as ferramentas corporativas relacionadas mantidas pela Red Hat

Custo (a Oracle parece tentar monetizar o Java) - o Java vence se você for de código aberto, caso contrário, Even.

Você pode ter uma pilha Java 100% de código aberto que é gratuita e não o vincula a nenhuma plataforma proprietária específica. Isso é 100% gratuito.

Como alternativa, você pode comprar o IntelliJ IDEA, executar o Java no Windows e usar um banco de dados proprietário; nesse caso, é praticamente o mesmo custo que uma pilha típica do Microsoft .NET.

Processo de desenvolvimento (mais fácil / rápido) - discutível

Provavelmente isso depende mais da experiência de seus desenvolvedores em cada plataforma, e não do atributo específico da plataforma.

O .Net certamente possui ótimas ferramentas que podem torná-lo muito produtivo para aplicativos GUI simples no Windows. Não é de surpreender, pois este é o "ponto ideal" para o desenvolvimento de .Net.

Por outro lado, prefiro a pilha Java para o desenvolvimento do servidor. Com ferramentas como o Maven e todos os recursos contínuos de implantação / integração, você pode estabelecer um processo de desenvolvimento muito eficaz para aplicativos robustos do lado do servidor.

O C # em termos de linguagem tem algumas vantagens de produtividade em relação ao Java. Mas por outro lado, se você está desenvolvendo na plataforma Java atualmente, a tendência é não usar o próprio Java, mas usar uma das novas linguagens da JVM, como Scala, Groovy ou Clojure - se você fizer isso, será muito mais produtivo do que C # ou Java.

Mikera
fonte
3

.Internet

É difícil responder a essa pergunta sem ser subjetivo ou irritante (tenho a sensação de que vou ser criticado), mas .Net é uma linguagem em alta e o Java parece atolado por questões legais, além de se tornar menos popular.

Atualmente, o .net atualmente é de longe uma linguagem muito mais coesa e moderna, com excelente suporte para programação multicore (Parallel.net) e assíncrona (extensões reativas), sem mencionar o LINQ, do qual eu não poderia viver. .Net também possui várias ferramentas gratuitas, mas Visual Studio Express, Sql Server Express, Web Matrix etc.

É verdade que o java possui alguns benefícios multiplataforma. Você tem algumas opções para .Net com mono etc, o que pode ser útil para aplicativos tradicionais ou componentes de back-end, mas alguns ficam duvidosos se você estiver fazendo algo muito especializado (e não vamos discutir o WPF).

Outra opção, se a plataforma cruzada é realmente realmente importante, é o Silverlight. Pessoalmente, não gosto muito de "aplicativos" do Silverlight, mas pelo menos funciona.

Plataforma cruzada é o ponto problemático, pergunte-se se é realmente realmente necessário, pelo menos neste momento.

Homde
fonte
Preferir .Net não é uma coisa ruim. Na verdade, eu gosto bastante disso. Não há dúvida de que o Java está enfrentando uma crise de identidade no momento, o que é uma pena - eu também gosto dessa plataforma. Fico feliz que você tenha reconhecido o histórico aprimorado do Java para plataforma cruzada (+1). Alguns clientes exigem implantação do Unix, outros exigem implantação do Windows. O pessoal de Java pode atender a ambas as plataformas, enquanto o .Net é realmente limitado ao Windows. Dito isto, existem muitos clientes apenas para Windows por aí.
Berin Loritsch
1

Em nossa organização, nesse momento, escolheríamos Java. A razão para isso é simples: nossa equipe Java é maior, mais experiente e tem mais ferramentas do que nossa equipe .NET (que também está comprometida o suficiente na manutenção dos sistemas existentes e não possui recursos para assumir novos projetos importantes) .
Dito isto, se houvesse motivos prementes para usar o .NET (por exemplo, requisitos do cliente, alguns clientes podem ter uma grande base instalada de software .NET e desejar que seu novo sistema se encaixe nessa base, faça a manutenção, etc.) faça isso e contrate contratados para fazer o trabalho onde não podemos libertar nosso próprio pessoal.
Eu não forçaria a tecnologia de um cliente contra seus melhores interesses, e alguns simplesmente se beneficiam (por causa de sua organização interna) mais do que o outro por causa dos investimentos necessários para implantar o sistema (novamente, digamos que temos um cliente que já tem vários aplicativos .NET em execução e tem a equipe para apoiá-los, não vamos tentar forçá-los a contratar pessoas e comprar licenças de hardware e software para executar um aplicativo Java ao lado e, é claro, o contrário Isso também é verdade: aconselhamos que não o façam se vierem até nós com isso como um pedido).

jwenting
fonte