<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>1up4Developers</title>
	
	<link>http://1up4dev.org</link>
	<description>Nadando contra o Waterfall. tail -f /mind/realworld &gt;&gt; /blog</description>
	<pubDate>Mon, 05 Jan 2009 11:36:25 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/1up4dev/OfrU" type="application/rss+xml" /><item>
		<title>Agilidade cascateira</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/486617404/</link>
		<comments>http://1up4dev.org/2008/12/agilidade-cascateira/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:50:09 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
		
		<category><![CDATA[cascata]]></category>

		<category><![CDATA[processos]]></category>

		<category><![CDATA[real world]]></category>

		<category><![CDATA[agilidade]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=262</guid>
		<description><![CDATA[Atualmente as metodologias ágeis vêm aparecendo com cada vez mais freqüência nas empresas que desenvolvem software, introduzidas pelos próprios desenvolvedores (o que é mais comum) ou em alguns raros casos pela &#8220;cúpula&#8221; da empresa, na esperança de melhorar a produtividade e/ou o alto tempo de resposta do fracassado processo cascateiro. Porém, esta &#8220;fama&#8221; prematura dos [...]]]></description>
			<content:encoded><![CDATA[<p>Atualmente as metodologias ágeis vêm aparecendo com cada vez mais freqüência nas empresas que desenvolvem software, introduzidas pelos próprios desenvolvedores (o que é mais comum) ou em alguns <span style="text-decoration: line-through;">raros</span> casos pela &#8220;cúpula&#8221; da empresa, na esperança de melhorar a produtividade e/ou o alto tempo de resposta do fracassado processo cascateiro. Porém, esta &#8220;fama&#8221; prematura dos métodos ágeis tem gerado mais resultados ruins do que bons. Sua aplicação na vida real, <span style="text-decoration: line-through;">na maioria</span> em muitos casos, ocorre de maneira equivocada, distorcida e desprezando-se os reais valores e princípios que apoiaram o surgimento desta filosofia.</p>
<p>Um exemplo claro de como os valores ágeis estão sendo <span style="text-decoration: line-through;">desprezados</span> distorcidos é o aumento constante de &#8220;cursos&#8221; e treinamentos de metodologias ágeis. Não é raro eu receber semanalmente vários <span style="text-decoration: line-through;">spams</span> e-mails de escolas de treinamento que ministram cursos de Scrum, XP, preparação para certificação ScrumMaster, técnicas de TDD, DDD, BDD, etc. Infelizmente o que estes cursos não ensinam (como todos os outros) é o verdadeiro significado de &#8220;ser ágil&#8221;. Fazer um curso de 20 horas de Scrum não o torna um ScrumMaster (você pode até ter um certificado, mas se você realmente é &#8220;ágil&#8221;, sabe que um certificado é um mero pedaço de papel sem valor).</p>
<p>E assim chegamos à &#8220;agilidade cascateira&#8221;, onde todos na empresa estufam o peito para falar que seguem práticas ágeis, <a href="http://pindureta.wordpress.com/2008/12/02/dialogo-imaginario-baseado-em-fatos-reais/">desenvolvimento orientados à testes</a>, utilizam <a href="http://fmeyer.org/archives/2008/11/20/o-scrume/">Scrume</a> para gerenciar os projetos, etc. Na verdade estão apenas praticando um <a href="http://1up4dev.org/2008/06/waterfalling/">waterfall incremental</a>, cometendo os mesmos <a href="http://1up4dev.org/2008/10/software-e-sobre-investimento/">erros clássicos da cascata</a>, valorizando os processos ao invés das pessoas, focando em soluções equivocadas ao invés de <a href="http://1up4dev.org/2008/11/foco-no-problema/">resolver os problemas dos clientes</a> e assim, <a href="http://1up4dev.org/2008/10/a-perpetuacao-da-especie/">difamando e denegrindo</a> a reputação e o propósito do <a href="http://agilemanifesto.org/">AgileManifesto</a>.</p>
<p>Esse é o cenário ideal para os <a href="http://1up4dev.org/2008/11/os-guardioes-da-cascata/">guardiões cascateiros</a>. É por estes e outros motivos que vemos &#8220;flames&#8221; oportunistas como <a href="http://jamesshore.com/Blog/The-Decline-and-Fall-of-Agile.html">The Decline and Fall of Agile</a> começarem a fazer sentido na comunidade. Como disse o <a href="http://gc.blog.br/2008/11/22/agile-indo-para-o-buraco/">Guilherme Chapiewski</a>, as pessoas estão querendo ir direto para a sobremesa e esquecendo de comer seus vegetais. Utilizar uma metodologia ágil não é desenvolver software de forma anarquista, existe muito conceito e experiência adquirida para sustentar esta filosofia.</p>
<p>Neste blog você já viu várias maneiras de como ser um verdadeiro cascateiro e de como não ser ágil. Já que estamos falando nisso, vamos tentar resumir alguns pontos e características que tornam um desenvolvedor realmente ÁGIL!</p>
<h3>Estude, mantenha-se atualizado!</h3>
<p>A principal característica de um agilista é sua sede por conhecimento, sua busca incansável por novas técnicas, linguagens, ferramentas, etc. O seguidor ágil lê artigos, revistas, livros e o faz como diversão. Se você não leu pelo menos um livro técnico nos últimos 6 meses, isto é um mal sinal. Faça laboratórios, testes de novos frameworks, bibliotecas, etc. Pet-projects também são uma maneira pragmática de aprender novas formas e técnicas de desenvolvimento. Finalmente, conheça e pratique os princípios e valores do <a href="http://agilemanifesto.org/principles.html">AgileManifesto</a>, tendo-os como seu mantra, seu guia filosófico e seu mentor profissional.</p>
<h3>Entenda realmente o problema do seu cliente</h3>
<p>Isto parece ser óbvio, mas na maioria das vezes não é. Existem vários perfis de clientes, e é claro que você deve lidar de maneiras diferentes com cada um deles.</p>
<p>Alguns são visionários sonhadores e sempre têm necessidades mirabolantes, sem sentido. Outros são simplistas demais e muitas vezes &#8220;ocultam&#8221; detalhes importantes. Também existem os pseudo-técnicos, que acham que sabem fazer seu trabalho e já vêm sugerindo como você deve implementar aquela nova funcionalidade.</p>
<div id="attachment_272" class="wp-caption aligncenter" style="width: 310px"><a href="http://1up4dev.org/wp-content/uploads/2008/12/imagem_spam_problem.jpg"><img class="size-medium wp-image-272" title="Reação comum quando há um problema" src="http://1up4dev.org/wp-content/uploads/2008/12/imagem_spam_problem-300x181.jpg" alt="Reação comum quando há um problema" width="300" height="181" /></a><p class="wp-caption-text">Reação comum quando há um problema</p></div>
<p>Como verdadeiro agilista, saber identificar o perfil de seu cliente é o início para um relacionamento de confiança e transparência. Só assim você será capaz de concentrar esforços para <a href="http://1up4dev.org/2008/11/foco-no-problema/">resolver seu problema</a> e <a href="http://1up4dev.org/2008/10/software-e-sobre-investimento/">agregar valor ao produto</a>.</p>
<h3>Não tenha medo de mudanças</h3>
<p>A única maneira de criar, corrigir ou melhorar algo é com coragem E com mudança. O essencial para mudar algo é saber identificar o que está errado. Por exemplo, você sofre diariamente para fazer o <em>deploy</em> da sua aplicação para homologação. Identificado o problema e uma possível solução, por exemplo, fazer o <em>deploy</em> em .war, você tem duas soluções: ou deixa como está e coloca a culpa na aplicação ou no processo de desenvolvimento (conformismo) ou com muita coragem investe algumas horas e resolve de vez o problema (agilismo).</p>
<p>Quando bater a insegurança, repita: <strong>coragem! coragem! coragem!</strong></p>
<div id="attachment_266" class="wp-caption aligncenter" style="width: 160px"><a href="http://1up4dev.org/wp-content/uploads/2008/12/coragemcaocovarde.jpg"><img class="size-medium wp-image-266" title="Tenha Coragem!" src="http://1up4dev.org/wp-content/uploads/2008/12/coragemcaocovarde.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Coragem: o cão covarde!</p></div>
<h3>Reflita e aprenda com os próprios erros</h3>
<p>Existem várias maneiras de você evoluir seu conhecimento, e a maioria dos programadores utilizam somente uma: tomando na cabeça.</p>
<div id="attachment_268" class="wp-caption aligncenter" style="width: 180px"><a href="http://1up4dev.org/wp-content/uploads/2008/12/fotopregocomcabeca.jpg"><img class="size-medium wp-image-268" title="Prego só toma na cabeça!" src="http://1up4dev.org/wp-content/uploads/2008/12/fotopregocomcabeca.jpg" alt="Prego só toma na cabeça!" width="170" height="170" /></a><p class="wp-caption-text">Prego só toma na cabeça!</p></div>
<p>Como um bom seguidor de práticas ágeis, reflita e aprenda com seus erros. Compartilhar seus problemas é a melhor maneira de escolher um solução adequada e ainda espalhar sua experiência entre a equipe para que outras pessoas não cometam o mesmo erro.</p>
<p>Errar é humano. Persistir no erro é burrice. Se você está com problemas, procure por pessoas que já tiveram um problema parecido e aprenda com ele. Não cometa os mesmo erros, e mais importante, não cometa os mesmo erros dos outros!</p>
<h3>Resumo</h3>
<p>Se tudo que você leu até agora não é novidade, parabéns! Caso contrário comece o quanto antes estudar e principalmente praticar estes conceitos no seu trabalho e na sua vida.</p>
<p>Seja responsável e <a href="http://www.velhosabio.com.br/mensagem.exibir.php?codmsg=297">comprometido</a> com seu trabalho. Esforce-se para fazer o melhor. Faça valer o seu salário. E lembre-se: cuidado com os falsos agilistas!</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/486617404" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/12/agilidade-cascateira/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/12/agilidade-cascateira/</feedburner:origLink></item>
		<item>
		<title>Rails Summit Happy hour!!</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/456083511/</link>
		<comments>http://1up4dev.org/2008/11/rails-summit-happy-hour/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 15:07:28 +0000</pubDate>
		<dc:creator>miguelbaldi</dc:creator>
		
		<category><![CDATA[eventos]]></category>

		<category><![CDATA[railssummit]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=253</guid>
		<description><![CDATA[Bom pessoal, já faz um tempo que não escrevo, isso se deve um pouco pela falta de tempo, mas muito pela falta de vergonha na cara! Sempre tenho idéias, mas pouca atitude. Como muitos sabem, em outubro passado o 1up4dev esteve representado no Rails Summit Latin America por mim, pelo Roger Leite e pelo André [...]]]></description>
			<content:encoded><![CDATA[<p>Bom pessoal, já faz um tempo que não escrevo, isso se deve um pouco pela falta de tempo, mas muito pela falta de vergonha na cara! Sempre tenho idéias, mas pouca atitude. Como muitos sabem, em outubro passado o 1up4dev esteve representado no Rails Summit Latin America por mim, pelo Roger Leite e pelo André Farina. Muita coisa aconteceu naquele evento, e isso com certeza ficou evidente em muitos posts por aí (post do <a href="http://blog.shadowmaru.org/2008/10/17/rails-summit-a-experiencia-pessoal" target="_blank">shadow</a>, <a href="http://akitaonrails.com/2008/11/12/rails-summit-blogosfera" target="_blank">akitaonrails</a> e muitos outros). As palestras simplesmente foram inspiradoras, enriquecedoras e com certeza mudaram a cabeça de muita gente, não tem como não se empolgar ao ver caras como Chad Fowler e Obie Fernandez falando! Os caras arrasaram em todos os sentidos. O fato de poder entrar em contato com figuras da comunidade que muitas vezes você só acompanha via GitHub, e melhor, poder trocar uma idéia com essa galera é muito legal.</p>
<p>Com certeza todos ficaram com um gostinho de quero mais, e com uma imensa vontade de agradecer ao Fábio Akita e todos aqueles que tornaram este evento possível. Mas uma coisa que não vi ser muito falada foi o happy hour que aconteceu ao final do último dia. Você consegue imaginar como seria poder tomar uma breja com o cara que escreveu um de seus livros preferidos?! Ou o cara que mantém aquele blog que te inspirou a aprender ruby/rails? Melhor ainda. Imagine poder passar um momento falando besteiras e dando muita risada com esses caras?! Bom, eu passei por isso!! E até agora a ficha parece não ter caído, não consigo acreditar que passei por isso.</p>
<p>Bom, para organizar os fatos a coisa aconteceu mais ou menos assim. Depois do fim da palestra do Obie Fernandez toda galera correu para tiras fotos, pegar autógrafos e coisas do tipo, foi agitação total como era esperado. Feito isso, o pessoal da organização começou a servir espumante e cerveja no saguão e é claro que corremos para lá. Foi muito legal, pois nesse momento conseguimos conhecer mais gente e ainda presenciar <a href="http://drnicwilliams.com/" target="_blank">Dr Nic</a> mandando ver numa Skol gelada! Nesse momento começou um movimento revolucionário lutando por uma causa que eu considerei mais que justa, procurar um lugar para comer e beber mais cerveja (e depois algumas caipirinhas, como pode ser confirmado pelo próprio Dr Nic no video abaixo!). Surgiu a idéia de comer um sushi, e é claro que só podia ser no bairro da Liberdade.</p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=2262132&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=2262132&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/2262132">Rails Summit Happy Hourt, chegada</a> from <a href="http://vimeo.com/user942052">miguel aranha baldi horlle</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Nesse momento todos se mobilizaram, e o pessoal da LocaWeb ainda deu uma força na logistica, e todos foram para um restaurante na Liberdade. Muitos pegaram carona (como eu!), outros foram na Van da LocaWeb, mas o importante é que depois de algumas voltas estávamos todos lá. Simplesmente lotamos o lugar, um monte de nerds loucos para comer e tomar umas cervejas, todos loucos depois de um evento como esse. A galera se organizou em várias mesas, e fiquei em uma mesa com o Ricardo Yasuda (shadow) e o <a href="http://www.marciotrindade.com/" target="_blank">Márcio Trindade</a>. Junto com a gente estava Dr Nic e um argentino maluco (qual que não é?! huahauhua). Em outras mesas estavam <a href="http://obiefernandez.com/" target="_blank">Obie Fernandez</a>, <a href="http://chadfowler.com/" target="_blank">Chad Fowler</a>, <a href="http://errtheblog.com/">Chris Wanstrath</a>, <a href="David Chelimsky" target="_blank">David Chelimsky</a>! A galera do Phusion Passenger também estava lá, assim como <a href="http://blog.improveit.com.br/" target="_blank">Vinicius Teles</a>, <a href="http://www.linkedin.com/in/juanbernabo" target="_blank">Juan Bernabó</a> e muitos outros (Incluindo Fábio Akita!). Bom, o resto foi um misto de muita bebida, risadas, e claro, muito papo nerd. E o mais legal de tudo é que sobrou um pouco de bateria na filmadora e eu consegui filmar alguma coisa (com a ajuda do nosso amigo argentino, que se alguem lembrar do nome por favor me avise).</p>
<p>O mais legal de tudo isso foi poder conhecer muita gente legal, ter contato com meus ídolos e ver que estes são pessoas muito acessiveis. Certamente esse dia não vai sair de minha lembrança, um abraço pra galera que esteve lá, devido ao nível alcoolico do momento não me lembro do nome de todos, huahuahuaha. E fica a chamada pra galera, quem esteve lá nessa noite por favor se manifeste e comente aí, gostaria de saber o nome da galera. <img src='http://1up4dev.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=2262377&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=2262377&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/2262377">Rails Summit Happy Hour, hino nacional</a> from <a href="http://vimeo.com/user942052">miguel aranha baldi horlle</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Observações: Conforme eu for subindo mais videos no <a href="http://vimeo.com/" target="_blank">Vimeo</a> eu vou atualizando este post, portanto fiquem ligados! Tentei deixar os videos em uma boa qualidade para quem for baixar. Ainda tenho que editar a maior parte da filmagem que foi feita pelo argentino maluco, que logo no inicio pegou a camera de mim e não soltou mais até acabar a bateria!</p>
<p>Espero que mais eventos como esse aconteçam, e que a galera compareça e participe como participou neste evento, abraço à todos!</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/456083511" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/11/rails-summit-happy-hour/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/11/rails-summit-happy-hour/</feedburner:origLink></item>
		<item>
		<title>Foco no problema</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/448843203/</link>
		<comments>http://1up4dev.org/2008/11/foco-no-problema/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 21:33:43 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
		
		<category><![CDATA[cascata]]></category>

		<category><![CDATA[real world]]></category>

		<category><![CDATA[waterfall]]></category>

		<category><![CDATA[agilidade]]></category>

		<category><![CDATA[dicas]]></category>

		<category><![CDATA[metodologia]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=243</guid>
		<description><![CDATA[Desenvolver software é uma atividade muito gratificante pois sempre podemos (ou deveríamos) exercitar nossa criatividade para solucionar os problemas dos clientes. Isto, apesar de divertido pode ser perigoso e/ou catastrófico se estivermos com o foco errado. Num ambiente cascateiro, onde cada envolvido está comprometido apenas com o processo e não se preocupa verdadeiramente com os [...]]]></description>
			<content:encoded><![CDATA[<p>Desenvolver software é uma atividade muito gratificante pois sempre podemos (ou deveríamos) exercitar nossa criatividade para solucionar os problemas dos clientes. Isto, apesar de divertido pode ser perigoso e/ou catastrófico se estivermos com o foco errado. Num ambiente cascateiro, onde cada envolvido está comprometido apenas com o processo e não se preocupa verdadeiramente com os problemas dos clientes, não é difícil que isto ocorra. Quase sempre o foco acaba sendo direcionado para a solução ao invés do problema.</p>
<p>Mas qual a diferença entre foco no <strong>problema</strong> ou <strong>solução</strong>? Vamos a um exemplo:</p>
<blockquote><p>Quando a Nasa enviou os primeiros astronautas ao espaço, descobriu que as canetas não funcionavam com gravidade zero. Para resolver esse problema, os engenheiros contrataram uma empresa especializada para projetar a caneta espacial.<br />
Dez anos e US$ 12 milhões depois, estava pronta a caneta que podia ser usada no espaço, em qualquer posição. Nem a temperatura poderia atrapalhar: a supercaneta funcionava bem fizesse frio ou calor.<br />
Os russos, que tiveram o mesmo problema, optaram por uma solução mais simples: passaram a usar um lápis.</p></blockquote>
<p><a href="http://1up4dev.org/wp-content/uploads/2008/11/spaceball.gif"><img class="alignnone size-medium wp-image-247" title="spaceball" src="http://1up4dev.org/wp-content/uploads/2008/11/spaceball.gif" alt="" width="1" height="1" /></a>A história acima é bem famosa e mesmo sendo <a href="http://www.e-farsas.com/artigo.php?id=58" target="_blank">falsa</a>, demonstra muito bem o que acontece quando o problema não está em foco. Neste caso, o problema é a impossibilidade de escrever em gravidade zero. Uma das soluções seria uma caneta que escreva nessas condições. Veja que aqui a <strong>solução</strong> já está em foco. Outra solução para o problema seria utilizar algo que escrevesse em gravidade zero: um pedaço de carvão ou um giz já serviriam. Assim, o problema seria resolvido.</p>
<p>Outro exemplo de falta de foco no problema é esta <a href="http://blog.aspercom.com.br/2008/07/21/hierarquias-sao-inteligentes-nas-pontas/" target="_blank">história</a> da fábrica de pasta de dente, onde ocasionalmente algumas caixas da pasta de dente eram entregues vazias. Para eliminar este problema, a empresa <span style="text-decoration: line-through;">gastou</span> investiu milhões para garantir que durante a fabricação, nenhuma caixa ficasse sem o tubo de pasta de dente dentro. Mas o problema foi realmente resolvido depois que um operário deixou um ventilador soprando as caixas vazias para fora da esteira de produção. Simples não?</p>
<p>Na área de desenvolvimento de software não é tão raro acontecer algo parecido, onde o foco está inteiramente na solução. Sabe aquele sistema meio capenga, que funciona e dá dinheiro para empresa mas não é &#8220;web 2.0&#8243; nem utiliza conceitos de &#8220;SOA&#8221;? De repente a diretoria decide que este sistema deve ser &#8220;migrado&#8221; para uma tecnologia <span style="text-decoration: line-through;">da moda</span> mais atual, que o permita &#8220;evoluir&#8221; mais facilmente.</p>
<p>Para atender esta necessidade, normalmente uma equipe nova é contratada, toneladas de <a href="http://blog.fragmental.com.br/2008/07/25/uh-eme-ele/" target="_blank">documentos e diagramas</a> são produzidos até que os programadores comecem a <a href="http://www.martinfowler.com/bliki/CheaperTalentHypothesis.html" target="_blank">codificar</a>. A esta altura, o prazo já está apertado e os &#8220;stakeholders&#8221; ainda não viram os resultados. Depois de muito tempo e dinheiro desperdiçados, um sistema feito às pressas, <em>bonitinho</em> mas meia-boca, é entregue com os mesmos defeitos do anterior. E o problema não foi resolvido&#8230;</p>
<p>Desenvolver software deve ser um investimento <a href="http://1up4dev.org/2008/10/software-e-sobre-investimento/" target="_blank">lucrativo</a>, proporcionando algum ganho às partes envolvidas. Quando uma <strong>necessidade</strong> surgir, o primeiro passo é identificar o <strong>problema</strong> para então encontrar a melhor <strong>solução</strong>, ou seja, foco no problema. Neste exemplo da &#8220;migração&#8221;, o problema é que a manutenção do software atual é muito cara, porém &#8220;migrar&#8221; o sistema inteiro não vai resolver o problema, no máximo criará um novo.</p>
<p>Mas de quem é a culpa quando o foco está na solução? Eu respondo: a <strong>cascata</strong>! Apesar das metodologias ágeis estarem em alta e aos poucos serem adotadas pelas empresas, a maldição do waterfall ainda é está entre nós. Clientes continuam com a mania de pedir tudo no início do projeto. Ao exporem seus problemas, já estão pensando na solução. Fazem questão de engordar o escopo com coisas das quais não têm certeza da utilidade, mas querem que estejam lá pois podem precisar um dia. Os desenvolvedores também não estão isentos dessa culpa. Um legítimo analista cascateiro não se envolve com os problemas do cliente, apenas ouvem suas solicitações e transformam em casos de uso ou diagramas. É aí que uma simples necessidade se transforma numa bola de neve e a lenda da caneta da Nasa se repete&#8230;</p>
<p><a href="http://1up4dev.org/wp-content/uploads/2008/11/software.jpg"><img class="aligncenter size-medium wp-image-249" title="software" src="http://1up4dev.org/wp-content/uploads/2008/11/software-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Um verdadeiro desenvolvedor ágil deve se comprometer com o cliente, ouvir, entender e se envolver com suas necessidades para então sugerir uma solução simples, focada e que resolva o problema. Esta interação é muito importante e deve ser constante, pois o cliente passa a identificar <strong>o que</strong> realmente ele <strong>precisa</strong>, ou seja, o qual seu<strong> problema</strong>! Assim, começa a se concentrar em funcionalidades que realmente serão úteis e agregarão valor ao software e, consequentemente, ao negócio. Feedback é muito importante. O pessoal do Google sabe muito bem disso&#8230;</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/448843203" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/11/foco-no-problema/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/11/foco-no-problema/</feedburner:origLink></item>
		<item>
		<title>Arquiteto Cascateiro</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/445307108/</link>
		<comments>http://1up4dev.org/2008/11/arquiteto-cascateiro/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 09:44:44 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
		
		<category><![CDATA[cascata]]></category>

		<category><![CDATA[real world]]></category>

		<category><![CDATA[waterfall]]></category>

		<category><![CDATA[dicas]]></category>

		<category><![CDATA[pragmatic waterfall]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=210</guid>
		<description><![CDATA[Definição do que é um Arquiteto Cascateiro. E leves dicas de como tentar transformá-lo num integrante da equipe de desenvolvimento.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Este post é uma homenagem aos Arquitetos defensores do <em>waterfall</em>/cascata.</p></blockquote>
<p>Recentemente tive o <span style="text-decoration: line-through;">des</span>prazer de conhecer um arquiteto, é isso mesmo, aquele com certificado e tudo, com direito a broche da Sun em seu terninho. Aliás, certificado é um tema polêmico que eu não tenho uma opinião muito certa e/ou formada&#8230; bom, vou deixar esta parte para um próximo post, quem sabe.</p>
<p>Voltando ao assunto, hoje no fretado, comecei a pensar nas semelhanças que um arquiteto de sistemas (certificado que decorou patterns inutéis da Sun) tem com um arquiteto de obras. Só para deixar claro, na tabela abaixo estou usando dois estados: <em><span style="color: #ff0000;">FAIL</span></em> e <span style="color: #008000;">Ok</span>. Fail quer dizer que <span style="text-decoration: line-through;">vai dá merda</span> não vai dar certo e não tem jeito, caso queira uma definição mais formal, o <a href="http://en.wikipedia.org/wiki/Failure">wikipédia</a> ajuda, agora se você prefere imagens, o <a href="http://www.failblog.net/">Fail Blog</a> também serve.</p>
<div id="attachment_235" class="wp-caption aligncenter" style="width: 310px"><a href="http://1up4dev.org/wp-content/uploads/2008/11/soccer_fail.jpg"><img class="size-medium wp-image-235" title="Exemplo de FAIL" src="http://1up4dev.org/wp-content/uploads/2008/11/soccer_fail-300x201.jpg" alt="Exemplo de FAIL" width="300" height="201" /></a><p class="wp-caption-text">Exemplo de FAIL</p></div>
<table style="border: thin solid;" border="0">
<tbody>
<tr>
<th style="width: 60%;">Objetivos</th>
<th style="width: 20%;">Cascateiro</th>
<th style="width: 20%;">De Obras</th>
</tr>
<tr>
<td>Colocam as futuras &#8220;obras&#8221; no papel antes de começar.</td>
<td><span style="color: #ff0000;">FAIL</span></td>
<td><span style="color: #008000;">OK</span></td>
</tr>
<tr>
<td>Ainda no papel, colocam <strong>todas</strong> as necessidades do cliente, do início ao fim.</td>
<td><span style="color: #ff0000;">FAIL</span></td>
<td><span style="color: #008000;">OK</span></td>
</tr>
<tr>
<td>O cliente do Arq. de Obras sabe que depois que começar não pode mudar.</td>
<td><span style="color: #ff0000;">FAIL</span></td>
<td><span style="color: #008000;">OK</span></td>
</tr>
<tr>
<td>O arquiteto de Obras <strong>não</strong> define quais tipos de blocos, cimento e ferro a obra vai usar, o Cascateiro <strong>sim</strong>.</td>
<td><span style="color: #ff0000;">FAIL</span></td>
<td><span style="color: #008000;">OK</span></td>
</tr>
</tbody>
</table>
<p>Parei a tabela por aqui pois já dá pra saber que o <span style="color: #ff0000;">FAIL</span> tende a infinito né.<br />
Pergunta: o que ambos arquitetos estão fazendo!?!<br />
Resposta educada: Estão <strong>fechando o escopo</strong> do projeto.</p>
<div id="attachment_220" class="wp-caption alignleft" style="width: 237px"><a href="http://1up4dev.org/wp-content/uploads/2008/11/construcao-crea.jpg"><img class="size-medium wp-image-220" title="construcao de arquiteto cascateiro" src="http://1up4dev.org/wp-content/uploads/2008/11/construcao-crea-300x225.jpg" alt="Arquiteto Cascateiro trabalhando ..." width="227" height="171" /></a><p class="wp-caption-text">Arquiteto Cascateiro trabalhando ...</p></div>
<p>A resposta acima é uma <span style="text-decoration: underline;">frase chave</span> pra você ter certeza que vive num projeto waterfall cascateiro. Fechar o escopo do projeto inteiro deve ser muito bom para o arquiteto de obras, já para um sistema, o efeito é contrário. Acredito muito na teoria que <a href="http://gc.blog.br/2008/07/20/cuidando-para-que-o-software-nao-apodreca/">desenvolver software não é construir prédios</a>. Livros de renome como <a href="http://1up4dev.org/2008/05/the-pragmatic-programmer-no-ambiente-waterfall-e-claro/">Pragmatic Programmer</a> citam isso.</p>
<p>Sei que este tema de construção civil já está batido. Comecei a escrever este post ao mesmo tempo que o Sr. Panachi publicou o <a href="http://1up4dev.org/2008/10/software-e-sobre-investimento/">anterior</a>, e com a idéia de ficar menos repetitivo, já vou <em>linkar</em> as sugestões dos nossos incríveis leitores:</p>
<ul>
<li>O <a href="http://www.mouseoverstudio.com/blog/">Diego Carrion</a> (grande peruano! :D) cita este <a href="http://agiletips.blogspot.com/2008/07/agile-bridge-analogy.html"><em>link</em></a>, que fala que a engenharia civil também consegue ser ágil em alguns casos.</li>
<li>O <a href="http://witaro.wordpress.com/">Witaro</a>, fez um ótimo post &#8220;<a href="http://witaro.wordpress.com/2008/08/11/desenvolvendo-software-como-uma-rock-band/">Desenvolvendo software como uma Rock Band</a>&#8221; que quebra a barreira da analogia com a engenharia civil. Cara, continue escrevendo, porque a sua visão é muito legal!</li>
</ul>
<p>Bom, agora que acabou o desabafo, vamos as possíveis soluções. O que fazer com o Arquiteto Cascateiro?</p>
<p>Acho que a primeira coisa seria conscientizá-lo de que ele não é o <a href="http://pt.wikipedia.org/wiki/Oscar_Niemeyer">Oscar Niemeyer</a> e que a primeira versão de seu software nunca será completa de uma vez. Você deve conversar sobre iterações com ele e mostrar que o software deve evoluir conforme o cliente também evolui nas descobertas das suas reais necessidades. Sei que o post já está cheio de <em>links</em>, mas este post do Phillip Calçado, <a href="http://blog.fragmental.com.br/2008/08/09/analista-pedreiro/">Analista Pedreiro</a>, resume bem o que quero dizer.</p>
<p><strong>Arquiteto</strong>, este nome ou termo ou cargo ou seja-lá-o-que-for, é coisa de modelo <em>waterfall</em>/cascata. Numa equipe, não deve haver distinção desta maneira. Todos programam, modelam, configuram, trabalham no Banco de Dados quando necessário, ou seja, ninguém deve exercer um papel único. Papéis únicos, representam <a href="http://1up4dev.org/2008/11/os-guardioes-da-cascata/">Guardiões</a> que defendem somente seus interesses e não trabalham em pró da equipe/cliente/projeto.</p>
<p>O Arquiteto deve programar, colocar a mão na massa, assim como toda a equipe, pois UML, Caso de Uso, Diagrama de Sequência, etc. <strong>sempre compilam</strong>! Muito diferente na vida real, onde muitas vezes você é obrigado a implementar uma coisa diferente e torta para acompanhar estes documentos cascateiros. Caso você seja obrigado a gerar a documentação fútil acima, pense em algo que seja automatizado após você ter programado e testado, com certeza você será umas cinco vezes mais produtivo.</p>
<p>E por último e não menos importante, a equipe (inclusive o Arquiteto) tem que conhecer o negócio que implementa. Quando se inicia um novo projeto ou até mesmo decidem reestruturar um existente, o arquiteto cascateiro <span style="text-decoration: line-through;">sempre</span> prioriza novas tecnologias e frameworks, o que na maioria das vezes, não é necessário. Novos projetos ou <em>refactoring</em> em existentes, devem ter um único prioritário objetivo: <a href="http://pt.wikipedia.org/wiki/Keep_it_Simple_Stupid">KISS</a>. Com esta prioridade em mente, novas tecnologias e frameworks serão escolhidos naturalmente, e não somente usar porque é a última moda no estilo SunTechDays.</p>
<p>E vocês leitores?! Sofrem ou já sofreram muito com Arquitetos Cascateiros!?!</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/445307108" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/11/arquiteto-cascateiro/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/11/arquiteto-cascateiro/</feedburner:origLink></item>
		<item>
		<title>Os guardiões da cascata</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/441679576/</link>
		<comments>http://1up4dev.org/2008/11/os-guardioes-da-cascata/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 03:49:11 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
		
		<category><![CDATA[cascata]]></category>

		<category><![CDATA[marketing]]></category>

		<category><![CDATA[processos]]></category>

		<category><![CDATA[resenhas]]></category>

		<category><![CDATA[devaneios]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=228</guid>
		<description><![CDATA[Se você freqüenta este blog já deve ter percebido que nós não gostamos da maldita cascata. Fases bem definidas, detalhamento de requisitos, documentos inúteis, diagramas UML, papéis&#8230; tudo muito lindo na teoria. Eu fico até emocionado quando leio a documentação do RUP. Mas infelizmente a maioria dos profissionais de TI precisam são obrigados a trabalhar [...]]]></description>
			<content:encoded><![CDATA[<p>Se você freqüenta este blog já deve ter percebido que nós não gostamos da <span style="text-decoration: line-through;">maldita</span> <a href="http://pt.wikipedia.org/wiki/Modelo_em_cascata" target="_blank">cascata</a>. Fases bem definidas, detalhamento de requisitos, documentos inúteis, diagramas UML, papéis&#8230; tudo muito lindo na teoria. Eu fico até emocionado quando leio a <a href="http://www.wthreex.com/rup/" target="_blank">documentação</a> do <a href="http://pt.wikipedia.org/wiki/Rational_Unified_Process" target="_blank">RUP</a>. Mas infelizmente a maioria dos profissionais de TI <span style="text-decoration: line-through;">precisam</span> são obrigados a trabalhar nestes ambientes cascateiros, enfrentando chefes sem noção, colegas com <a href="http://www.novacorja.org/" target="_blank">síndrome do funcionário público</a>, <a href="http://desciclopedia.org/wiki/POG#Prazos_de_um_projeto_POG" target="_blank">prazos sem sentido</a>, entre outras <a href="http://1up4dev.org/2008/09/contos-do-programador-pragmatico/" target="_blank">pérolas</a> da <a href="http://1up4dev.org/2008/10/a-perpetuacao-da-especie/" target="_blank">área</a>.</p>
<p>O principal apelo de um processo cascateiro são suas fases e papéis bem definidos, onde cada membro da &#8220;equipe&#8221; é responsável por uma determinada tarefa que é executada em uma seqüência previamente definida. Dentre os <a href="http://www.wthreex.com/rup/process/workers/ovu_works.htm" target="_blank">papéis</a>, pode-se facilmente identificar os especialistas daquela tarefa, que defendem sua <span style="text-decoration: line-through;">necessidade</span> execução com unhas e dentes. Para ilustrar, resolvi chamá-los de <a href="http://pt.wikipedia.org/wiki/Guardi%C3%B5es_do_Universo" target="_blank">guardiões</a>, seja da tecnologia ou da atividade em questão. Um guardião protege sua fase, tarefa e interesses, defendendo-os para que o &#8220;processo&#8221; não seja quebrado. Desta forma, &lt;sarcasmo&gt; a &#8220;equipe&#8221; atinge seu objetivo: o software! &lt;/sarcasmo&gt; Seguem alguns exemplos desses guardiões cascateiros:</p>
<p><strong>O guardião do banco de dados: &#8220;<em>Não rodarás nenhum script na base alheia</em>&#8220;</strong><br />
Começo por este por ser o mais comum dos guardiões. Ele trata o banco de dados como um filho, mesmo que seja um adolescente que não obedeça inteiramente à 3ª regra normal. São vistos como semi-deuses, capazes de transcrever o modelo de negócio da empresa em uma linguagem de alto nível, impossível de ser compreendida por simples programadores. Protejem as tabelas com a própria vida e qualquer alteração na base de dados é motivo para um duelo até a morte! Utilizam um padrão para nomenclatura de campos que somente é conhecido pelo clã dos DBAs. Geralmente são seguidores do Oráculo, o senhor de todos os bancos de dados.</p>
<p><strong>O guardião do projeto: <em>&#8220;Guia-te pelo teu Gantt e serás recompensado&#8221;</em></strong><br />
Este guardião está presente em todos os projetos, garantindo que a palavra do <a href="http://pt.wikipedia.org/wiki/Diagrama_de_Gantt" target="_blank">Gantt</a> seja cumprida, protegendo o escopo do projeto com a própria vida (ou a vida de algum programador). Adicionalmente atua como roteador de atividades: recebe os requisitos pelo email, encaminha para um recurso disponível (programador) que estima o esforço e define uma data de entrega, devolvendo para o guardião que atualiza seu <a href="http://blog.aspercom.com.br/2007/11/15/ganttchartnaofunciona/" target="_blank">Project</a>.</p>
<p><strong>O guardião do framework: <em>&#8220;Venerarás o Struts e nada te faltarás&#8221;</em></strong><br />
O framework é o objeto de adoração deste guardião, nenhum outro framework é tão bom quanto o que ele venera. Ele provê solução para todos seus problemas simplesmente escrevendo um bloco de XML aqui, outro ali, mudando aquela linha acolá e estendendo uma classe X implementando aquela interface Z. Qualquer evolução do framework em questão não passa de uma tentativa frustrada de &#8220;reinventar a roda&#8221;.</p>
<p><strong>O guardião da arquitetura: <em>&#8220;Não usarás a instância do teu objeto em vão&#8221;</em></strong><br />
Uma variação interessante de guardião, que neutraliza seu oponente através de técnicas de tortura e perturbação mental, inundando as sessões de brainstorm com uma enxurrada de DTO&#8217;s, VO&#8217;s, Facades, EJB&#8217;s entre outros patterns que fazem a cabeça dos programadores entrar em conflito, até que seus órgãos faleçam (ou simplesmente se demitam). Geralmente são cúmplices dos guardiões do projeto, conspirando para a dominação do Gannt.</p>
<p><strong>O guardião do root: <em>&#8220;Teu processo não executarás no meu bash&#8221;</em></strong><br />
A jóia mais preciosa da empresa: a senha do root. Seu guardião é o mais honrado dos seres, sendo uma espécie de <a href="http://pt.wikipedia.org/wiki/O_Senhor_dos_An%C3%A9is" target="_blank">Frodo</a>, protegendo-a com a própria vida pois uma vez em mãos erradas pode ser usada para a destruição da humanidade (ou apenas para reiniciar aquela instância do Tomcat travado em produção). Aquele que desafia este guardião perde o direito de executar seus processos como administrador local e fica vagando pelo filesystem eternamente.</p>
<p><strong>O guardião dos guardiões: <em>&#8220;Tua TI é um mal necessário&#8221;</em></strong><br />
Também conhecido como diretor, presidente, CEO, dono, investidor, sócio, etc. É o guardião das decisões, aquele que protege sua riqueza acima de tudo, economizando nos salários, contratando funcionários despreparados e investindo rios de dinheiro em consultorias e licenças de software para garantir seus investimentos.</p>
<p>Enfim, são guardiões dos próprios interesses. A &#8220;equipe&#8221; é apenas uma palavra que usam em discursos mas nunca aplicaram o conceito na prática!</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/441679576" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/11/os-guardioes-da-cascata/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/11/os-guardioes-da-cascata/</feedburner:origLink></item>
		<item>
		<title>Software é sobre investimento</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/436582017/</link>
		<comments>http://1up4dev.org/2008/10/software-e-sobre-investimento/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 03:00:33 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
		
		<category><![CDATA[processos]]></category>

		<category><![CDATA[real world]]></category>

		<category><![CDATA[agilidade]]></category>

		<guid isPermaLink="false">http://1up4dev.wordpress.com/?p=40</guid>
		<description><![CDATA[Atualmente, desenvolver software não é uma atividade barata. O custo com os profissionais envolvidos, equipamentos, licenças de software (não é o caso se a equipe utiliza software livre), entre outros recursos, para um software que demore em média três meses para ser desenvolvido com uma equipe de 5 pessoas sairá pelo mesmo valor de um [...]]]></description>
			<content:encoded><![CDATA[<p>Atualmente, desenvolver software não é uma atividade barata. O custo com os profissionais envolvidos, equipamentos, licenças de software (não é o caso se a equipe utiliza software livre), entre outros recursos, para um software que demore em média três meses para ser desenvolvido com uma equipe de 5 pessoas sairá pelo mesmo valor de um carro <span style="text-decoration: line-through;">popular</span> de luxo, por exemplo. Já que o investimento é alto, é importante que o software seja confiável, durável, adaptável e principalmente que sua utilização/adoção, além de atender a um problema/necessidade, obtenha o <a href="http://pt.wikipedia.org/wiki/Retorno_sobre_investimento" target="_blank">retorno sobre o investimento</a>.</p>
<p>Para uma empresa que desenvolve software por encomenda, o retorno sobre o investimento (equipe, equipamentos, etc) é o lucro obtido com a venda do software através de uma conta muito simples: investimento - custo = lucro. Desta forma, qualquer CEO sabe que quanto menor for o &#8220;custo&#8221;, maior será o &#8220;lucro&#8221;. É aqui que mora o perigo!</p>
<p>Uma das falsas ilusões das metodologias baseadas no waterfall é o controle sobre o processo. Ou seja, com um processo bem <span style="text-decoration: line-through;">engessado</span> definido, o &#8220;motor&#8221; da empresa giraria de modo uniforme, sendo controlável e mensurável. Uma vez que esse mecanismo esteja funcionando, pode-se conter gastos contratando-se mão-de-obra mais barata para fazer a parte repetitiva e &#8220;não-criativa&#8221; do processo, que já foi previamente &#8220;projetada&#8221; pelos analistas e arquitetos. Desta forma, concentra-se a maioria do esforço no projeto ou desenho do software, que é mais caro, para recuperar o &#8220;gasto&#8221; na fase de construção, que é mais barata.</p>
<div id="attachment_31" class="wp-caption aligncenter" style="width: 310px"><a href="http://1up4dev.org/wp-content/uploads/2008/06/waterfall_model.png"><img class="size-medium wp-image-31" title="Waterfall Model" src="http://1up4dev.org/wp-content/uploads/2008/06/waterfall_model-300x230.png" alt="Waterfall Model" width="300" height="230" /></a><p class="wp-caption-text">Modelo Waterfal: etapas bem definidas </p></div>
<p>Este método funciona muito bem&#8230; na <a href="http://pt.wikipedia.org/wiki/Engenharia_civil" target="_self">engenharia civil</a>, onde os problemas são bem definidos (a necessidade de atravessar um rio, por exemplo), a solução <strong>deve</strong> ser projetada (uma ponte) e executada por especialistas em construção (pedreiros). O esforço pode ser mensurado e cobrado do cliente. Dificilmente ocorrerão mudanças no projeto (ao invés de ponte, decidem mudar para um teleférico, por exemplo) e o tempo de construção pode ser diminuído aumentando-se a mão-de-obra porém permanecendo o mesmo custo no final do processo.</p>
<p>Infelizmente com software <a href="http://wordaligned.org/articles/why-software-development-isnt-like-construction" target="_blank">não é bem assim</a>. O desenvolvimento de software é (ou deve ser) um processo criativo e <a href="http://pt.wikipedia.org/wiki/Desenvolvimento_iterativo_e_incremental" target="_blank">iterativo</a>, mais parecido com <a href="http://gc.blog.br/2008/07/20/cuidando-para-que-o-software-nao-apodreca/" target="_blank">jardinagem</a>. O problema/necessidade dificilmente é bem definido (dificuldade de controlar as vendas pela internet, por exemplo) e os requisitos geralmente mudam o tempo todo. Os clientes normalmente não sabem exatamente quais são suas necessidades e precisam &#8220;aprender&#8221; enquanto o software vai sendo desenvolvido, atendendo às necessidades aos poucos.</p>
<div id="attachment_208" class="wp-caption aligncenter" style="width: 310px"><a href="http://1up4dev.org/wp-content/uploads/2008/10/iterating.jpg"><img class="size-medium wp-image-208" title="Iterativo" src="http://1up4dev.org/wp-content/uploads/2008/10/iterating-300x80.jpg" alt="Cliente não sabe exatamente o que quer" width="300" height="80" /></a><p class="wp-caption-text">Clientes não sabem exatamente o que querem no início do projeto</p></div>
<p>Voltando ao assunto do post, para o cliente o que mais importa é que o software atenda suas necessidades (mesmo que ele ainda não saiba exatamente quais são). O retorno sobre o investimento começa a ficar evidente quando o cliente utiliza o software e obtém proveito dele, por exemplo, tendo um maior controle e organização de suas vendas pela internet. Neste caso o software é um meio pelo qual o cliente consegue resolver seus problemas ou atender suas necessidades. Isto o software não faz por sí só.</p>
<p>Para uma empresa que desenvolve software, o retorno sobre o investimento é obtido durante o desenvolvimento do software, guiado por <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_extrema" target="_blank">práticas</a> e ferramentas que fornecem velocidade e confiabilidade ao software, deixando-o adequado às necessidades do cliente, estável e fácil de ser mantido. Para obter estas características, a equipe deve estar muito alinhada e ter a experiência e habilidade técnica necessária para evitar trabalho desnecessário e focar na resolução do problema, colaborando com o cliente para fornecer constantemente software funcionando e que agrega valor ao negócio. Ou seja, devem seguir o <a href="http://agilemanifesto.org/" target="_blank">manifesto ágil</a>!</p>
<p>Atualmente, as empresas de desenvolvimento de software mais bem sucedidas utilizam metodologias ágeis, ou seja, pessoas ao invés de processos. O investimento em um bom profissional é recompensado pela sua experiência que pode economizar muito tempo e dinheiro ao longo de um projeto. Bons profissionais, motivados, utlizando metodologias ágeis são mais produtivos, ou seja, valem o investimento.</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/436582017" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/10/software-e-sobre-investimento/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/10/software-e-sobre-investimento/</feedburner:origLink></item>
		<item>
		<title>A perpetuação da espécie</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/425996169/</link>
		<comments>http://1up4dev.org/2008/10/a-perpetuacao-da-especie/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 02:48:18 +0000</pubDate>
		<dc:creator>Humberto</dc:creator>
		
		<category><![CDATA[questionamento]]></category>

		<category><![CDATA[real world]]></category>

		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=200</guid>
		<description><![CDATA[Na semana passada uma desconfortável discussão me pôs a pensar sobre os obstáculos culturais na aceitação de princípios ágeis no desenvolvimento de sistemas. A discussão ocorreu quando um amigo meu comentou comigo a respeito de uma metodologia que ele pretende aplicar em um projeto no qual está envolvido. Fiz questão que ouvi-lo com atenção, pois [...]]]></description>
			<content:encoded><![CDATA[<p>Na semana passada uma desconfortável discussão me pôs a pensar sobre os obstáculos culturais na aceitação de princípios ágeis no desenvolvimento de sistemas. A discussão ocorreu quando um amigo meu comentou comigo a respeito de uma metodologia que ele pretende aplicar em um projeto no qual está envolvido. Fiz questão que ouvi-lo com atenção, pois ele, além de ser uma pessoa da minha consideração, possui um background de sistemas muito diferente do meu. O que permite tentar entender outros lados de problemas em comum.</p>
<p>Logo nos primeiros instantes da conversa, percebi que a metodologia que ele estava a me explicar era nada menos que algo derivado de waterfall, onde, basicamente, um &#8220;sistema&#8221; é definido, por sábios analistas, em um conjunto de diagramas diversos, para depois passar por &#8220;estágios&#8221; de aprovações e assinaturas mil, e então finalmente cair nas mãos sujas de pizza dos programadores. Documentos. Documentos e mais documentos. Tudo para garantir que não houvesse mal-entendidos, nenhum &#8220;re-trabalho&#8221;, nenhuma oportunidade de &#8220;o cliente&#8221; pedir mais do que podia ou mudar de idéia depois de todos os acordos &#8212; simplesmente, a metodologia era sinônimo de controle total e absoluto sobre todas as &#8220;fases&#8221; de um projeto.</p>
<p>Eu não podia ouvir tudo aquilo e ficar calado. A primeira pergunta que eu fiz foi: quais problemas essa idéia vai combater? Ou, pra ser mais sincero com o eventual leitor, perguntei que problemas, <strong>observados na prática</strong>, seriam resolvidos com a metodologia. Sim, na prática, pois durante a conversa ele havia dado exemplos bastante hipotéticos e superficiais de problemas. Recebi como resposta um olhar de espanto, como se eu tivesse perguntado se a Lua era feita de queijo Minas. Deveria ser óbvio para mim quais eram os problemas! Na raiz de todos os males está a informalidade total no andamento dos projetos! Cliente conversando direto com programador! Sistema que foge às especificações! Cronogramas que não são cumpridos! Programador dando uma de arquiteto! E outras na mesma linha.</p>
<p>Diante de tantas certezas, vi que a conversa já não ia dar em nada, mas continuei o debate. Respondi que, no projeto em que eu estou trabalhando, uma situação de caos total foi revertida sem que a equipe tivesse que conversar em UML, sem que colocássemos travas no diálogo com o cliente&#8230; mas com muito, muito &#8220;re-trabalho&#8221;. Disse ainda que, do meu ponto de vista, os problemas eram de fundo humano: equipe mal qualificada e expectativas amadoras dos assim chamados responsáveis. E ainda afirmei que não acreditava em especificação perfeita, primeiro porque especificações e diagramas são feitos por seres humanos (ainda que na qualidade de iluminados analistas), e segundo porque software se trata de algo mutável pela própria natureza. (Ou então seria chamado &#8220;hardware&#8221;.) Não falei em termos tão professorais assim, ou ao menos, procurei ser humilde nas colocações.</p>
<p>Continuei dizendo que, por causa desse fundamento humano, a solução dos problemas, se é que existe, passaria por: apoiar o talento das pessoas, não ser reativo nas negociações, recrutar direito, apostar em um gerenciamento mais adaptativo (em nenhum momento usei a palavra &#8220;ágil&#8221;) de projetos. Certamente, soluções bem menos simples do que dar ordens de se produzir e seguir diagramas ao pé da letra. (Como se houvesse leitura &#8220;ao pé da letra&#8221;&#8230;)</p>
<p>Pensei que possuía alguma credibilidade, mas acho que a essa altura da conversa o meu amigo já não me via como desenvolvedor experiente, e sim como um encarregado que tinha ido trocar a água do bebedouro perto do qual estávamos e resolveu dar palpite sobre esse troço de sistemas. Tive que ouvir que eu estava &#8220;totalmente errado&#8221;, que esse papo de dar valor às pessoas era &#8220;a causa de nada funcionar&#8221;, que as empresas precisavam reter conhecimento através de documentação (no que ele está certo), e que &#8220;muitas empresas grandes&#8221; estavam trabalhando com essa metodologia. (Não citou as empresas e eu não questionei pra não ficar chato.)</p>
<p>O papo acabou logo depois, mas se alguém ainda está lendo e achou que brigamos, não foi o que aconteceu. Continuamos amigos igual antes. Mas dificilmente volto a ter uma conversa com ele sobre esses assuntos. Existe uma diferença cultural muito grande entre nós dois no que diz respeito a software, e é esse o assunto do post!</p>
<p>Em toda a minha carreira eu apostei na minha capacidade de resolver coisas, no meu domínio sobre as questões relevantes aos trampos com os quais me envolvi, na confiança que eu podia estabelecer com as pessoas em volta e, reciprocamente, na confiança que essas pessoas podiam ter em mim. Eu não sei trabalhar de outro jeito e nem quero mudar, pois várias vezes tive o prazer de ver as coisas funcionando/mudando justamente pelas minhas atitudes. Uma metodologia na base do diagrama, na base do analista/deus e programador/vassalo não é só inútil pra mim como simplesmente não me oferece condições de trabalho.</p>
<p>Por outro lado, não me lembro de ter visto esse meu amigo falar com orgulho a respeito de algum projeto do qual tenha participado. Percebo que sua carreira foi marcada por muito trabalho, muito esforço com equipes ruins, muita pedrada de cliente folgado. Chefes ignorantes. Tarefas monótonas. Isso tudo, sem a contrapartida de gostar do que faz, nem de conseguir se motivar observando os próprios sucessos, pode facilmente, na minha opinião, produzir um semeador de waterfall, como meu amigo parece ter se tornado. Para um perpetuador de waterfall, um sistema é uma coisa plana, composta de tarefas registradas em alguma linguagem esquemática pobre, que será transcrita para o computador por pessoas-robôs cujo maior erro é, eventualmente, pensar.</p>
<p>Uma coisa plana sem espaço para a confiança, nem para a imaginação &#8212; origens de todos os males, pelo bate-papo ao pé do bebedouro.</p>
<p>(Parte da motivação para este post veio de &#8220;<a id="z5o_" title="What are the right conditions for agile adoption?" href="http://www.agilemanagement.net/Articles/Weblog/Whataretherightconditions.html">What are the right conditions for agile adoption?</a>&#8220;, de David Anderson.)</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/425996169" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/10/a-perpetuacao-da-especie/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/10/a-perpetuacao-da-especie/</feedburner:origLink></item>
		<item>
		<title>Rails Summit ! Eu fui !</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/424308980/</link>
		<comments>http://1up4dev.org/2008/10/rails-summit-eu-fui/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 04:43:14 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
		
		<category><![CDATA[evento]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[railssummit]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=184</guid>
		<description><![CDATA[Resumão do evento RailsSummit !]]></description>
			<content:encoded><![CDATA[<p>Não sei nem como começar a descrever o evento, foi muito bom !!! Logo no primeiro dia, na fila para pegar o pequeno cracha de identificação, já trombei logo com quem !?! Dr. Nic ! E ao seu lado, estava um cara muito simpático também, que de primeira não reconheci, o Chad Fowler e sem barba ! E pra quem não acredita, bom, tirei foto com o figura como prova ! (está <a href="http://www.flickr.com/photos/rogerleite/">aqui</a> no album do flickr)</p>
<div class="wp-caption aligncenter" style="width: 250px"><img title="Palestrantes RailsSummit" src="http://farm4.static.flickr.com/3003/2949949673_d323a895d6_m.jpg" alt="Palestrantes RailsSummit" width="240" height="180" /><p class="wp-caption-text">Palestrantes RailsSummit</p></div>
<p>Todas as palestras foram muito interessantes, no segundo dia, o tema testes foi muito abordado e acabou ficando repetitivo, porém o pessoal aproveitou para <a href="http://blog.shadowmaru.org/2008/10/17/rails-summit-latin-america-dia-2">atualizar seus e blogs e tals</a>. Na minha humilde opinião, as apresentações de abertura e final do evento foram as melhores ! Na abertura, destaque para o <a href="http://www.nomedojogo.com/2008/10/15/video-do-railsenvy-no-rails-summit/">video que o pessoal do Rails Envy mandou</a> !</p>
<p>Sem se preocupar em parecer repetitivo, mas a principal mensagem das palestras foram, &#8220;faça!&#8221;. Tudo se resume a ação!, ajude projetos open, crie novos projetos, participe com diferentes papéis, leia, escreva blogs, livros, screencasts, wikis &#8230; etc. Teve muita mensagem motivacional, e eu confesso que gostei ! <img src='http://1up4dev.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>É complicado tentar repassar a enxurrada de informação que veio do evento, e por serem parecidas, eu acabo misturando as informações. Resumão: Metodologias Agéis, teve bastante coisa sobre e com perspectivas diferentes, cool!</p>
<p>Parte do Chad Fowler, foi muito legal, com sacadas interessantes do &#8220;meio corporativo&#8221;, e apresentou questões filosoficas sobre a evolução de frameworks. Logo em seguida, teve uma conferência com o DHH (David Heinemeir Hansson), falou sobre o futuro de Rails, falou sobre thread-safe do Rails 2.2.</p>
<p>Palestra do <a href="http://www.nomedojogo.com/2008/10/09/rails-summit-meu-emprego-foi-para-os-eua/">Brando</a> foi muito legal, e deu uns toques importantes de como conseguir aquele seu emprego rails tão desejado, sem contar o chefe dele, Carl, grande figura.</p>
<p>Depois teve o Chris Wanstrath (criador do github.com), é impressionante o tanto que ele batalhou pra chegar aonde o github é hoje, foi meio chato porque ele ficou lendo, mesmo assim, teve informações legais.</p>
<p>No final, o BOF (Birds of a Feather) foi um show a parte! Várias figuras, falando desde projetos em desenvolvimento até a técnicas de impor novas idéias &#8230; várias figuras, várias risadas.</p>
<p>O <strong>segundo dia</strong> de evento, começou muito interessante, com a apresentação muito boa - dei muita risada em várias partes - Ninh Bui e Hongli Lai os <span style="text-decoration: line-through;">emos</span> caras do Phusion ! Foi muita piada nerd, várias animações flash, citações de mega man à dragon ball, com direito a Star Wars no final &#8230;</p>
<div class="wp-caption aligncenter" style="width: 250px"><img title="Phusion Darth Vader !" src="http://farm4.static.flickr.com/3188/2950767782_121584d6b3_m.jpg" alt="Phusion Darth Vader !" width="240" height="180" /><p class="wp-caption-text">Phusion Darth Vader !</p></div>
<p>Depois assisti a palestra do Jay Fields. Foi muito legal, ele apresentou o lado bom e ruim de vários frameworks de testes como selenium, rspec e talz. Destaque para o momento flame, quando o <span style="color: #000000;">David Chelimsky</span> mantenedor do rspec, começa a questionar alguns pontos levantados por Jay. Não se preocupem, que tudo acabou em breja &#8230;</p>
<p>Assisti a palestra do Vinicius Teles, cara, sensacional ! A palestra foi sobre empreendedorismo, com participação especial do Carl (da SurgeWorks), ficou muito legal a &#8220;<em>union</em>&#8221; das apresentações, e esta com certeza merece um post separado-extra.</p>
<p>Chegando ao final do dia, começou a bater o cansaço &#8230; assisti a palestra do Fabio Kung sobre JRuby. Ele entrou em detalhes na plataforma Java e como é executado o código ruby nela. Foi muito legal, porque eu finalmente entendi a diferença entre &#8220;servers&#8221; e talz. Eu não lembro muito ao certo, se eu tiver acesso a apresentação, coloco o link aqui.</p>
<p>Pra finalizar teve o fechamento com o Obie Fernandez, ele mostrou de maneira apaixonada e apaixonante, como está funcionando sua nova empresa, a HashRocket. Mostrou o manifesto agil, primeiro em papel e depois na vida real com os fatos da sua empresa. Mostrou que testes funcionam, programação em par também funciona! e etc. Foi muito show, acho muito legal a forma que ele conduz a apresentação.</p>
<div class="wp-caption aligncenter" style="width: 250px"><img title="1up4dev and ... Obie !" src="http://farm4.static.flickr.com/3156/2950743840_f525af68d7_m.jpg" alt="1up4dev and ... Obie !" width="240" height="180" /><p class="wp-caption-text">1up4dev and ... Obie !</p></div>
<p>O evento fechou com chave de ouro, rolando várias brejas, e isso eu te garanto, é muito louco brindar com o Dr. Nic e Obie na mesma roda ! <img src='http://1up4dev.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Além de tudo isso, é muito interessante como o espirito de &#8220;integração&#8221; é muito alto, por exemplo, o <a href="http://www.mouseoverstudio.com/blog/">Diego Carrion do MouseOver Studio</a> ficou com nosso grupo, os dois dias, trocamos experiências, foi show também. Até agora, a única apresentação que peguei foi a do Dr. Nic, que ele disponibilizou o <a href="http://www.slideshare.net/drnic/everyone-can-participate-dr-nic-williams-railssummit-brazil-2008-presentation/">link</a> via <a href="http://twitter.com/drnic">twitter</a>.</p>
<p>Me desculpem pelo tamanho do post &#8230; e como ele está muito grande, nem vou ler em busca de erros, vou arrumando conforme necessário, ou seja, fica pro próximo sprint !</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/424308980" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/10/rails-summit-eu-fui/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/10/rails-summit-eu-fui/</feedburner:origLink></item>
		<item>
		<title>Contos do programador pragmático</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/382090952/</link>
		<comments>http://1up4dev.org/2008/09/contos-do-programador-pragmatico/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 03:30:24 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
		
		<category><![CDATA[real world]]></category>

		<category><![CDATA[cascata]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=179</guid>
		<description><![CDATA[Durante minha carreira profissional fui obrigado tive a oportunidade de atuar brevemente no campo gerencial do desenvolvimento de software. Foi uma experiência que agregou muito conhecimento e me fez enxergar minha atividade principal, programação, com outros olhos. Também pude entender melhor as estratégias comerciais da empresa, gerenciamento de recursos, retorno sobre investimento, etc. Além de [...]]]></description>
			<content:encoded><![CDATA[<p>Durante minha carreira profissional <span style="text-decoration: line-through;">fui obrigado</span> tive a oportunidade de atuar brevemente no campo gerencial do desenvolvimento de software. Foi uma experiência que agregou muito conhecimento e me fez enxergar minha atividade principal, programação, com outros olhos. Também pude entender melhor as estratégias comerciais da empresa, gerenciamento de recursos, retorno sobre investimento, etc. Além de aprender mais sobre desenvolvimento de software, também pude conhecer os vilões dessa história, na maioria dos casos: a diretoria.</p>
<p>Na maioria dos problemas que presenciei, a diretoria (quem toma decisões e libera a grana do projeto) contribuiu para que as coisas ficassem cada vez piores, seja tomando decisões visando curto prazo ou aplicando conceitos ilusórios como adoção de uma tecnologia ou metodologia da moda. Seguem algumas pérolas da &#8220;diretoria&#8221;:</p>
<ul>
<li>&#8220;Programadores são descartáveis&#8221;. Não consigo acreditar que pessoas numa hierarquia superior ainda tenham esta visão dos programadores, comparando desenvolvimento de software com construção civíl e programadores com pedreiros (em alguns [poucos] casos é verdade). Certa vez presenciei um dos mais famosos defensores de práticas ágeis, autor de vários livros e que subiu na carreira devido a seu destaque como programador (Delphi), dizer: &#8220;programadores têm em todo lugar, basta sacudir uma árvere e cai um monte deles no chão&#8221;. Depois dessa, passei a ignorar tudo que ele escreve ou fala. Talvez se ele tivesse lido pelo menos o resumo do <a href="http://agilemanifesto.org/">Manifesto ágil</a> saberia que blasfemou feio!</li>
<li>&#8220;Meu maior gasto é gerado pelos programadores&#8221;. Fiquei sem reação quando ouvi esta pérola do dono da empresa. Ele ainda achava que os atrazos e erros do sistema vinham dos seus quatro programadores juniores que utilizavam uma tecnologia quem ninguém conhecia direito (mas está na moda), não utilizavam nenhum processo ou metodologia e ainda tinham que manter contato direto com os clientes.</li>
<li>&#8220;Precisamos de documentação&#8221;. Esta todos nós já ouvimos e conhecemos o final. Um certo dia alguem chega na empresa e decide que tudo deverá ser documentado. Então gastam-se alguns meses levantando os requisitos do sistema, definindo os casos de uso e diagramas UML, reuniões, definição do banco de dados, etc. Lá pelo 10º mês descobrem que nenhuma linha de código foi escrita e o sistema só existe no papel. Nem preciso contar o final da história né?</li>
<li>&#8220;Como assim não dá pra desenvolver este ERP em três meses?&#8221;. Nunca assisti um Tech-Ed nem outra palestra do tipo, por isso não sei exatamente o que <span style="text-decoration: line-through;">vendem</span> falam sobre pazos, mas com certeza é uma mentira das grandes! Não existe mágica nesse ramo, não existe ferramenta nem tecnologia milagrosa e nenhum processo vai acelerar o desenvolvimento do sistema. Ponto. Somente uma pessoa que não entende nada sobre desenvolvimento de software acreditaria nesse conto de vigário. Um general sabe comandar seus soldados pois certamente foi um soldado e esteve num campo de batalha. Será que todo chefe/diretor foi programador (de verdade) no início da carreira? Ter programado em Cobol há 20 anos atrás não conta!</li>
<li>&#8220;Não podemos perder tempo com refactoring e testes unitários&#8221;. Bom, se deixar o código do sistema mais &#8220;manutenível&#8221; e garantir que o que já foi feito funcione corretamente do jeito que deve ser for uma &#8220;perda de tempo&#8221;, então estou no ramo errado. Fazer com que o sistema &#8220;rode&#8221; é muito importante pois sistema rodando é dinheiro entrando no caixa. Mas abrir mão da qualidade é uma péssima estratégia a curto prazo, pois todos nós sabemos que sistemas mudam constantemente e ter mecanismos para responder rapidamente a essas mudanças é mais importante do que &#8220;parir&#8221; um sistema remendado de uma hora pra outra e depois perceber que a menor das mudanças custa 10 vezes mais do que o normal.</li>
</ul>
<p>Por enquanto só consigo me lembrar dessas, mas outras pérolas virão e renderão novos posts.</p>
<p>Fiquem a vontade para comentar. Até o próximo post!</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/382090952" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/09/contos-do-programador-pragmatico/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/09/contos-do-programador-pragmatico/</feedburner:origLink></item>
		<item>
		<title>TPW - Colocando dicas em prática</title>
		<link>http://feeds.feedburner.com/~r/1up4dev/OfrU/~3/368249805/</link>
		<comments>http://1up4dev.org/2008/08/tpw-colocando-dicas-em-pratica/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 17:02:43 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
		
		<category><![CDATA[real world]]></category>

		<category><![CDATA[pragmatic waterfall]]></category>

		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=91</guid>
		<description><![CDATA[Depois de ler The Pragmatic Programmer é natural ficar empolgado, bom, uma prova disso foi meu próprio post sobre o assunto. Depois de ter &#8220;digerido&#8221; o livro, lancei as dicas para o desenvolvedor, acabei inventando um termo legal The Pragmatic Waterfall, que resolvi transformá-lo numa série.
A primeira dica do &#8220;dicas para o desenvolvedor&#8221;, foi:
- Gerador [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de ler <a href="http://1up4dev.org/2008/05/the-pragmatic-programmer-no-ambiente-waterfall-e-claro/">The Pragmatic Programmer</a> é natural ficar empolgado, bom, uma prova disso foi meu próprio post sobre o assunto. Depois de ter &#8220;digerido&#8221; o livro, lancei as <a href="http://1up4dev.org/2008/06/tpw-dicas-para-o-desenvolvedor/">dicas para o desenvolvedor</a>, acabei inventando um termo legal <em>The Pragmatic Waterfall</em>, que resolvi transformá-lo numa série.</p>
<p>A primeira dica do &#8220;dicas para o desenvolvedor&#8221;, foi:<br />
- Gerador de código descartável.</p>
<p>Pois bem, hoje, vou mostrar um exemplo de &#8220;código descartável&#8221; que utilizei e deu certo ! <img src='http://1up4dev.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Problema: No projeto que estou existem algumas queries em arquivos XML do hibernate, preciso convertê-las para Spring. Pra cada query do hibernate, precisei gerar dois arquivos de XML do Spring e mais uma classe Java que herda de SqlUpdate &#8230; blá blá blá. Bom, os detalhes não importam muito, <strong>o que importa é que vamos ler o XML do hibernate e gerar o que for necessário</strong>, tudo isso com <strong>Ruby</strong>!</p>
<p>Antes de qualquer coisa, já aviso que ainda não domino totalmente Ruby, e o script que fiz é do tipo código &#8220;descartável&#8221;, então não tive o menor cuidado em deixá-lo bonito, apenas funcional. Acho que a melhor maneira de aprender uma nova linguagem é escrevendo código com ela, não somente lendo sobre.</p>
<p>Exemplo super simplificado do XML do Hibernate:<br />
<script src="http://gist.github.com/6017.js"></script> script generator-bean em Ruby: <script src="http://gist.github.com/6026.js"></script></p>
<p>É isto ! O script é simples e direto, deixei a saida pro console mesmo e para jogar em arquivo é muito simples:</p>
<p>$ ruby generator-bean.rb &gt; spring-exemplo.xml</p>
<p>O script que coloquei é uma versão bem reduzida, já que a idéia do post é mostrar que é possível transformar tarefas chatas e trabalhosas em scripts semi-automáticos ! Ah, lembrando que com ele consegui terminar a minha tarefa em 2 dias, sendo que a previsão era quase uma semana de trabalho !</p>
<p>Precisa de mais informações de como ler XML com Ruby !?</p>
<p>Segue as referências.<br />
Tirei deste <a href="http://www.meupost.com/2008/07/10/lendo-xml-com-o-rexml-ruby/">post</a>, muito legal por sinal.<br />
* API do REXML: <a href="http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html">http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html</a><br />
* Sobre o Electric XML: <a href="http://www.xml.com/pub/r/1098">http://www.xml.com/pub/r/1098</a><br />
* Tutorial um pouco mais complexo sobre XML com Ruby: <a href="http://www.xml.com/pub/a/2005/11/09/rexml-processing-xml-in-ruby.html">http://www.xml.com/pub/a/2005/11/09/rexml-processing-xml-in-ruby.html</a></p>
<p><strong>OBS:</strong> Estou usando o <a href="http://gist.github.com/">gist.github.com</a> para colocar o xml e script de exemplo, provavelmente não vai aparecer no leitor de feed.</p>
<img src="http://feeds.feedburner.com/~r/1up4dev/OfrU/~4/368249805" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2008/08/tpw-colocando-dicas-em-pratica/feed/</wfw:commentRss>
		<feedburner:origLink>http://1up4dev.org/2008/08/tpw-colocando-dicas-em-pratica/</feedburner:origLink></item>
	</channel>
</rss>
