Java ou C++?

Eu havia inicialmente escrito este post na seçao Java Básico, mas acho que aqui no avançado os usuarios terão mais experiencia, inclusive em outras linguagens, e poderão me dar respostas mais esclarecedoras.

Antes de tudo peço desculpas por mais um post desse tipo … entendo que esse é um assunto bem irritante e que ja foi abordado diversas vezes tanto aqui como em outros foruns … eu mesmo já me cansei de ler essas mesmas perguntas, “qual linguagem aprender” ou “java ou C++?”, porem todas as respostas que li nao tinham muito a ver com minha realidade e muitas vezes mais atrapalhavam que ajudavam …

Bom, vamos lá … sou estudante de Engenharia Civil, e já programo em C e sei um mínimo de C++ (orientação a objetos e etc). Atualmente utilizo C para fazer alguns programas na minha área, nada muito complexo, alguns cálculos, interfaces graficas e etc. Futuramente pretendo fazer coisas mais complexas como desenhos 3d, provavelmente em OpenGL, e cálculos mais avançados, e é ai que as dúvidas começam a surgir. Seria o Java uma boa linguagem pro que eu quero? Seria o Java uma boa linguagem para programas de engenharia (performance, facilidade, produtividade e etc) … o Java é uma boa opção para quem pretende desenvolver apenas para Desktop, softares mais tecnicos com uso de bibliotecas graficas (como OpenGL), softwares estilo CAD e realizar muitos calculos complexos? E qual das duas linguagens agregaria mais valor ao curriculo de um futuro engenheiro o C++ ou o Java? E na questão de softwares comerciais como eh o merdado do Java em relacao ao C++? Li em algum lugas que os .class do Java podem ser facilmente “descompilados” …

Qdo ouço falar das vantagens do Java sempre caio na portabilidade, o que pra mim nao faz tanta diferença pois o meu alvo é mesmo o Windows, e na programação Web que pro meu caso tbm nao é muito interessante mas tbm sei que Java é uma linguagem mais simples de se trabalhar que C++, para se fazer uma simples GUI em C/C++ é um custo. Acredito que a curva de aprendizado do Java seja menos penosa que a do C++. E por nao ter a intenção de trabalhar diretamente com programação, e sim querer complementar o curriculo da melhor maneira possivel, fico meio indeciso, pois nao quero “perder” tempo aprendendo Java e dps ver que C++ era uma melhor opção, ou vice-versa.

Desde já obrigado e peço desculpas novamente pelo tópico!

qual a finalidade de um engenheiro civil saber programar? até vc dominar c++ para fazer softwares como vc citou(estilo cad etc)
vc ja esqueceu das aulas de engenharia que teve hehe

Deixa eu ver se entendi bem: Voce pretende desenvolver softwares de um nivel razoável pra SOMENTE VOCE USAR?
Tah de brincadeira ne?
Sem contar que se voce pretende desenvolver softwares com um bom desempenho, principalmente em java que já sacrifica um pouco do desempenho justamente em prol da portabilidade, acho melhor começar a mudar as suas idéias de Sistema Operacional. Sem querer ofender quem gosta de windows mas o desempenho dele em relacao a MAC e Linux não dá nem pra medir.

Braven,

Programação para desenvolvimento deste tipo de software que vc citou é desenvolvimento de software de computação gráfica e isto é assunto muito complexo. Só gaste tempo com isto, se vc for enveredar por este caminho mesmo pois, apenas para complementar curriculo, não vai valer a pena o tempo que vc vai ter que dedicar.
Agora, quanto a usar Java ou C++ para isto… geralmente o pessoal usa C++ para ficar mais próximo dos bits. Neste tipo de sóftware é comum trabalhar com calculos muito complexos. Derivadas, integrais, etc, etc… e normalmente, é coisa muito pesada que consome bastante processamento e muita memória.
Programando em C ou C++, vc vai poder lidar a nível bem baixo. Nível de máquina se for preciso. Por exemplo, certos pontos específicos, podem ser feitos diretamente em código assembly no meio do seu código C/C++. Ou seja, você terá maior controle da máquina e poderá otimizar melhor o desempenho da coisa.
Nenhuma aplicação comercial para isto é desenvolvida em Java por este motivo.
Entretanto, existe um nixo de programação na área gráfica, usando o Java3D https://java3d.dev.java.net/ mas tenho a impressão que eles acabam ficando mais no mundo dos jogos.

