Por que Java?

44 respostas
S

Oi pessoal. Eu estava discutindo esses dias com um colega meu que estava querendo me convencer de começar a desenvolver em C / C++ e deixar de lado Java. A minha unica resposta que eu dei pra ele foi, “Eu ja comecei em Java, agora vou tentar ir mais a fundo. N dà pra trocar de liguagem toda hora, eu prefiro escolher uma e ser bom naquela linguagem, do que ficar pulando”. Fora que ele sabe programar em C / C++, mas ja faz uns 2 anos que ele nap programa nessas linguagens.
Mas mesmo assim fiquei me perguntando, “pq n mudar”. Um dos motivos para eu continuar em Java (alem de ter a ideia de me fixar em uma sò linguagem) é que por exemplo, Java é uma otima liguagem para fazer aplicaçoes web, e que eu saiba, em C nao tem essa facilidade.
Andei procurando na net alguns artigos, mas a maioria é antigo. Achei tb na internet q Java é a linguagem mais popular de uns tempos pra ca, mas a popularidade n seriaum diferencial muito grande pra mim.
E vcs? Por que Java? Por que n C \ C++?

Até mais!

44 Respostas

R

C e C++ = Programar para hardware
Java = Programar para web/desktop (sistemas comerciais normalmente)

Resumindo:

Se você quer programar para web esqueça C e C++. Vá de Java, Ruby, PHP, .Net…
Se você quer programar para maquina esqueça Java (você talvez até consiga fazer algo mas ficará bastante limitado) o caminho é o C e C++.

P

Ola,

Como disse o RafaelViana, cada Plataforma e, consequentemente, linguagem, tem sua aplicabilidade.
Portanto, primeiramente ha duas perguntas fundamentais para serem feitas para si mesmo:

1a) Eu realmente quero desenvolver software?

Caso a resposta seja positiva:

2a) “Que tipo de software eu quero desenvolver?”

Uma vez respondido isso, seguem alguns exemplos:

Plataforma Java / JEE => Aplicacoes corporativas com diversos niveis de complexidade com requisitos variaveis de performance,
disponibilidade, integridade, escalabilidade, extensibilidade, manutenabilidade e gerenciabilidade.

Plataformas C/C++ => Programacao de medio/baixo nivel (compiladores, processadores de imagens, video, som, etc),
software embarcado, programacao de sistemas em tempo real, interfaces com hardware, sistemas operacionais, drivers, etc.

.NET => Cadastros de padaria, borracharias, pet-shops (de pequeno porte, obviamente), etc :slight_smile:

[ ]'s

M

alem do mais a linguagem a ser utilizada depende aplicação a ser construida, dependendo do problema Java não seria a melhor escolha, como mostrado pelos colegas anteriormente.

S

Como um ditado que diz

"se a sua única ferramenta de trabalho é um martelo todos os seus problemas deverão ser tratados como um prego. "

Resumindo, cada problema pode exigir uma ferramenta/linguagem/metodologia diferente. Cabe ao Analista/Desenvolvedor/Arquiteto avaliar a facilidade ou não de aplicar determinadas tecnologias ou não.

Particularmente acho que todas as linguagens tem o seu espaço basta saber aplica-las.

A

Oi brother,

Veja:

1 - Java é a linguagem mais usada no “Mundo”;
Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

2 - Cerca de 90% de Java está para Web; E Internet como deve saber é a tecnologia do momento,
principalmente para a maioria de nós que faz parte da tal Geração Y -> http://pt.wikipedia.org/wiki/Geração_Y.
Fonte: http://www.guj.com.br/posts/list/48656.java

Conhecer C (estruturado) e/ou C++ (orientado à objeto) programação baixo nível ex: Windows XP que é em C. A primeira pergunta é ser tomada é: “Qual é meu objetivo?”

M

Se for uma aplicação comercial, a probabilidade do Java ser a melhor escolha, acho eu… é de uns 80%

Java na veia !!!

A

acho que vc apelou!!! para estes estabelecimentos acima seria ideal o Delphi7!!! hehehe

F

santanna106:
Como um ditado que diz

