Plataforma Java x Plataforma .net

Não só mais depressa, mas também com mais segurança.

Quando você tem recursos na linguagem que te permitem codificar com mais tranquilidade, você ganha em produtividade e poupa em manutenção. O que, no final das contas, te reduz custos. IDEs, por exemplo, só geram um ganho estético no código. Você poderia abrir mão de code completion e sintax coloring, mas você faria isso?

Nós questionamos o RAD pq, em excesso, ela é restritiva e pode gerar um código ruim. Mas RAD bem feito é mais produtivo e lucrativo do que uma aplicação sem RAD. Não é a toa que o matisse e o visual editor são populares. Eu usei o VE por anos, e era certamente muito mais produtivo com ele, do que se quisesse escrever todas as classes do Swing no braço.

Vender para clientes em mais plataformas é relevante? Bem, depende muito do que você esteja vendendo. Uma aplicação desktop, por exemplo, tem como clientes um mercado dominado em mais de 95% pelo Windows. Será que compensaria usar uma linguagem mais difícil, se estamos falando em 5% de um público provável? É como você falou, é muito difícil medir esse recurso ou aquele pelo retorno sobre investimento, porque o retorno vai variar de acordo com cada caso, cada empresa, e cada nicho de mercado. Pq retorno não envolve só informática, mas questões administrativas também.

Mercadologicamente falando*, Java tambem eh para um nicho bem estabelecido: aplicacoes comerciais de medio a grande porte rodando num servidor Unix-like. Funciona pra outras coisas? Sim, claro. Assim como .NET, que pertence a um nicho similar.

Tem ferramenta RAD, features ruins e programadores extremamente ruins nas duas plataformas quase que na mesma medida.

  • R$ 40 pra quem fizer uma camiseta com isso!

[quote=ViniGodoy]Não só mais depressa, mas também com mais segurança.

Nós questionamos o RAD pq, em excesso, ela é restritiva e pode gerar um código ruim. Mas RAD bem feito é mais produtivo e lucrativo do que uma aplicação sem RAD. Não é a toa que o matisse e o visual editor são populares. Eu usei o VE por anos, e era certamente muito mais produtivo com ele, do que se quisesse escrever todas as classes do Swing no braço.

[/quote]

É exactamente isso que eu quero dizer quando digo que falta investimento numa plataforma de aplicação.
Eu adoro swing, mas nunca escrevi uma aplicação swing no braço ou usei um drag-and-drop. Eu tinha uma plataforma que criava as telas para mim , a definição da tela era em xml ou codigo e o plumbing de eventos era automatizado pela plataforma.
Fazer a tela aparecer era sem trabalho porque por default a plataforma lia as propriedades e adicionda os campos. apenas se precisasse alterar o layout ou costumizar algum evento que precisava alterar o default.

É tão RAD ou mais que drag and drop mas tem um custo de desenvolver a plataforma. contudo, se paga rápidamente e tanto mais rápidamente quanto mais aplicações vc faz. Se vc não ter este tipo de trabalho ,vc pode usar frameworks por que fazem algo semelhante (thinlet por exemplo) , mas por muitos frameworks que vc aglutine sempre precisa haver um jeito desacoplado de os usar.

O problema com a 'lentidão" do java é a falta de compreensão de como se usam as API ( não o uso tecnico, mas o proposito delas)
O .NET supre uma parte dessa plataforma de aplicação, pela mao da MS, que ftaz algumas coisas prontas.Mas prontas do ponto de vista da MS que nem sempre é que precisamos.

Java é feito para ser uma plataforma virtual e por isso ele é generico e extensivel e as api são mais limpas e mais discutidas.
é tb por isso que existem milhentos frameworks em cima. estes frameworks são partes de uma plataforma de aplicação (componentes) que devem ser unidos com outros para produzir alguma coisa. É aqui, no mushup , que os desenvolvedores java em geral falham. Porque eles não compreendem a diferença.
em NEt com mais coisas já prontas ha menos procura pela costumização, expansão , etc… e .NET ela própria vira a sua plataforma de aplicação. Mas ela foi engendrada para isso, logo funciona. Até um certo nivel. Quando vc quiser expandir do jeito que se faz no java vc encontra limites impostos pelas apis, a documentação, etc… o ambiente como um todo.

