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:
C
Crown
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
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
maxmustang
Nervosão
ViniGodoy
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.
UMC
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
hehehe
.NET = Microsoft.
Mais eu fico com JAVA
vlw
ViniGodoy
Não é muito melhor, nem muito mais errado, que dizer que Java = Oracle.
M
marcosalex
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?
ViniGodoy
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?
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
A minha única crítica é a ferramenta e APIs pagas, porque a linguagém em sí é muito boa
ViniGodoy
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
A minha única crítica é a ferramenta e APIs pagas, porque a linguagém em sí é muito boa :P
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 é.