Java alcançará C #? [fechadas]

17

Hoje eu postei uma pergunta perguntando sobre qual linguagem C # ou Java seria melhor para eu estudar. Eu tive ótimas respostas. Uma coisa que surgiu foi que talvez o Java agora esteja bastante atrasado do C # com novos recursos. Eu vi alguns links da Web e a maioria apontou o que o C # tinha e o que o java não tinha.

Então, minha pergunta para todos vocês é que o Java vai recuperar o c # novamente? E se você adivinhar qual seria a situação daqui a 5 anos. Teria tudo o que talvez esteja faltando agora? E o Java 7?

MandyNelson
fonte
7
-1, presuntivo e hipotético. Mudaria para +1 se o título fosse alterado para "O Java está atrás do C # e, se sim, como ele pode recuperar o atraso?"
31511 Nicole
2
Java e C # alcançam o Scheme? Avise-me quando você receber funções, fechamentos e continuações anônimos de primeira classe.
dietbuddha
5
@dietbuddha: Eu prefiro não jogar meu código com )'s, muito obrigado.
31711 Josh K
1
@ JoshK você prefere preenchê-lo; e} certo? O LISP parece usar muitos parênteses porque todas as funções os usam e você aninha muitas funções nele.
precisa saber é o seguinte

Respostas:

32

Os recursos de linguagem são uma parte muito pequena do que faz com que Java e C # funcionem. Em última análise, essas são partes de ecossistemas J2EE e .NET maiores.

Ambos têm suas próprias forças e devem crescer mais nos próximos 5 anos.

Shamit Verma
fonte
19
+1 para "Os recursos de linguagem são uma parte muito pequena do que faz o Java e o C # funcionarem"
Craige 31/03
1
Sim, as APIs e as bibliotecas são, de muitas maneiras, muito mais significativas.
Michael K
2
Concordou, mas as perguntas é sobre a linguagem e não o ecossistema;)
Philippe
1
Eu realmente odeio votar +1 em respostas muito curtas, mas você está interessado em algo aqui. Gostaria de ver você expandir esta resposta.
31511 Nicole
3
O questionário diz: "qual linguagem C # ou Java seria melhor para eu estudar" e "onde ficaria daqui a cinco anos", esses dois aspectos dependem mais do ecossistema do que da linguagem.
Shamit Verma
16

Eu teria dito que sim até a Oracle entrar em cena. O que é triste, porque eu realmente gostei do avanço dos recursos que Java e C # tiveram nos últimos seis anos.

Jesse C. Slicer
fonte
2
Por que você acha que a Oracle sabotará o Java?
2
Só não acho que a cultura corporativa tenha a mesma agilidade que a Sun possuía na incorporação de recursos.
Jesse C. Slicer 31/03
8
@ Glenn, o processo Oracle vs Google me mostra que eles não "obtêm" o código aberto e que isso significa que as grandes empresas têm menos probabilidade de escolher o Java para desenvolvimento futuro. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena 31/03
O Oracle pode não exatamente "estragar o Java", mas a JVM. No momento, eles têm um projeto para combinar duas implementações da JVM que adquiriram JRockit da BEA e HotSpot para Sun. Enquanto estão nisso, deixaram completamente de fora o projeto Da Vinci Machine.
vartec 31/03
2
Eu sou misto no Oracle. O processo do Android é meio complicado, mas eles contribuem para o kernel do Linux e são os principais desenvolvedores do sistema de arquivos Btrfs. A Oracle parece "obter" o código aberto melhor do que a Microsoft, mas isso não diz muito.
31711 jonescb
6

Como linguagem, não expiro o Java para adicionar inovação a uma taxa significativa, principalmente porque os membros da comunidade de código aberto que estão na vanguarda têm maior probabilidade de se concentrar nas linguagens mais recentes da JVM, como Scala, Clojure, Groovy, JRuby e JPython.

Além disso, o compromisso do Java com a compatibilidade com versões anteriores significa que a adição de recursos da linguagem é inerentemente mais difícil do que nos dias anteriores da linguagem.

Eric Wilson
fonte
5

O grande ponto de interrogação aqui é Oracle. A Sun realmente desacelerou as coisas para Java nas últimas meia década. A esperança de muitos na comunidade Java era que a Sun desligasse o Java ou o vendesse para alguém que colocasse muitos recursos e esforços. Embora a Oracle certamente possa fazer isso, é uma grande empresa com muitos grupos com seus próprios interesses. Meu palpite, e é apenas isso, um palpite, é que a Oracle deixará o Java estagnar e o utilizará principalmente como uma ferramenta para processos de patentes.

Talvez eles o vendam para o Google por uma grande quantia de dinheiro e todos ficarão felizes. Está nas mãos de salas de reuniões e advogados, em vez de engenheiros e designers de software.

