Evento, Java x .NET

Comentários técnicos de comparações entre as plataformas Java e .NET – Parte 2

Autor: Rogério Moraes de Carvalho
Data da publicação: 29/07/2009

Artigos da série Comentários técnicos de comparações entre as plataformas Java e .NET

Parte 2

Seguem mais algumas afirmações reais sobre as plataformas Java e .NET sem fundamentação e os meus comentários técnicos. As afirmações podem ter sido feitas em artigos, em comentários de artigos ou em debates de grupos de discussão.

AFIRMAÇÃO 4 (retirada de um artigo)

"Além disto, nada na Microsoft é open source."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 4

A afirmação 4 foi feita no mesmo artigo de onde foram retiradas as afirmações 1 a 3.

A Microsoft não somente tem diversos projetos open source, como criou um Web Site para hospedar projetos open source denominado CodePlex. O site pode ser acessado no seguinte endereço: http://www.codeplex.com. Inclusive, diversos dos projetos open source hospedados no CodePlex têm participação do time de desenvolvimento da Microsoft. Seguem exemplos de alguns projetos open source importantes hospedados no CodePlex: ASP.NET MVC, AJAX Control Toolkit, Silverlight Toolkit, DotNetNuke, SQL Server 2008 Sample Databases e DotNetZip, isto somente para citar alguns.

AFIRMAÇÃO 5 (retirada de um artigo)

"A grande diferença entre o J2EE e o .NET é que desde que o .NET suporta apenas Win32, um número maior de máquinas se faz necessário, comparando ao J2EE, devido às limitações dos processadores."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 5

A afirmação 5 foi feita no mesmo artigo de onde foram retiradas as afirmações 1 a 4.

A afirmação de que a plataforma .NET somente suporta Win32 (arquitetura 32-bit) é completamente errada.

Atualmente, a plataforma .NET está na versão 3.5 SP1.

O Microsoft .NET Framework 3.5 Service Pack 1 (SP1) suporta as seguintes arquiteturas de processador:

  • x86
  • x64
  • ia64 (64-bit Intel Itanium architecture) (somente suportada com o Windows Server 2008)

O Microsoft .NET Framework 3.5 Service Pack 1 (SP1) suporta os seguintes sistemas operacionais:

  • Microsoft Windows XP
  • Microsoft Windows Server 2003
  • Windows Vista
  • Windows Server 2008
  • Windows 7

Informações mais detalhadas podem ser encontradas no documento Microsoft .NET Framework 3.5 Service Pack 1 (SP1) Readme, disponível no seguinte endereço: http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/dotNet35SP1Readme.htm.

AFIRMAÇÃO 6 (retirada de um artigo)

"Em um fator de extrema importância, como velocidade de desenvolvimento, o .NET leva grande vantagem. A sua IDE proprietária, o Visual Studio, é baseado em RAD (Rapid Application Development), aumentando a agilidade na construção de aplicações. O Visual Studio .NET inclui várias ferramentas interessantes em termos de produtividade, como por exemplo o Web Forms. Estima-se que um projeto criado do zero, leve-se de 10% a 20% menos tempo para entrar em produção quando desenvolvido em .NET."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 6

A afirmação 6 foi feita no mesmo artigo de onde foram retiradas as afirmações 1 a 5.

Este trecho corresponde a uma opinião pessoal do autor sem nenhuma base técnica.

A questão de o Visual Studio ser mais produtivo que os IDEs de Java é bastante discutível. Na realidade, a discussão está bem longe de ser simples como sugere o autor. Qualquer estimativa que não leve em consideração as características do projeto de software a ser desenvolvido será uma mera especulação sem a menor credibilidade. Além disto, em comparações de produtividade entre IDEs deve-se isolar e comparar recursos equivalentes individualmente.

Somente para citar um recurso, a última versão do IDE NetBeans (6.7) tem um suporte muito maior a refactoring que a última versão do Visual Studio (2008 SP1). E a última versão do IDE do Eclipse (3.5.0 – Galileo) ainda supera o NetBeans 6.7 neste quesito. Certamente, refactoring é um recurso essencial para aumentar a produtividade em projetos corporativos com arquiteturas complexas. Além disto, os refactorings do Eclipse são projetados para sugerir melhores práticas de programação orientada a objetos, superando o Visual Studio em alguns refactorings individuais.