Agora… na programação pra web ou pra ambiente comercial, aí sim, vale mais a pena o Java. E como área de trabalho (pra quem vai trabalhar diretamente com programação) pois tem muito mais oportunidade Java no mercado do que C++.

Se você vai trabalhar como engenheiro, tem que ver qual a área dentro da engenharia. Engenharia da computação? Aprenda Java e C++. Vai precisar dos dois.
Algo em engenharia mais voltado para automação industrial? Fique com C++ pois é melhor para lidar com baixo nível (software para controle de hardware).

Espero que estas colocações ajudem um pouco.

[]s

C++ é geralmente mais utilizado pra Engenharia, Mecânica e talz. Acredito que seja a linguagem com qual vc se identifica mais.

Espero que o autor do tópico ignore as duas primeiras respostas…

Espero também que o ViniGodoy veja esse tópico e te auxilie, é de conhecimento da galera daqui que ele trabalha com as duas linguagens, ou algo do tipo, então saberá te auxiliar precisamente no que precisa.

Trabalho com Java mas mexi com C++ na faculdade, em alguns projetos acadêmicos.
Acho uma pena que eu não tenha me aprofundado em C++ assim como o fiz em Java, mas é a vida.

Devo repetir: ignore as duas primeiras respostas, ok?
Aguarde por pessoas sensatas virem comentar, logo elas virão.

Abraços.

[quote=Tchello] Espero que o autor do tópico ignore as duas primeiras respostas…

Espero também que o ViniGodoy veja esse tópico e te auxilie, é de conhecimento da galera daqui que ele trabalha com as duas linguagens, ou algo do tipo, então saberá te auxiliar precisamente no que precisa.

Trabalho com Java mas mexi com C++ na faculdade, em alguns projetos acadêmicos.
Acho uma pena que eu não tenha me aprofundado em C++ assim como o fiz em Java, mas é a vida.

Devo repetir: ignore as duas primeiras respostas, ok?
Aguarde por pessoas sensatas virem comentar, logo elas virão.

Abraços.[/quote]

Tah bom, realmente ignore o que eu disse. Agora me diga em que parte eu falei alguma bobagem/mentira?
Realmente, em um forum que ninguem conhece ninguem vem um maluco que o autor do topico nao conhece e pede pra ignorar o que outros dois membros que ele tambem nao conhece disseram deve ser muito relevante. E um detalhe bem interessante: VOCE NAO DISSE ABSOLUTAMENTE NADA. Criticou, nao teve nenhum embasamento na critica(nao citou onde eu disse algo errado) e ainda nao ajudou em absolutamente nada.
Traduzindo em muídos, nao sei pra que voce postou. Palmas pra voce! =D

Voce deve ser um pirralho que sequer respeita ninguem. Ninguem aqui é obrigado a responder nada, fazemos isso para ajudar. E eu odeio dar resposta pronta, se o cara tivesse procurando isso ele no oráculo. Eu apenas citei pontos que nao concordo na idéia dele. Nao significa que porque eu nao concordo a ideia dele está errada. Eu apenas dei a minha opiniao para que ele possa avaliar e decidir o que é melhor pra ele.

[quote=alexspe]qual a finalidade de um engenheiro civil saber programar? até vc dominar c++ para fazer softwares como vc citou(estilo cad etc)
vc ja esqueceu das aulas de engenharia que teve hehe[/quote]

Bem, eu já trabalhei na área de engenharia e posso te dizer: há varias finalidades

  • Há muito cálculo feito manualmente que pode ser automatizado, o que reduz os custos. E é interessante o engenheiro saber programar pois nem sempre consegue passar estas regras de forma clara para um programador. Sendo assim, é um plus bastante valioso.
  • É cada vez mais comum que os softwares de engenharia possibilitem a criação de plugins pra facilitar o trabalho do engenheiro. Nestes casos, saber programar é um plus também, porque você tira máximo proveito do dinheiro que investiu naquele software.
  • Um programador engenheiro já está com um plus gigante no mercado, porque diversas empresas de engenharia pagam extremamente bem a este tipo de profissional (na empresa em que trabalhava, por exemplo, isto era fato)

E eu vejo uma outra vantagem também: mesmo que você nunca programe algo útil, só o fato de estar se interessando pelo assunto já te abre a cabeça pra não ser apenas “mais um” no mercado ou na vida.