No lado bom das coisas, mesmo sem melhorias, o Java é uma boa linguagem e possui um bom ecossistema. Enquanto eu pessoalmente prefiro C # e o mundo .net, Java ainda é uma ótima opção. No futuro, o tempo dirá, mas a partir de agora o Java não é nada ruim. (Bibliotecas de data e hora excluídas ... uau, são aquelas sempre feias e bagunçadas)

Jason
fonte
1
Agora existem bibliotecas de terceiros para superar os problemas de data / hora.
Michael K
1
A Oracle estava usando Java junto com PL / SQL como uma linguagem para programas que residiam no banco de dados, pelo menos a partir de 10g. Oracle usa Java fortemente. Se isso significa que eles levarão o Java em uma direção que eu gosto é questionável, mas eles não vão matá-lo.
David Thornley 31/03
4

Não há nada para acompanhar, então a questão não faz sentido.

Só porque o Java não replica exatamente o C # não significa que seja "inferior" de alguma forma, é apenas diferente. É melhor perguntar quando o C # "alcançará" Cobol.

jwenting
fonte
23
Eu não concordo C # e Java são semelhantes em muitos aspectos, muito mais do que C # e COBOL. Lembro-me de um dia lendo que "C # é o que Java deveria ter sido". Para resumir, eu acredito que C # e Java estão competindo diretamente, e tendo trabalhado com tanto que tenho a dizer que eu um monte de C # apresenta em Java, mas não o contrário ...
Philippe
Você encontrou situações em que poderia usar C # ou Java? Ou seja, situações em que o desenvolvedor pode fazer uma escolha. Normalmente, uma loja já teria preferências / preconceitos / preconceitos e a escolha entre idiomas no mesmo ecossistema. Por exemplo, entre Java e Scala ou entre C # e F #
Shamit Verma
2
Não concordo com todas as decisões de design que o C # tomou, mas, como Java, conscientemente decidiram fazer uma substituição do C ++ e, com o exemplo do Java antes deles, adicionaram deliberadamente alguns recursos críticos que o Java deixou de fora. Portanto, se você acha que esses recursos são bons, o Java precisa "acompanhar" o C #. Especificamente, a capacidade de criar objetos embutidos para que tudo o que seja orientado a objetos não precise ser inchado, e acho que const. Os delegados são um novo recurso incorporado, não que não possam ser criados como uma estrutura de dados da biblioteca. Eu diria que os dois precisam se atualizar com C ++!
Dov
@ Philippe, não seja pego no seu exemplo contrário. Ele poderia ter dito com a mesma facilidade "Quando o C # alcançará o Java?". Seu argumento ainda é de que não há razão objetiva para o Java estar por trás do C #; é tudo preferência pessoal.
31711 jonescb
Ninguém está falando sobre replicação, mas o C # tem alguns recursos essenciais que o Java está apenas considerando implementar AGORA (como lambdas, que são emulados com uma implementação de objeto feia).
precisa saber é o seguinte
4

A questão de saber se o C # ou o Java está à frente do outro está em debate, mas, em vez de focar nos recursos da linguagem de um ou de outro, prefiro focar no que está envolvido na evolução de uma linguagem. Esse é um fato que eu acho que ninguém discutirá: Java é mais antigo que C #.

Problemas na alteração de como um idioma funciona:

  1. Se você quebra a compatibilidade com versões anteriores, irrita muitos desenvolvedores
  2. Se você irritar seus desenvolvedores, eles passam para outro idioma que os suporta melhor. Portanto, não há razão para continuar trabalhando com o idioma.
  3. O Java tomou algumas decisões de design desde o início com uma pressão para colocar o idioma no mercado. A esperança era voltar e preencher alguns dos espaços em branco. Essas decisões ainda atormentam a linguagem porque os mantenedores não querem violar o primeiro ponto.
  4. O Java explorou muitos novos territórios e provou de uma vez por todas que uma linguagem de coleta de lixo pode ser levada a sério - e ter um desempenho suficiente para a maioria das pessoas.
  5. O C # chegou mais tarde e aprendeu muitas lições nas quais o Java se deparou - para que eles pudessem evitar algumas das limitações técnicas que o Java possui por causa do ponto 3.
  6. Os novos recursos de idioma precisam resolver um problema real de maneira sensata. Nem todo recurso de idioma faz sentido no contexto do idioma ao qual você está tentando adicioná-lo. É por isso que, apesar de suas semelhanças, Java e C # continuarão sendo linguagens diferentes.

Então, o C # tem mais recursos de linguagem que o Java? Acho que sim. Eles são úteis? Acho que sim. Isso significa que o C # é melhor ou mais maduro que o Java? Que eu discordo. Eles são diferentes, claros e simples. Java nunca terá todos os recursos do C #, como C # nunca terá todos os recursos do Java.