Observe que seria um absurdo eu concluir que os IDEs NetBeans 6.7 e Eclipse 3.5.0 são mais produtivos que o IDE Visual Studio 2008 SP1 pelo simples fato de terem um suporte muito superior ao recurso de refactoring. Assim como é mais absurdo ainda o autor concluir que o Visual Studio é mais produtivo, sem nem mesmo citar com que IDEs Java está comparando e nem as versões usadas na análise dele. Pior ainda, o autor ainda é capaz de deduzir uma redução de 10% a 20% no tempo gasto para um sistema entrar em produção quando desenvolvido em .NET, em relação à Java, sem nem sequer contextualizar o projeto a ser desenvolvido e nem os IDEs Java a serem utilizados. Ou seja, esta afirmação é completamente desprovida de significado técnico.

AFIRMAÇÃO 7 (retirada de um fórum)

"Se você considerar só a IDE realmente é de 10% a 20% a menos. Se considerar que no Java usam-se 300 frameworks para fazer uma coisa, e que cada vez que você contrata um desenvolvedor precisa ensinar ele a usar o framework que você utiliza, já perde mais uns 10%. Colocando outras possibilidades, como delegates, enums (que o Java só recebeu recentemente), LINQ, etc, vai mais uns 10%. Ou seja, dá uma produtividade de até 40% a mais… Ainda bem que desenvolvedor é barato, e que o caro é máquina, não é? Ops, acho que é o contrário…"

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 7

A afirmação 7 foi feita num fórum e corresponde a uma resposta à afirmação 6.

Na afirmação 6, o autor do artigo tirou uma conclusão sem o menor fundamento técnico e sem contextualização, chutando uma porcentagem de 10% a 20% no tempo gasto a menos para um sistema entrar em produção quando desenvolvido em .NET.

Porém, o comentário da afirmação 7 pode ser considerado até mesmo mais absurdo que o escrito na afirmação 6. Este tipo de comentário da afirmação 7 exemplifica, de forma bem clara, a idéia destacada no parágrafo abaixo.

Na maioria das vezes, estes debates deixam a parte técnica de lado e passam a conter disputas de ego. Neste cenário, a precisão técnica da informação passa a ser secundária, pois o mais importante é tentar convencer que uma das plataformas é superior à outra independente de contexto. Em geral, estes debates são carregados de ironias que não acrescentam nada, além de conter diversas informações erradas.

O parágrafo destacado acima foi retirado da introdução desta série de artigos.

Na afirmação 7, as porcentagens são chutadas exatamente como fez o autor do artigo original. Somente para destacar uma parte: "Colocando outras possibilidades, como delegates, enums (que o Java só recebeu recentemente), LINQ, etc, vai mais uns 10%.".

O radicalismo da afirmação 7 também fica claro na declaração de que muitas opções de frameworks para fazer a mesma coisa é prejudicial para a produtividade. Observem aqui uma inversão de valores, uma vez que ter muitas opções passou a ser uma desvantagem. Curiosamente, a própria plataforma .NET já tem diversos frameworks para fazer as mesmas coisas. Principalmente em projetos de frameworks open source com recursos similares aos fornecidos pela Microsoft no .NET Framework. Porém, o autor da afirmação 7 somente consegue enxergar este problema na plataforma Java.

Rogério Moraes de Carvalho
Twitter: @rogeriomc

Evento, Java x .NET

Comentários técnicos de comparações entre as plataformas Java e .NET – Parte 1

Autor: Rogério Moraes de Carvalho
Data da publicação: 05/07/2009

Artigos da série Comentários técnicos de comparações entre as plataformas Java e .NET

Parte 1

Seguem algumas afirmações de comparações entre as plataformas Java e .NET sem fundamentação e os meus comentários técnicos.

AFIRMAÇÃO 1 (retirada de um artigo)

"Prosseguindo com a sequência de colunas sobre as comparações entre linguagens de programação, neste artigo vamos comparar o Java ao .NET."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 1

Como se pode observar, a afirmação acima está considerando Java e .NET como linguagens de programação.

A afirmação não pode ser considerada incorreta por considerar Java uma linguagem de programação. A tecnologia Java tanto é uma linguagem de programação quanto uma plataforma. Portanto, o sentido da palavra "Java" dependerá do contexto em que ela está sendo utilizada. Se o contexto deixar dúvidas com relação ao significado da palavra "Java", então se deve escrever de forma explícita: "Linguagem Java", "Linguagem de programação Java" ou "Plataforma Java", por exemplo. É importante ressaltar que a linguagem Java faz parte da plataforma Java.