"se a sua única ferramenta de trabalho é um martelo todos os seus problemas deverão ser tratados como um prego. "

Resumindo, cada problema pode exigir uma ferramenta/linguagem/metodologia diferente. Cabe ao Analista/Desenvolvedor/Arquiteto avaliar a facilidade ou não de aplicar determinadas tecnologias ou não.

Particularmente acho que todas as linguagens tem o seu espaço basta saber aplica-las.

Ta aí a resposta, pode até trancar o tópico.

J

Existem coisas que são mitos:

  1. A portabilidade do java comparada com a do c++:
    C++ é usada numa gama muito maior de dispositivos que java. Existem compiladores c++ para a maioria dos dispositivos todos os SOs, fora frameworks multiplataforma que se propõe fazer o que o swing faz.

http://qt.nokia.com/
http://www.wxwidgets.org/
http://www.gtk.org/

  1. C++ ou C é só para Hardware:
    Isso é uma conversa fiada que não tem tamanho. A grande maioria das aplicações é escrita em c++ ou c. Quando se diz aplicação, é aplicação de qualquer tipo, desde um simples paintbrush ou notepad(bloco de notas) a um media player.

  2. C++ não é para web:
    Um mito também.
    http://www.webtoolkit.eu/wt

Vantagens do java são:

  1. Coleta automática de recursos (Coletor de lixo):
    Simplifica o desenvolvimento de software deixar transparente a gerência de memória. Isso também reduz o trabalho de se otimizar um programa.

  2. Linguagem Totalmente Orientada a objetos e simples;

  3. Ótimas ferramentas de desenvolvimento OpenSource

Vale lembrar que no mercado um profissional c++ é bem mais caro que um java.

As pessoas se esquecem é que o que faz um bom software não é a linguagem mas o profissional que desempenha o papel de arquiteto, engenheiro ou projetista.

É possível escrever qualquer tipo de software com qualquer linguagem, desde que se tenha know how para isso.

W

RafaelViana:
C e C++ = Programar para hardware
Java = Programar para web/desktop (sistemas comerciais normalmente)

Isso nao faz muito sentido, C e C++ nao eh sinonimo de programacao baixo nivel, escovacao de bits e etc… Claro que o C/C++ eh bastante usado na area de hardware, mas tem muitas outras coisas que vc pode desenvolver com essas linguagens, que vao desde hardware, passando por software de engenharia, computacao grafica, jogos, aplicativos comerciais.
A primeira vez que eu desenvolvi algo parecido com uma aplicacao web foi em C, eu tinha uma pagina que cadastro que passava dados pra um programa C por CGI. Hoje existe coisas muito mais avancadas, se vc pegar o .NET Framework por exemplo, a grande maioria desenvolve coisas em C# e VB mas tem empresas que usam C++ tb, sem problemas.

Agora porque java ou porque C++. Vai de voce. C++ e Java tem muitas similaridades, mas o Java tem uma “curva de aprendizado maior” (yaaaa!! finalmente consegui usar essa frase tao usando pelo povo do forum que quer falar bonito pra encher linguica hahaha).

Na minha opiniao fala a pena aprender as duas, ou pelo menos aprender uma bem e ter um conhecimento basico da outra… eu escolheria o Java porque eh mais facil pra aprender, tem muitas empresas usando, tem bastante informacao na net, forums, sites, projetos opensource de montes, entao eh bem mais vantajoso se especializar nisso.

//Daniel

A

Recomendo fazer o curso abaixo:

http://www.ime.usp.br/~verao/index.php?secao=difusao&anoID=1&

Introdução à Programação / Tópicos de Programação

D

Por que eu quero.
Você pode escolher, tem as opções…
Eu prefiro java, por não curtir muito os famosos cursores…
Mas se fosse só por isto, acho o desenvolvimento bem mais ágil.
Remuneração é algo com dois lados, não sei se vale a pena ganhar muito mais em C/C++ e viver frustrado, prefiro ganhar menos e fazer o que eu gosto, que é trabalhar com java.
Quando eu quiser ganhar dinheiro, vou ser analista SAP ou trabalhar com .NET

V

