.NET x JAVA

Bom o titulo é sensacionalista mas é so para chamar a atencao mesmo…Queria saber como anda os principais pontos do .net e do java, como escalabilidade,peformance,confiabilidade etc…, quem tiver uns benchmaking ou artigos .NET x JAVA pode enviar, o intuito é identificar os cenarios onde cada linguagem se encaixa e nao identificar a “melhor”(ou bala de prata)…obrigado

ps:como eu disse e repito, nao é um post sensacionalista, faz algum tempo que nao vejo nada sobre e queria me atualizar nos melhores cenarios onde as linguagens se encaixam entao resolvi pedir a ajuda de vcs, por favor sem brigas uehuehu

Na verdade é complicado responder isso. Desculpe se voce me interpretar como mal educado, mas você está no forum de usuários de Java. Então a resposta da maioria fica meio tendenciosa :twisted: :twisted:

Em um forum de java mas na area de arquitetura, tem que ser muito infantil para vim nessa area brigar para saber qual é a melhor tecnologia, resumindo nao quero sabe se java trata tipos de refencia diferente do c#, eu quero ver CENARIOS. Se nao tem como conseguir uma resposta decente nessa area é melhor trocar o nome dela.

ps: mas vlw, pela opniao

O povo aqui… briga até no offtopic… ehheheh

Mas eu acho que os dois são concorrentes diretos…

O cenário onde os dois melhores se aplicam, são os mesmos…

A diferença principal que eu considero, é que .NET é mais forte na área de desktop do que java…

Mas eu prefiro Java :smiley:

Nervosão :smiley:

Falando só na linguagem, e não nas APIs, acho o C# uma muito mais completo e fácil de usar do que o Java. Ele tem alguns recursos interessantes como os extension methods, propriedades, sobrecarga de operadores e metodos unsafe (dificilmente vc usa esse último, mas é 1000x melhor que escrever um JNI, se vc vier a precisar). Sem falar numa implementação real de generics. São pequenos detalhes que tornam o código mais fácil de ler e de manter.

Gosto também do LINQ, que vem junto com a linguagem. Permite que você rode queries “sql like” em collections. Sem falar que ele usa estratégias eficientes para fazer isso, como um BD faria. No java, somos obrigados a iterar constantemente sobre colleções para fazer filtros, ou usar uma API de terceiros que faça algo similar. O LINQ ainda tem verificação do compilador, o que uma API no java não tem.

A API de Collections do Java, entretanto, é mais completa. Não só tem interfaces mais bem definidas, como também mais classes e melhores. Por exemplo, sinto falta de uma implementação de TreeSet no C#, ou de uma interface que seja pai de HashSet. Acho que a MS está pecou muito em não adicionar essa interface logo que o HashSet foi adicionado.

É difícil comparar ambas as APIs. As duas são gigantes e muito completas. Só posso adiantar que a MS está fazendo um ótimo trabalho com o C#, o que mostra que a companhia amadureceu muito. Uma grande vantagem do Java é que, por ser mais maduro, tem mais APIs de terceiros disponíveis.

Também é difícil falar em benchmarks. Linguagens virtualizadas já são difíceis de serem medidas por si só. O juliocbq, aqui do GUJ, fez um benchmark recentemente com operações matemáticas sobre inteiros nas duas linguagens, e o Java ganhou com larga margem (aliás, quase ganhou do C++ também). Mas, a menos que vc faça softwares para tratamento de imagens como o Julio, o gargalo dificilmente estará na linguagem. Portanto, acho que discussões desse tipo geralmente são inúteis. O que eu gosto de acrescentar é que no C# você tem mais controle sobre o garbage collector, o que pode facilitar o desenvolvimento de aplicações de tempo real.

[quote=rogelgarcia]O povo aqui… briga até no offtopic… ehheheh

Mas eu acho que os dois são concorrentes diretos…

O cenário onde os dois melhores se aplicam, são os mesmos…

A diferença principal que eu considero, é que .NET é mais forte na área de desktop do que java…

Mas eu prefiro Java :D[/quote]
hehehe
.NET = Microsoft.

Mais eu fico com JAVA

vlw

Não é muito melhor, nem muito mais errado, que dizer que Java = Oracle.

As ferramentas da MS pra .NET vêm com muito mais coisa pronta, enquanto a Sun vêm com o básico e deixa o resto pra terceiros, daí muita gente tem a impressão do .NET ser mais fácil. E alguns recursos que ele tem a mais são coisas que raramente você precisaria. Quantos aqui já usaram sobrecarga de operadores na prática?

De que "mais coisa pronta" você está falando? Acho que em termos de ferramentas, o Java ainda dá de 10 a 0 no C#. O Netbeans é uma IDE muito melhor que o visual, sem falar nas ferramentas de profiling, trazidas pela própria Visual VM. Precisei usar um profiler no C# achei apenas o DotTrace, que não é da MS, e é caríssimo (talvez venha algo assim no Visual 2010). Ok, a parte de janelas e web do Visual é bem completinha, mas não achei muito melhor que a do Netbeans.

Extension methods são muitíssimo úteis. Uma implementação real de generics também. O LinQ é simplesmente sensacional e não há nenhuma implementação de terceiros que faça o que ele faz, justamente por ele ser suportado pelo compilador e não só por uma biblioteca. Você tem verificação das linq queries em compile time, da maneira mais segura possível.