Porém, a afirmação está completamente errada quanto a considerar .NET uma linguagem. Afinal de contas, .NET não é uma linguagem de programação, mas sim uma plataforma desenvolvida pela Microsoft. Portanto, a comparação não poderia ser entre Java e .NET, mas sim entre Java e C# ou Java e Visual Basic para .NET, isto para comparar uma linguagem da plataforma Java com uma linguagem da plataforma .NET. E para o artigo ser preciso, ainda deveria informar as versões das linguagens de programação usadas na comparação. Por exemplo, a linguagem Java teve acréscimos significativos na versão 5.0 (Java 5.0). Assim, como a linguagem C# teve acréscimos significativos nas versões 2.0 (C# 2.0) e 3.0 (C# 3.0). O mesmo aconteceu com a linguagem Visual Basic .NET, atualmente denominada simplesmente Visual Basic, que já teve sucessivas versões voltadas para a plataforma .NET: Visual Basic .NET (versão 7.0), Visual Basic .NET 2003 (versão 7.1), Visual Basic 2005 (versão 8.0) e Visual Basic 2008 (versão 9.0).

É importante observar que a plataforma .NET foi desenvolvida desde o início para suportar múltiplas linguagens de programação. Além das linguagens de programação C# e Visual Basic, atualmente a plataforma .NET também suporta diversas outras, como: Managed Extensions for C++, F#, IronRuby e IronPhyton, dentre outras. As extensões gerenciadas para programação C++ (Managed Extensions for C++ programming) foram criadas para estender a linguagem de programação C++, permitindo o uso do .NET Framework e compilação voltada para o CLR (Common Language Runtime) sem a necessidade de desenvolvedores C++ terem que aprender uma nova linguagem (http://msdn.microsoft.com/en-us/library/aa712574(VS.71).aspx). A linguagem de programação F# foi criada num projeto de pesquisa no Microsoft Research, em Cabridge (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/). IronRuby é uma implementação da linguagem de programação Ruby para a plataforma .NET (http://ironruby.net). IronPhython é uma implementação da linguagem de programação Phython para as plataformas .NET e Silverlight (http://www.codeplex.com/IronPython).