Só um comentário. Não existe “C/C++”. Existem é duas linguagens, uma chamada C, outra chamada C++. Elas ocupam nichos de mercados diferentes e tem características muito diferentes. Aliás, programar em C++ usando a sintaxe do C, é considerado um problema grave. Se você ouvir alguém falando das duas como se fosse a mesma coisa, tenha certeza: a pessoa não sabe do que está falando.

Há poucos contextos onde você pode se referenciar assim.

O C é muito mais usado para sistemas operacionais, firmware, drivers, e APIs de tempo real. Aliás, praticamente tudo que enquadraram o C++ aí em cima quando falaram em “C/C++”. Ele perdeu muito espaço em aplicações desktop hoje em dia para o C++.

O C++ praticamente não é usado em hardware, principalmente a parte OO. Seu forte mercado é mesmo o de aplicações, incluindo praticamente toda a indústria de jogos, navegadores, players de vídeo e música, editores de imagens, IDEs… aliás, praticamente todos os softwares de prateleira. Ele tem baixa penetração no mercado de hardware, embora existam esforços nesse sentido. Existe o uso do C++ em firmware, mas usando apenas o subset estruturado do C++, sem a STL, e alguma coisinha de templates, o que é praticamente equivalente a se programar em C.

É muitíssimo mais difícil programar em C++ e em C do que em Java, C#, ou qualquer outra linguagem gerenciada. Se por um lado você ganha mais controle, como a gerência de memória, ou acesso direto ao SO, por outro você paga um preço muito alto para isso. Erros nessas linguagens geram menos informações de debug, você tem muito mais problemas com buffers underuns, dangling pointers, memory leaks, etc. São problemas bem mais difíceis de se corrigir.

Por outro lado, linguagens como C e o C++ permitem escrever sistemas que dão garantias de tempo real, e usem absolutamente todos os recursos de uma plataforma até seu último suspiro. Se usadas corretamente, tanto o C quanto o C++ permitem a recompilação num número gigante de plataformas, muito maior do que o Java sequer sonha (só a título de exemplo, aplicações com a SDL são portáveis para os seguintes SOs: Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, QNX, AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS e OS/2).

Para aplicações comerciais, não vejo porque você deveria abrir mão de garbage collection e de uma linguagem gerenciada, como Java ou C#. São linguagens mais fáceis de programar, menos sujeitas a erro, facilmente portáveis de boa performance, de grande comunidade e já com muita estrutura implementada, seja para web ou desktop (containeres web, drivers de BD e diversas APIs). Do ponto de vista de gerencia de projetos, é mais fácil achar profissionais para essas linguagens e esses profissionais custam geralmente mais barato. Do ponto de vista pessoal, o salário pode ser um pouco menor, mas há muito mais empregos disponíveis.

Escrevi um artigo no Ponto V sobre o uso de Java e C++ pra jogos: Ponto V! - Java no desenvolvimento de jogos

V

O .Net é o principal concorrente do Java. Pode-se fazer com ele qualquer coisa que se faz em Java, com a mesma facilidade.
Ele também é uma plataforma, não uma linguagem.

E em termos de linguagem, o C# é, na minha opinião, mais confortável de se programar que o Java.

P

Tb concordo, mas também nos pagamos$ para isto. néh!!..

V

andredecotia:
1 - Java é a linguagem mais usada no “Mundo”;
Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Esqueça esse índice. Ele só indica o quanto a linguagem aparece em mecanismos de busca. E nunca deram uma explicação convicente sobre como separam o C do C++.

V

Pagamos é? O Visual C# Express é completamente gratuito, assim como a linguagem C#.
Você pode pagar é por versões melhores do Visual Studio, como muita gente já pagou pelo EasyEclipse.

Mas não vejo grandes problemas em pagar por um produto, desde que seja bom.

A

Que excelente explicação Vini… Deu até “água na boca” de estudar C++… hahaha :smiley:

W

bla bla bla…

Soh escrevi assim pra simplificar eh um saco ficar escrevendo C e C++ 1000 vezes.

A

Só acendendo um isqueiro… Hehe, acho que não. OO puro é Ruby e Python. Java existem umas catástrofes muito toscas.

Ponto final. Falou tudo.