Nunca entendi o conservadorismo da sun quanto à sobrecarga de operadores. Alguns locais simples ela já seria útil, no próprio Java, e aposto que muitos usariam na prática. Que tal concatenar Strings num StringBuilder através do sinal de +, no lugar de chamar .append? Ou de ter a classe BigDecimal e BigInteger suportando operadores matemáticos, ao invés de métodos? Que tal ter a classe List e Map usando o operador de [] ao invés de métodos como get, put e set?

Veja, no C# é assim que se usa um map:

IDictionary<string, int> idades = new Dictionary<int, string>(); idades["Vinicius"] = 10; idades["Marcelo"] = 20; Console.out.WriteLn("A idade do vinícius é " + idades["Vinicius"]);

Vemos exemplos dessas classes praticamente todos os dias aqui no GUJ. A sintaxe delas já seria muito simplificada pela possibilidade de sobrecarga de operadores. Especialmente no caso das classes matemáticas, onde expressões numéricas são muito mais facilmente descritas. Suponha que x e y são BigDecimals, vamos comparar sintaxes?

bool isValid = (x-1)*(1-y) >= 15; //C# - Existente a partir do .net 4.0 boolean isValid = (x.plus(new BigDecimal(1).negate()).multiply(new BigDecimal(1).plus(y.negate()))).compareTo(new BigDecimal(15)) > 0; //Java

A alegação é que operadores mal usados podem deixar o código difícil de manter. Acho que essa alegação pode ser usada para praticamente qualquer recurso e para mim soa como uma desculpa para lá de esfarrapada. Como vc poderá perceber por expressões como aquela acima, sem sobrecarga é que temos um código rebuscado e mais difícil de manter. Aliás, se sobrecarga é assim tão inútil, pq a Sun xunxou a classe String desde o início do Java para tê-la?

Muito bom o teu post vini, parabéns.

Eu já trabalhei muito no .NET e agora voltei (pra fazer uma migração de um sistema Java pra vb.NET). No que eu fui lidar com ele, precisei de umas bibliotecas por fora e para a minha surpresa: muitas APIs são pagas.

Em 2006 quando eu precisei de algo pra SMTP, o que funcionava era pago. O free não funcionava. Esse mês fui procurar uma ferramenta pra testes de cobertura, e é BEM caro (200 dolares) e assim vai indo.

Mas a linguagem é legal, eu só não curto o visual studio como editor de código. Para WYSIWYG eu acho que atende bem, mas se tu tiver que botar a mão no código:

  • Refactoring é muito pobre
  • Navegação entre métodos é ruim também
  • Quando rola exception, as linhas não aparecem no stacktrace
  • a forma de organização de packages
  • entre outros que não lembro mais :stuck_out_tongue:

A minha única crítica é a ferramenta e APIs pagas, porque a linguagém em sí é muito boa :stuck_out_tongue:

[quote=Leozin]Muito bom o teu post vini, parabéns.

Eu já trabalhei muito no .NET e agora voltei (pra fazer uma migração de um sistema Java pra vb.NET). No que eu fui lidar com ele, precisei de umas bibliotecas por fora e para a minha surpresa: muitas APIs são pagas.

Em 2006 quando eu precisei de algo pra SMTP, o que funcionava era pago. O free não funcionava. Esse mês fui procurar uma ferramenta pra testes de cobertura, e é BEM caro (200 dolares) e assim vai indo.

Mas a linguagem é legal, eu só não curto o visual studio como editor de código. Para WYSIWYG eu acho que atende bem, mas se tu tiver que botar a mão no código:

  • Refactoring é muito pobre
  • Navegação entre métodos é ruim também
  • Quando rola exception, as linhas não aparecem no stacktrace
  • a forma de organização de packages
  • entre outros que não lembro mais :stuck_out_tongue:

A minha única crítica é a ferramenta e APIs pagas, porque a linguagém em sí é muito boa :P[/quote]

Concordo. Todos os dias que uso o Visual, sinto muita falta do Eclipse. E olha que já estou trabalhando a praticamente 1 ano, tempo suficiente para descobrir macetes e recursos. Sinto falta exatamente do que você falou.

Outra coisa que sinto falta é a MS não ter sugerido uma code convention oficial para o C#. O pessoal até copia o estilo da API, mas não há nenhum documento oficial, como a Sun tem para o Java.

Ah sim, outra coisa legal do .net, que nunca entendi pq a Sun não incorporou esse recurso nos seus .jar também, é a possibilidade do arquivo de manifesto descrever coisas como:

  • Nome da biblioteca;
  • Descrição;
  • Versão.

A última informação, claro, é a mais importante. No .net você pode checar em runtime se a dll que você está usando está ou não na versão correta, ou na versão mínima. O que é muito útil se você depende de pacotes externos. Você também pode obter essa informação via reflexão, o que te permite fazer uma página, por exemplo, que liste todas as versões dos assemblies instalados para sua aplicação no servidor. Informação valiosa para diagnostico de erros e debug.

De maneira geral, ainda sou mais satisfeito com o Java, principalmente por causa da API da Sun. A do C# é ótima também, mas tem muita coisa que sinto como se estivesse faltando, ou como se a implementação não tivesse sido tão bem pensada. Muitas vezes notei que a API do .Net é pouco extensível, coisa que sabemos que a do Java não é.