<?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; pragmatismo</title>
	<atom:link href="http://leandrosilva.com.br/category/pragmatismo/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Sun, 22 Jan 2012 22:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.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>4</slash:comments>
		</item>
		<item>
		<title>Mais produtividade com uma área de trabalho maior</title>
		<link>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/</link>
		<comments>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/#comments</comments>
		<pubDate>Fri, 14 May 2010 05:53:19 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[pragmatismo]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=697</guid>
		<description><![CDATA[Já faz um tempão que li um post do Martin Fowler que falava sobre o aumento de produtividade resultante do uso de dois monitores grandes, em lugar de um único e pequeno monitor. Na época, achei bem interessante a idéia, mas como estava totalmente fora do meu alcance ter uma área de trabalho dessas &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Já faz um tempão que li um post do <a href="http://martinfowler.com" target="_blank">Martin Fowler</a> que falava sobre o aumento de produtividade resultante do uso de dois monitores grandes, em lugar de um único e pequeno monitor. Na época, achei bem interessante a idéia, mas como estava totalmente fora do meu alcance ter uma área de trabalho dessas <em>&#8211; em meu emprego da época &#8211;</em>, preferi simplesmente deixar pra lá. Mas ultimamente, mesmo adorando a tela do meu MacBook 13.3&#8221; <em>&#8211; que passei a levar pro meu emprego atual &#8211;</em>, de tanto ver <a href="http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio">pessoas ao meu lado</a> usando dois monitores grandes, de maneira tão inteligente e produtiva, passeir a querer testar isso também.</p>
<h3>A deixa final</h3>
<p>Como já disse algumas vezes aqui no blog, em <a href="http://leandrosilva.com.br/2010/02/10/tchau-tchau-gerente-agora-sou-scrum/">meus times</a>, além de alguns legados, lidamos basicamente com <a href="http://rubyonrails.org" target="_blank">Ruby on Rails</a>, <a href="http://msdn.microsoft.com/pt-br/vcsharp/default.aspx" target="_blank">C#</a>/<a href="http://www.asp.net/mvc" target="_blank">ASP.NET MVC</a> e <a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git</a> como <a href="http://en.wikipedia.org/wiki/Distributed_revision_control_system" target="_blank">DVCS</a>. Então, além de <a title="Eu uso TextMate! #piadaInterna" href="http://macromates.com/" target="_blank">um bom editor de textos</a> e um terminal, precisamos também de um <a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank">Visual Studio</a> <em>&#8211; com </em><a href="http://www.jetbrains.com/resharper/" target="_blank"><em>ReSharper</em></a><em>, porque sem isso, ele não é nada &#8211;</em> que, infelizmente, para usuários de Mac e Linux, só roda em Windows. Tentei resolver isso usando <a href="http://www.mono-project.com" target="_blank">Mono</a>, mas acabei desistindo <em>&#8211; por enquanto, porque vai ter revanche!</em></p>
<p>Bem, resolvi então usar o <a href="http://www.parallels.com/products/desktop/" target="_blank">Parallels Desktop 5</a> para rodar o <a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank">Visual Studio 2010</a> no conforto do meu Mac e, de tabela, adicionar mais um monitor à minha área de trabalho.</p>
<h3>Meu <em>space</em> de programação</h3>
<p>Pra mim ficou fantástico! Porque no meu <em>space</em> de programação deixei o Visual Studio maximizado na tela grande (à esquerda), rodando no Windows, que por sua vez está rodando no Parallels Desktop, em tela cheia e com <em>look &amp; feel</em> de Mac OS X; e na tela do Mac (à direita) <em>&#8211; que eu adoro! &#8211;</em>, deixei o terminal, onde posso interagir com o Git e tudo mais. Yay!</p>
<div class="wp-caption alignnone" style="width: 510px"><a title="Mac + VS por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4605166123/"><img src="http://farm5.static.flickr.com/4068/4605166123_14a4e8ca76.jpg" alt="Mac + VS" width="500" height="375" /></a><p class="wp-caption-text">Visual Studio 2010 no Windows (à esquerda); Terminal no Mac OS X (à direita)</p></div>
<p>E tem mais: quando não precisar usar o Visual Studio por um longo tempo, tenho duas alternativas:</p>
<p>- desligar o Windows;<br />
- ou simplesmente pausá-lo no Parallels Desktop.</p>
<p>E se for o caso, arrastar o TextMate pra tela grande.</p>
<p>Ficou muito bom isso, o Parallels Desktop é demais!</p>
<h3><strong>Meus outros </strong><strong><em>spaces</em></strong></h3>
<p>Uma área de trabalho dessas não serve só pra programação. Hoje mesmo precisava editar um wiki enquanto olhava dados em uma planilha. Sem problemas! Planilha na tela grande e wiki sendo editado na tela do Mac. Fantástico!</p>
<p>Só faz um dia que estou com essa área de trabalho expandida e sinto que não posso mais trabalhar sem ela. <em>hehehe</em></p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Geração e build de projetos Erlang/OTP</title>
		<link>http://leandrosilva.com.br/2009/12/28/geracao-e-build-de-projetos-erlangotp/</link>
		<comments>http://leandrosilva.com.br/2009/12/28/geracao-e-build-de-projetos-erlangotp/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 03:08:54 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=489</guid>
		<description><![CDATA[OK. Hora do jabá&#8230; Há alguns meses, quando comecei a mexer mais com Erlang/OTP, senti a necessidade de ter uma ferramenta que gerasse a estrutura dos projetos, bem como stubs dos módulos necessários. Não encontrei nenhuma que fosse realmente simples. O que fiz? Cocei minha própria coceira, crie o projeto otp_kickoff. Agora, de saco cheio [...]]]></description>
			<content:encoded><![CDATA[<p>OK. Hora do jabá&#8230;</p>
<p>Há alguns meses, quando comecei a mexer mais com <a href="http://erlang.org/" target="_blank">Erlang/OTP</a>, senti a necessidade de ter uma ferramenta que gerasse a estrutura dos projetos, bem como stubs dos módulos necessários. Não encontrei nenhuma que fosse realmente simples. O que fiz? Cocei minha própria coceira, crie o projeto <a href="http://github.com/leandrosilva/otp_kickoff" target="_blank">otp_kickoff</a>.</p>
<p>Agora, <span style="text-decoration: line-through;">de saco cheio</span> desconfortável de usar <a href="http://www.gnu.org/software/make/manual/make.html" target="_blank">Make</a> para automatizar tarefas de build, resolvi coçar minha própria coceira novamente, crie o projeto <a href="http://github.com/leandrosilva/ebuilder" target="_blank">ebuilder</a>.</p>
<p>Se você também está mexendo com Erlang/OTP, sugiro que dê uma olhada nestes projetos, quem sabe eles também não facilitam sua vida, ahmmm?</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/12/28/geracao-e-build-de-projetos-erlangotp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Você deveria considerar Erlang para seu próximo grande projeto</title>
		<link>http://leandrosilva.com.br/2009/09/08/voce-deveria-considerar-erlang-para-seu-proximo-grande-projeto/</link>
		<comments>http://leandrosilva.com.br/2009/09/08/voce-deveria-considerar-erlang-para-seu-proximo-grande-projeto/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 02:49:44 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[concorrência]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[programação funcional]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=433</guid>
		<description><![CDATA[Ao ler o título deste post, talvez você esteja se perguntando: por que eu deveria considerar Erlang para meu próximo grande projeto? Bem, meu objetivo com este post é te apresentar alguns importantes motivos para fazer isto. Erlang nasceu no laboratório de ciência da computação da Ericsson na década de 1980, influenciada por linguagens como [...]]]></description>
			<content:encoded><![CDATA[<p>Ao ler o título deste post, talvez você esteja se perguntando: <em>por que eu deveria considerar </em><a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)" target="_blank"><em>Erlang</em></a><em> para meu próximo grande projeto?</em> Bem, meu objetivo com este post é te apresentar alguns importantes motivos para fazer isto.</p>
<p><img class="aligncenter" src="http://erlang.org/images/erlang.gif" alt="" width="114" height="96" /></p>
<p>Erlang nasceu no laboratório de ciência da computação da Ericsson na década de 1980, influenciada por linguagens como ML, Ada, Module, Prolog e Smalltalk, quando um time de três cientistas <em>&#8211; entre eles, o grande <a href="http://armstrongonsoftware.blogspot.com/" target="_blank">Joe Armstrong</a> &#8211;</em> receberam a missão de descobrir qual seria a melhor linguagem de programação para escrever a próxima geração de sistemas de telecom. Após dois anos de investigação e prototipação, estes cientistas descobriram que nenhuma linguagem era completa o bastante para tal objetivo e, conclusivamente, decidiram criar uma nova linguagem. Nasceu então Erlang, <em>the Ericsson Language</em>.</p>
<p>De lá pra cá, Erlang tem sido evoluida e usada para escrever grandes sistemas críticos, porque é exatamente nesse cenário que Erlang faz mais sentido. Se seu projeto é construir um sistema crítico, altamente tolerante a falhas, com disponibilidade 24&#215;7 e veloz como o papa-léguas, sim, Erlang é para você. Mas se não é bem esta sua necessidade, se você quer apenas construir um pequeno sistema, com baixa concorrência, poucos usuários, pouca necessidade de performance e possibilidade de passar horas <em>down</em> em manutenção, não, você não precisa de Erlang. <span style="text-decoration: line-through;">Que tal Basic?</span></p>
<p>Diferente de algumas linguagens que nascem para encontrar um nicho, Erlang nasceu com um problema a ser resolvido, com requisitos a serem atendidos. Tolerância a falhas, concorrência realmente pesada, computação distribuída, atualização da aplicação sem derrubá-la, sistemas de tempo real, este é o nicho de Erlang; foi para isto que Erlang nasceu.</p>
<p><strong>Quem usa Erlang atualmente?</strong></p>
<p>Além da Ericsson, é lógico, há algumas outras grandes empresas e projetos usando Erlang, como por exemplo:</p>
<p>- <em>Facebook</em>, no backend de seu sistema de chat, lidando com 100 milhõs de usuários ativos;<br />
- <em>Delicious</em>, que tem mais de 5 milhões de usuários e mais de 150 milhões de bookmarks;<br />
- <em>Amazon SimpleDB</em>, o serviço de dados do seu poderoso EC2;<br />
- <em>Motorola</em>, <em>CouchDB</em>, <em>RabbitMQ</em>, <em>Ejabbed</em>, etc.</p>
<p><strong>Ok, mas Erlang é propriedade da Ericsson?</strong></p>
<p>Não, felizmente, não. Em 1998 a Ericsson tornou Erlang open source sob a licença EPL.</p>
<p>Quer mais uma boa notícia? Você não precisa de um servidor de aplicações para rodar sua aplicação Erlang, nem mesmo uma pesada IDE para escrevê-las. Tudo o que você precisa é de uma distribuição de Erlang para sua plataforma, seja Mac OS X, Linux, Windows, Solaris, ou qualquer outro sistema <em>Unix-like</em>, que traz consigo máquina virtual, compilador e vasta bibliotéca de módulos muito úteis <em>&#8211; além do banco de dados <a href="http://en.wikipedia.org/wiki/Mnesia" target="_blank">Mnesia</a></em>; e um editor de textos de sua preferência <em>&#8211; <a href="http://macromates.com" target="_blank">TextMate</a>, por exemplo, tem um ótimo bundle para Erlang.</em></p>
<p><strong>Algumas características de Erlang</strong></p>
<p><em>1- Expressividade e beleza</em></p>
<p>Há quem diga que não, mas Erlang é uma linguagem muito bonita &#8212; <em>ao menos pra mim.</em> Dado as já citadas influências de Erlang, ela é uma linguagem bem expressiva e declarativa, que encoraja a escrita de código simples e objetivo, o que certamente torna seu código fácil de ler, de escrever e de organizar [em módulos reutilizáveis]. O snippet abaixo é um exemplo de implementação do famoso fatorial:</p>
<pre class="brush: java; title: ; notranslate">
-module(sample1).
-export([fac/1]).

fac(0) -&gt; 1;
fac(N) -&gt; N * fac(N-1).
</pre>
<p><em>2- Forte uso de recursividade</em></p>
<p>Isto certamente é uma herança da veia funcional de Erlang que torna o código muito menos imperativo e mais declarativo. Mas além da beleza declarativa óbvia, é importante saber que Erlang foi projetada para lidar com iterações recursivas gigantescas sem qualquer degradação <em>&#8211; e sem estourar o &#8220;heap&#8221; de memória.</em></p>
<p><em>3- Livre de efeito colateral</em></p>
<p>Uma das grandes capacidades dadas por Erlang é a construção de sistemas altamente concorrentes rodando em processadores com multiplos núcleos. Isto não combina nada com efeito colateral, por isso, em Erlang, uma vez que um dado valor tenha sido atribuído a uma variável, esta não poderá mais ser modificada <em>&#8211; ou seja, estão mais para o que conhecemos por constantes do que para o que conhecemos por variaveis.</em></p>
<p>Se você já escreveu código concorrênte sabe o quanto tê-lo livre de efeitos colaterais te faz livre de dores de cabeça. Poucas coisas são tão deprimentes quanto debugar código concorrênte repleto de efeitos colaterais.</p>
<p><em>4- Pattern matching</em></p>
<p><a href="http://en.wikipedia.org/wiki/Pattern_matching" target="_blank">Pattern matching</a> em Erlang é usado para associar valores a variáveis, controlar fluxo de execução de programs, extrair valores de estruturas de dados compostas e lidar com argumentos de funções. Mais um ponto para código declarativo e expressividade. Vejamos o código abaixo:</p>
<pre class="brush: java; title: ; notranslate">
-module(sample2).
-export([convert_length/1]).

convert_length(Length) -&gt;
    case Length of
        {centimeter, X} -&gt;
            {inch, X / 2.54};
        {inch, Y} -&gt;
            {centimeter, Y * 2.54}
    end.
</pre>
<p>Fala por si, não?</p>
<p><em>5- Concorrência baseada em passagem de mensagens (a.k.a. Actors)</em></p>
<p>Acho que concorrência baseada em <a href="http://en.wikipedia.org/wiki/Message_passing" target="_blank">passagem de mensagem</a> entre <a href="http://en.wikipedia.org/wiki/Actor_model" target="_blank">atores</a> é uma das features mais populares de Erlang. Vejamos o porque com o famoso exemplo do Ping-Pong:</p>
<pre class="brush: java; title: ; notranslate">
-module(sample3).

-export([start/0, ping/2, pong/0]).

ping(0, Pong_PID) -&gt;
    Pong_PID ! finished,
    io:format(&quot;Ping finished~n&quot;, []);

ping(N, Pong_PID) -&gt;
    Pong_PID ! {ping, self()},
    receive
        pong -&gt;
            io:format(&quot;Ping received pong~n&quot;, [])
    end,
    ping(N - 1, Pong_PID).

pong() -&gt;
    receive
        finished -&gt;
            io:format(&quot;Pong finished~n&quot;, []);
        {ping, Ping_PID} -&gt;
            io:format(&quot;Pong received ping~n&quot;, []),
            Ping_PID ! pong,
            pong()
    end.

start() -&gt;
    Pong_PID = spawn(sample3, pong, []),
    spawn(sample3, ping, [3, Pong_PID]).
</pre>
<p>Neste pequeno snippet podemos observar algumas características de Erlang já citadas neste post, tal como <em>pattern matching</em> na captura das mensagens e recursividade no controle das iterações.</p>
<p>Agora, falando do aspecto concorrente em sim, algumas coisas são particularmente interessantes aqui:</p>
<p>a. Em Erlang, a concorrência acontece entre processos leves, diferente de linguagens como C++ e Java, que baseiam sua concorrência em threads nativas de sistema operacional [caríssimas];<br />
b. Em Erlang, há um tipo de dado chamado <em>PID</em>, o qual é o identificador do processo paralelo (mais conhecido como Actor) e para o qual as mensagens podem ser enviadas.</p>
<p>Releia o código acima com estas informações em mente e veja como concorrência em Erlang é algo completamente descomplicado e natural. Depois, pense no mesmo código implementado em C#, Java ou C++.</p>
<p><strong>Gostei de Erlang, há algum livro para eu começar a estudar?</strong></p>
<p>Sim, há dois livros excepcionais. <a href="http://www.amazon.com/Programming-Erlang-Software-Concurrent-World/dp/193435600X" target="_blank">Um</a>, do próprio criador da linguagem, Joe Armstrong:</p>
<p><img class="aligncenter" src="http://ecx.images-amazon.com/images/I/41XOOpdBzKL._SL500_AA240_.jpg" alt="" width="240" height="240" /></p>
<p>E <a href="http://www.amazon.com/Erlang-Programming-Francesco-Cesarini/dp/0596518188/ref=pd_sim_b_3" target="_blank">outro</a> de Francesco Cesarini e Simon Thompson:</p>
<p><img class="aligncenter" title="Erlang Programming" src="http://covers.oreilly.com/images/9780596518189/cat.gif" alt="" width="180" height="236" /></p>
<p>Além disso, há o próprio <a href="http://erlang.org/starting.html" target="_blank">material on line</a> que é muito bom e barato. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Conclusão</strong></p>
<p>Erlang possui muitas outras características e informações bem interessantes, mas que me falta espaço neste post para citar e apresentar, senão ele ficará absurdamente gigantesco para o meu gosto. Mas acredito que pelo que já apresentei até aqui, você já tenha motivos suficientes para pensar em Erlang com carinho e conciderá-la para seu próximo grande projeto.</p>
<p>Em breve devo escrever algo sobre <a href="http://en.wikipedia.org/wiki/Open_Telecom_Platform_%28OTP%29" target="_blank">OTP</a>, já que neste post apresentei características mais inerentes à linguagem em si e nem tanto sobre a plataforma.</p>
<p>Até mais!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/09/08/voce-deveria-considerar-erlang-para-seu-proximo-grande-projeto/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Pontapé inicial para aprender Erlang</title>
		<link>http://leandrosilva.com.br/2009/02/18/pontape-inicial-para-aprender-erlang/</link>
		<comments>http://leandrosilva.com.br/2009/02/18/pontape-inicial-para-aprender-erlang/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 05:17:52 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[erlang]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[programação funcional]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=161</guid>
		<description><![CDATA[Ano passado, no mês de outubro, resolvi começar a aprender Erlang &#8211; que é uma linguagem fantástica, digasse de passagem &#8211; e logo dei o pontapé inicial com material do próprio site da versão open-source da linguagem. Lá você encontra dois canais de conteúdos bem interessantes para o seu aprendizado. O primeiro canal é o [...]]]></description>
			<content:encoded><![CDATA[<p>Ano passado, no mês de outubro, resolvi começar a aprender <a href="http://pt.wikipedia.org/wiki/Erlang_(linguagem_de_programa%C3%A7%C3%A3o)" target="_blank">Erlang</a> &#8211; que é uma linguagem fantástica, digasse de passagem &#8211; e logo dei o pontapé inicial com material do próprio site da <a href="http://www.erlang.org/about.html" target="_blank">versão open-source</a> da linguagem. Lá você encontra dois canais de conteúdos bem interessantes para o seu aprendizado.</p>
<p>O primeiro canal é o do famoso <a href="http://www.erlang.org/starting.html" target="_blank">getting started</a>, como estamos acontumados a encontrar em outras linguagens, só que em três versões diferentes, uma para cada <span style="text-decoration: line-through;">saco</span> gosto para leitura. Tem a versão rápida, a lenta, e a muito, muito, muito lenta. Já o segundo canal é uma coleção de diversas <a href="http://www.erlang.org/doc.html" target="_blank">publicações</a> interessantes, que vale a pena ao menos saber que existe.</p>
<p>Bom, com todo esse material disponível, seria chover no molhado eu querer dizer <em>&#8220;o que é Erlang&#8221;</em>, <em>&#8220;qual o seu propósito&#8221;</em>, e <em>&#8220;blá blá blá&#8221;</em>. Os materiais supra citado já fazem isso muito bem. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Em lugar disso, vou deixar aqui um passo a passo sucinto para instalar no <a href="http://www.ubuntu-br.org" target="_blank">Ubuntu</a> a versão mais atual a partir dos fontes (já que não queremos a versão desatualizada disponível por <strong>apt-get</strong>) e mais alguns links para estudo rápido e mastigado. Ou seja, vou <span style="text-decoration: line-through;">te dar um empurrãozinho</span> te ajudar a dar o seu próprio pontapé inicial no aprendizado de Erlang.</p>
<blockquote><p><em>Lembrando que, mesmo que você seja usuário de Windows, não há problema algum, este post também é pra você. Basta você fazer o download do <strong>.exe</strong> de instalação mais atual <a href="http://www.erlang.org/download.html" target="_blank">aqui</a> e pular o próximo tópico.  E, caso você seja usuário de outra distro de Linux, I&#8217;m so sorry! Você vai ter que procurar sua própria receita de instalação no Google. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p></blockquote>
<p><strong>Instalação no Ubuntu<br />
</strong></p>
<p>Antes de começar a instalação, você precisará fazer duas coisas:</p>
<p><em>1) Criar o diretório onde você fará a instalação</em></p>
<p>No meu caso, o path que é:</p>
<pre class="brush: ruby; title: ; notranslate">

/home/leandro/Desenvolvimento/erlang/tools/otp_r12b-5
</pre>
<p>Vou usá-lo em toda a receita, então, fique atento e não se esqueça substituir pelo seu próprio path.</p>
<p><em>2) Baixar a última versão dos fontes <a href="http://www.erlang.org/download.html" target="_blank">aqui</a> e depois descompactá-la no diretório criado no passo anterior</em></p>
<p>Feito isso, ótimo! É hora de começar a instalação de verdade. Vamu qui vamu!</p>
<p><em>1) Instale o conjunto básico de ferrametas para fazer o build</em></p>
<pre class="brush: ruby; title: ; notranslate">

sudo apt-get install build-essential libncurses5-dev m4
</pre>
<p><em>2) Instale um conjunto de ferrametas de SSL, caso você ainda não tenha</em></p>
<pre class="brush: ruby; title: ; notranslate">

sudo apt-get install openssl libssl-dev
</pre>
<p><em>3) Execute a configuração do build</em></p>
<pre class="brush: ruby; title: ; notranslate">

./configure
</pre>
<p><em>4) Faça o build!</em></p>
<pre class="brush: ruby; title: ; notranslate">

make &amp;&amp; sudo make install
</pre>
<p>Aguarde, aguarde, aguarde&#8230;</p>
<p><em>5) Configure o diretório bin no PATH do sistema</em></p>
<p>Com seu editor de texto preferido, edite o arquivo <strong>/etc/bash.bashrc</strong> e insira o bloco abaixo:</p>
<pre class="brush: ruby; title: ; notranslate">

# Setting the ERLANG_HOME and PATH to Erlang otp_r12b-5
ERLANG_HOME=/home/leandro/Desenvolvimento/erlang/tools/otp_r12b-5
PATH=$ERLANG_HOME/bin:$PATH
export ERLANG_HOME PATH
</pre>
<p>Ou faça como você preferir, esse passo é bem <em>a la vonté</em> mesmo. <img src='http://leandrosilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>6) Teste!</em></p>
<p>No console, digite <strong>erl</strong>. Se carregar o <strong>Erlang (BEAM) emulator</strong> é porque está tudo OK!</p>
<p>Se não carregar o <strong>Erlang (BEAM) emulator</strong>, revise os passos anteriores com calma, para ver se você fez tudo certinho, se não errou ou se esqueceu de algum detalhe. Caso ainda tenha problemas, o <a href="http://www.google.com.br" target="_blank">Google</a> é seu amigo!</p>
<p><strong>Mais dicas de referências<br />
</strong></p>
<p>Como disse, além dos links que citei no início que estão realmente repletos de material interessante, queria indicar também <a href="http://caioariede.com/2009/aprendendo-erlang-parte-1" target="_blank">uma série de posts</a> do <a href="http://caioariede.com/">Caio Ariede</a>, que também está aprendendo a fantástica Erlang.</p>
<p>Outra dica é <a href="http://github.com/leandrosilva/erlang-learning/tree/master" target="_blank">um projeto</a> que criei no meu <a href="http://github.com/leandrosilva" target="_blank">GitHub</a> [que vergonhosamente não tinha nada desde outubro] para colocar os códigos dos meus estudos, mas até agora só subi uns poucos programinhas bem didáticos do <a href="http://www.erlang.org/doc/getting_started/part_frame.html" target="_blank">Getting Started Lento</a>. Vamos ver se logo arranjo um tempo para organizar a coisas por aqui e subir mais coisas legais. Fique de olho nele.</p>
<p>Mais uma, ainda no GitHub, é <a href="http://github.com/fnando/notes/tree/master/erlang" target="_blank">o projeto</a> que o <a href="http://simplesideias.com.br/" target="_blank">Nando Vieira</a> criou para publicar suas anotações da leitura do livro <a href="http://www.pragprog.com/titles/jaerlang/programming-erlang" target="_blank">Programming Erlang, Software for a concurrent world</a>, de ninguém menos que Joe Armstrong.</p>
<p>E para finalizar, não deixe de ler <a href="http://leandrosilva.com.br/2008/11/03/sim-programacao-funcional-e-relevante-hoje/" target="_blank">meu post</a> sobre <strong>programação funcional</strong>, se você quiser ter uma rápida introdução a esse assunto.</p>
<p>É isso ai, até mais!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/02/18/pontape-inicial-para-aprender-erlang/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Por que não tentar de outra maneira?</title>
		<link>http://leandrosilva.com.br/2009/01/29/por-que-nao-tentar-de-outra-maneira/</link>
		<comments>http://leandrosilva.com.br/2009/01/29/por-que-nao-tentar-de-outra-maneira/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 21:30:31 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[pragmatismo]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=99</guid>
		<description><![CDATA[Eu nunca programei uma única linha sequer de código em Clojure, apenas dei uma boa olhada no site oficial da linguagem para conhecer sua proposta &#8211; que é muito interessante, digasse de passagem &#8211; e tenho acompanhado as notícias que rolam aqui e ali. (Coisa de quem é vidrado por programação.) No entanto, hoje, li uma [...]]]></description>
			<content:encoded><![CDATA[<p>Eu nunca programei uma única linha sequer de código em <a href="http://en.wikipedia.org/wiki/Clojure" target="_blank">Clojure</a>, apenas dei uma boa olhada no<a href="http://clojure.org" target="_blank"> site oficial</a> da linguagem para conhecer sua proposta &#8211; que é muito interessante, digasse de passagem &#8211; e tenho acompanhado as notícias que rolam aqui e ali. (Coisa de quem é vidrado por programação.)</p>
<p>No entanto, hoje, li uma <a href="http://www.infoq.com/br/news/2009/01/clojure_production" target="_blank">notícia</a> sobre Clojure que me fez pensar um pouco além da própria programação&#8230;</p>
<p><em>&#8220;Por que as pessoas normalmente não tentam fazer as coisas de outra maneira?&#8221;</em></p>
<p>Achei muito interessante o fato de terem usado Clojure, que é uma linguagem jovem, para implementar concorrência em um grande e importante sistema de informação, mesmo não havendo ainda relatos de que já o tenham feito antes.</p>
<p><a href="http://www.itweb.com.br/noticias/index.asp?cod=54524" target="_blank">Inovação, pioneirismo, pragmatismo&#8230; Pensamento fora da caixa!!!</a></p>
<p>Isso também é sobre ser inteligente. Se já inventaram a solução do problema de concorrência, de maneira elegante, por que ainda ficar batendo cabeça com linguagens &#8220;consolidadas&#8221;, mas que não o resolvem tão eficientemente? Aham? Por que a linguagem ainda é muito nova?</p>
<p>Esse é só um exemplo, mas há muitos outros em nosso dia a dia. Dê uma olhada ao seu redor. Dê uma olhada em seus próprios desafios. Aliás, aproveite, e dê uma olhada em suas próprias soluções!</p>
<p>O quanto você tem sido tradicionalista e conservador?</p>
<p>O medo das novas soluções, das novas maneiras de fazer as coisas, normalmente, são um atraso para os novos bons resultados. Afinal de contas, normalmente, quem sai na frente lucra primeiro&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/01/29/por-que-nao-tentar-de-outra-maneira/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hierarquias são inteligentes nas “pontas”</title>
		<link>http://leandrosilva.com.br/2008/07/22/hierarquias-sao-inteligentes-nas-%e2%80%9cpontas%e2%80%9d/</link>
		<comments>http://leandrosilva.com.br/2008/07/22/hierarquias-sao-inteligentes-nas-%e2%80%9cpontas%e2%80%9d/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 12:55:59 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[pragmatismo]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=56</guid>
		<description><![CDATA[Este é o titulo de um post fantástico do Carlos Vilella, que o Rodrigo Yoshima traduziu, e que eu não poderia deixar de citar aqui no meu blog. Leitura obrigatória!]]></description>
			<content:encoded><![CDATA[<p>Este é o titulo de um <a href="http://www.lixo.org/archives/2008/07/21/networks-are-smart-at-the-edges/" target="_blank">post fantástico</a> do Carlos Vilella, que o Rodrigo Yoshima <a href="http://blog.aspercom.com.br/2008/07/21/hierarquias-sao-inteligentes-nas-pontas/" target="_blank">traduziu</a>, e que eu não poderia deixar de citar aqui no meu blog.</p>
<p>Leitura obrigatória!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/07/22/hierarquias-sao-inteligentes-nas-%e2%80%9cpontas%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento Ágil na Web com Seam</title>
		<link>http://leandrosilva.com.br/2008/07/08/desenvolvimento-agil-na-web-com-seam/</link>
		<comments>http://leandrosilva.com.br/2008/07/08/desenvolvimento-agil-na-web-com-seam/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 12:48:16 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[seam]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=32</guid>
		<description><![CDATA[Este é o titulo de um artigo bem legal que o Rodrigo Yoshima postou em seu blog ontem. Se você se interessa por desenvolvimento Web, vale a pena conferir. Aliás, falando em JBoss Seam, a Caelum lançou um super curso, rápido e objetivo, que você pode conferir o conteúdo programático aqui. Como sempre, qualidade indiscutível.]]></description>
			<content:encoded><![CDATA[<p>Este é o titulo de um <a href="http://blog.aspercom.com.br/2008/07/07/desenvolvimento-agil-com-seam/" target="_blank">artigo</a> bem legal que o <a href="http://blog.aspercom.com.br/sobre/" target="_blank">Rodrigo Yoshima</a> postou em seu <a href="http://blog.aspercom.com.br/" target="_blank">blog</a> ontem. Se você se interessa por desenvolvimento Web, vale a pena conferir.</p>
<p>Aliás, falando em <a href="http://www.jboss.com/products/seam" target="_blank">JBoss Seam</a>, a Caelum lançou um super curso, rápido e objetivo, que você pode conferir o conteúdo programático <a href="http://www.caelum.com.br/caelum/treinamento-fj-34-desenvolvimento-web-agil-jboss-seam.jsp" target="_blank">aqui</a>. Como sempre, qualidade indiscutível.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/07/08/desenvolvimento-agil-na-web-com-seam/feed/</wfw:commentRss>
		<slash:comments>0</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>Groovy nos trilhos do desenvolvimento web ágil?</title>
		<link>http://leandrosilva.com.br/2008/07/01/groovy-nos-trilhos-do-desenvolvimento-web-agil/</link>
		<comments>http://leandrosilva.com.br/2008/07/01/groovy-nos-trilhos-do-desenvolvimento-web-agil/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 11:05:15 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>

		<guid isPermaLink="false">http://codezone.wordpress.com/?p=24</guid>
		<description><![CDATA[Sei que já não é mais tão novidade assim, mas só agora pude gastar um tempo pesquisando e fazendo uns testes. Do que estou falando? Hammm&#8230; O titulo dá uma idéia do assunto&#8230; Grails! Ou, para os mais eruditos, Groovy on Rails. O que Grails, afinal? Grails é a resposta da Plataforma Java ao desenvolvimento [...]]]></description>
			<content:encoded><![CDATA[<p>Sei que já não é mais tão novidade assim, mas só agora pude gastar um tempo pesquisando e fazendo uns testes. Do que estou falando? Hammm&#8230; O titulo dá uma idéia do assunto&#8230; <a href="http://grails.org/" target="_blank">Grails</a>! Ou, para os mais eruditos, Groovy on Rails.</p>
<p><strong>O que Grails, afinal?</strong></p>
<p>Grails é a resposta da <a href="http://pt.wikipedia.org/wiki/Plataforma_Java" target="_blank">Plataforma Java</a> ao desenvolvimento web ágil, dinâmico, sem toda aquela parafernália de 7.203 <strong>arquivos XML</strong> para configurar, 3.412 classes dos frameworks <strong>jAbc</strong>, <strong>J-XPTO</strong> e <strong>JSeila Oq+</strong> para estender, e mais uns 1.300 <strong>arquivos JAR</strong> para &#8220;bibliotecar&#8221;.</p>
<p>Esta maravilha do mundo Java segue a filosofia de frameworks web <em>full stack</em>, tais como <a href="http://www.rubyonrails.org/" target="_blank">Ruby on Rails</a> e <a href="http://www.djangoproject.com/" target="_blank">Django</a>. E segue fundamentalmente o conceito de <a href="http://en.wikipedia.org/wiki/Convention_over_Configuration" target="_blank">Convention over Configuration</a>, que pode ser resumido em uma simples frase: <em>&#8220;É ótimo poder configurar, mas é péssimo ser obrigado a fazer isto&#8221;</em>. Sendo assim, tudo tem um padrão de nome a seguir e um local bem definido para estar.</p>
<p><strong>O que está por trás?</strong></p>
<p>Grails não foi construido a partir do nada. Muito pelo contrário. Ele está fundamentado sobre frameworks de mercado mais que consagrados:</p>
<p>- <a href="http://www.hibernate.org/" target="_blank">Hibernate</a>, sobre o qual esta o GORM (Grails ORM);<br />
- <a href="http://logging.apache.org/log4j/" target="_blank">Log4J</a>, controle de log;<br />
- <a href="http://www.springframework.org/" target="_blank">Spring</a>, injeção de dependência e MVC;<br />
- <a href="http://pt.wikipedia.org/wiki/Jetty" target="_blank">Jetty</a>, web container embutido;<br />
- <a href="http://www.opensymphony.com/sitemesh/" target="_blank">SiteMesh</a>, templates de página web.</p>
<p>E tudo isto sendo &#8220;colado&#8221; e &#8220;manipudalo&#8221; pela linguagem <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a>, que para quem viveu os últimos anos em Marte, é uma linguagem orientada a objetos, fortemente tipada e dinâmica, desenvolvida para a Plataforma Java, <a href="http://codezone.wordpress.com/2008/02/04/a-plataforma-java-nao-e-sobre-a-linguagem-java/" target="_blank">como alternativa à própria linguagem Java</a>.</p>
<p><strong>Vale a pena usar Grails?</strong></p>
<p>Para o seus projetos, só você mesmo pode responder. Mas o fato é que já existe muita coisa por ai rodando em cima de Grails. Um exemplo? O <a href="http://www.pepsico.com/" target="_blank">site da PepsiCo</a>, por exemplo, que <a href="http://www.grails.org/PepsiCo+Grails+Sites+Post-Analysis" target="_blank">é um caso relatado no site do Grails</a>.</p>
<p>Minha opinião? Se você quer uma alternativa dinâmica ao desenvolvimento web rápido para a Plataforma Java, dê uma olhada em Grails. Você não vai se arrepender.</p>
<p>Agora, se para você, desenvolvimento &#8220;confiável&#8221; e &#8220;bem feito&#8221; é sinônimo de centenas de milhares de XMLs, JARs, frameworks, e linguagem estaticamente tipada (porque o compilador te faz errar menos), esqueça Grails. (Mas&#8230; Uma dica: Sai dessa, meu chapa!!! <em>rsrsrs</em>)</p>
<p>Valeu!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2008/07/01/groovy-nos-trilhos-do-desenvolvimento-web-agil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