J

bla bla bla…

Soh escrevi assim pra simplificar eh um saco ficar escrevendo C e C++ 1000 vezes.

C ou C++, já que são sintaxes diferentes.

Como o vini falou ae, c++ não é usado para hardware porque o compilador gera assemblyes muito grandes para pequenos dispositivos, como microcontroladores. É preciso remover muita coisa da especificação do c++ para deixá-lo apto para isso, e se for para remover é preferível usar c.

V

Não estava falando de você. Até pq, vc não fala delas como se fossem coisas iguais.

E

Concordo, mas Hard Real Time em Java é plenamente possível usando a RTSJ e/ou GCs realtime, como o Metronome da IBM.

Além disso, a maior parte das plataformas que você citou ou são cobertas por Java ou são nichos de mercado minúsculos ou já morreram. Se houver uma plataforma onde seja realmente interessante rodar Java, alguém irá desenvolver uma VM para ela.

Não sou contra C/C++ (oooops…) nem fanzoca do Java, mas acho que esses dois pontos mereciam uma ressalva.

L

Por que Java?

É que quem trabalha com Java é pirusudo!

V

O problema de Real Time com java é que ele é sempre possível “com ressalvas”. A RTSJ, por exemplo, não recebe atualizações desde 2009. A maioria não é exatamente java standard (o que pode gerar um processo da Oracle). E a maioria só dá garantias de soft-real time, não hard-realtime.

O problema é sempre esse. Você só pode ir para uma plataforma se alguém se der ao trabalho de escrever uma VM para ela. Enquanto é praticamente um padrão da indústria escrever um compilador C para sua plataforma. Se tiver uma cafeteira com um microprocessador dentro, você será capaz de escrever um software em C para ela.

A

O .Net é o principal concorrente do Java. Pode-se fazer com ele qualquer coisa que se faz em Java, com a mesma facilidade.
Ele também é uma plataforma, não uma linguagem.

E em termos de linguagem, o C# é, na minha opinião, mais confortável de se programar que o Java.

Bom em relaçao ao .NET e Java, na minha opinião, se a questão principal é produtividade de programação acho que .NET eh melhor em uns 30% em relação ao Java. Em relação a perfomance, acho o Java melhor em uns 20% do .NET. Em relação a portabilidade, principalmente linux e windows, Java está na frente em uns 70% em relação ao .NET.
Somente minha opinião…

E

Vini,

Não concordo com a relação entre a atualização de uma especificação e a validade dela. Afinal, o ANSI C não é atualizado há 10 anos.

A IBM possui uma versão real time do Websphere que implementa a RTSJ.

Acho que o maior problema de usar Java para soluções real time hoje ainda é a falta de programadores Java que tenham experiência em real time.

J

esmiralha:
ViniGodoy:

linguagens como C e o C++ permitem escrever sistemas que dão garantias de tempo real, e usem absolutamente todos os recursos de uma plataforma até seu último suspiro. Se usadas corretamente, tanto o C quanto o C++ permitem a recompilação num número gigante de plataformas, muito maior do que o Java sequer sonha (só a título de exemplo, aplicações com a SDL são portáveis para os seguintes SOs: Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, QNX, AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS e OS/2).

Concordo, mas Hard Real Time em Java é plenamente possível usando a RTSJ e/ou GCs realtime, como o Metronome da IBM.

Além disso, a maior parte das plataformas que você citou ou são cobertas por Java ou são nichos de mercado minúsculos ou já morreram. Se houver uma plataforma onde seja realmente interessante rodar Java, alguém irá desenvolver uma VM para ela.

Não sou contra C/C++ (oooops…) nem fanzoca do Java, mas acho que esses dois pontos mereciam uma ressalva.

Existe uma diferença entre dispositivos microcontrolados e microprocessados. O java ou c++ não se encontram no primeiro(até se encontram , mas é um ou outro dispositivo caríssimo). Como são inúmeras as plataformas e inúmeras as empresas é muito mais simples manter compiladores do que vms.

J

esmiralha:
Vini,

Não concordo com a relação entre a atualização de uma especificação e a validade dela. Afinal, o ANSI C não é atualizado há 10 anos.