Agora, o que eu pergunto é: além da agressividade (gratuita), qual a finalidade de um comentário tão idiota quanto este abaixo?

[quote=alexspe]qual a finalidade de um engenheiro civil saber programar? até vc dominar c++ para fazer softwares como vc citou(estilo cad etc)
vc ja esqueceu das aulas de engenharia que teve hehe[/quote]

Bom, só para deixar claro o que eu quis dizer e deixando de lado as bobagens que alguns membros dizem:

Sempre pense no futuro. Nao acho adequado voce dizer “meu foco é windows”.Procure sempre manter o seu software o mais portavel possivel. Nunca se sabe e como eu disse, no quisito desempenho Windows realmente deixa muito a desejar. E hoje cada vez mais empresas tem aderido ao software livre. Isso sem falar em automatizacao que um dos grandes pontos fortes do Linux. O Shell nem se compara ao DOS o que te deixa mais proximo da maquina do que qualquer linguagem e ainda é bem facil de aprender.

E em questao de mercado, como ja foi dito, Java é mais desejável. Mas uma outra coisa importante: Nao se preocupe tanto com isso: saber programar bem já é um diferencial e tanto para um engenheiro independente da linguagem. E depois que voce tiver dominando uma linguagem certamente voce estará bom em lógica que é o que realmente importa. Linguagem acaba sendo só uma questao de sintaxe. Programei muito pouco em C++ e como ja foi dito tambem, ela tem a vantagem de manter o programador “mais proximo da maquina”, o que é meio obvio já que olhando por cima o Java em si já tem um “nível” a mais de traducao/interpretacao . Porem o custo disso é exatamente o sacrificio da portabilidade.

Deixa eu ver se entendi bem: Voce pretende desenvolver softwares de um nivel razoável pra SOMENTE VOCE USAR?
Tah de brincadeira ne?
Sem contar que se voce pretende desenvolver softwares com um bom desempenho, principalmente em java que já sacrifica um pouco do desempenho justamente em prol da portabilidade, acho melhor começar a mudar as suas idéias de Sistema Operacional. Sem querer ofender quem gosta de windows mas o desempenho dele em relacao a MAC e Linux não dá nem pra medir.[/quote]

Deixa eu ver se entendi bem: se eu for desenvolver algo pra uso próprio, tem de ser porcaria ou mediocre? Tá de brincadeira né?
Aliás, qual o problema do sujeito querer fazer algo bacana, mesmo que seja para uso próprio? E, continuando na pergunta: qual o problema com isto?

E que engraçado, um entusiasta Java que ainda fala dos problemas de desempenho da plataforma, problema este que hoje práticamente foi resolvido e, em sua maior parte é mito? Tá de brincadeira né?

Braven, o que rola é o seguinte: entre os dois, para cálculos e tal, Java é uma boa alternativa. Não te trás todos os inconvenientes do C/C++. Como plataforma, a JVM é excelente, funciona muito bem. E os tais “problemas de performance” hoje práticamente não existem, tanto é que em diversas situações, código Java possui exatamente a mesma performance que C++ (em raros casos, é inclusive superior).

A JVM também te trás como vantagem a proliferação das linguagens que tem rolado nos últimos anos. Você hoje nem precisa mais programar em Java. Pode programar em Groovy, Clojure (Clojure é excelente pra cálculos, diga-se de passagem), Scala, Javascript, etc. Há também a questão da portabilidade que, mesmo não se aplicando ao seu caso, é algo a ser levado em consideração a longo prazo também (acredite: o seu software “meia boca” de hoje vai acabar virando algo de valor no futuro, e isto conta).

Outro ponto muito legal no Java, comparado com o C++, é a facilidade de compilação. Já sofri pra daná com o make do C/C++. No Java, você além de não ter os chatos problemas de linkagem (que muito provávelmente, são decorrentes da minha própria ignorância no assunto), ainda conta com ferramentas muito legais, como o Ant, Maven, Gradle, Gant e outras, que facilitam demais da conta o processo de build.

E a linguagem também é muito mais bacana. Você não precisa, por exemplo, de arquivos de cabeçalho, como no C/C++, o que torna sua vida BEEEEM mais tranquila.

No geral, pro que você precisa, Java é uma boa alternativa. Se for para trabalhar com gráficos, há também o JOGL, que é um binding da linguagem pro OpenGL, ou mesmo a API padrão Java2D, que também é bem poderosa.

