<?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>Mergulhando no Caos &#187; gente</title>
	<atom:link href="http://blog.thiagoarrais.com.br/category/gente/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thiagoarrais.com.br</link>
	<description>Pensamentos, idéias e devaneios sobre desenvolvimento de software e tecnologia em geral</description>
	<lastBuildDate>Tue, 03 Nov 2009 11:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Bagunça pode ser tudo o que você precisa</title>
		<link>http://blog.thiagoarrais.com.br/2009/11/03/bagunca-pode-ser-tudo-o-que-voce-precisa/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/11/03/bagunca-pode-ser-tudo-o-que-voce-precisa/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 11:30:10 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=318</guid>
		<description><![CDATA[Já notou que sempre bangunçamos o ambiente em que estamos trabalhando? Se você não fizer um esforço bem consciente para organizar tudo enquanto trabalha ou quando termina de fazer o que precisa, as chances são que as coisas estejam um pouco mais bagunçadas do que no início. Já notou também que mesmo que tudo pareça [...]]]></description>
			<content:encoded><![CDATA[<p>Já notou que sempre bangunçamos o ambiente em que estamos trabalhando? Se você não fizer um esforço bem consciente para organizar tudo enquanto trabalha ou quando termina de fazer o que precisa, as chances são que as coisas estejam um pouco mais bagunçadas do que no início. Já notou também que mesmo que tudo pareça bagunçado, você (quase) sempre consegue se achar na sua bagunça? E que se alguém fizer o &#8220;favor&#8221; de &#8220;organizar&#8221; as coisas para você há uma boa chance de piorarem sua situação? Isso acontece porque a bagunça era a <em>sua</em> bagunça.</p>
<p>E também porque provavelmente não era uma bagunça.</p>
<p>Por trás desse tipo de bagunça aparente, há sempre uma ordem não óbvia. Para usar um exemplo bastante simples discutido no livro <a href="http://www.submarino.com.br/produto/1/21315984/bagunca+perfeita:+como+aproveitar+as+vantagens+da+desordem,+uma?franq=272505">Uma bagunça perfeita</a> de Eric Abrahamson e David H. Freedman (prometo publicar uma resenha apropriada em breve), uma pilha de papéis jogados sobre uma mesa está ordenada por ordem de uso: os mais usados ficam no topo e os menos usados no fundo. Isso acontece naturalmente se você sempre devolver os papéis que precisou da pilha para o topo. Do mesmo modo, se você pedir a alguém para realizar alguma tarefa rotineiramente, as pessoas sem nem perceber acabam bolando procedimentos de modo a facilitar o trabalho, aproveitar melhor o tempo e tornarem-se produtivas. Por isso bons programadores acabam chegando a algo parecido com <a href="http://www.extremeprogramming.org/">XP</a> se <a href="http://c2.com/cgi/wiki?ObservationsOfProgrammersInTheWild">não forem podados</a>.</p>
<p>Mas este é um blog sobre desenvolvimento de software para programadores e o trabalho do programador é justamente eliminar a bagunça do trabalho das pessoas, escrever programas que as ajudem a se organizar melhor, identificar &#8220;processos de negócio&#8221; e coisa e tal, certo?</p>
<p>Errado, se o seu ego conseguir aceitar que as pessoas que estão lá <em>fazendo</em> o trabalho no fim das contas sabem muito mais dele do que você.</p>
<p>Muitas vezes o que precisamos não é bem <em>organizar</em> o que as pessoas estão fazendo. Às vezes precisamos somente <em>tornar a bagunça mais eficiente</em>. Quando se tenta organizar muito os processos de trabalho das pessoas a coisa acaba ficando engessada demais. O resultado são <a href="http://blog.improveit.com.br/articles/2008/05/02/o-preco-da-modernidade">sistemas que atrapalham</a> mais do que ajudam e gente que passa mais tempo tentando <a href="http://blog.improveit.com.br/articles/2008/05/05/o-preço-da-modernidade-parte-2">agradar os sistemas</a> corporativos do que resolvendo problemas dos clientes. Já ouviu a célebre frase &#8220;eu entendo, mas o sistema não deixa&#8221; quando tentou algo minimamente fora do comum com um banco ou uma operadora de telefone? É disso que estou falando. Resultado dos sistemas paralisantes. Resultado da organização demasiada.</p>
<p>Por outro lado sistemas caóticos terminaram sendo alguns dos exemplos de maior sucesso em nossa indústria. O Unix, por exemplo, é descrito por Martin Fowler como <a href="http://www.languageparallax.com/wordpress/?p=39">a maior aglomeração de coisas coladas umas nas outras que o mundo já viu</a>. A web, por sua vez, é uma imensa bagunça de documentos, links e referências em escala global. Os dois sistemas têm em comum a filosofia de fazer pouca coisa, mas fazer bem o que escolheram fazer, e permitir que os usuários façam o que bem entenderem utilizando essa fundação. Eles não tentam organizar cada mínimo aspecto da rotina das pessoas. Eles aceitam o fato de que nunca vão conhecer o trabalho das pessoas tão bem quanto elas mesmas e se concentram em permitir que elas tenham liberdade para fazer o que quiserem do jeito que quiserem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/11/03/bagunca-pode-ser-tudo-o-que-voce-precisa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Todo programador deveria estar escrevendo jogos</title>
		<link>http://blog.thiagoarrais.com.br/2009/10/27/todo-programador-deveria-estar-escrevendo-jogos/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/10/27/todo-programador-deveria-estar-escrevendo-jogos/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 10:30:35 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=305</guid>
		<description><![CDATA[Encomendei um livro chamado A theory of fun for game design de Raph Koster. Apesar do que possa parecer, eu não pretendo escrever jogos de computador num futuro próximo. Pelo menos não no sentido comum da palavra &#8220;jogo&#8221;. Então porque diabos eu iria querer ler um livro desses? A resposta está estampada no título do [...]]]></description>
			<content:encoded><![CDATA[<p>Encomendei um livro chamado <a href="http://www.submarino.com.br/produto/9/402203/a+theory+of+fun+for+game+design?franq=272505"><em>A theory of fun for game design</em> de Raph Koster</a>. Apesar do que possa parecer, eu <em>não</em> pretendo escrever jogos de computador num futuro próximo. Pelo menos não no sentido comum da palavra &#8220;jogo&#8221;. Então porque diabos eu iria querer ler um livro desses?</p>
<p>A resposta está estampada no título do livro: uma teoria da <em>diversão</em>. Este é um livro que tenta explicar, a partir do entendimento da diversão em si, o que torna alguns jogos divertidos enquanto outros são chatos. Ele tenta decifrar o que torna as coisas divertidas. E praticamente qualquer coisa pode ser divertida, não só jogos. Acontece que o objetivo final dos jogos é quase que exclusivamente a diversão. As pessoas jogam e brincam para se divertir. Bons jogos podem fazer mais do que isso, como exercitar habilidades sociais e ensinar novas idéias. Mas na maioria das vezes o que você quer fazer quando procura um jogo é simplesmente se divertir.</p>
<p>Para outros tipos de programas de computador a diversão não é o objetivo principal. Algumas vezes nem de longe. Mas diversão pode ser uma característica bastante atraente em muitas outras aplicações. Jogos precisam ser envolventes e divertidos se quiserem sobreviver. Se quiserem ser jogados. Se quiserem ser <em>usados</em>. É neste sentido que todo programador deveria escrever jogos. Não é porque uma aplicação não é vista prioritariamente como um jogo que ela não deva ser divertida, que seus autores não precisam se preocupar em entreter quem vai usá-la.</p>
<p>Vamos tomar o <a href="http://stackoverflow.com">Stackoverflow</a> como exemplo. Ele é um site de perguntas e respostas sobre problemas de programação. À primeira vista isso não se parece nada com um jogo, mas o sistema foi <a href="http://blog.stackoverflow.com/2008/07/stack-overflow-badge-feedbac/ ">propositalmente concebido como um</a>. Alguns aspectos foram inspirados especificamente no sistema de <em>façanhas</em> do Xbox 360 (ou como quer que os jogadores de Xbox traduzam &#8220;achievement&#8221;). Os pontos de reputação que você recebe como prêmio pela participação no site também são um aspecto que dá um ar de jogo à experiência e estimula uma competição saudável. Por causa dessa recompensa (que, por sinal, não passa de um direito de se gabar) mais perguntas são respondidas e com melhor qualidade. O aspecto de jogo ajuda o sistema, e a comunidade como um todo, a atingir a sua meta.</p>
<p>Aplicações divertidas são usadas com mais freqüência e dedicação. No fim das contas o trabalho do usuário acaba saindo melhor se ele se divertir no processo. Como diria a Kathy Sierra, <a href="http://headrush.typepad.com/creating_passionate_users/2005/06/kicking_ass_is_.html">ajudar seus usuários a <em>arrasar</em></a> deveria ser sempre seu objetivo, não?</p>
<p>Então quando estiver projetando alguma aplicação, talvez faça sentido pensar em como tornar a experiência mais divertida. Talvez você possa até incorporar recursos normalmente encontrados em jogos de computador para ajudar seus usuários a tirarem mais proveito da experiência. Talvez seja você possa pensar no sistema todo como um jogo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/10/27/todo-programador-deveria-estar-escrevendo-jogos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sites de rede social são plataformas, não aplicações</title>
		<link>http://blog.thiagoarrais.com.br/2009/08/18/sites-de-rede-social-sao-plataformas-nao-aplicacoes/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/08/18/sites-de-rede-social-sao-plataformas-nao-aplicacoes/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:31:47 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=290</guid>
		<description><![CDATA[Eu lembro quando as primeiras redes sociais começaram a se popularizar por estas bandas. E por popularizar, é óbvio que eu quero dizer que começaram a ser usadas pelos primeiros geeks. No início éramos só nós que usávamos esse tipo de coisa. Depois começaram a surgir o que vou chamar de &#8220;geeks de segundo nível&#8221;, [...]]]></description>
			<content:encoded><![CDATA[<p>Eu lembro quando as primeiras redes sociais começaram a se popularizar por estas bandas. E por popularizar, é óbvio que eu quero dizer que começaram a ser usadas pelos primeiros geeks. No início éramos só nós que usávamos esse tipo de coisa. Depois começaram a surgir o que vou chamar de &#8220;geeks de segundo nível&#8221;, o pessoal que acompanha tecnologia mas que inicialmente estava cético quanto à utilidade dessas coisas. Esses acabaram se convencendo depois que todos os outros geeks estavam usando. Depois disso foi só aproveitar a inércia: começaram a aparecer pessoas interessadas mais nas possibilidades de interação humana que na tecnologia, atraídas pelo que seus amigos geeks estavam conseguindo dessa nova mídia e pela facilidade de operá-la. Foi neste ponto que começaram a chegar as meninas de treze anos, os perfis falsos, os pedintes (me add! me add!) e aí&#8230;</p>
<p>Aí os usuários originais começaram a debandar. Aquela idéia do início já não parecia tão boa. Na verdade parecia uma <em>péssima</em> idéia. A relação sinal-ruído desequilibrou demais para o lado do ruído: mais um caso internético típico da <a href="http://blog.thiagoarrais.com.br/2008/08/26/a-maldicao-da-popularidade/">maldição da popularidade</a>.</p>
<p>Mas se a idéia era tão ruim, como conseguiu atrair aqueles geeks no início?</p>
<p>Acontece que a idéia <em>não era</em> ruim. Geeks são muito bons para detectar boas plataformas e foi isso que eles fizeram. Eles começaram a adotar aquela idéia por causa do seu <em>potencial</em>. Não pelo que ela oferecia na época, mas pelo que ela poderia vir a oferecer. Quando as redes sociais falharam em aproveitar esse potencial, eles as abandonaram.</p>
<p>O grande erro dos sites de rede social foi não perceber que o que tinham em mãos era uma plataforma para aplicações, não uma aplicação final. Felizmente isto vem mudando nos últimos anos, com a disponibilização de interfaces de programação para que terceiros hospedem aplicações sobre estes sites e o futuro pode voltar a parecer promissor novamente.</p>
<p>Hoje a maioria das aplicações no Orkut, por exemplo, são basicamente inúteis. Temos desde aplicativos que servem simplesmente para permitir que você use o grafo social para encher o saco de seus amigos até os sites com conteúdo externo que não usam praticamente nada do grafo social mas resolveram subir nesse trem por causa da audiência. Sem contar os mini-aplicativos publicitários sem muita criatividade. Olhando por este lado, o futuro não parece muito alegre. Mas o valor de uma plataforma não está nas aplicações que já foram feitas, mas nas que <em>podem</em> ser feitas.</p>
<p>E o que pode ser feito com essas redes sociais? Ninguém sabe ainda. Se alguém soubesse, já teria sido feito. A questão é que você não pode dizer que esse negócio de rede social não vai pra lugar nenhum só porque ninguém fez nada de interessante <em>ainda</em>. Isso não impede que alguém faça algo <em>no futuro</em>. Se em 1992 você dissesse que a web não iria para lugar nenhum, sua opinião pareceria bastante plausível, mas por volta do ano 2000 teria sido provado o contrário. É bem verdade que as redes sociais podem <em>realmente</em> nunca nos trazer nada de útil, mas isso não pode ser afirmado com base no passado.</p>
<p>A própria web não era muito atrativa na década de 90, mas os geeks viram seu potencial e a transformaram em uma mídia riquíssima. No início não havia aplicações web muito interessantes, mas havia <em>potencial</em>. Se vamos usar as aplicações sobre redes sociais somente para jogar frutas virtuais em nossos amigos ou arranjar algo de útil para fazer é uma decisão que está primeiramente em nossas mãos, desenvolvedores web e geeks em geral. Se conseguirmos construir algo que ajude as pessoas, elas virão.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/08/18/sites-de-rede-social-sao-plataformas-nao-aplicacoes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quem está preocupado com SEO já está perdido</title>
		<link>http://blog.thiagoarrais.com.br/2009/06/18/quem-esta-preocupado-com-seo-ja-esta-perdido/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/06/18/quem-esta-preocupado-com-seo-ja-esta-perdido/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 23:42:24 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gente]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=275</guid>
		<description><![CDATA[Como assim? Você me pergunta. Você não deveria estar preocupado com a classificação do seu site em engenhos de busca? Mas 96% dos visitantes chegam aos sites através deles! Tudo bem, deixe-me explicar. Para ficar mais fácil, vamos voltar às bases. SEO é um acrônimo para Search Engine Optimization que numa tradução bem pé-duro quer [...]]]></description>
			<content:encoded><![CDATA[<p>Como assim? Você me pergunta. Você não deveria estar preocupado com a classificação do seu site em engenhos de busca? Mas 96% dos visitantes chegam aos sites através deles!</p>
<p>Tudo bem, deixe-me explicar. Para ficar mais fácil, vamos voltar às bases.</p>
<p>SEO é um acrônimo para Search Engine Optimization que numa tradução bem pé-duro quer dizer Otimização de Engenho de Busca. Aqui já dá pra ver a inconsistência: quem faz otimização dos engenhos de busca são os donos dos engenhos de busca, ora bolas, não os responsáveis pelos sites indexados. Você simplesmente não consegue otimizar algo que você não controla.</p>
<p>Digamos que você escreveu uma  rotina para ordenar os valores de uma lista. Como você faz para otimizá-la? Você olha o que pode modificar e reescreve algumas partes de modo a executar mais rápido, consumir menos memória ou algo do tipo, claro. O que definitivamente não conta como otimização da sua rotina é exigir que a entrada sempre venha ordenada de modo que ela não precise fazer nenhum trabalho.</p>
<p>Entretanto, o que se denomina de SEO hoje em dia é basicamente isso, modificar a web para tornar mais fácil para os engenhos de busca acharem o conteúdo. O termo evoluiu para significar Otimização <em>para</em> Engenho de Busca. Muitas vezes é usado como sinônimo para o ato de massagear sites ou páginas de modo a obter uma classificação favorável em relação a alguns termos específicos. Algumas vezes isso inclui até esquemas obscuros de troca de links. O objetivo disso é, no final de tudo, aparecer entre os primeiros resultados quando alguém procurar por algumas palavras relacionadas a seu conteúdo. Chega-se a bolar todo tipo de coisa para conseguir isso, mas a solução definitiva é mais simples do que parece.</p>
<p>Para garantir que sua página vai figurar entre os resultados mais relevantes para um termo de busca basta <em>ter o melhor conteúdo</em> para aquele termo.</p>
<p>Se você tem um site de resenhas de produtos que tem inquestionavelmente a melhor resenha do mundo referente a um produto em particular e alguém procura pelo nome do produto e seu site não aparece em primeiro ou segundo colocado (vamos admitir que o site do fabricante do produto possa ser o primeiro), a falha é dos engenhos de busca, não sua. É o trabalho deles achar o melhor conteúdo. O seu trabalho é <em>ter</em> o melhor conteúdo. Se eles não estão achando o seu conteúdo, simplesmente não estão trabalhando direito.</p>
<p>Não importa como vão fazer para encontrar o melhor conteúdo, eles têm que encontrar. É o que eles se propõem a fazer. É a razão deles existirem. Não importa se eles vão levar em consideração a quantidade de links que cada página recebe em toda a web ou se vão contratar críticos literários para ler e classificar todas as páginas do mundo.</p>
<p>O pessoal do engenho de busca não pode reclamar que você não colocou o nome do produto na URL ou que não incluiu algum tipo de meta-dado para facilitar a indexação. Nada disso importa quando o seu conteúdo é o melhor. Claro que você deve tomar cuidado para tornar o conteúdo fácil de encontrar, garantir que ele vai ser acessível para visitantes usando programas de leitura de tela e certificar-se que o título da página faz sentido. Mas nada disso é SEO, esse tipo de coisa é só Introdução à Web.</p>
<p>SEO no sentido literal só pode ser realizado pelos donos dos engenhos de busca. O melhor meio de fazer SEO como o termo é comumente usado é simplesmente gerar o melhor conteúdo em toda a web. Neste sentido, você não deve perder seu tempo com SEO justamente porque SEO é o que você deveria estar fazendo o tempo todo desde o início.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/06/18/quem-esta-preocupado-com-seo-ja-esta-perdido/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Você não é uma vaca leiteira</title>
		<link>http://blog.thiagoarrais.com.br/2009/02/12/voce-nao-e-uma-vaca-leiteira/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/02/12/voce-nao-e-uma-vaca-leiteira/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 21:10:51 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=242</guid>
		<description><![CDATA[&#8230;então, por favor, não trabalhe como se fosse. Vale a pena prestar um pouco de atenção nos aspectos ergonômicos do seu ambiente de trabalho. Coisas como monitores bonitos, uma quantidade absurda de portas USB e uma biblioteca de música praticamente inesgotável são importantes para qualquer programador. Mas algumas coisas mais simples são igualmente importantes, como [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;então, por favor, não trabalhe como se fosse.</p>
<p>Vale a pena prestar um pouco de atenção nos aspectos ergonômicos do seu ambiente de trabalho. Coisas como monitores bonitos, uma quantidade absurda de portas USB e uma biblioteca de música praticamente inesgotável são importantes para qualquer programador. Mas algumas coisas mais simples são igualmente importantes, como a altura da sua cadeira, a posição do seu teclado e, muito surpreendentemente, o bom e velho <em>espaço livre</em>.</p>
<p>Espaço livre não parece estar muito na moda ultimamente. É raro encontrar <a href="http://www.joelonsoftware.com/articles/BionicOffice.html">alguém que dá alguma importância</a> para isso. Afinal de contas, o trabalho de um programador (e de qualquer trabalhador do conhecimento, para este efeito) acontece dentro da cabeça. Não é necessário muito espaço para abrigar a cabeça de uma pessoa, mesmo se levarmos em consideração que ela é inseparável dessa massa inútil e disforme que chamamos de <em>corpo</em>. Talvez seja por isso que tantas empresas dão o mesmo espaço de trabalho para os programadores que uma fazenda intensiva daria para uma vaca leiteira. Uns só precisam das tetas, outros só da cabeça. Quanto mais programadores couberem no mesmo espaço, mais software será produzido por metro quadrado. Simples otimização de chão de <a href="http://blog.thiagoarrais.com.br/2007/07/25/fabricas-de-software-uma-analogia-levada-longe-demais/">fábrica</a>, certo?</p>
<p><img src="http://blog.thiagoarrais.com.br/wp-content/uploads/2009/02/dairy_cowders.jpg" alt="dairy_cowders" title="dairy_cowders" width="474" height="532" class="alignnone size-full wp-image-243" /></p>
<p>Sim, é fato que sua cabeça (ainda) não pode viver separada do seu corpo. Portanto, mesmo que você não ligue para seu corpo em si, é melhor cuidar dele se quiser continuar usando sua inteligência por muito tempo. Esse cuidado passa por aspectos bastante óbvios (e penosos) como praticar exercícios regularmente e manter uma dieta equilibrada. Pode não ser muito fácil cuidar disso, mas os aspectos ergonômicos do ambiente de trabalho são muito mais controláveis. Mesmo assim costumam ser negligenciados.</p>
<p>Este é meu escritório de casa atualmente (bom, pelo menos a parte sobre a qual quero falar hoje):</p>
<p><img src="http://blog.thiagoarrais.com.br/wp-content/uploads/2009/02/my_office.jpg" alt="my_office" title="my_office" width="492" height="369" class="alignnone size-full wp-image-244" /></p>
<p>A mesa é em geral o espaço onde você vai passar a maior parte do tempo. Não importa se você tem acesso a uma mesa de sinuca e a três video-games diferentes para jogar Rock Band com seus colegas durante o horário de trabalho. Se sua mesa for desconfortável, você não vai produzir muito. Pensando bem, se lhe derem uma mesa inadequada, é bem mais provável que você passe mais tempo jogando Rock Band do que programando.</p>
<p>A primeira coisa que você vai querer garantir para sua estação de trabalho é uma <b>cadeira confortável</b>. Ela precisa ter ao menos encosto reclinável, ajuste de altura e apoio para os braços. E estofamento macio, claro. Você não vai querer ficar sentado o dia todo numa pilha gigantesca de algodão. Tampouco em um banco de praça. Ache um meio termo que pareça bom para você e use-o. Não é preciso gastar dois mil reais numa cadeira para ter todos estes recursos, mas também não é um valor assim tão absurdo se considerarmos a durabilidade do equipamento e o custo do programador para a empresa.</p>
<p>O próximo item da lista é uma <b>mesa espaçosa</b>. Segundo o <a href="http://www.submarino.com.br/produto/9/2702/peopleware?franq=272505">Peopleware</a>, um estudo encomendado pela IBM há muitas luas atrás descobriu que a superfície mínima que uma pessoa precisa para ser produtiva é de aproximadamente 2,5m&sup2;. Minha mesa deve ter aproximadamente 1,75. Ainda estou abaixo da meta, mas com certeza é mais do que os dois caras da foto têm e pelo menos é o suficiente para caber com sobra meus dois monitores.</p>
<p>O que nos leva ao próximo item indispensável a qualquer pessoa que desenvolva software: <b>muito espaço de tela</b>. Com dois monitores de 1280&#215;1024 você obtém uma área útil de 2560&#215;1024 pixels, o que é suficiente para abrigar ao menos um editor com seu código e o programa rodando ao mesmo tempo. Se apertar um pouco, cabe até uma janela para monitorar os testes automáticos. Mas você pode achar útil ter algum material de referência aberto para consultar rapidamente e talvez precise de um terceiro monitor para isso. Como você está lendo isso aqui, provavelmente já tem um dos monitores. Um extra deve estar abaixo dos 600 paus hoje em dia e a maioria das placas de vídeo modernas já aceita duas saídas. É produtividade de graça se você jogar na conta o tempo (e a paciência) que se perde chaveando janelas numa tela só.</p>
<p>Você também vai querer ter seus vários <b>monitores posicionados corretamente</b>. Uma distância entre 40 e 75cm entre seus olhos e a tela é o suficiente. É preciso tomar cuidado para posicioná-los na altura correta também (vale usar livros velhos quando o monitor não tem regulagem de altura). Você não vai querer ficar com a cabeça inclinada nem para cima nem para baixo o dia todo. As dores no pescoço podem ser <em>bastante</em> irritantes depois de um tempo.</p>
<p>Além da altura dos monitores, você também precisa regular a altura da cadeira e da mesa para manter suas pernas e braços em ângulos mais ou menos retos a maior parte do tempo. Isso vai aliviar bastante a coluna e pode garantir boas noites de sono. Simplesmente procure um pouco na web sobre ergonomia no trabalho que você vai achar várias dicas, há bastante material por aí.</p>
<p>Quando não estiver trabalhando, não esqueça de comer seus vegetais e fazer seus exercícios e lembre-se de que se exercitar <em>durante</em> o trabalho também é importante. Você não precisa levantar para correr meia-maratona no horário do almoço. Alguns alongamentos uma ou duas vezes ao dia já são suficientes. Você também pode querer manter por perto algumas daquelas bolinhas terapêuticas, daquelas vendidas em lojas de animais. Elas são ótimas para exercitar a musculatura do punho que tanto castigamos ao digitar o dia inteiro e ainda servem para massagear a tensão acumulada.</p>
<p>Um último toque que você talvez não encontre em todo site sobre ergonomia fica bem no canto direito na minha mesa. Uma foto de pessoas que você gosta (de uma viagem com a esposa, como esta minha) é importante para lhe lembrar que por mais que seu código pareça perfeito e sem falhas (e, acredite, ele nunca é) e que você passe o dia conversando em linguagens estranhas com essa máquina maluca de duas cabeças, no fim das contas você é apenas humano e precisa de outras pessoas assim como qualquer outro ser humano.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/02/12/voce-nao-e-uma-vaca-leiteira/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ninguém liga para sua relação teste-para-código</title>
		<link>http://blog.thiagoarrais.com.br/2009/02/06/ninguem-liga-para-sua-relacao-teste-para-codigo/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/02/06/ninguem-liga-para-sua-relacao-teste-para-codigo/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 23:58:21 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=231</guid>
		<description><![CDATA[Tenho visto muita gente recentemente se gabando da relação teste-para-código de seus projetos. As pessoas medem a quantidade de linhas de código do sistema em si e a quantidade de linhas de código dos testes automáticos e publicam a relação de uma para a outra, como se isso quisesse dizer algo sobre a qualidade do [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho visto muita gente recentemente se gabando da relação teste-para-código de seus projetos. As pessoas medem a quantidade de linhas de código do sistema em si e a quantidade de linhas de código dos testes automáticos e publicam a relação de uma para a outra, como se isso quisesse dizer algo sobre a qualidade do sistema. Permita-me ser bem claro:</p>
<p><em><b>Ninguém dá a mínima para a sua relação teste-para-código.</b></em></p>
<p>Nem para sua taxa de cobertura de testes, se é que isso interessa.</p>
<p>A menos que a relação seja zero-para-um, não há absolutamente nada de informativo neste número. A partir do momento em que você está escrevendo <em>algum</em> teste, fazer este número crescer não garante melhoria <em>nenhuma</em> na qualidade do sistema. Talvez você esteja escrevendo testes inúteis para verificar se sua linguagem de programação consegue atribuir um valor a uma variável e recuperá-lo de volta. Talvez você esteja repetindo os mesmos testes o tempo todo. Testar é bom, mas alguns testes são melhores do que outros e este número não é calculado sobre a <em>qualidade</em> dos testes, só a <em>quantidade</em> deles. Não há nenhuma conclusão útil que eu possa tirar do seu número sem dar uma olhada no seu código.</p>
<p>Cobertura de testes é outra métrica bem vazia. Claro que você deve tentar se aproximar tanto quanto possível de 100%, mas a verdade é que chegar a níveis de cobertura acima de 90% não é tão difícil assim. Considere, por exemplo, este trecho de código adaptado do <a href="http://www.submarino.com.br/produto/9/300251/code+complete?franq=272505">Code Complete</a> do <a href="http://www.stevemcconnell.com/">Steve McConnell</a>:</p>
<pre>
    totalWithholdings = 0;

    for ( id = 0; id < numEmployees; id++) {
        if (m_employee[id].governmentRetirementWithheld < MAX_GOVT_RETIREMENT) {
            governmentRetirement = ComputeGovernmentRetirement(m_employee[id]);
        }

        companyRetirement = 0;

        if (m_employee[id].WantsRetirement &#038;&#038;
            EligibleForRetirement(m_employee[id])) {
            companyRetirement = GetRetirement(m_employee[id]);
        }

        grossPay = ComputeGrossPay(m_employee[id]);

        personalRetirement = 0;
        if (EligibibleForPersonalRetirement(m_employee[id])) {
            personalRetirement = PersonalRetirementContribution(m_employee[id],
                companyRetirement, grossPay);
        }

        withholding = ComputeWithholding(m_employee[id]);
        netPay = grossPay - withholding - companyRetirement -
            governmentRetirement - personalRetirement;

        PayEmployee(m_employee[id], netPay);

        totalWithholdings = totalWithholdings + withholding;
        totalGovernmentRetirement = totalGovernmentRetirement +
            governmentRetirement;
        totalRetirement = totalRetirement + companyRetirement;
    }

    SavePayRecords(totalWithholdings, totalGovernmentRetirement,
        totalRetirement);
</pre>
<p>É possível obter 100% de cobertura para este trecho completo com apenas um teste: você só precisa garantir que há ao menos um funcionário (para que o loop seja executado) e que as três cláusulas condicionais avaliem para verdadeiro. Obviamente um único teste não é o suficiente para testar todas as nuances deste código e, de fato, McConnel mostra no livro que são necessários <em>pelo menos</em> dezessete testes diferentes. Mesmo assim se tivéssemos escrito aquele único caso de teste, enxergaríamos cobertura total.</p>
<p>Parece que virou moda ultimamente <a href="http://www.infoq.com/presentations/francl-testing-overrated">supervalorizar os testes</a> e divulgar estas métricas vazias. No fim das contas elas funcionam como qualquer métrica para software, só dão uma visão bem abstrata do sistema e podem muitas vezes serem enganosas. Não há substituto para uma boa leitura do código.</p>
<p>Tendo dito isso tudo, eu definitivamente não recomendo tentar <a href="http://logbr.reflectivesurface.com/2009/01/31/testes-pragmatismo-ou-desperdicio-de-tempo/">desenvolver software sem escrever testes automáticos</a>. Já é difícil desenvolver software usando testes, mas é ainda pior sem eles. Só porque você sabe que não é possível provar ausência de defeitos através de testes, não quer dizer que não deva usá-los. Então, por favor, continue escrevendo-os (ou passe a escrever se você não escreve ainda). Só não aja como se eles fossem a última salvação da humanidade. Eles são só a primeira.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/02/06/ninguem-liga-para-sua-relacao-teste-para-codigo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>O gerente invisível</title>
		<link>http://blog.thiagoarrais.com.br/2009/01/15/o-gerente-invisivel/</link>
		<comments>http://blog.thiagoarrais.com.br/2009/01/15/o-gerente-invisivel/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 01:23:01 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/?p=200</guid>
		<description><![CDATA[Gerentes de projeto precisam ter várias habilidades para realizar um trabalho satisfatório. Elas vão desde boa capacidade de comunicação e habilidades de negociação até desenvoltura com estimativas e prazos em constante mutação. Mas a habilidade de sair da porcaria do caminho certamente é uma das mais importantes. Considere-se com sorte se você nunca teve um [...]]]></description>
			<content:encoded><![CDATA[<p>Gerentes de projeto precisam ter várias habilidades para realizar um trabalho satisfatório. Elas vão desde boa capacidade de comunicação e habilidades de negociação até desenvoltura com estimativas e prazos em constante mutação. Mas a habilidade de <em>sair da porcaria do caminho</em> certamente é uma das mais importantes.</p>
<p>Considere-se com sorte se você nunca teve um gerente que pedia relatórios de status diários (ou até com freqüência maior) ou que parecesse ter uma queda especial por reuniões. Principalmente por aquelas bem longas e tediosas. Todo mundo já teve ou ainda vai ter um gerente como esse. E eles fazem parecer que gerentes só servem para encher o saco e lhe atrapalhar de terminar o trabalho de verdade que você faz durante o tempo entre uma reunião e outra.</p>
<p>Mas o bom gerente sabe como sair do caminho. Ele consegue ajudar sem atrapalhar, sem perguntar o tempo todo o que a equipe precisa. Ele simplesmente <em>sabe</em> o que eles precisam, mesmo que <em>eles mesmos</em> não saibam.</p>
<p>Há milhões de coisinhas que não são programação que são necessárias para fazer um produto de software de sucesso. Coisas chatas como reuniões com a diretoria, contabilidade, servidores de produção, manutenção do ar-condicionado, servidores de produção, publicidade, infra-estrutura de rede decente, servidores de produção, impostos e servidores de produção. Bons gerentes fazem parecer que estas coisas não precisam ser resolvidas com cuidado, fazem parecer que elas estão lá e simplesmente funcionam.</p>
<p>Para colocar em termos que um programador vai entender, bons gerentes são capazes de criar uma <a href="http://www.joelonsoftware.com/articles/DevelopmentAbstraction.html">camada de abstração pra o desenvolvedor</a>. Eles conseguem fazer com que o trabalho pareça constituir-se somente de cuspir código o dia inteiro. Eles fazem os programadores se sentirem bem por poderem fazer o tempo todo aquilo que gostam de fazer. Eles respondem os relatórios de status da equipe para os gerentes deles com um mínimo de distúrbio para os programadores. Eles vão para as reuniões que parecem que nunca vão acabar para que o resto da equipe não precise ir. Eles não se escondem atrás de suas escrivaninhas funcionando como um roteador de tarefas delegando tudo que precisa ser feito.</p>
<p>Esta habilidade de sair do caminho torna os bons gerentes virtualmente invisíveis para sua equipe. Os melhores são tão bons nisso que parece que não estão fazendo nada, que são completos vagabundos. Quando eles estão fazendo um bom trabalho, o pensamento dos programadores de sua equipe deve passar várias vezes pela questão &#8220;o que este sanguessuga fica fazendo o dia todo enquanto eu escrevo código aqui para fazer essa porcaria funcionar?&#8221;. A sina deles é parecer cada vez mais inúteis à medida que se tornam mais úteis.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2009/01/15/o-gerente-invisivel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tradução: A outra metade de &#8220;Artistas publicam&#8221;</title>
		<link>http://blog.thiagoarrais.com.br/2008/12/02/traducao-a-outra-metade-de-artistas-publicam/</link>
		<comments>http://blog.thiagoarrais.com.br/2008/12/02/traducao-a-outra-metade-de-artistas-publicam/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 03:12:20 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>
		<category><![CDATA[leitura]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/2008/12/02/traducao-a-outra-metade-de-artistas-publicam/</guid>
		<description><![CDATA[Não costumo fazer traduções porque em geral não gosto delas: a maioria parece um arremedo do original e quando prestam você está no máximo lendo o texto do tradutor e não o do autor. Mas o texto &#8220;The other half of &#8216;Artists ship&#8217;&#8221; do Paul Graham é tão bom que não consegui me segurar. Tecnicamente [...]]]></description>
			<content:encoded><![CDATA[<p><em>Não costumo fazer traduções porque em geral não gosto delas: a maioria parece um arremedo do original e quando prestam você está no máximo lendo o texto do tradutor e não o do autor. Mas o texto <a href="http://www.paulgraham.com/artistsship.html">&#8220;The other half of &#8216;Artists ship&#8217;&#8221;</a> do Paul Graham é tão bom que não consegui me segurar. Tecnicamente o que vem aí abaixo é mais uma versão do que uma tradução (o original, por exemplo, não tinha nenhuma referência nem tantas ênfases em itálico): uma versão minha para o que o autor disse que pode inclusive não ter nada a ver com o que ele quis dizer. Então o que você vai ler aqui não é exatamente o que o Graham escreveu originalmente. Portanto, se você se sente à vontade para ler textos em inglês, vá em frente, clique no link acima e esqueça a minha versão. Caso contrário, corra para aprender inglês &#8212; todo programador que se preza sabe ao menos ler inglês &#8212; e contente-se com minha versão ridiculamente patética neste meio-tempo.</em></p>
<p>Uma das muitas diferenças entre as empresas grandes e as pequenas é que as grandes tendem a desenvolver procedimentos de auto-proteção contra erros. Uma empresa que está iniciando anda mais ou menos como um bebê: esbarra nas coisas e cai o tempo todo. Empresas grandes são mais ponderadas.</p>
<p>O acúmulo gradual de verificações em uma organização é um tipo de aprendizado baseado nos desastres que aconteceram com ela mesma ou com organizações parecidas. Depois de assinar um contrato com um fornecedor que declara falência e não entrega o que deveria, por exemplo, uma empresa pode passar a exigir que todos os fornecedores provem sua solidez antes de fazerem uma oferta.</p>
<p>À medida que as empresas crescem elas invariavelmente desenvolvem mais dessas verificações, seja em resposta a desastres que sofreram ou, provavelmente com mais freqüência, por contratar pessoal oriundo de empresas ainda maiores que trazem consigo seus dispositivos de proteção contra tipos de desastres novos.</p>
<p>É natural que as organizações aprendam com seus erros. O problema é que quem propõe novas verificações quase nunca considera que a verificação em si tem um custo.</p>
<p><em>Toda verificação tem um custo</em>. Considere, por exemplo, o caso de exigir que os fornecedores comprovem solidez. Parece mera prudência, não? Mas na realidade pode ter custos significativos. Existe obviamente o custo direto de tempo de gente dos dois lados para fornecer e verificar provas de solidez. Mas os custos que realmente importam são os que nunca chegamos a conhecer. Como, por exemplo, a empresa que seria a melhor fornecedora, mas não se candidata porque não pode se dar ao luxo de despender o esforço necessário para ser verificada. Ou a empresa que seria a melhor fornecedora, mas fica logo abaixo do limite considerado para a solidez &#8212; que obviamente foi puxado para cima, já que não há nenhum custo aparente para aumentá-lo.</p>
<p>Sempre que alguém em uma organização propusesse uma nova verificação, deveria ter que explicar não só o benefício mas também o custo. Não importa quanto o trabalho de análise fosse ruim, esta meta-verificação iria ao menos lembrar a todos que <em>deve</em> haver um custo e fazê-los procurar por ele.</p>
<p>Se as empresas começassem a fazer isso, encontrariam algumas surpresas. <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> palestrou recentemente na <a href="http://ycombinator.com/">Y Combinator</a> sobre venda de software para clientes corporativos. Ele disse que na maioria das empresas software que custe até aproximadamente $1.000 dólares pode ser adquirido pelos gerentes sem necessidade de aprovações adicionais. Acima desse limite as aquisições de software geralmente precisam ser aprovadas por um comitê. Mas bajular esse processo é <em>tão custoso</em> para os fornecedores de software que não faz sentido cobrar abaixo de $50.000 dólares. O que significa que se alguém produz algum produto pelo qual normalmente cobraria $5000, acaba <em>sendo obrigado</em> a vender por $50.000. </p>
<p>O propósito do comitê presumivelmente é garantir que a empresa não desperdice dinheiro. Apesar disso, o resultado é que eles acabam gastando dez vezes mais.</p>
<p>Verificações de aquisição vão sempre ser caras, porque quanto mais difícil for fazer você comprar algo, mais o preço vai aumentar. E não necessariamente linearmente. Se for suficientemente difícil lhe vender algo, quem for o melhor em fazer as coisas simplesmente não vai querer perder tempo. Os únicos que vão vender para você são <em>as empresas especializadas em vender para você</em>. Quando chega a este ponto você já está afundado em um nível inteiramente novo de ineficiência. Os mecanismos de mercado normais não vão lhe proteger, porque os <em>bons fornecedores nem estão mais no mercado</em>.</p>
<p>Essas coisas acontecem o tempo todo nas maiores de todas as organizações: governos. Mas verificações estabelecidas por governos podem causar problemas bem piores do que superfaturamento. Verificações estabelecidas por governos podem aleijar toda a economia de um país. Até mais ou menos 1400, a China era mais rica e tecnologicamente mais avançada que a Europa. Uma das razões para a Europa ter conseguido ultrapassar foi que o governo chinês restringiu viagens de comércio longas. Com isso só sobraram os europeus para explorar e eventualmente dominar o resto do mundo. <em>Incluindo</em> a China.</p>
<p>Mais recentemente, a <a href="http://pt.wikipedia.org/wiki/Sarbanes-Oxley">lei Sarbanes-Oxley</a> praticamente destruiu o mercado americano de ofertas públicas. Essa não foi a intenção dos legisladores que a escreveram, eles simplesmente queriam acrescentar algumas verificações sobre empresas públicas. Mas esqueceram de considerar o custo. Esqueceram que empresas na iminência da abertura geralmente estão com os cintos bem apertados, e que o peso de algumas verificações a mais pode ser fácil para a General Electric enfrentar mas são o que basta para evitar que empresas mais jovens sequer considerem uma oferta pública inicial.</p>
<p>Quando você começa a pensar no custo das verificações, começa a fazer outras perguntas interessantes. O custo está aumentando ou diminuindo? É mais alto em algumas áreas do que em outras? Onde ele cresce de forma descontínua? Se grandes organizações começassem a fazer perguntas desse tipo, descobririam algumas coisas bem assustadoras.</p>
<p>Eu acredito que o custo das verificações está na verdade aumentando. O motivo é que o software ocupa uma posição importante nas empresas, e que as pessoas que escrevem software são atingidas de um modo peculiar pelas verificações.</p>
<p>Programadores são um tipo de trabalhador diferente na medida em que os melhores preferem trabalhar duro. Este não parece ser o caso na maior parte das ocupações. Quando trabalhei com fast food, nós não preferíamos os tempos atarefados. E quando aparava gramados, eu definitivamente não preferia quando a grama estava alta depois de uma semana de chuva.</p>
<p>Programadores, no entanto, gostam quando escrevem mais código. Ou, mais precisamente, quando <em>publicam</em> mais código. Programadores gostam de fazer a diferença. Os bons, pelo menos.</p>
<p>Para os bons programadores, um dos melhores aspectos de trabalhar para uma empresa pequena é que há poucas verificações para publicação. Em empresas iniciantes, não há nenhuma verificação externa. Se você tiver uma idéia para um recurso novo pela manhã, pode escrevê-lo e enviar para os servidores de produção antes do almoço. E quando pode fazer isso, você acaba tendo mais idéias.</p>
<p>Em empresas grandes, o software precisa atravessar várias aprovações antes de poder ser liberado. E o custo de fazer isso pode ser enorme. Eu estava conversando recentemente com um grupo de três programadores cuja empresa havia sido adquirida há alguns anos por uma empresa grande. Quando eram independentes, eles podiam liberar modificações instantaneamente. Agora, eles disseram, o mais rápido que poderiam disponibilizar o código nos servidores de produção é em duas semanas.</p>
<p>Isto não os tornou simplesmente menos produtivos. Fez com que odiassem trabalhar para o comprador.</p>
<p>Aqui vai uma evidência do quanto os programadores gostam de poder trabalhar duro: esses caras <em>pagariam</em> para poder publicar código de imediato do jeito que estavam acostumados. Perguntei se eles trocariam 10% do preço de aquisição pela habilidade de publicar código de imediato e todos os três instantaneamente disseram que sim. Então perguntei qual seria a percentagem máxima do preço de aquisição que trocariam. Eles disseram que preferiam não pensar nisso, pois não queriam descobrir o quão alto iriam, mas tive a impressão que seria mais ou menos a metade.</p>
<p>Esse pessoal teria sacrificado centenas de milhares de dólares &#8212; talvez milhões &#8212; só para poder disponibilizar mais software para os usuários. E sabe de uma coisa? Seria perfeitamente seguro permitir que o fizessem. Na verdade, o comprador estaria bem melhor; não somente esses caras não quebrariam nada, eles teriam conseguido fazer muito mais. No fim das contas o comprador está tendo performance mais baixa a custo mais alto. Do mesmo jeito que o comitê que aprova aquisições de software.</p>
<p>Assim como o maior perigo de ser difícil de ser convencido a comprar não é pagar superfaturado, mas o fato dos melhores fornecedores nem mesmo quererem vender para você; o maior perigo de aplicar verificações demais a seus programadores não é torná-los improdutivos, mas fazer que os bons programadores nem mesmo queiram trabalhar para você.</p>
<p>A famosa máxima de Steve Jobs <a href="http://www.blogherald.com/2007/11/08/real-artists-ship-the-value-of-a-firm-hard-deadline/">&#8220;artistas publicam&#8221;</a> é aplicável nos dois sentidos. Artistas não são somente capazes de publicar. Eles <em>insistem</em> nisso. Assim, se você não deixar as pessoas publicarem, não terá nenhum artista.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2008/12/02/traducao-a-outra-metade-de-artistas-publicam/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Você pode ser ruim de mil maneiras</title>
		<link>http://blog.thiagoarrais.com.br/2008/10/09/voce-pode-ser-ruim-de-mil-maneiras/</link>
		<comments>http://blog.thiagoarrais.com.br/2008/10/09/voce-pode-ser-ruim-de-mil-maneiras/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 14:21:43 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[gente]]></category>
		<category><![CDATA[linguagens]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/2008/10/09/voce-pode-ser-ruim-de-mil-maneiras/</guid>
		<description><![CDATA[Corre um boato novo dizendo que Rails é o novo ASP, mas isso não é exclusividade de Rails (nem de ASP): qualquer coisa pode ser o novo ASP, basta apresentá-la às pessoas erradas. Programadores ruins serão ruins usando qualquer tecnologia. Tecnologicamente falando, não há nada que se possa fazer para torná-los menos ruins. Não há [...]]]></description>
			<content:encoded><![CDATA[<p>Corre um boato novo dizendo que <a href="http://logbr.reflectivesurface.com/2008/10/07/rails-e-o-novo-asp/">Rails é o novo ASP</a>, mas isso não é exclusividade de Rails (nem de ASP): <em>qualquer coisa</em> pode ser o novo ASP, basta apresentá-la às pessoas erradas. Programadores ruins serão ruins usando qualquer tecnologia. Tecnologicamente falando, não há nada que se possa fazer para torná-los menos ruins. Não há como projetar uma tecnologia que os impeça de ser ruins. Não é com novas linguagens, bibliotecas ou frameworks que eles vão melhorar. Algo que talvez ajude são idéias novas, mas eles precisam estar abertos a elas. No fim das contas a transformação depende somente deles mesmos. Parece auto-ajuda mas é bem verdade.</p>
<p>Há basicamente duas maneiras de novas tecnologias influenciarem programadores ruins a escreverem software menos ruim. A primeira é tornar as boas práticas extremamente fáceis de modo que simplesmente pareçam o jeito natural de fazer as coisas. A segunda é tomar o caminho contrário e tornar práticas ruins mais difíceis ou feias de se fazer. Pode-se usar algo como <a href="http://loudthinking.com/arc/2006_10.html">vinagre sintático</a> para fazer isso. O problema de tornar práticas não recomendadas mais feias é que os programadores ruins vão escrever o código feio <em>e ignorar completamente a feiúra</em>. Os olhos deles são incapazes de enxergar feiúra em um trecho de código. Se você quiser realmente seguir por este caminho, precisa dar um jeito de proibir por completo as asneiras mais gritantes.</p>
<p>Mas só é possível enxergar as mais gritantes.</p>
<p>Mesmo que você consiga evitar os piores erros, surgirão novas idéias igualmente burras. Você pode tentar bloquear essas também e continuar tentando proteger as pessoas delas mesmas até um certo ponto. Mas infelizmente não é possível proibir um idiota de estragar tudo. Os idiotas <em>precisam</em> estragar tudo. É a natureza deles. É isso que os define. É por isso que eles são chamados de idiotas. Não importa quantas <a href="http://blog.thiagoarrais.com.br/2007/06/21/bolas-de-chumbo/">bolas de chumbo</a> você amarre aos pés deles, os verdadeiros idiotas vão <em>arrumar</em> um jeito de fazer besteira. Se sua tecnologia resolver seguir por este caminho, vai precisar proibir tanta coisa e ficar tão limitada que só os tapados serão atraídos. Aqueles que sabem o que estão fazendo simplesmente não aceitam trabalhar acorrentados.</p>
<p>Já que o caminho da proibição não é tão promissor, é melhor explorar a alternativa: tornar o &#8220;certo&#8221; idioticamente fácil. Desse modo, os bons profissionais serão atraídos pela elegância das soluções e vão começar a falar sobre a sua tecnologia. Com o burburinho todo mundo vai querer dar uma olhada nesse novo negócio de que os caras da moda andam falando tanto. As idéias ruins serão contidas por algum tempo, mas há um efeito indesejável que você não vai conseguir evitar.</p>
<p>Este <a href="http://logbr.reflectivesurface.com/2008/01/16/o-efeito-asp/">efeito</a> está intimamente ligado à <a href="http://blog.thiagoarrais.com.br/2008/08/26/a-maldicao-da-popularidade/">maldição da popularidade</a>. Mais popularidade significa mais gente e mais gente significa mais gente <em>tapada</em>. Sua tecnologia preferida simplesmente não pode conseguir se tornar popular e só atrair gênios da computação, eles não são muitos. Para ser popular ela vai precisar dos idiotas. E os idiotas têm um talento natural para estragar as coisas, lembra? Se você quiser ter uma tecnologia amplamente difundida, vai precisar aceitar que ela se torne o novo ASP. Não tem jeito.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2008/10/09/voce-pode-ser-ruim-de-mil-maneiras/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Iterações pra que te quero!</title>
		<link>http://blog.thiagoarrais.com.br/2008/10/02/iteracoes-pra-que-te-quero/</link>
		<comments>http://blog.thiagoarrais.com.br/2008/10/02/iteracoes-pra-que-te-quero/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 00:40:20 +0000</pubDate>
		<dc:creator>thiago.arrais</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[gente]]></category>

		<guid isPermaLink="false">http://blog.thiagoarrais.com.br/2008/10/02/iteracoes-pra-que-te-quero/</guid>
		<description><![CDATA[Já há quem fale sobre a obsolescência das iterações como as conhecemos. Um dos maiores &#8220;culpados&#8221; por esse novo movimento é uma prática antiga da produção just-in-time: o Kanban. Mas este texto não é para falar de coisas tão novas assim. Isso aqui é sobre como boa parte da indústria ainda nem digeriu a idéia [...]]]></description>
			<content:encoded><![CDATA[<p>Já há quem fale sobre a <a href="http://leansoftwareengineering.com/2007/10/05/time-boxed-iteration-an-idea-whose-time-has-come-and-gone/">obsolescência</a> das <a href="http://alistair.cockburn.us/Are+iterations+hazardous+to+your+project%3f">iterações</a> como as conhecemos. Um dos maiores &#8220;culpados&#8221; por esse novo movimento é uma prática antiga da produção just-in-time: o Kanban. Mas este texto não é para falar de coisas tão novas assim. Isso aqui é sobre como boa parte da indústria ainda nem digeriu a idéia que veio antes: as iterações.</p>
<p>Mas espera aí. Todo mundo usa iterações, não?</p>
<p>Bom, na verdade não. Como podemos observar a partir de alguns <a href="http://www.rponte.com.br/2008/09/23/desenvolvedores-nao-pensam-desenvolvedores-seguem-casos-de-uso/">relatos</a> <a href="http://blog.aspercom.com.br/2008/04/16/o-anti-pattern-caso-de-uso-uml-codificacao-teste/">bem</a> <a href="http://1up4dev.org/2008/06/parem-o-mundo-que-eu-quero-descer/">recentes</a>, desenvolvimento de software em cascata ainda é realidade em muitos lugares. Pode parecer uma realidade bem distante para você, mas é algo bem próximo para essas pessoas. Tão próximo e tão incômodo que elas tomaram o tempo de sentar-se e escrever sobre o assunto. O pessoal do <a href="http://1up4dev.org/">1up4Developers</a> até dedicou um site inteiro a isso. Eles deviam estar verdadeiramente <em>sofrendo</em> quando começaram isso.</p>
<p>A triste realidade é que não é tão incomum assim encontrar organizações onde uma &#8220;iteração&#8221; normalmente dura seis meses e onde é terminante proibido tocar em uma única linha de código enquanto a equipe não atravessar oficialmente a &#8220;fase de requisitos&#8221; (e talvez mais algumas outras fases depois dela). O pior é saber que o modelo da cascata <a href="http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf">nasceu somente como contra-exemplo (pdf)</a>, algo que deveria ser evitado tanto quanto possível. Não sei que seqüência de eventos esdrúxula consegue levar um modelo de contra-exemplo fabricado a prática padrão de toda uma indústria, mas foi o que aconteceu.</p>
<p>Felizmente, já existe uma solução para isto e ela, sem muita surpresa, atende pelo nome de <em>iteração</em>. Não iterações de seis meses para camuflar um processo em cascata, mas iterações de verdade que permitam feedback rápido e adaptação a mudanças. Antes que possamos começar a tornar as iterações obsoletas, precisamos apresentá-las a quem ainda não as conhece. Mais importante ainda: a quem acha que as conhece mas nunca viu nada além de desvirtuações do conceito.</p>
<p>Podemos até mesmo começar com <a href="http://blog.thiagoarrais.com.br/2006/04/19/a-cascata-iterada/">cascatas iteradas</a>. Já que eles parecem gostar da cascata, dividiremos os projetos em cascatas menores com entregas de software real ao final de cada ciclo. Todo mundo continua trabalhando do mesmo modo de sempre, mas agora os prazos para cada fase e o escopo da iteração como um todo serão reduzidos. A diferença é que os clientes terão software para observar mais cedo, algo real e bastante vivo que possam usar como base para novas idéias ao invés de serem obrigados a fazer especulações baseadas em documentos mortos. Certamente não é o ponto a que queremos chegar, mas quem disse que ia ser fácil?</p>
<p>Uma questão essencial para esta estratégia é o tamanho das iterações. Cascatas iteradas muito longas seriam somente casos especiais do processo de desenvolvimento anterior. Seis meses certamente é muito tempo e três meses ainda parece muito. A partir de um mês de duração começamos a conversar. Ainda é bastante longo, mas, novamente, é só um ponto de partida.</p>
<p>Depois disso o próximo passo provavelmente deve ser mostrar como representações intermediárias podem ser ineficientes. Novamente o encolhimento das iterações deve nos ajudar. Prazos de um mês já devem estar suficientemente difíceis de cumprir quando se tem representações intermediárias para criar e as equipes provavelmente já começaram a eliminar as práticas mais ineficientes neste ponto. Encolher as iterações para quinze dias deve dar conta de eliminar a maioria das ineficiências restantes. Você simplesmente não <em>consegue</em> produzir porções significativas de software funcionando se tiver que escrever treze documentos e aprovar cinco solicitações de mudança pra cada linha de código que precisar alterar.</p>
<p>Quando chegarmos a este ponto, será que deveríamos parar aí? A beleza deste processo de encolhimento das iterações é poder continuar diminuindo-as. Iterativamente, se você me permite. O limite será alcançado quando em uma iteração couber <a href="http://leansoftwareengineering.com/2007/10/05/time-boxed-iteration-an-idea-whose-time-has-come-and-gone/">somente um requisito</a>. Neste ponto, a única maneira de continuar encolhendo as iterações é encolher os próprios requisitos, tornando-os cada vez mais simples e atômicos.</p>
<p>Mas será que sua organização vai ter coragem para chegar lá?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thiagoarrais.com.br/2008/10/02/iteracoes-pra-que-te-quero/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