Inicialmente, a plataforma Java foi projetada para suportar somente a linguagem de programação Java. Mas, apesar de não ter sido projetada para suportar múltiplas linguagens de programação, atualmente a plataforma Java suporta diversas outras linguagens, como: Groovy, JRuby, Jython e Clojure, dentre outras. Um destaque especial pode ser dado à linguagem de programação Groovy, que corresponde a uma linguagem dinâmica voltada para a máquina virtual Java (JVM – Java Virtual Machine). A linguagem de programação Groovy inclui características encontradas nas linguagens Python, Ruby e Smalltalk, mas utiliza uma sintaxe similar à linguagem de programação Java. Atualmente, ela é considerada de tal importância para a plataforma Java que até foi criada uma requisição de especificação Java (JSR – Java Specification Request) para padronização da linguagem de programação Groovy no JCP (Java Community Process): JSR 241: The Groovy Programming Language (http://www.jcp.org/en/jsr/detail?id=241). JRuby é uma implementação da linguagem de programação Ruby voltada para a plataforma Java (http://www.jruby.org). Jython é uma implementação da linguagem de programação Python para a plataforma Java (http://www.jython.org), sendo sucessora da implementação JPhython. Clojure é um dialeto da linguagem de programação Lisp e corresponde a uma linguagem de programação dinâmica voltada para a máquina virtual Java (http://clojure.org).

AFIRMAÇÃO 2 (retirada de um artigo)

"Antes que sigam as críticas, cabe esclarecer que o .NET não é uma linguagem, e sim uma plataforma da Microsoft que permite a utilização de diversas linguagens, como C#, Visual Basic, J# e ASP."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 2

A afirmação 2 foi feita no mesmo artigo de onde foi retirada a afirmação 1. Interessante observar que apesar do autor saber que .NET é uma plataforma da Microsoft ainda insiste em chamá-la de linguagem. Segue o comentário de um grande equívoco cometido nesta afirmação.

Na realidade, o ASP (Active Server Pages) não é uma linguagem de programação, mas sim uma tecnologia para desenvolvimento de conteúdo Web dinâmico. Inicialmente, páginas ASP eram escritas com linguagens de script como VBScript ou JScript. Com o lançamento da primeira versão final da plataforma .NET, em fevereiro de 2002, o ASP evoluiu para o ASP.NET. Atualmente, o ASP.NET corresponde a um modelo unificado de programação que inclui serviços necessários para construir aplicações Web corporativas com um mínimo de codificação.O ASP.NET é parte do .NET Framework e na codificação de aplicações ASP.NET é possível acessar classes do .NET Framework. A codificação de aplicações Web com ASP.NET pode ser feita com qualquer linguagem compatível com o ambiente de execução (CLR – Common Language Runtime), incluindo C#, F#, Visual Basic e outras linguagens. Maiores informações sobre ASP.NET podem ser encontradas no site ASP.net, mantido pela Microsoft, no seguinte endereço: http://www.asp.net/get-started.

É importante ressaltar que a Microsoft retirou a linguagem de programação J# da versão final mais atual do Visual Studio: o Visual Studio 2008 (com ou sem o Service Pack 1). A linguagem J# foi disponibilizada pela Microsoft até o lançamento do .NET Framework 2.0 e do Visual Studio 2005, em novembro de 2005. Devido ao declínio no uso da linguagem J#, a Microsoft anunciou a retirada da linguagem e da ferramenta Java Language Conversion Assistant (JLCA) das versões posteriores ao Visual Studio 2005. Apesar disto, a Microsoft continuará fornecendo suporte para os clientes do Visual Studio 2005 até 2015. Sendo assim, na grande maioria dos casos, é extremamente desaconselhável investimentos na linguagem J# para desenvolvimentos voltados para a plataforma .NET. A linguagem de programação J# permite a desenvolvedores usarem a sintaxe da linguagem de programação Java para construir aplicações e serviços voltados para a plataforma .NET. Maiores informações podem ser encontradas no site da Microsoft no seguinte endereço: http://msdn.microsoft.com/en-us/vjsharp/.

AFIRMAÇÃO 3 (retirada de um artigo)

"Vamos focar então a comparação na construção de aplicações web, utilizando J2EE e o framework ASP NET da Microsoft, que é onde as duas linguagens mais competem."

COMENTÁRIOS TÉCNICOS DA AFIRMAÇÃO 3

A afirmação 3 foi feita no mesmo artigo de onde foram retiradas as afirmações 1 e 2.

Neste ponto, o autor deixa claro que não deseja comparar linguagens de programação, mas sim frameworks para desenvolvimento Web nas plataformas Java e .NET. Mesmo assim, ainda comete a seguinte imprecisão: "que é onde as duas linguagens mais competem". O correto seria dizer: que é onde as duas plataformas mais competem.

É importante ressaltar que o nome J2EE foi utilizado na plataforma Java até a versão 1.4. A partir da versão 5 (versão final atual), o nome foi modificado para Java EE, que significa Java Platform, Enterprise Edition. O Java EE 5 corresponde a uma requisição de especificação Java (JSR – Java Specification Request) publicada no JCP (Java Community Process) no seguinte endereço: http://jcp.org/en/jsr/detail?id=244.

A plataforma Java EE não deve ser comparada diretamente com a tecnologia ASP.NET. Isto porque Java EE é uma especificação Java, composta por diversas outras especificações Java, que engloba diversas funcionalidades que, na plataforma .NET, são fornecidas em outras APIs (fora do ASP.NET) dentro do .NET Framework. Por exemplo, atualmente, o desenvolvimento de uma arquitetura orientada a serviços (SOA – Service-Oriented Architecture) em .NET utiliza uma API denominada WCF (Windows Communication Foundation). Porém, a plataforma Java EE já inclui uma série de APIs que podem ser usadas para este mesmo propósito, como: JAX-WS 2.0, EJB 3.0 e JBI.

Neste caso, o autor poderia comparar recursos de um subconjunto do Java EE com o ASP.NET. Por exemplo, comparar Java Servlets, JSP e JSF com recursos similares no ASP.NET. É importante ressaltar que a comparação deveria apresentar as versões das tecnologias que estão sendo comparadas. Por exemplo, Java Servlet 2.5, JavaServer Pages 2.1 e JavaServer Faces 1.2 versus ASP.NET 3.5 SP1.

Rogério Moraes de Carvalho
Twitter: @rogeriomc

Evento, Java x .NET

Comentários técnicos de comparações entre as plataformas Java e .NET – Introdução

Autor: Rogério Moraes de Carvalho
Data da publicação: 05/07/2009

Artigos da série Comentários técnicos de comparações entre as plataformas Java e .NET

Introdução

Comparações entre as plataformas Java e .NET costumam ser polêmicas e gerar intensos debates. Na maioria das vezes, estes debates deixam a parte técnica de lado e passam a conter disputas de ego. Neste cenário, a precisão técnica da informação passa a ser secundária, pois o mais importante é tentar convencer que uma das plataformas é superior à outra independente de contexto. Em geral, estes debates são carregados de ironias que não acrescentam nada, além de conter diversas informações erradas. É comum encontrar pessoas que se apresentam como especialistas em uma das plataformas e escrevem absurdos sobre a outra plataforma com objetivo de denegri-la. Curiosamente, estas pessoas cometem equívocos até mesmo sobre a plataforma que estão defendendo e na qual se julgam especialistas.

O que leva alguém a ler um texto de comparação entre as plataformas Java e .NET? Em alguns casos, a pessoa precisa de informações para decidir sobre qual das plataformas, Java ou .NET, adotar no desenvolvimento de um sistema num dado contexto. Em outros casos, a pessoa quer direcionar seus estudos na plataforma que ela apostar ser a mais promissora. Porém, estes são apenas dois entre vários outros motivos possíveis. Mas, independente da motivação, uma coisa é certa: as informações de comparação entre as plataforma Java e .NET somente têm algum valor se houver uma base técnica de sustentação consistente.

É possível encontrar muitos artigos que se propõem a comparar as plataformas Java e .NET na Internet. Porém, na grande maioria dos casos, as informações são tendenciosas, incompletas e escritas por pessoas despreparadas. Para não escrever um texto inútil, o autor de um artigo de comparação entre Java e .NET precisa ter conhecimento e experiência nas duas plataformas e tentar fazer uma análise o mais imparcial possível. É importante ressaltar que: NÃO EXISTE UMA RESPOSTA ABSOLUTA sobre qual é a melhor plataforma. Uma plataforma pode ser mais indicada que a outra num dado contexto e menos em outro.

Quando se deve e quando não se deve confiar em informações apresentadas num artigo ou num debate de comparação entre as plataformas Java e .NET? É preciso analisar a fundamentação técnica das informações apresentadas para justificar uma determinada conclusão. Conclusões baseadas em preferências pessoais, em empirismo ou em mitos sem fundamentação técnica devem ser descartadas.

O objetivo desta série de artigos não é comparar as plataformas Java e .NET, porque seria necessário escrever um enorme livro e, ainda assim, somente seria possível contextualizar alguns casos particulares. A idéia é fornecer conhecimento técnico para derrubar mitos e equívocos que sempre surgem nestes debates. Cada artigo da série será composto por afirmações reais que foram feitas sobre as plataformas Java e .NET, tenham estas sido feitas em artigos, em comentários de artigos ou em debates de grupos de discussão, seguidas pelos meus comentários técnicos relacionados. Os autores das afirmações não serão identificados, uma vez que o propósito da série é esclarecer e não difamar.

É importante ressaltar que todas as informações técnicas apresentadas nos comentários desta série de artigos terão embasamento teórico. Em geral, os comentários técnicos de uma determinada tecnologia apresentarão links para fontes de informação confiáveis. Muitas vezes, as informações mais confiáveis são aquelas fornecidas pelas organizações responsáveis pelo desenvolvimento da tecnologia que está sendo comentada. A idéia é auxiliar o leitor a estudar os recursos de cada plataforma e tirar suas próprias conclusões.

Para uma localização temporal das informações apresentadas nos comentários técnicos, todos os artigos serão precedidos pela data em que foram escritos. Constantemente as versões das tecnologias das plataformas Java e .NET serão informadas de forma explícita nos comentários. O objetivo é permitir a identificação das versões das tecnologias que estão sendo comentadas, uma vez que ambas as plataformas estão em constante evolução. Além disto, ainda será informado de maneira explícita se uma determinada tecnologia, especificação ou ferramenta já está disponível em versão final ou se ainda está em fase de desenvolvimento. Por exemplo, na plataforma .NET é comum a Microsoft disponibilizar versões prévias denominadas CTP (Community Tecnology Preview), Beta ou RC (Release Candidate) e a versão final denominada Final Release. E na plataforma Java, dentro do JCP (Java Community Process), as JSRs (Java Specification Requests) podem passar por diversos estágios, como: JSR Review Ballot, Early Drafty Review, Public Review, Public Review Ballot, Proposed Final Draft, Final Approval Ballot e Final Release.

Rogério Moraes de Carvalho
Twitter: @rogeriomc