Com relação ao Windows, o suporte é bem bacana também. Este papo de “windows ser mais lento”, na esmagadora maioria das vezes é balela, principalmente no ambiente desktop. Acompanho Java desde 1997 (quando ele realmente era lento) nas plataformas Windows, Mac OS e Linux. E o que pude observar é o seguinte: quando há diferença de performance, NORMALMENTE é culpa da implementação da JVM, e não do sistema operacional.

Aliás, é engraçado este papo de que Java é superior no Mac em relação ao Windows. Eu desisti do meu Macbook justamente porque o suporte dado ao Java era horrível. A versão 6, por exemplo, só veio muuuuito tempo depois de lançada pra Linux e Windows. (quando escuto este papinho furado é que separo as crianças dos adultos).

O único grande problema que eu vejo na plataforma é a quantidade cada vez maior de adolescentes que dizem merda sem pensar (na maioria das vezes, de forma agressiva) e acabam assustando aqueles que querem entrar pra comunidade.

[quote]
Deixa eu ver se entendi bem: se eu for desenvolver algo pra uso próprio, tem de ser porcaria ou mediocre? Tá de brincadeira né?
Aliás, qual o problema do sujeito querer fazer algo bacana, mesmo que seja para uso próprio? E, continuando na pergunta: qual o problema com isto? [/quote]

Enquanto ele poderia ganhar muito mais alem de usar o software poder distribuí-lo? É muita burice pensar tao pequeno.

[quote]
E que engraçado, um entusiasta Java que ainda fala dos problemas de desempenho da plataforma, problema este que hoje práticamente foi resolvido e, em sua maior parte é mito? Tá de brincadeira né?[/quote]

UHSUAHsuaH MITO? Cara, eu que pergunto, ta de brincadeira ne? Primeiro que esse tipo de coisa quem fala é usuario windows que nunca teve contato com linux por pura acomodacao. Se voce tivesse tido o minimo de contato com os dois SO’s saberia que o Linux dá um controle infinitamente maior sobre a máquina e se voce alguma vez na vida tivesse estudado SO um pouco mais a fundo saberia que o Windows faz muita coisa porca pra gerenciar os recursos. Sem contar a fome do Windows por GUI já que os seus usuários o adoram tanto justamente por isso. Enfim, problemas praticamente resolvidos só se for na tua cabeça.

E mais uma coisinha: nao significa que por eu ser um “Entusiasta” eu possa saber menos que qualquer outro aqui. Significa apenas que eu nao passo o dia inteiro postando pro lado e pro outro porque tenho mais o que fazer. Esse “status” nao mede conhecimento e sim numero de mensagens. Nao sei o que voce quis dizer com isso…

[quote=carlos.e.a][quote]
Deixa eu ver se entendi bem: se eu for desenvolver algo pra uso próprio, tem de ser porcaria ou mediocre? Tá de brincadeira né?
Aliás, qual o problema do sujeito querer fazer algo bacana, mesmo que seja para uso próprio? E, continuando na pergunta: qual o problema com isto? [/quote]

Enquanto ele poderia ganhar muito mais alem de usar o software poder distribuí-lo? É muita burice pensar tao pequeno.

[quote]
E que engraçado, um entusiasta Java que ainda fala dos problemas de desempenho da plataforma, problema este que hoje práticamente foi resolvido e, em sua maior parte é mito? Tá de brincadeira né?[/quote]

UHSUAHsuaH MITO? Cara, eu que pergunto, ta de brincadeira ne? Primeiro que esse tipo de coisa quem fala é usuario windows que nunca teve contato com linux por pura acomodacao. Se voce tivesse tido o minimo de contato com os dois SO’s saberia que o Linux dá um controle infinitamente maior sobre a máquina e se voce alguma vez na vida tivesse estudado SO um pouco mais a fundo saberia que o Windows faz muita coisa porca pra gerenciar os recursos. Sem contar a fome do Windows por GUI já que os seus usuários o adoram tanto justamente por isso. Enfim, problemas praticamente resolvidos só se for na tua cabeça.

E mais uma coisinha: nao significa que por eu ser um “Entusiasta” eu possa saber menos que qualquer outro aqui. Significa apenas que eu nao passo o dia inteiro postando pro lado e pro outro porque tenho mais o que fazer. Esse “status” nao mede conhecimento e sim numero de mensagens. Nao sei o que voce quis dizer com isso…[/quote]

