<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CØdeZØne! &#187; .net</title>
	<atom:link href="http://leandrosilva.com.br/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Mon, 23 Aug 2010 13:04:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>O quanto realmente importa a escolha de uma linguagem?</title>
		<link>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/</link>
		<comments>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 03:11:45 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=772</guid>
		<description><![CDATA[Há alguns meses perguntaram ao Rich Hickey: &#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221; E sua resposta foi: &#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses <a href="http://www.simple-talk.com/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/" target="_blank">perguntaram</a> ao <a href="http://en.wikipedia.org/wiki/Rich_Hickey" target="_blank">Rich Hickey</a>:</p>
<blockquote><p><em>&#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221;</em></p></blockquote>
<p>E sua resposta foi:</p>
<blockquote><p><em>&#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular style of programming easy and idiomatic. It only seems a matter of taste when you are comparing languages that are more similar than they are different, like Java/C# or Python/Ruby. Try something really different like Clojure, Haskell, or Erlang and the fact that it matters becomes readily apparent.&#8221;</em></p></blockquote>
<p>Eu acho que concordo bastante com sua opinião. Discutir se Java é melhor do que C#, por exemplo, é inútil, porque as duas linguagens são muito semelhantes. Nesse caso, o que acaba pesando mais na hora da escolha é o ecosistema no qual cada linguagem está inserida, que pode agradar mais a um ou a outro programador. É puro gosto.</p>
<p>O mesmo vale para Ruby e Python, como ele mesmo cita.</p>
<h4>Mundos diferentes</h4>
<p>Mas e se a comparação for entre Java e Ruby, por exemplo, como é que fica? Na minha humilde opinião, fica <em>no sense</em>. Porque Java e Ruby não são liguagens de mesma proposta; e mesmo sendo ambas de propósito geral, ambas tem objetivos claramente diferentes.</p>
<p><strong>Comparação entre mundos diferentes</strong></p>
<p>Agora vou, propositalmente, contradizer um pouco o que eu disse à cima: faz sentido, sim, você comparar Ruby com Java; Erlang com Python; F# com PHP. Sim, faz sentido.</p>
<p>Faz sentido quando você está escolhendo a linguagem que oferece a melhor solução para um dado domínio de problema.</p>
<blockquote><p><em>Super CRUD com Erlang? Não, acho que não.</em></p>
<p><em>Precisar de c</em><em>oncorrência massiva, tolerância a falhas, processos distribuídos, downtime mínimo? Humm, não sei não, mas será que não é de Erlang que você precisa?</em></p></blockquote>
<p>Entende? É nessa hora que <a href="http://al3x.net/2010/07/27/node.html" target="_blank">a escolha de uma linguagem</a> começa a pesar de verdade. Isso realmente importa.</p>
<p><strong>Mundos diferentes se complementam</strong></p>
<p>Tempos atrás, escrevendo programas Erlang/OTP, senti falta de uma ferramenta que me ajudasse a criar rapidamente a estrutura inicial do projeto e <a href="http://www.erlang.org/doc/design_principles/des_princ.html" target="_blank">umas coisas mais</a>. O que fiz? Criei uma ferramenta que faz isso: <a href="http://github.com/leandrosilva/otp_kickoff" target="_blank">otp_kickoff</a>. Em Erlang? Não, em Ruby. Fiz isso em poucas horas, usando <a href="http://github.com/wycats/thor" target="_blank">Thor</a>.</p>
<p>Pouco tempo depois, senti falta de uma ferramenta de build amigável. Novamente, o que fiz? Criei o <a href="http://github.com/leandrosilva/ebuilder" target="_blank">ebuilder</a>, usando Ruby/Thor.</p>
<p>Um outro exemplo de mundos diferentes que se complementam é o <a href="http://github.com/leandrosilva/jsparrow" target="_blank">JSparrow</a>, um cliente de <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a> bem fluente, que fiz usando <a href="http://jruby.org/" target="_blank">JRuby</a>.</p>
<p>Essa é a ideia de tirar o melhor de cada linguagem!</p>
<p>Mesmo porque, dificilmente, você constroi um sistema de verdade <em>&#8211; que não seja um super CRUD &#8211;</em> com apenas uma única linguagem de programação. Na minha equipe mesmo, há sistemas desenvolvidos em C# .NET, que são <em>buildados, </em>testados e <em>deployados</em> com Ruby/Rake/Cucumber e usam Java/Ivy como repositório de assemblies. Isso sem falar em JavaScript, que também tem de monte.</p>
<p>Esse é o mundo real dos sistemas de verdade.</p>
<p><strong>Moral da história</strong></p>
<p>Isso me faz pensar que brigas de <em>fanboys</em> de linguagens <em>&#8211; em frenéticas buscas por prosélitos &#8211;</em> são uma verdadeira piada.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quer saber onde será seu próximo trabalho?</title>
		<link>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/</link>
		<comments>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 16:16:08 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[trabalho]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=358</guid>
		<description><![CDATA[Então não deixe de visitar&#8230; O site é recém-nascido, mas já tem uns recursos bem legais, como sistema de pesquisa por palavras-chave, núvem de tags e entre outros. Vale a pena conferir e acompanhar sua evolução &#8211; e oportunidades de bons trabalhos. Mais uma iniciativa bem interessante da Caelum.]]></description>
			<content:encoded><![CDATA[<p><strong>Então não deixe de visitar&#8230;</strong></p>
<p><a href="http://ondetrabalhar.com"><img class="alignnone" src="http://ondetrabalhar.com/images/ondetrabalhar.png" alt="" width="475" height="118" /></a></p>
<p style="text-align: center;"><a href="http://ondetrabalhar.com"><img class="aligncenter" src="http://ondetrabalhar.com/images/mascote.png" alt="" width="333" height="612" /></a></p>
<p>O site é recém-nascido, mas já tem uns recursos bem legais, como sistema de <a href="http://ondetrabalhar.com/Ruby+or+Rails" target="_blank">pesquisa</a> por palavras-chave, núvem de tags e entre outros. Vale a pena conferir e acompanhar sua evolução <em>&#8211; e oportunidades de bons trabalhos.</em></p>
<p>Mais uma iniciativa bem interessante da <a href="http://blog.caelum.com.br/2009/07/29/ondetrabalharcom-uma-iniciativa-da-caelum/" target="_blank">Caelum</a>. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/07/30/quer-saber-onde-sera-seu-proximo-trabalho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrevista com Ola Bini: Ioke, JVM, .NET e mais!</title>
		<link>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/</link>
		<comments>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 03:34:35 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[ioke]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=309</guid>
		<description><![CDATA[Quem me conhece há algum tempo ou acompanha este meu blog, sabe que eu sou totalmente meio fissurado por linguagens de programação. Sempre estou dando uma olhada em uma aqui e outra ali. Lendo, fuçando&#8230; Mas tem um cara que com certeza é ainda muito mais fissurado em linguagens de programação do que eu - [...]]]></description>
			<content:encoded><![CDATA[<p>Quem me conhece há algum tempo ou acompanha este meu blog, sabe que eu sou <span style="text-decoration: line-through;">totalmente</span> meio fissurado por linguagens de programação. Sempre estou dando uma olhada em uma aqui e outra ali. Lendo, fuçando&#8230;</p>
<p>Mas tem um cara que com certeza é ainda muito mais fissurado em linguagens de programação do que eu <em>- e diferente de mim, manja pra caramba.</em> Esse cara é o <a href="http://olabini.com" target="_blank">Ola Bini</a>, membro do core team do <a href="http://www.jruby.org" target="_self">JRuby</a>, consultor da <a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a>, escritor do livro <a href="http://www.amazon.com/Practical-JRuby-Rails-Web-Projects/dp/1590598814" target="_blank">JRuby on Rails</a>, membro do <a href="http://jcp.org/en/jsr/detail?id=292" target="_blank"><em>expert group</em> da JSR-292</a> e criador da linguagem <a href="http://ioke.org/" target="_blank">Ioke</a>.</p>
<p>Bem, como não podia deixar de ser, eu resolvi fazer uma pequena entrevista com ele sobre Ioke, linguagens para a <a href="http://www.java.com/pt_BR/download/faq/jvm.xml" target="_blank">JVM</a> e a <a href="http://www.microsoft.com/NET/" target="_blank">Microsoft CLR</a>, e uma coisinha ou duas mais. Confira!</p>
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://www.akitaonrails.com/2008/11/22/rails-podcast-brasil-qcon-special-ola-bini-jruby-ioke" target="_blank"><img title="Ola Bini e o nosso patrício Fábio Akita (QCon 2008)" src="http://www.akitaonrails.com/assets/2008/11/22/DSC05872.JPG" alt="Ola Bini e nosso compatriota Fábio Akita" width="500" height="426" /></a><p class="wp-caption-text">Ola Bini e o nosso patrício Fábio Akita (QCon 2008)</p></div>
<p><strong>Fale-nos um pouco sobre sua paixão por linguagens de programação. Quando isto começou? O que mais te motivou?<br />
</strong><br />
Oh wow. Boa pergunta. Eu não sei quando isto começou. Em algum momento obscuro do passado &#8211; muito longe para me lembrar. =)</p>
<p>Eu comecei bem cedo, com Basic no Apple IIc. Fiz muito C e assembler na minha adolecencia, e então, aprendi C++, Java e Lisp.</p>
<p>Penso que minha atual facinação por linguagens começou quanto eu percebi como diferentes linguagens são e como muitas coisas ruins são usadas. Esta percepção levou algum tempo, mas ficou cada vez maior.</p>
<p>Eu comecei com a implementação de outra linguagem há 5-6 anos atrás.</p>
<p><strong>Além de contribuir com o projeto JRuby, você também criou a linguagem Ioke <em>do zero</em>. O que você tem a dizer sobre a JVM com plataforma para outras linguagens (além da linguagem Java)?<br />
</strong><br />
Sim. Então, a JVM é uma excelente plataforma para linguagens. Você tem um <a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine" target="_blank">JIT</a> muito maduro no <a href="http://en.wikipedia.org/wiki/HotSpot_(Java)" target="_blank">Hotspot</a>. Você tem <a href="http://www.ibm.com/developerworks/java/library/j-jtp11253/" target="_blank"><em>garbage collectors</em></a> fantásticos; e você tem um monte de bibliotecas e ferramentas disponíveis. A parte ruim é que a JVM atualmente está muito amarrada a linguagens que se parecem com Java, no nível do <em>bytecode</em>. É possível contornar isto, e nós estamos trabalhando na <a href="http://jcp.org/aboutJava/communityprocess/edr/jsr292/index.html" target="_blank">JSR292</a> para dar suporte a invocações dinâmicas na JVM.</p>
<p>Mas atualmente a JVM ainda está um bocado ligada a linguagens como Java. Isto não é necessário a tudo (muitas das tecnologias Java começaram em <a href="http://pt.wikipedia.org/wiki/Smalltalk" target="_blank">Smalltalk</a> e <a href="http://en.wikipedia.org/wiki/Strongtalk" target="_blank">Strongtalk</a>).</p>
<p><strong>Você acredita que a linguagem Java está caminhando para se tornar em uma linguagem de infra-estrutura? (Uma linguagem para escrever linguagens e outros componentes críticos de infra-estrutura.)<br />
</strong><br />
Espero que sim. Java não é uma boa linguagem para escrever aplicações &#8211; ela é realmente muito baixo nível.</p>
<p><strong>Sobre Ioke. O que levou você a começar o projeto desta linguagem? Onde você pensa chegar com ela? O que você planeja para o futuro de Ioke?<br />
</strong><br />
Basicamente, a ideia com Ioke é ver o quão expressiva você pode fazer uma linguagem; e isto é o que tenho feito. Isto tem dado características linguísticas bastante avançadas; você pode fazer coisas nela que muitas pessoas inicialmente tem problemas para entender &#8211; mas ela permite você escrever código bastante sucinto e legível, que capture suas intenções.</p>
<p>O que acontecerá exatamente no futuro está no ar. Tenho muitas idéias, mas nada concreto no momento.</p>
<p><strong>Recentemente, você também portou a linguagem Ioke para a Microsoft CLR. O que te motivou a fazer isto? O que você pensa sobre a plataform Microsft .NET como plataforma host para novas linguagens?<br />
</strong><br />
Sim! Eu fiz isto porque não queria que Ioke fosse somente uma linguagem da JVM. Queria ver como a CLR funcionaria para implementa-la e queria amplicar um pouco a base de usuário. A plataforma .NET é mais ou menos tão boa quanto a JVM. Algumas coisas são piores, outras são melhores.</p>
<p><strong>O que você recomenda a aqueles que gostariam de, como você, serem designers de linguagens para a JVM? Esta recomendação seria mais ou menos a mesma para a plataforma .NET?<br />
</strong><br />
Há duas coisas que você precisa fazer. A primeira é ter uma boa idéia de como diferentes linguagens funcionam. Você precisa aprender linguagens de diferentes paradigmas e tentar entender como elas podem ser implementadas. Então, você precisa começar a fazer. Esta é a parte mais importante.</p>
<p>Comece realmente a implementar e ver o que acontece.</p>
<p><strong>Finalmente, sinta-se à vontade para dizer o que quiser sobre Ioke.</strong></p>
<p>Ela é muito &#8220;louca&#8221;. Ela é expressiva. Ela é muito lenta.</p>
<p>Penso que esta coisa de expressividade vai ser importante no futuro &#8211; já que nós estamos fazendo coisas mais e mais avançadas. Texto não escala<strong></strong> se não podemos ter uma abstração estrutural<strong> (1)</strong>. Ioke permite isto.</p>
<h5><strong><em>(1) N.T.: O que o Ola Bini quis dizer é que &#8220;texto, por si só, não pode ir a um nível superior, não pode evoluir, crescer, se não pudermos ter uma abstração estrutural sobre ele&#8221;. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
</em></strong></h5>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/04/28/entrevista-com-ola-bini-ioke-jvm-net-e-mais/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Um pouco de diversão com Scala</title>
		<link>http://leandrosilva.com.br/2008/08/27/um-pouco-de-diversao-com-scala/</link>
		<comments>http://leandrosilva.com.br/2008/08/27/um-pouco-de-diversao-com-scala/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 00:49:34 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=196</guid>
		<description><![CDATA[Scala é uma linguagem de programação muito flexivel, que possibilita conceber construções extremamente sofisticadas, o que facilita bastante a criação de DSLs. Ela combina dois poderosos paradigmas: Programação Orientada a Objetos e Programação Funcional. Tudo em Scala é um objeto, inclusive, funções. Ela não é a única que faz isso, mas vem ganhando aplausos pelo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Scala_(programming_language)" target="_blank">Scala</a> é uma linguagem de programação muito flexivel, que possibilita conceber construções extremamente sofisticadas, o que facilita bastante a criação de <a href="http://en.wikipedia.org/wiki/Domain_Specific_Language" target="_blank">DSLs</a>. Ela combina dois poderosos paradigmas: <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto" target="_blank">Programação Orientada a Objetos</a> e <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional" target="_blank">Programação Funcional</a>. Tudo em Scala é um objeto, inclusive, funções. Ela não é a única que faz isso, mas vem ganhando aplausos pelo seu design sofisticado. Na verdade, Scala foi inspirada em muitas linguagens &#8211; Java, C++, Smalltalk, Eiffel, OCaml, F#, Haskell, Erlang.</p>
<p>Scala também possui um ótimo modelo de programação concorrente, inspirado nos poderosos atores de Erlang.</p>
<p>Não bastasse tudo isso, Scala é <em>open source</em> e possui implementações para a plataforma Java e .NET.</p>
<p>Uma das coisas que mais gosto em Scala é sua natureza funcional. Não que eu seja um mestre da programação funcional. Mas este é um paradigma que tenho aprendido a apreciar bastante.</p>
<p>Sobre esse extenso assunto, quero fazer uma pequenina citação a &#8220;funções&#8221;.</p>
<p>Uma função em Scala é um <strong>first-class value</strong>. Como qualquer outro valor, uma função pode ser passada por parâmetro para outra função, bem como ser retornada como resultado. Funções que recebem outras funções como parâmetro ou retornam como resultado são chamadas de <strong>higher-order function</strong>. Isso dá um flexibilidade impressionante!</p>
<p>Um exemplo?</p>
<pre class="brush: scala;">
object Calculo {
  def soma(func: Int =&gt; Int, a: Int, b: Int): Int =
    if (a == 0 || b == 0) func(10) else a + b

  def main(args: Array[String]) {
    println(&quot;Ex1: &quot; + soma((x: Int) =&gt; x + 100, 0, 0))
    println(&quot;Ex2: &quot; + soma((x: Int) =&gt; x + 100, 10, 20))
  }
}
</pre>
<p>Este é um programinha bastante simples. O que ele faz é criar um objeto <em>Calculo</em>, que funciona como uma instância singleton, e executá-o a partir do método <em>main</em> &#8211; semelhantemente ao que acontece em Java.</p>
<p>Além do método <em>main</em>, lá está nossa função <em>soma</em>. Ela é uma função simples de soma. Bem, não tão simples assim. Ela recebe uma função anonima por parâmetro <em>(func)</em> e, caso <em>a</em> ou <em>b</em> seja zero, ela a usa passando 10 como parâmetro.</p>
<p>Se quiser rodar este programinha e ver o resultado de sua execução, basta:</p>
<p>1- Instalar a <a href="http://www.scala-lang.org/downloads" target="_blank">versão de Scala</a> para seu SO;<br />
2- Salvar esse código em um arquivo <strong>Calculo.scala</strong>;<br />
3- Compilar esse arquivo com <strong>scalac Calculo.scala</strong>;<br />
4- Executar com <strong>scala Calculo</strong>.</p>
<p>Scala é uma linguagem fantástica. Quando mais a conheço, mais a aprecio!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/08/27/um-pouco-de-diversao-com-scala/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JRuby ou Groovy?</title>
		<link>http://leandrosilva.com.br/2008/07/02/jruby-ou-groovy/</link>
		<comments>http://leandrosilva.com.br/2008/07/02/jruby-ou-groovy/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 23:17:49 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=27</guid>
		<description><![CDATA[Não, não quero começar nenhum flame war em torno de JRuby e Groovy. O que ocorre é que ontem um cara que tem um blog legal, o Diego, fez um comentário num de meus posts que me fez pensar a respeito&#8230; Até agora&#8230; Na hora, sinceramente, não tive nada de muito substancial para responder, porque [...]]]></description>
			<content:encoded><![CDATA[<p>Não, não quero começar nenhum <em>flame war</em> em torno de <a href="http://jruby.codehaus.org/" target="_blank">JRuby</a> e <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a>.</p>
<p>O que ocorre é que ontem um cara que tem um blog legal, o <a href="http://www.mouseoverstudio.com/blog/" target="_blank">Diego</a>, fez um comentário <a href="http://codezone.wordpress.com/2008/07/01/groovy-nos-trilhos-do-desenvolvimento-web-agil/" target="_blank">num de meus posts</a> que me fez pensar a respeito&#8230; Até agora&#8230;</p>
<p>Na hora, sinceramente, não tive nada de muito substancial para responder, porque ainda não havia pensado a respeito. Mas tenho que confessar que isso ficou martelando a minha cabeça o tempo todo&#8230; <em>Existe alguma vantagem de se usar Groovy invés de JRuby?</em></p>
<p>Bem, lendo e pensando a respeito, cheguei a algumas simples conclusões:</p>
<p><strong>Se você tem familiaridade com <a href="http://pt.wikipedia.org/wiki/Java_(linguagem_de_programação)" target="_blank">Java</a> e quer permanecer 100% no <a href="http://pt.wikipedia.org/wiki/Plataforma_Java" target="_blank">ambiente Java</a>, sem a perspectiva de migrar, Groovy é a melhor opção pra você.</strong></p>
<p>Porque a sintaxe de Groovy é muito parecida com a de Java; Groovy traz consigo uma porção de vantagens de uma linguagem OO moderna e dinâmica, como meta-programação, duck type, e <a href="http://pt.wikipedia.org/wiki/Closure" target="_blank">closures</a>; e você ainda pode programar usando objetos Java e Groovy numa mesma classe, de forma totalmente transparente (já que <strong>.groovy</strong> ao ser compilado se transforma em um <strong>.class</strong> qualquer).</p>
<p>Só que, mais uma vez: Não há qualquer possibilidade de se rodar código Groovy fora de ambiente Java, porque Groovy foi especificamente criada para ser uma &#8220;alternativa&#8221; à linguagem Java.</p>
<p><img class="alignnone" src="http://media.xircles.codehaus.org/_projects/groovy/_logos/medium.png" alt="" /></p>
<p><strong>Se você quer que seu código seja portável para outras plataformas de runtime, tal como <a href="http://pt.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.Net</a>, por exemplo, JRuby é o melhor pra você.</strong></p>
<p>Acho que este é um dos fatores primordiais na escolha de JRuby invés de Groovy. Porque o fato da sintaxe de Groovy ser próxima à de Java, sinceramente, pra mim não quer dizer nada &#8211; aprender uma nova sintaxe não é coisa de outro mundo; e é até legal. Agora, portabilidade, isto sim faz a diferença &#8211; quando necessário, claro.</p>
<p>Você pode escrever, por exemplo, uma aplicação Ruby on Rails comum e coloca-la para rodar em um web container Java, sem muito esforço. Aliás, se você estiver usando o <a href="http://www.netbeans.org/" target="_blank">NetBeans</a>, ele faz isso pra você em um ou dois cliques. E se num dado momento decidir rodar, sei lá, num <a href="http://mongrel.rubyforge.org/" target="_blank">Mongrel</a>, tudo bem, você pode fazer isso sem problema algum. Isto é fantástico!</p>
<p>Se você quiser se manter 100% compatível com a <a href="http://en.wikipedia.org/wiki/Ruby_MRI" target="_blank">MRI</a>, isto é totalmente possível, porque JRuby é uma implementação completa de Ruby para a plataforma Java. E se você quiser aproveitar algum código escrito em Java, você também pode fazer isto &#8211; mas neste caso, claro, sacrificando a portabilidade.</p>
<p><img class="alignnone" src="http://media.xircles.codehaus.org/_projects/jruby/_logos/medium.png" alt="" /></p>
<p><strong>Outro fator primordial que vejo é &#8220;comunidade&#8221;.</strong></p>
<p>A comunidade JRuby tem crescido a cada dia &#8211; claro que por conta do próprio Ruby/Rails. E a indústria de software tem investido nisto, aja vista o ótimo suporte do NetBeans a Ruby/Rails; e a própria <a href="http://www.tbray.org/ongoing/When/200x/2006/09/07/JRuby-guys" target="_blank">contratação de membros chaves do JRuby pela Sun</a> há algum tempo.</p>
<p>E a comunidade Groovy? Bem, acho que Grails tem ajudado a levanta-la. Mas o seu barulho ainda não é dos maiores não. (Espero que isto mude.)</p>
<p><strong>E o fim deste pensamento, qual é?</strong></p>
<p>Use JRuby. Use Groovy. Use o que melhor atender aos seus próprios requisitos e aos de seu cliente. Porque <a href="http://codezone.wordpress.com/2008/02/04/nao-ha-uma-unica-linguagem-de-programacao/" target="_blank">não há apenas uma linguagem de programação</a>, nem uma única solução pra tudo!</p>
<p>Atualmente estou propenso a usar tanto JRuby [on Rails] quanto Groovy [on Rails]. O que vai me fazer decidir entre um e outro serão os requisitos do momento &#8211; e a expectativa futura.</p>
<p>Então, seja JRuby ou Groovy, o que importa é desenvolver o software certo, no tempo certo, com a qualidade certa.</p>
<p><em>(Valeu Diego, por me fazer pensar um pouco sobre isto.)</em></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/07/02/jruby-ou-groovy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Projeto Da Vinci Machine</title>
		<link>http://leandrosilva.com.br/2008/02/14/projeto-da-vinci-machine/</link>
		<comments>http://leandrosilva.com.br/2008/02/14/projeto-da-vinci-machine/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 16:06:25 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=14</guid>
		<description><![CDATA[A Sun caminha a passos cada vez mais largos em direção à consolidação da Plataforma Java como tecnologia de base para multiplas linguagens de programação, tal como a plataforma .Net da Microsoft. Assunto que abordei em um de meus posts recentemente. Mais um grande esforço neste sentido é o projeto Da Vinci Machine, que visa [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.sun.com" target="_blank">Sun</a> caminha a passos cada vez mais largos em direção à consolidação da <a href="http://pt.wikipedia.org/wiki/Plataforma_Java" target="_blank">Plataforma Java</a> como tecnologia de base para multiplas linguagens de programação, tal como a plataforma <a href="http://en.wikipedia.org/wiki/.NET_Framework" target="_blank">.Net</a> da Microsoft. Assunto que abordei em <a href="http://codezone.wordpress.com/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java">um de meus posts</a> recentemente.</p>
<p>Mais um grande esforço neste sentido é o projeto <a href="http://openjdk.java.net/projects/mlvm/" target="_blank">Da Vinci Machine</a>, que visa facilitar a implementação de outras linguagens para a <a href="http://pt.wikipedia.org/wiki/M%C3%A1quina_virtual_Java" target="_blank">JVM</a>.</p>
<p>New York Times/IDG: <a href="http://www.nytimes.com/idg/IDG_002570DE00740E18002573E1007BAFDF.html?ref=technology" target="_blank">Sun’s Da Vinci Machine Broadens JVM Coverage</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/02/14/projeto-da-vinci-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Plataforma Java não é sobre a Linguagem Java</title>
		<link>http://leandrosilva.com.br/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java/</link>
		<comments>http://leandrosilva.com.br/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 05:15:26 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=4</guid>
		<description><![CDATA[A Plataforma Java, mais notadamente a Enterprise Edition, vem experimentando, a cada ano, um crescimento sem precedentes na história da computação. Centenas de corporações investem milhões do dólares em servidores de aplicações, ambientes de execução para dispositivos móveis, ambientes integrados de desenvolvimento, frameworks e mais frameworks; enquanto um verdadeiro exército de programadores vai se formando [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://pt.wikipedia.org/wiki/Plataforma_Java" target="_blank">Plataforma Java</a>, mais notadamente a <a href="http://pt.wikipedia.org/wiki/Java_EE" target="_blank">Enterprise Edition</a>, vem experimentando, a cada ano, um crescimento sem precedentes na história da computação. Centenas de corporações investem milhões do dólares em servidores de aplicações, ambientes de execução para dispositivos móveis, ambientes integrados de desenvolvimento, frameworks e mais frameworks; enquanto um verdadeiro exército de programadores vai se formando e se tornando adeptos desta. O resultado destes investimentos são um sem número de aplicações distribuídas, web e mobiles que são desenvolvidas e disponibilizadas para milhões de usuários, ano após ano.</p>
<p>A <a href="http://pt.wikipedia.org/wiki/M%C3%A1quina_virtual_Java" target="_blank">Máquina Virtual Java</a> (JVM), por sua vez, já é considerada a melhor e mais moderna máquina virtual da atualidade, provendora de um robusto ambiente de execução de aplicativos em dezenas de plataformas de hardware e software diferentes.</p>
<p>Tudo isto é fantástico. Mas não é tudo!</p>
<p><b>A Plataforma Java não é sobre a Linguagem Java.</b> Ela não é exclusiva à Linguagem Java. Em uma analise fria e simplista, ela é apenas uma plataforma para execução de aplicativos distribuídos em <a href="http://pt.wikipedia.org/wiki/Bytecode" target="_blank">bytecodes</a> nativos da JVM.</p>
<p>É claro que numa analise mais detalhada ela seria mais do que isto. Mas em poucas palavras, é isto mesmo que ela é. A própria <a href="http://pt.wikipedia.org/wiki/Sun_Microsystems" target="_blank">Sun_Microsystems</a> já tem acreditado nisto e vendido esta idéia. Os maiores exemplos são a linguagem <a href="http://pt.wikipedia.org/wiki/Groovy" target="_blank">Groovy</a>, que está sendo padronizada pela <a href="http://www.jcp.org/en/jsr/detail?id=241" target="_blank">JSR 241</a>, a versão Java do interpretador Ruby, o <a href="http://en.wikipedia.org/wiki/JRuby" target="_blank">JRuby</a>.</p>
<p>Quer saber? Taí um dos motivos de louvor da plataforma <a href="http://pt.wikipedia.org/wiki/Microsoft_.NET" target="_blank">.NET</a> da Microsoft. A plataforma .NET pode executar mais de vinte linguagens de programação diferentes, como se fossem uma só, porque também trabalha com o conceito de bytecode, os quais são executados sobre a <a href="http://pt.wikipedia.org/wiki/Common_Language_Runtime" target="_blank">CLR</a> (Common Runtime Language). Ou seja, você não precisa ter uma única linguagem de programação para resolver todos os seus problemas computacionais; você pode escolher a melhor para o momento  <i>- eu falo sobre isso no meu </i><a href="http://codezone.wordpress.com/2008/02/04/nao-ha-uma-unica-linguagem-de-programacao/"><i>post anterior</i></a><i>.</i> Isto sim é fantástico! E o melhor de tudo, é que a Plataforma Java também está caminhando nesta direção.</p>
<p>Já há algum tempinho é possível você escrever programas usando Groovy, JRuby, <a href="http://pt.wikipedia.org/wiki/Jython" target="_blank">Jython</a>, ou mesmo <a href="http://pt.wikipedia.org/wiki/JavaScript" target="_blank">JavaScript</a>, e executar na JVM. É a magia da JSR 223, <a href="http://en.wikipedia.org/wiki/Scripting_for_the_Java_Platform" target="_blank">Scripting for the Java Plataform</a>. E não pense você que isto é fazer o gosto de meia dúzia de programadores. Isto é, na verdade, um novo leque de oportunidades para a própria Platadorma Java.</p>
<p><i>Este é o futuro do Java como plataforma de desenvolvimento, distribuição e execução de aplicativos de alta disponibilidade.</i></p>
<pre class="brush: ruby;">
# O jeito Ruby:
puts 'Tchau!'
</pre>
<pre class="brush: python;">
# O jeito Python:
def tchau():
    print &quot;Tchau!&quot;
</pre>
<pre class="brush: java;">
// O jeito Java:
public class Goodbye {
    public static void main(String[] args) {
        System.out.println(&quot;Tchau!&quot;);
    }
}
</pre>
<pre class="brush: java;">
// O jeito Groovy:
println &quot;Tchau!&quot;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