A IBM possui uma versão real time do Websphere que implementa a RTSJ.

Acho que o maior problema de usar Java para soluções real time hoje ainda é a falta de programadores Java que tenham experiência em real time.

Não não, até porque no quesito realtime o fator plataforma influencia muito. O problema não é nem tanto os programadores não acostumados com esse ambiente, mas a própria plataforma java mesmo.

Além do mais manter uma linguagem(compilador) iso é mais simples que uma vm.

Isso pode ser uma das razões de não mexerem no padrão ANSI C.

V

A diferença fundamental aqui é o que o Julio citou. Você depende diretamente da implementação do RTSJ para chegar ao Real Time usando o java. Mas você não depende do compilador ANSI C para isso. Como o C dá um acesso muito direto, você precisa é conhecer o hardware onde ele está rodando.

Esse é um problema para o real time no geral. heheheheeh

J

A diferença fundamental aqui é o que o Julio citou. Você depende diretamente da implementação do RTSJ para chegar ao Real Time usando o java. Mas você não depende do compilador ANSI C para isso. Como o C dá um acesso muito direto, você precisa é conhecer o hardware onde ele está rodando.

Esse é um problema para o real time no geral. heheheheeh

nenhuma empresa vai gastar recursos para criar uma jvm para um produto específico. A fabricante do hardware vai ceder um sdk no máximo.

A não ser que criem um compilador(que já existem para alguns micros) para linguagem java que gere código do hardware, ou o próprio hardware implemente a especificação java(uma jrm).

P

Pagamos é? O Visual C# Express é completamente gratuito, assim como a linguagem C#.
Você pode pagar é por versões melhores do Visual Studio, como muita gente já pagou pelo EasyEclipse.

Mas não vejo grandes problemas em pagar por um produto, desde que seja bom.

Nunca tinha ouvido falar nisso!! Eu achava que o c# em uma empresa comercial precisava comprar a licença para uso.
Agora o C# por si só, sem o asp.net não tem suporte a web como o J2EE… ou tb estou errado ?//

E

A diferença fundamental aqui é o que o Julio citou. Você depende diretamente da implementação do RTSJ para chegar ao Real Time usando o java. Mas você não depende do compilador ANSI C para isso. Como o C dá um acesso muito direto, você precisa é conhecer o hardware onde ele está rodando.

Esse é um problema para o real time no geral. heheheheeh

nenhuma empresa vai gastar recursos para criar uma jvm para um produto específico. A fabricante do hardware vai ceder um sdk no máximo.

A não ser que criem um compilador(que já existem para alguns micros) para linguagem java que gere código do hardware, ou o próprio hardware implemente a especificação java(uma jrm).

Como assim? Várias grandes empresas que investem em Java tem uma versão própria da JVM. A IBM até criou uma específica para um produto: o Websphere Real Time.

W

bla bla bla…

Soh escrevi assim pra simplificar eh um saco ficar escrevendo C e C++ 1000 vezes.

C ou C++, já que são sintaxes diferentes.

Serio?!?!!? Ta brincando!!! Ahhhhh agora eu descobri porque os meus programas C nao compilam. :frowning:

J

A diferença fundamental aqui é o que o Julio citou. Você depende diretamente da implementação do RTSJ para chegar ao Real Time usando o java. Mas você não depende do compilador ANSI C para isso. Como o C dá um acesso muito direto, você precisa é conhecer o hardware onde ele está rodando.

Esse é um problema para o real time no geral. heheheheeh

nenhuma empresa vai gastar recursos para criar uma jvm para um produto específico. A fabricante do hardware vai ceder um sdk no máximo.

A não ser que criem um compilador(que já existem para alguns micros) para linguagem java que gere código do hardware, ou o próprio hardware implemente a especificação java(uma jrm).

Como assim? Várias grandes empresas que investem em Java tem uma versão própria da JVM. A IBM até criou uma específica para um produto: o Websphere Real Time.

Sim. Grandes empresas, produtos específicos, hardwares diferentes. Você nunca vai ver uma jvm rodar em tempo real de verdade. Para o bytecode rodar em tempo real a especificação do java deve vir implementada no hardware, como alguns microprocessadores que são otimizados para isso( A própria JME em celulares é uma real machine).