Carlos, em sua maior parte, sim, é mito (aliás, há cenários nos quais Windows fica mais rápido que Linux). E antes de falar sobre a minha experiência e tal, que tal pesquisar um pouco a meu respeito hein? Como disse anteriormente, o prolema do Java, atualmente, como todos podem ver aqui neste seu último post, são as maçãs podres da comunidade, que ao invés de ajudar, vêm com toda uma mitologia baseada no “disse não disse” que, ao invés de ajudar, simplesmente agridem os que estão chegando (os chamando de burros, como vocẽ acabou de postar (aliás, “burro” é com 2 R’s)) se dizendo muito espertos, superiores e fodásticos quando, na realidade, bastando analisar os últimos posts, basicamente só dizem merda.

E olha que legal: se você só diz que não é tão ruim o Windows, de cara é chamado de “usuário acomodado”. Não é o “máximo”? É Carlos, sua postura é “super legal”. Continue assim que seu futuro tá garantido. Troféu joinha pra você.

(reparem que interessante: nos posts do Carlos (ao contrário dos meus) não há basicamente informação alguma útil pro Braven, que veio aqui nos buscar ajuda. Eis um membro “atuante” da comunidade hein?)

Me desculpe caro amigo, mas eu nao disse que JAVA É SUPERIOR NO MAC eu simplesmente disse que MAC É SUPERIOR AO WINDOWS. São duas coisas bem diferentes. Eu separo criança de adulto por outro criterio: Aqueles que gostam/adoram GUI e aqueles que preferem o controle e desempenho.Criança adora ver “letrinha pulando na tela”. Vou abandonar essa discussao pq nao vou ganhar nada com isso. Já dei a minha opiniao relativa a pergunta do criador do topico e é só isso que interessa.

Quanto ao “buro” desculpe mas nao fico lendo e relendo minha mensagem antes de postar, e obviamente sei que é com 2 R’s. O seu texto tambem tem erros de portugues como por exemplo “prolema” mas eu nao perco meu tempo olhando isso. Mas isso foi pra desviar o foco ou foi só impressao minha? Nao se preocupe mais com o foco porque ele nao vai mais existir porque nao adianta discutir isso. Sinceramente isso que voce esta dizendo de que “windows tem desempenho superior em um caso x” tambem é “disse me disse” porque todas as experiencias que tive mostram o contrario.

[quote]
E olha que legal: se você só diz que não é tão ruim o Windows, de cara é chamado de “usuário acomodado”. Não é o “máximo”? É Carlos, sua postura é “super legal”. Continue assim que seu futuro tá garantido. Troféu joinha pra você. [/quote]

Nem posso comentar isso porque sequer entendi o que voce quis dizer. E nao precisa se preocupar com o meu futuro porque eu estar preocupado ja basta xD

[quote]
(reparem que interessante: nos posts do Carlos (ao contrário dos meus) não há basicamente informação alguma útil pro Braven, que veio aqui nos buscar ajuda. Eis um membro “atuante” da comunidade hein?) [/quote]

[sarcasmo]Desculpe, quem é mesmo que voce esta tentando convencer disso? =D[/sarcasmo]

E como eu ja disse, nao adianta ficar discutindo essas bobagens, eu sei das minhas conviccoes. Só tentei expor a minha ideia. Agora se voce concorda ou discorda me apresente pelo menos algum embasamento porque voce esta fazendo justamente o que voce disse que nao gosta: “disse me disse” sem nenhum fato concreto. E se quiser continuar a discussao vá em frente, mas eu nao digo mais nada.

Essa discussao toda me fez lembrar de uma coisa. Por esses dias eu tava tentando desenvolver um script pra alterar a prioridade dos processos(o que é uma coisa básica e muito util) no Windows para ajudar um amigo de forma que toda vez que o processo rodasse a prioridade dele fosse alterada para o maximo. Tentei fazer isso por dias, mechendo na bela interface do Windows e nao achei nada. O resultado foi que tive que dizer pro meu amigo que eu era incapaz de fazer isso. Coisa que com 20~30 linhas em shell eu faço =D. Alias eu fiz e é uma verdadeira mao na roda quando preciso fazer umas conversoes para DVD. Com isso consigo economizar mais ou menos 1 hora do meu tempo.
É por isso que as vezes eu tenho pena de quem usa Windows por isso: é cego e nao sabe, por isso eu nao te culpo Kico =D
E é por isso tambem que acho que nao vale a pena discutir contigo.

