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ê.
Respostas:
A decisão mais importante (editar: técnica) é:
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.
fonte
OK, vamos tentar dividir isso:
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.
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.
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).
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.
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.
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!
fonte
Levando em conta sua lista de pontos, eu seria dividido e dependeria realmente do que eu preciso construir.
.Net vence por estes aspectos:
O Java vence por estes aspectos:
É um empate para esses aspectos:
.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.
fonte
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:
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.
fonte
.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.
fonte
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).
fonte