Eu tenho trabalhado com o .Net, e me irritado muito. Os componentes as vezes não se comportam da forma esperada e, quando vc procura num fórum da MS a solução, surpresa, a própria MS recomenda uma gambiarra. Ok, ainda tenho muito o que aprender, e posso estar sofrendo só por ainda estar escalando a curva de aprendizado, portanto, considerem que estou só resmungando por enquanto.
O C#, por si só, é uma linguagem excelente. É tão fácil quanto o Java, tem alguns recursos de programação muito interessantes, como sobrecarga de operadores ou ter implementado de generics da forma certa. A API também é legal, e conta com o poderoso LINQ.
Eu não recomendo a ninguém o VB6. E olha que trabalhei muitos anos com a linguagem. Aquele lixo deveria ser publicado como exemplo do que não se deve fazer. Eu posso citar diversos pontos negativíssimos da linguagem, como o famoso “On error resume next”, ou como as variáveis serem Variant por padrão, funções serem public, ou declarações enganosas como essa:
Onde a variável y é inteira, mas a variável x foi implicitamente declarada como Variant. Fora coisas irritantes como “se vc referenciar um objeto dentro de um form, o VB o torna automaticamente visível”.
Usei Java Swing por mais de 5 anos, usando como ambiente visual o VEP. Muito bom, era tão rápido quanto desenvolver em Delphi ou VB. Só para constar trabalhei por 2 anos com C++ Builder e 2 anos em Delphi.
Uma coisa que gosto do Java é que as APIs da Sun, de maneira geral, são bem puristas. Encontramos quase nenhuma gambiarra, as coisas funcionam exatamente como o esperado. Tudo é muito simples e intuitivo. As interfaces são bem projetadas, o que permite desenvolver código bem flexível com muita facilidade. Tenho esses mesmos elogios para a VCL da Borland.
A MS tem o bom e velho problema de ser proprietária, e de não estar lá muito aí para compatibilidade. Passei infernos para mover do VB4 para o 5, do 5 para o 6, e não há conversão do 6 para o .net (a ferramenta para conversão automática funciona bem para aplicações do tipo “Hello world”). Alguns colegas que estão a mais tempo no C# reclamam a mesma coisa sobre o .net framework.
Uma coisa que sinto-me à vontade no Java é com fazer com tranquilidade os updates de versão. Meu código 1.4 roda perfeitamente no Java 1.6.
Tenho experiência com C++. Trabalhei vários anos com ele, desenvolvi jogos na linguagem. É uma linguagem excelente e a maioria que reclama dela, ainda está trabalhando com o C++ de 1980. Nunca sequer ouviram falar das coisas “novas”, como RAII, Smart pointers ou da boost. Mas realmente, é uma linguagem mais difícil que o Java, e eu não recomendaria fazer aplicações web com ela, por exemplo. Mas, se for fazer uma aplicação desktop, e tiver que integrar um pouquinho mais com o SO, é uma excelente opção. No Java, vc não tem acesso ao SO, até pela própria proposta da plataforma. Ou seja, nada de interagir com direct3d, direct sound, controles, drivers de DVD, portas USB, scanners, webcams, etc…, etc…, etc… Mesmo que você use um binding, você sempre estará um passo atrás, e sempre correrá o risco daquele binding demorar muito, ou nunca ser atualizado. É diferente de recém comprar a última placa da NVDIA, baixar o SDK no site e já sair usando.
Fora que, se você um dia pretende entrar no mercado profissional de games, programar para qualquer console, terá que aprender C++. Para quem acha que as aplicações desktop estão fora de moda, considerem a indústria de video-games, só para terem certeza do quanto estão errados. Quem fala isso também desconsidera a maior parte das aplicações da indústria, que tem requisitos de tempo real, que não podem ser cobertos pelo Java e que estão muito longe de sequer se aproximar da web. E também desconsidera boa parte da área de pesquisa tecnológica. Todas áreas bem remuneradas e com grande abertura de contratações anualmente.