Um dos recursos do Java, a capacidade de escrever um programa no Windows e implantá-lo no Unix ou Mac, nunca acontecerá diretamente pelo suporte da Microsoft. Porque você pergunta? Não é porque a Microsoft é má (se é verdade ou não, eu realmente não me importo). É porque eles aprenderam uma lição que a Sun nunca aprendeu: escrever uma vez, executado em qualquer lugar, comodifica os sistemas operacionais e o hardware. Se você se preocupa em ganhar dinheiro com as vendas do seu sistema operacional, não deseja tornar trivial a troca e ainda assim ter um aplicativo funcionando. Se você fez isso, não poderá lucrar com o sistema operacional, porque sempre há opções mais baratas.

Berin Loritsch
fonte
Por que importa que o Mono não é executado pela MS? Mono funciona muito bem. Não o subestime.
Kugel
Não é uma escavação no Mono, mas nem todas as APIs do .NET são suportadas diretamente. Enquanto eles estão progredindo e percorrendo um longo caminho, existem limitações - principalmente em aplicativos de desktop. Não tenho certeza de quão perto o Mono chegou ou se legalmente pode chegar à implementação do Winforms ou WPF. No entanto, para trabalhos estritamente do lado do servidor, tenho certeza de que é compatível. Não investiguei recentemente.
Berin Loritsch 13/12/12
Eu acho que "a capacidade de escrever um programa no Windows e implantá-lo em Unix ou Mac, nunca vai acontecer diretamente pelo suporte da Microsoft" foi refutada agora
JoelFan
No momento em que escrevi a resposta, não era. Então, o C # tem uma Microsoft que escreveu um tempo de execução e bibliotecas que funcionam no Mac e no Unix? O mono não é diretamente da Microsoft, mesmo que alguns desenvolvedores da Microsoft estejam trabalhando nele. Ainda tenho dúvidas sobre um aplicativo de desktop criado no WPF que funciona no Linux. Apenas o lado do servidor pode estar OK.
Berin Loritsch
1

Java realmente não precisa de novos "recursos", assim como C ou C ++. É uma linguagem bem projetada para o desenvolvimento orientado a objetos. As adições que podem ser feitas estão na criação de bibliotecas para executar uma ampla variedade de tarefas. O mesmo vale para o C # - a maioria dos recursos está sendo adicionada para fazer o idioma fazer mais coisas. Pessoalmente, acho que a maioria desses recursos não é necessária - os ponteiros no OO são realmente muito leves, a menos que você esteja trabalhando no nível do hardware (nesse ponto, provavelmente é melhor usar algo como C). Além disso, a execução em uma VM deve dificultar o acesso direto ao hardware, se não impossível.

O Unix iniciou a tendência de criar módulos que fazem uma coisa muito bem. Eu acho que ambos Java e C # estão ficando um pouco fora de mão na fluência característica. É melhor criar um núcleo facilmente extensível do que uma "linguagem" multifuncional gigante, mais parecida com uma estrutura. Para mim , o Java se ajusta melhor a esse requisito que o C #.

Michael K
fonte
7
Idioma sem lambda adequado não é um idioma utilizável. Se esse recurso for adicionado ao Java, eu concordo com o restante dos seus argumentos. Sem isso, o Java não é extensível, é apenas utilizável.
SK-logic
2
@Craige Pessoalmente (opinião) Eu não gosto de ter recursos sintáticos. Eu quero que o idioma fique fora do meu caminho - muito mínimo.
Michael K
1
@ Michael - Não consigo estabelecer a conexão entre uma linguagem com recursos sintáticos e uma linguagem que fica no seu caminho. Só porque um idioma disse recursos, não significa que você precise utilizá-los. Pegue os métodos getter e setter do C #, por exemplo. 90% do tempo, você economizará escrevendo centenas de linhas de código redundante. Você ainda pode escrever o seu próprio, se desejar.
Craige 31/03
1
@Craige, se o idioma tem recursos, suas ferramentas precisam saber sobre eles, pelo menos. E o poder do ecossistema Java está principalmente em suas ferramentas, que são possíveis inteiramente por causa da simplicidade minimalista da linguagem.
SK-logic
1
@ SK, eu não entendo como você pode dizer que um idioma com lambda é inutilizável. C não possui lambdas, e C ++ as obtém em C ++ 0x e as pessoas usam essas linguagens há décadas. Só porque você prefere a programação funcional que não invalida a programação imperativa.
31411 jonescb
1

Não há nada de errado com muitos dos recursos que o C # está adicionando, mas, dada a taxa na qual eles estão mudando o idioma, eles estão conscientemente dificultando, se não impossível, o Mono acompanhar. Nesse caso, digo que estamos esperando o C # recuperar o Java em termos da variedade de sistemas nos quais ele pode implantar. Não é suficiente apenas executar no Windows.

Dov
fonte
0

Não vou iniciar um fórum de discussão, mas acho que o Java estava aqui muito antes do C # e, nesse caso, o C # parece mais uma replicação do que um java.

Quanto ao answareing de sua pergunta: Java e C # são linguagens diferentes, portanto, você não pode compará-los apenas por seus recursos. O que você pode fazer em Java, você não pode em C # e vice-versa.

Então, finalmente, isso é como iniciar um tópico Windows vs Linux.

Adam Arold
fonte