Senhores, controlem-se. Este tipo de discussão só serve para estragar a informação do tópico.
Por favor, mantenham o foco.

Bom… segue uma observação (que representa uma opinião pessoal):
Sou programador Java. E gosto de Java.
Entretanto, acho que para uma pessoa que vai trabalhar com engenharia e não quer focar em programação mas apenas dar um “plus” no currículo. Vale muito mais a pena aprender um pouco de C++ que vai deixá-lo mais próximo do controle da máquina do que aprender Java.
Entretanto… não estou assim tão por dentro do assunto embora conheça proficionais que são engenheiros e trabalham com automação industrial. Assim que eu puder, vou consultar alguém que relmente mexa com isto.

[]s

Anyway, se seu software não é de missão crítica Java lhe atenderá muito bem.
Trás muitas facilidades, mas a um certo custo.

De qualquer maneira seja bastante criterioso no seu código.
Infelizmente só terá escrito um algoritmo bem performático quando obtiver certa fluência na linguagem (inclua C++ nessa) o que leva tempo.

Sei que meu primeiro post não acrescentou o que o autor do tópico quis, mas ele não veio aqui pra discutir sistemas operacionais ou software livre.
Só prefiro alerta-lo pra que não tome como base toda a comunidade por conta de uma pequena e barulhenta amostragem.

Sistema operacional é um ponto chave no que ele veio discutir: Aplicativos para engenharia geralmente exigem uma boa performance geral do sistema incluindo o SO. E eu nao vejo nada de barulhento aqui. A melhor forma de avaliar a melhor opcao para quem esta iniciando é acompanhando uma discussao.Com isso ele pode ter uma boa ideia dos prós e dos contras. Agora o pessoal associar discussao com xingamentos e falta de respeito é outra coisa e eu só entrei nesse joguinho porque fui dar a minha opiniao e vieram me atacar sem motivo aparente. E eu detesto falta de respeito com a opiniao dos outros. Se eu tivesse vindo aqui pra fazer baderna tudo bem, mas meu objetivo desde o inicio era ajudar.

E qual o problema dele desenvolver em C++ no linux?
Se mudar de distro basta recompilar na maioria dos casos.

Não faz sentido discutir isso aqui.

Nem sempre é so recompilar. Chamadas ao SO muitas vezes tem assinaturas diferentes em compiladores diferentes, o que dizer de sistemas diferentes. Na melhor das hipoteses ele teria que refatorar tudo buscando as instrucoes que nao sao reconhecidas em um compilador e trocando somente a assinatura. Mas ha casos que sequer tem um comando equivalente. Ai ele teria muitos problemas. Isso sem falar de aplicativos que fazem chamadas diretas ao Sistema. Se fosse so recompilar nao se falava tando de portabilidade em Java.

Reconheço que acabei desviando o foco do topico mais foi porque me atacaram cara. É muito chato voce estar aqui tentando ajudar e tambem aprender e vem alguem e diz que a sua opiniao nao vale nada ou que voce esta falando bobagem. E eu ja percebi que nao sei se é alguma coisa que eu escrevo ou como escrevo o pessoal diz que eu to dizendo que a minha opiniao é a certa. Longe disso! É apenas a minha opiniao e nada mais, eu posso estar totalmente enganado e se alguem vier com argumentos provavelmente vai me convencer que estou errado.Tá todo mundo aqui tentando aprender.Eu nao tenho problemas em reconhecer quanto estou errado. Acho que vou começar a colocar no topo das minhas msg “EU ACHO” mas isso pode tirar totalmente qualquer credibilidade que possa ter o que eu digo.

Eu sou um programador experiente em Java e C++. Programo há mais de 10 anos nas duas linguagens. Boa parte da minha carreira é em sistemas de tempo real, e agora que trabalho muito com jogos, não é diferente.

Em primeiro lugar. Sobre java ser lento. É mito sim.
Ou, no mínimo, é uma observação muito mal feita. Se você é programador no ano 2011, e ainda repete essa besteira, informe-se. Você é tão desatualizado quanto aquele professor dinossauro que você reclamava na faculdade.