Não concordo que java é apenas para servidores unix porque isso seria dizer que java é só JEE. O que é falso.
A maioria das aplicações são web, mas não EE e utilizam apenas os recursos do SE. Além disso temos os applets que volta e meia são solução para muita coisa no lado cliente.

Vyni, perai também né. Vamos com calma. A linguagem é um pouco mais difícil levando em considerações suas argumentações. Talvez menos que os 5% que vc está levando em consideração como publico alvo. Dependeria do tipo de aplicação claro, mas para a maioria dos casos seria uma margem muito pequena. Conheço 3 hipermercados, fora algumas lojas do varejo (incluindo multinacionais) que optaram por linux no PDV e bancada para diminuir custos. Nesse caso o .NET rodou por não ser multiplataforma e ser mais caro que o conjunto Linux + java, segundo eles. O varejo é muito chato com dinheiro. E acredite, o volume de maquinas é muito grande se somados. Sinceramente, eu não acho que o Windows ainda domine 95% do mercado corporativo, esse número deve ser menor, mas isso é achismo mesmo.

[quote=ViniGodoy]Não só mais depressa, mas também com mais segurança.

Quando você tem recursos na linguagem que te permitem codificar com mais tranquilidade, você ganha em produtividade e poupa em manutenção. O que, no final das contas, te reduz custos. IDEs, por exemplo, só geram um ganho estético no código. Você poderia abrir mão de code completion e sintax coloring, mas você faria isso?

Nós questionamos o RAD pq, em excesso, ela é restritiva e pode gerar um código ruim. Mas RAD bem feito é mais produtivo e lucrativo do que uma aplicação sem RAD. Não é a toa que o matisse e o visual editor são populares. Eu usei o VE por anos, e era certamente muito mais produtivo com ele, do que se quisesse escrever todas as classes do Swing no braço.

Vender para clientes em mais plataformas é relevante? Bem, depende muito do que você esteja vendendo. Uma aplicação desktop, por exemplo, tem como clientes um mercado dominado em mais de 95% pelo Windows. Será que compensaria usar uma linguagem mais difícil, se estamos falando em 5% de um público provável? É como você falou, é muito difícil medir esse recurso ou aquele pelo retorno sobre investimento, porque o retorno vai variar de acordo com cada caso, cada empresa, e cada nicho de mercado. Pq retorno não envolve só informática, mas questões administrativas também.

[/quote]

Adoro tudo que é Unix-like. Mas tenho que reconhecer, a briga com a Microsoft já está perdida no Desktop faz tempo. Poderiamos até dizer que o Mac OS daria para brigar de frente com o Windows se o danado não tivesse tudo enlatado em uma máquina de beleza radiante e bem cara para a tecnologia usada em termos de hardware.
Nestas horas, infelizmente, fazer um sistema desktop em .Net é mais vantagem. Não adianta a pessoa alegar licença do Windows porque, é barato quando se compra com PC novo. Mais barato ainda em quantidade. Ainda que, a pessoa prefira o Linux, o Mono para desktop também é muito bom.
Logo, concordo contigo em dizer que retorno envolvendo também questões administrativas são levadas em consideração. E produtividade também.

[quote=mvargens][quote=ViniGodoy]
Vender para clientes em mais plataformas é relevante? Bem, depende muito do que você esteja vendendo. Uma aplicação desktop, por exemplo, tem como clientes um mercado dominado em mais de 95% pelo Windows. Será que compensaria usar uma linguagem mais difícil, se estamos falando em 5% de um público provável? É como você falou, é muito difícil medir esse recurso ou aquele pelo retorno sobre investimento, porque o retorno vai variar de acordo com cada caso, cada empresa, e cada nicho de mercado. Pq retorno não envolve só informática, mas questões administrativas também.
[/quote]
Vyni, perai também né. Vamos com calma. A linguagem é um pouco mais difícil levando em considerações suas argumentações. Talvez menos que os 5% que vc está levando em consideração como publico alvo. Dependeria do tipo de aplicação claro, mas para a maioria dos casos seria uma margem muito pequena. Conheço 3 hipermercados, fora algumas lojas do varejo (incluindo multinacionais) que optaram por linux no PDV e bancada para diminuir custos. Nesse caso o .NET rodou por não ser multiplataforma e ser mais caro que o conjunto Linux + java, segundo eles. O varejo é muito chato com dinheiro. E acredite, o volume de maquinas é muito grande se somados. Sinceramente, eu não acho que o Windows ainda domine 95% do mercado corporativo, esse número deve ser menor, mas isso é achismo mesmo.[/quote]
Conheço algumas empresas que estão usando Linux. Mas lamento, muitos não são Java na tela que usam. Fora que, se for usar terminal, até Mono serve e ainda pode ser mais vantagem para acessar componentes das máquinas PDV.
[EDIT]
Procurem pelo Daruma, muito usado em PDVs.
[/EDIT]