J

bla bla bla…

Soh escrevi assim pra simplificar eh um saco ficar escrevendo C e C++ 1000 vezes.

C ou C++, já que são sintaxes diferentes.

Serio?!?!!? Ta brincando!!! Ahhhhh agora eu descobri porque os meus programas C nao compilam. :(

Por isso que são dois compiladores diferentes. O gcc e o g++.

E

Julio,

como assim nunca vamos ver uma jvm rodar em tempo real? O produto já existe. É um fato.

V

Dá uma olhada: http://david.tribble.com/text/cdiffs.htm

Sem falar que o estilo de programação C++ é muito diferente.
Várias práticas do C tem construções melhores e mais seguras.

V

O problema de hard-real time e Java é o garbage collector. Nenhuma aplicação hard-real time resiste a um “congelamento do mundo por tempo indeterminado, a qualquer momento”.

As VMs hard-real time podem dar as seguintes garantias:

  1. Permitir que o desenvolvedor rode manualmente o gc(). E isso foge a especificação da VM padrão da Oracle (e, portanto, a Oracle vai te processar). Não é à toa que muitas VMs hard-real time são experimentais, não são recomendadas pelos criadores, e geram diversos requisitos de implementação;

  2. Dar a VMs metas máximas de execução. É uma abordagem desejada no garbage-first garbage collector. A garantia da VM ainda é fraca e o momento que o gc vai rodar ainda é indeterminado. Desde que seu sistema hard-realtime possa sofrer o atraso máximo do gc no seu pior método, essa abordagem é viável (mas isso ainda deixará o java muito distante de um sistema hard-realtime em C);

É o preço que se paga por ter um gc.

O julio está se referindo a hard-real time, não a soft-real time. A maior parte das VMs que você vê por aí, inclusive a do websphere, não dá garantias de hard. E as que dão, não seguem a especificação do java à risca. Só vamos ter uma hard-realtime se mudarem a especificação.

M

Porque não voltar ao assunto original do tópico. Realtime hard ou soft é requerido por menos de 1% das aplicações.

M

leo_mf:
Por que Java?

É que quem trabalha com Java é pirusudo!

Será que o banner do Boston Medical Group que estou vendo no site do GUJ é devido a esse comentário? rs

E

Vini,

Então, a Oracle vende o Java Real Time System que roda em solaris 10, suse e redhat, dizendo que ele suporta requerimentos hard real time. A IBM também dá garantias de hard real time no WAS, que é um produto não só suportado, como comercializado.

W

bla bla bla…

Soh escrevi assim pra simplificar eh um saco ficar escrevendo C e C++ 1000 vezes.

C ou C++, já que são sintaxes diferentes.

Serio?!?!!? Ta brincando!!! Ahhhhh agora eu descobri porque os meus programas C nao compilam. :(

Por isso que são dois compiladores diferentes. O gcc e o g++.
http://pt.wikipedia.org/wiki/GNU_Compiler_Collection

hahaha Desculpa, estava so sendo ironico, eu programo em C e C++ desde mil novecentos e bolinhas. :wink:

V

Sim, como eu falei, desde que sua aplicação hard-real time seja capaz de suportar a meta que você estipular para o gc, será possível fazer real time em java. Como o garbage collector dessas VMs é determinístico, você pode estimar com relativa precisão qual será o atraso máximo.

Agora, certos tipos de aplicação, como aplicações para processamento de imagens, de telefonia e de controle tem requisitos muito inferiores ao melhor que esses gcs podem fazer. Uma esperança no projeto garbage first era jogar o gc para processadores paralelos, reduzindo drasticamente o tempo que ele manteria a aplicação interrompida.

Só para você ter uma idéia, uma aplicação que trabalhei tinha um requisito de hard-real time de 13ms. Era o tempo de rodar a CG e a IA. Um gc que rodasse ali no meio, teria que fazer em pouco menos de 2ms.

Criado 23 de novembro de 2010
Ultima resposta 25 de nov. de 2010
Respostas 44
Participantes 18