Eis os porquês:

  1. Java é compilado. Se você ainda acha que ele é uma linguagem interpretada, você deve ler sobre hotspot compilation. Isso está no java há alguns anos (artigo de 2004, helllooow).

  2. O processo de compilação do Java ocorre em runtime. E isso dá a possibilidade dele usar otimizações específicas do processador do usuário, de fazer inline em funções virtuais e de remover sincronização desnecessária;

  3. A maior parte dos gargalos não está na linguagem. I/O, algorítmos mau implementados e mau gerenciamento de memória são os vilões. No caso de aplicações de desenho, o gargalo estará na placa de vídeo (ou no desenho em si, ou na comunicação entre CPU e GPU), não na CPU. Por isso dei essas dicas sobre otimização.

O item 3 geralmente é mais crítico em linguagens não gerenciadas (como o C e o C++), e não é em linguagens com garbage collection (como mostrei nesse post, o Particles em java fica mais rápido e mais bonito que o mesmo escrito em C++, e eu escrevi um alocador de memória próprio para o segundo. Mas a escolha do algorítmo feita pela SDL acabou com a performance);

Em segundo, é mais fácil escrever código rápido em java. A linguagem tem profilers excelentes. Muitos melhores que os melhores profilers existentes em C++. E tudo de graça.

As reais desvantagens do java, para tempo real ou engenharia, são:

  1. Garbage collector: Ele congela a aplicação por algum tempo… um tempo muito curto. Se seu sistema é crítico ao ponto desse tempo não ser tolerável, isso inviabilizará o uso da linguagem (por outro lado, é o GC que dá performance na alocação de memória e te livra de problemas como dangling pointers e boa parte dos memory leaks);
  2. Baixa integração com o hardware. Esqueça o uso de dispositivos exóticos como mesas digitalizadores, trackballs, volantes, joysticks, etc. Você sempre dependerá de um binding;
  3. É fácil descompilar a aplicação. Embora se você for fazer seu CAD, eu não me preocuparia com isso. Pouquíssimos programadores irão entender os processos matemáticos como transformações (aliás, tema do próximo artigo que lançarei no Ponto V!), projeções, quaternions, técnicas de culling e shaders, mesmo que olhem o código fonte comentado… e muitas vezes, mesmo que comprem um livro de matemática e tentem estudar por conta o assunto.
  4. Há um número pequeno de libs prontas pra esses fins, se comparadas com as existentes em C e C++.

Para um engenheiro, acho que o C++ valoriza mais o currículo. É a linguagem mais usada em empresas de engenharia. Eu mesmo trabalhei na Siemens, e era isso que usavam (junto com Java). Na Bosch, também era o que pediam. Também vi pedirem a linguagem na construtora Caixilho, na Esteio Engenharia, e tive que usá-la em três trabalhos para civil, um numa aplicação que integrava GPSs, uma para analisar um mapa de aerofotogrametria e outra numa aplicação que usava webcam para fotografar buracos em estradas.

Com o C++, você também pode trabalhar com o DirectX (embora seja só para Windows), ou acelerar boa parte dos códigos com hardware, usando o CUDA.

Se for estudar C++, procure atualizar-se. A maioria das pessoas tem uma visão errada da linguagem, pois limita-se ao que estudou na faculdade. Se você só viu C e OO, você não viu C++. Você viu C with classes, linguagem que surgiu em 1979 e caiu em desuso em 1980.

A maior parte da evolução do C++ se deu no mecanismo de templates, na biblioteca padrão, na biblioteca boost, e em práticas de código (como uso de RAII, constness, etc). Sem falar em bibliotecas de terceiros, extremamente portáveis, como é o caso do Qt (se alguém aqui acha que o Java é multiplataforma, estude Qt). O que você viu na faculdade, é o mesmo que tentar programar em java usando somente o pacote java.lang.

O C++ é, realmente, mais otimizável que o Java, o que é diferente de dizer que seu código sairá “por padrão” mais otimizado. Se você estiver disposto a investir em otimização (e empresas de jogo e engenharia as vezes estão), você poderá escrever um gerenciador de memória próprio, usar instruções específicas de SO ou hardware, usar compiladores especialistas e até integrar com hardwares específicos (PICs, DSPs, microcontroladores, etc.) e, realmente, ter um código em C++ que, nas condições para as quais foi feito, roda muito mais rápido do que um código em Java.

Só tenha em mente que isso envolve um custo alto, e a maior parte das empresas não está disposto a pagar, quem dirá um desenvolvedor solitário.

Posso estar falando bobagem mas a diferença entre interpretar o codigo e uma “compilacao lazy”(nem sei se posso falar assim, foi o que entendi do texto) é bastante sutil…