Tudo bem, mas preferir .Net a java por causa da MS é uma coisa, agora preferir o Mono ao java por causa da MS é outra. Não faz muito sentido ja que mono não é .Net e Ms não da suporte no Mono.
É uma pena essas empresas não usarem java, estão perdendo muito dependo do que estiverem usando, mas enfim, não é widows também, o que torna meu achismo mais coerente. De qualquer forma eu achei a estratégia dessas empresas interessante.

Tudo bem, mas preferir .Net a java por causa da MS é uma coisa, agora preferir o Mono ao java por causa da MS é outra. Não faz muito sentido ja que mono não é .Net e Ms não da suporte no Mono.
É uma pena essas empresas não usarem java, estão perdendo muito dependo do que estiverem usando, mas enfim, não é widows também, o que torna meu achismo mais coerente. De qualquer forma eu achei a estratégia dessas empresas interessante.
[/quote]
Questões talvez mercadológicas ou de desenvolvimento, quem sabe? Mas acredito, pessoalmente, que foi mais fácil migrar as DLLs do .Net (que podem ter sido até feitas usando C#, quem sabe) para o Mono em PDVs da Daruma a ter de construir uma biblioteca nativa e acessível por Java (claro, o custo disso não deveria ser nada barato).

[quote=sergiotaborda]repare no método

[code]public T newInstance(){

}[/code]

Mesmo que não houvesse erasure não é possivel saber quem é T porque se trata de um método puramente co-variante.
Para este método ter acesso a algum T real o T precisa ser definido na classe[/quote]
Sérgio, há uma outra opção. Você pode explicitar o tipo de T ao chamar o método:

Assim o compilador não precisa do T definido em outro lugar para inferir o tipo.

Mais detalhes em http://cabritin.wordpress.com/2009/10/06/passagem-explicita-de-tipos-para-metodos-genericos-em-java/

[quote=tnaires][quote=sergiotaborda]repare no método

[code]public T newInstance(){

}[/code]

Mesmo que não houvesse erasure não é possivel saber quem é T porque se trata de um método puramente co-variante.
Para este método ter acesso a algum T real o T precisa ser definido na classe[/quote]
Sérgio, há uma outra opção. Você pode explicitar o tipo de T ao chamar o método:

[/quote]

Eu não me estava a referir ao método newInstance de Class. Foi um exemplo de um método qualquer… foi mal usar esse nome,
mas decorre da citação da conversa.

O fato da lentidão do java não se deve a nenhum programador medíocre. O swing torna uma aplicação java lenta, e não por sua arquitetura, mas por ser totalmente portável. O winforms do .net é um mapeamento em cima do artefato responsável pela gerência de janelas do windows. Rodando em linux, ele passa usar gtk#.

Ao meu ver, acho swing uma das coisas mais interessantes do java, por ser totalmente portável.
Se for fazer benchmark, a jvm é mais rápida que dotNet. O ponto forte do .net na minha opinião é a linguagem c# e suporte a multimedia no win, como directx.
Fora isso java campeão, sem dúvida.

A conversa sobre a “lentidão do java” é sobre a “lentidão para desenvolver em java” , o chamado time-to-market. Ninguem falou da lentidão de executar. Por favor leiam os textos com calma.

E mesmo a lentidão de execução é coisa do passado. (aliás eu nunca vi o swing ser lento)

.

A conversa sobre a “lentidão do java” é sobre a “lentidão para desenvolver em java” , o chamado time-to-market. Ninguem falou da lentidão de executar. Por favor leiam os textos com calma.

E mesmo a lentidão de execução é coisa do passado. (aliás eu nunca vi o swing ser lento)[/quote]

já tentou rodar uma aplicação swing em uma máquina com 256mb de ram?
Até na minha com 3gb sente diferença com o netbeans.

Aliás, “lentidão” ao meu ver, em termos de desenvolvimento não se aplica a java. Muito fácil e prático.

O ponto era exatamente esse, só tem sentido falar em ROI se você levar em conta o ambiente. Então, quando você fala em “mundo corporativo”, você está se referindo a que? Automação comercial? Ou industrial? Ou das corporações que fazem produtos de prateleira, para usuários domésticos?

Se for o mercado de jogos, por exemplo, a quantidade de jogadores Windows é ainda superior a essa e você vai estar, efetivamente, falando em multiplataforma para um mercado de menos de 2% dos jogadores. No de celulares, a estatística se inverte, e você vai ter quase 95% dos usuários querendo jogos em Java, já que o aparelho muda de ano em ano, e há um número sem-fim de modelos no mercado.

Em muitas aplicações caseiras, você vai ter exatamente essa estatística, ou próxima dela. Isso inclui aplicações para exibir vídeo, navegadores, messenger, etc… não é a toa que existem muito mais empresas grandes investindo em aplicações para usuário final em Windows do que em Linux, ou mesmo Mac.

Por outro lado, você pode tentar fazer algum servidor web, e nesse caso, pode ser que seja interessante suportar apenas as plataformas Unix, e deixar até mesmo o Windows de lado. Tudo vai depender do grau de interatividade com a máquina que sua aplicação exigir. Ou que seu cliente quiser.

Multiplataforma é interessante para a maior parte das aplicações de automação comercial hoje em dia. Até porque, você geralmente as instalará num parque de máquinas grande, onde você deverá suportar praticamente todo o tipo de ambiente.

Mas elas não são as únicas aplicações existentes. Certamente é um mercado grande, e trabalhando com web será praticamente o único mercado que você poderá ver em sua carreira inteira. Não estou desmerecendo, em hipótese nenhuma, nem a dimensão, nem a importância desse mercado, ou as pessoas que só atuarão nele (até pq, acho que todos nós morreremos sem atuar em todos os mercados possíveis e imagináveis).

Mas, só faz sentido em falar em ROI, ou analisar o ganho financeiro de uma linguagem, se você souber de que mercado estamos falando. Até por isso, discutir sobre linguagens é geralmente inútil. Isso volta naquela questão. Se você trabalha dentro de uma grande empresa, com servidores IIS, SQL Servers, e um parque de máquinas Windows (foi aprovado assim pela infra, não vão mudar, pois teria que mudar o manual de processos), por que você teria que desenvolver em multi-plataforma para essa mesma empresa?

O ponto era exatamente esse, só tem sentido falar em ROI se você levar em conta o ambiente. Então, quando você fala em “mundo corporativo”, você está se referindo a que? Automação comercial? Ou industrial? Ou das corporações que fazem produtos de prateleira, para usuários domésticos?

Se for o mercado de jogos, por exemplo, a quantidade de jogadores Windows é ainda superior a essa e você vai estar, efetivamente, falando em multiplataforma para um mercado de menos de 2% dos jogadores.

Em muitas aplicações caseiras, você vai ter exatamente essa estatística, ou próxima dela. Isso inclui aplicações para exibir vídeo, navegadores, messenger, etc… não é a toa que existem muito mais empresas grandes investindo em aplicações para usuário final em Windows do que em Linux, ou mesmo Mac.

Por outro lado, você pode tentar fazer algum servidor web, e nesse caso, pode ser que seja interessante suportar apenas as plataformas Unix, e deixar até mesmo o Windows de lado. Tudo vai depender do grau de interatividade com a máquina que sua aplicação exigir. Ou que seu cliente quiser.

Multiplataforma é interessante para a maior parte das aplicações de automação comercial hoje em dia. Até porque, você geralmente as instalará num parque de máquinas grande, onde você deverá suportar praticamente todo o tipo de ambiente.

Mas elas não são as únicas aplicações existentes. Certamente é um mercado grande, e trabalhando com web será praticamente o único mercado que você poderá ver em sua carreira inteira. Não estou desmerecendo, em hipótese nenhuma, nem a dimensão, nem a importância desse mercado, ou as pessoas que só atuarão nele (até pq, acho que todos nós morreremos sem atuar em todos os mercados possíveis e imagináveis).

Mas, só faz sentido em falar em ROI, ou analisar o ganho financeiro de uma linguagem, se você souber de que mercado estamos falando. Até por isso, discutir sobre linguagens é geralmente inútil. [/quote]

Com certeza. Existe uma instituição, aqui perto, em Brasópolis, O LNA. Visitei o lugar algumas vezes, e todos os softwares são desenvolvidos para linux, e usando somente ferramentas opensource. Não tem como generalizar.

http://www.lna.br

A conversa sobre a “lentidão do java” é sobre a “lentidão para desenvolver em java” , o chamado time-to-market. Ninguem falou da lentidão de executar. Por favor leiam os textos com calma.

E mesmo a lentidão de execução é coisa do passado. (aliás eu nunca vi o swing ser lento)[/quote]

já tentou rodar uma aplicação swing em uma máquina com 256mb de ram?
[/quote]

:slight_smile: Já tentou ler os requisitos minimos ?

que culpa o swing tem que o netbeans o use ? vc está confundindo a performance do netbeans com a do swing.

[quote]
Aliás, “lentidão” ao meu ver, em termos de desenvolvimento não se aplica a java. Muito fácil e prático.[/quote]

Pois é.

[quote=ViniGodoy]
Mas, só faz sentido em falar em ROI, ou analisar o ganho financeiro de uma linguagem, se você souber de que mercado estamos falando. Até por isso, discutir sobre linguagens é geralmente inútil. Isso volta naquela questão. Se você trabalha dentro de uma grande empresa, com servidores IIS, SQL Servers, e um parque de máquinas Windows (foi aprovado assim pela infra, não vão mudar, pois teria que mudar o manual de processos), por que você teria que desenvolver em multi-plataforma para essa mesma empresa?[/quote]

Porque vc sabe a primeira diretiva : software evolui.

Se vc quer “cover your assets” e vc investe num software essencial ao seu negocio, vai vai atrelar a aplicação ao uso do windows ?
Repare, é o software do seu negocio.Enquanto houver empresa esse software será usado. A longividade dele é apenas limitada pela da empresa. Quem garante quem daqui a 5, 10, 20, 50 anos o parque será windows ?

A multiplataforma e a protabilidade não se usa apenas quando o software é lançado, usa-se principalmente daqui a muitos anos (a cada geração).

E tem mais. Supondo que vc usa .NET quando sair outra versão, para o mesmo windows, vc tem que escrever tudo de novo,ou usa uma tecnologia primitiva para sempre, aka sistema legado.

Em pouca palavras :NET não tem longividade. Mas longividade é vital para proteger o seu investimento.

Ser completamente carregado no heap da vm?
Aliás o netbeans é muito bem projetado.

Sobre requisitos de sistema. A maioria dos softwares rodam com 256, menos softwares swing.

Na verdade, o .net tem uma VM, assim como o Java. Portanto, ele também é multi-plataforma, e não depende de nenhuma versão específica de Windows.

Para o mercado de automação comercial, concordo com você. Aliás, nunca neguei isso.

Mas há outros mercados (automação industrial, aplicações científicas, jogos, sistemas de segurança), onde é muito mais viável atrelar sua aplicação ao SO. Se você for usar Java, não será o fator multi-plataforma que terá o maior peso e sim o “resto” (API extensa, muita coisa free, linguagem gerenciada, etc).

Aliás, usando Java, você também está atrelando sua aplicação a algum tipo de plataforma, no caso, a VM Java. Se o suporte a essa VM cair no ostracismo, certamente o Java morrerá junto. Isso é um pouco mais difícil, já que existe uma comunidade por trás de tudo e a VM é um software, não um hardware. Mas não seria o primeiro caso de uma linguagem que “morreria” porque sua principal empresa (que dava credibilidade, força e coordenava o desenvolvimento) parou de mante-la.