<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/1.5.1-alpha" -->
<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/"
>

<channel>
	<title>Não Existe Bala de Prata</title>
	<link>http://nebp.blogsome.com</link>
	<description>Desenvolvimento de Software e a Vida Real</description>
	<pubDate>Wed, 05 Jul 2006 03:56:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.1-alpha</generator>
	<language>en</language>

		<item>
		<title>A IDE faz toda a diferença</title>
		<link>http://nebp.blogsome.com/2006/07/05/a-ide-faz-toda-a-diferenca/</link>
		<comments>http://nebp.blogsome.com/2006/07/05/a-ide-faz-toda-a-diferenca/#comments</comments>
		<pubDate>Wed, 05 Jul 2006 03:55:46 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Desenvolvimento de Software</category>
		<guid>http://nebp.blogsome.com/2006/07/05/a-ide-faz-toda-a-diferenca/</guid>
		<description><![CDATA[	Ultimamente tenho me interessado muito pelo RubyOnRails, que ao meu ver trousse um novo ar para o desenvolvimento web. Realmente é fantástico ver como o Rails trata bem os principais problemas enfrentados pelos desenvolvedores. E a maneira como ajuda voc&ecirc; a manter o princípio DRY (don&acute;t repeat yourself) é realmente uma sacada genial.
	Porém nem tudo [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">Ultimamente tenho me interessado muito pelo <a title="Ruby on Rails" target="_blank" href="http://www.rubyonrails.org">RubyOnRails</a>, que ao meu ver trousse um novo ar para o desenvolvimento web. Realmente é fantástico ver como o Rails trata bem os principais problemas enfrentados pelos desenvolvedores. E a maneira como ajuda voc&ecirc; a manter o princípio DRY (don&acute;t repeat yourself) é realmente uma sacada genial.</p>
	<p class="MsoNormal"><img width="87" vspace="10" hspace="10" height="112" border="0" align="left" title="RubyOnRails" alt="RubyOnRails" src="http://nebp.blogsome.com/wp-admin/images/rails.png" />Porém nem tudo é perfeito. Por ser uma linguagem ainda &ldquo;nova&rdquo; ela n&atilde;o possui uma IDE que seja boa o suficiente para acompanhar a genialidade do Rails. Das que eu conhe&ccedil;o o <a title="RadRails" target="_blank" href="http://www.radrails.org">RadRails</a> parece ser o que chega mais próximo de uma IDE decente, porém ainda deixa muito a desejar, principalmente com rela&ccedil;&atilde;o ao code complete.</p>
	<p class="MsoNormal">Mas voc&ecirc; só percebe como uma boa IDE faz a diferen&ccedil;a quando utiliza uma que seja realmente produtiva. E eu percebi isso agora que comecei a utilizar o <a title="Visual Studio 2005" target="_blank" href="http://msdn.microsoft.com/vstudio/">VisualStudio 2005</a>. Usando junto com o <a title="ReSharper" target="_blank" href="http://www.jetbrains.com/resharper/">ReSharper</a> essa IDE é simplesmente incrível. N&atilde;o importa o quando a linguagem .Net estimule voc&ecirc; a criar código do tipo copy-paste, a verdade é<img width="175" vspace="10" hspace="10" height="46" border="0" align="right" src="http://nebp.blogsome.com/wp-admin/images/visualstudio.gif" alt="Visual Studio 2005" title="Visual Studio 2005" /> que voc&ecirc; consegue aumentar muito a sua produtividade. Além disso, manter o código com boa manutenibilidade depende e sempre dependerá só de voc&ecirc;.</p>
	<p class="MsoNormal">N&atilde;o pretendo abandonar o Rails, pois vejo nele uma fonte de inspira&ccedil;&atilde;o sobre o que se pode fazer para ter um código consistente e coeso. Porém é difícil n&atilde;o levar em conta o quanto é importante, principalmente em desenvolvimento web, ter uma ferramenta que fa&ccedil;a diminuir os seus prazos de entrega. E nesse ponto o VisualStudio é imbatível. <em><strong>A linguagem de programa&ccedil;&atilde;o é importante, mas a IDE faz toda a diferen&ccedil;a</strong></em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/07/05/a-ide-faz-toda-a-diferenca/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Programando com Homer Simpson</title>
		<link>http://nebp.blogsome.com/2006/04/11/programando-com-homer-simpson/</link>
		<comments>http://nebp.blogsome.com/2006/04/11/programando-com-homer-simpson/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 08:55:46 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Desenvolvimento de Software</category>
		<guid>http://nebp.blogsome.com/2006/04/11/programando-com-homer-simpson/</guid>
		<description><![CDATA[	Voc&ecirc; está programando e se depara com um problema que n&atilde;o consegue resolver. Fica um bom tempo pensando e tentando solucioná-lo mas n&atilde;o chega a nenhuma conclus&atilde;o. Fica parado olhando para a tela com o código e n&atilde;o v&ecirc; uma maneira de faz&ecirc;-lo funcionar como deveria.
	Ent&atilde;o voc&ecirc; chama o programador do seu lado e come&ccedil;a [...]]]></description>
			<content:encoded><![CDATA[	<p>Voc&ecirc; está programando e se depara com um problema que n&atilde;o consegue resolver. Fica um bom tempo pensando e tentando solucioná-lo mas n&atilde;o chega a nenhuma conclus&atilde;o. Fica parado olhando para a tela com o código e n&atilde;o v&ecirc; uma maneira de faz&ecirc;-lo funcionar como deveria.</p>
	<p>Ent&atilde;o voc&ecirc; chama o programador do seu lado e come&ccedil;a a contar o seu problema e, de repente, a solu&ccedil;&atilde;o surge na sua mente como mágica. E o mais estranho de tudo: o outro programador n&atilde;o disse uma palavra!</p>
	<p>Na realidade essa é uma situa&ccedil;&atilde;o muito comum e qualquer programador com certeza já passou por algo semelhante. E note que o programador que ouvia suas queixas nem precisou abrir a boca. Isso quer dizer que ele nem precisava ser um programador, poderia ser qualquer pessoa que estivesse passando por ali. Pensando bem, nem precisaria ser uma pessoa, poderia ser qualquer objeto, como um pato de borracha, ou mesmo o boneco do Homer Simpson.</p>
	<p><img vspace="5" hspace="5" border="0" align="left" src="http://nebp.blogsome.com/wp-admin/images/Homer.jpg" alt="Homer Simpson" title="Homer Simpson" />Eu só citei o pato de borracha porque é esse o nome que recebe essa &quot;técnica&quot;:&nbsp; <a title="Rubber Ducking" target="_blank" href="http://c2.com/cgi/wiki?RubberDucking">Rubber Ducking</a>. Aparente a explica&ccedil;&atilde;o por trás dessa idéia é&nbsp; que, ao expor o problema de forma verbal, voc&ecirc; acaba exercitando outras áreas do cérebro que n&atilde;o estavam ativas enquanto voc&ecirc; estava calado olhando para o monitor. Por isso que quando come&ccedil;ou a explicar a situa&ccedil;&atilde;o em voz alta voc&ecirc; passou a v&ecirc;-la por um &acirc;ngulo diferente, e conseguiu chegar sozinho na solu&ccedil;&atilde;o.</p>
	<p>Claro que nem sempre isso irá funcionar, e além disso é sempre bom consultar outras pessoas e pedir para que elas analisem o problema com voc&ecirc;. Mas a dica aqui é para que, <strong>antes de interromper o trabalho do colega ao seu lado</strong>, tenha um pato de borracha (ou qualquer outro brinquedo) junto ao seu monitor e converse com ele em voz alta. Explique o seu problema e preste aten&ccedil;&atilde;o nos conselhos que ele lhe passar, mesmo que seja o Homer&#8230;</p>
	<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/04/11/programando-com-homer-simpson/feed/</wfw:commentRss>
	</item>
		<item>
		<title>A beleza está nos detalhes</title>
		<link>http://nebp.blogsome.com/2006/04/01/a-beleza-esta-nos-detalhes/</link>
		<comments>http://nebp.blogsome.com/2006/04/01/a-beleza-esta-nos-detalhes/#comments</comments>
		<pubDate>Sat, 01 Apr 2006 04:48:27 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Desenvolvimento de Software</category>
		<guid>http://nebp.blogsome.com/2006/04/01/a-beleza-esta-nos-detalhes/</guid>
		<description><![CDATA[	Essas s&atilde;o algumas dicas que realmente fazem diferen&ccedil;a para quem quer ser um desenvolvedor profissional de software:&nbsp;
	&nbsp;
	
Aprimore      suas habilidades.         Por que passar a vida desenvolvendo software se voc&ecirc; n&atilde;o se preocupa em      faz&ecirc;-lo direito?
	Reflita    [...]]]></description>
			<content:encoded><![CDATA[	<p>Essas s&atilde;o algumas dicas que realmente fazem diferen&ccedil;a para quem quer ser um desenvolvedor profissional de software:&nbsp;</p>
	<p><img width="500" height="375" border="0" align="middle" src="http://nebp.blogsome.com/wp-admin/images/ForbiddenCity.jpg" alt="A Beleza está nos detalhes" title="A Beleza está nos detalhes" />&nbsp;</p>
	<ol>
<li><strong>Aprimore      suas habilidades. </strong><br />        Por que passar a vida desenvolvendo software se voc&ecirc; n&atilde;o se preocupa em      faz&ecirc;-lo direito?</li>
	<li><strong>Reflita      sobre o seu trabalho</strong> <br />        Desligue o piloto automático e assuma o controle. Constantemente critique      e valide seu trabalho. </li>
	<li><strong>Forne&ccedil;a      op&ccedil;&otilde;es. N&atilde;o d&ecirc; desculpas esfarrapadas</strong> <br />        Ao invés de desculpas, forne&ccedil;a op&ccedil;&otilde;es. N&atilde;o diga que n&atilde;o pode ser feito;      explique o que pode ser feito. </li>
	<li><strong>N&atilde;o      conviva com janelas quebradas</strong> <br />        Corrija designes pobres, decis&otilde;es erradas e código ruim quando se deparar      com eles. </li>
	<li><strong>Seja um      catalisador de mudan&ccedil;as</strong><br />        Voc&ecirc; n&atilde;o pode for&ccedil;ar as pessoas a mudarem. No entanto, voc&ecirc; pode lhes      mostrar como o futuro pode ser e convenc&ecirc;-las a participar da sua cria&ccedil;&atilde;o.      </li>
	<li><strong>Olhe o      quadro geral</strong><br />        N&atilde;o mergulhe nos detalhes para n&atilde;o esquecer de olhar o que está      acontecendo ao seu redor. </li>
	<li><strong>Fa&ccedil;a da      qualidade um requerimento obrigatório</strong> <br />        Envolva seus usuários para conseguir capturar os requerimentos que imp&otilde;em      qualidades reais para o projeto. </li>
	<li><strong>Invista      regularmente no seu portfolio de conhecimento</strong>s<br />        Torne a aprendizagem um hábito. </li>
	<li><strong>Analise      de forma crítica o que voc&ecirc; l&ecirc; e ouve</strong> <br />        N&atilde;o se abale com o que dizem os vendedores, a mídia especializada ou com      dogmas. Analise a informa&ccedil;&atilde;o de acordo com a sua realidade e a do seu      projeto. </li>
	<li><strong>O que      voc&ecirc; diz e como voc&ecirc; diz</strong> <br />        Nada adianta ter grande idéias se voc&ecirc; n&atilde;o consegue comunicá-las de      maneira eficiente. </li>
	<li><strong>DRY &ndash; Don&#8217;t      Repeat Yourself (N&atilde;o se repita)</strong><br />        Cada peda&ccedil;o do conhecimento deve ter uma representa&ccedil;&atilde;o única, sem      ambig&uuml;idades e de representativa&nbsp; autoridade      no sistema. </li>
	<li><strong>Torne      fácil de reutilizar</strong> <br />        Se for fácil de reutilizar, as pessoas reutilizar&atilde;o. Crie um ambiente que      favore&ccedil;a a reutiliza&ccedil;&atilde;o. </li>
	<li><strong>Elimine      o efeito de coisas n&atilde;o relacionadas</strong> <br />        Projete componentes que sejam auto-contidos, independentes e com um único propósito      bem definido. </li>
	<li><strong>N&atilde;o      existem decis&otilde;es finais</strong> <br />        Nenhuma decis&atilde;o é gravada em pedra. Pense em cada decis&atilde;o como sendo      gravada na areia da praia e prepare-se para as mudan&ccedil;as. </li>
	<li><strong>Utilize      o rastro das balas para encontrar o alvo</strong> <br />        O rastro que as balas deixam leva voc&ecirc; para em dire&ccedil;&atilde;o ao alvo na medida      em que voc&ecirc; experimenta novas coisas e v&ecirc; qu&atilde;o próximo conseguiu chegar do      objetivo. </li>
	<li><strong>Fa&ccedil;a      protótipos para aprender</strong> <br />        Prototipa&ccedil;&atilde;o é uma experi&ecirc;ncia de aprendizagem. O seu valor n&atilde;o está no      código produzido, mas sim nas li&ccedil;&otilde;es aprendidas. </li>
	<li><strong>Programe      próximo do domínio do problema</strong> <br />        Planeje e codifique utilizando o vocabulário do usuário. </li>
	<li><strong>Estime      para evitar surpresas</strong> <br />        Estime antes de come&ccedil;ar. Voc&ecirc; descobrirá quais s&atilde;o os problemas em      potencial para o futuro. </li>
	<li><strong>Interaja      o cronograma com o código</strong> <br />        Use a experi&ecirc;ncia voc&ecirc; adquire a medida que implementa para refinar suas      estimativas de prazo. </li>
	<li><strong>Mantenha      o conhecimento com comentários claros</strong> <br />        Comentários claros nunca ficam obsoletos. Eles ajudam a alavancar seu      trabalho e simplificam o debug e testes. </li>
	<li><strong>Use o      poder da linha de comando</strong> <br />        Use a linha de comando quando a interface gráfica n&atilde;o suprir suas      necessidades. </li>
	<li><strong>Use um      único editor. E use-o bem</strong> <br />        O editor deve ser uma extens&atilde;o da sua m&atilde;o. Certifique-se de que o seu      editor é configurável, extensível e adaptável as suas necessidades. </li>
	<li><strong>Sempre      use controle de vers&atilde;o</strong> <br />        O controle de vers&atilde;o é a máquina do tempo do seu trabalho &ndash; Com ele voc&ecirc;      pode sempre voltar atrás. </li>
	<li><strong>Corrija      o problema, n&atilde;o a acusa&ccedil;&atilde;o</strong> <br />        N&atilde;o importa se o bug é uma falha de outra pessoa &ndash; ele ainda assim é um      problema e portanto precisa ser consertado. </li>
	<li><strong>N&atilde;o      entre em p&acirc;nico quando estiver debugando</strong> <br />        Respire fundo e PENSE sobre o que pode estar causando o bug. </li>
	<li><strong>&quot;select&quot;      n&atilde;o está quebrado</strong><br />        É raro voc&ecirc; encontrar um bug no sistema operacional, no compilador, ou      mesmo em programas e bibliotecas comerciais. Na maioria das vezes o      problema está mesmo na sua aplica&ccedil;&atilde;o. </li>
	<li><strong>N&atilde;o      presuma. Prove</strong><br />        Prove suas suposi&ccedil;&otilde;es no ambiente atual, com dados reais e para as      condi&ccedil;&otilde;es de fronteira. </li>
	<li><strong>Aprenda      uma linguagem de manipula&ccedil;&atilde;o de textos</strong><br />        Voc&ecirc; gasta grande parte do seu dia trabalhando com textos. Por que n&atilde;o      deixar que o computador fa&ccedil;a algo mais por voc&ecirc;? </li>
	<li><strong>Escreva      código que escreva código</strong> <br />        Geradores de código aumentam sua produtividade e ajudam a evitar      duplicidade. </li>
	<li><strong>Voc&ecirc;      n&atilde;o pode escrever um software perfeito</strong> <br />        Software n&atilde;o pode ser perfeito. Mas proteja o seu código e seus usuários      dos erros inevitáveis. </li>
	<li>Projete para contratos (Design by      Contracts) <br />        Utilize contratos para documentar e verificar que o código n&atilde;o faz nem      mais nem menos do que aquilo que necessita fazer. </li>
	<li><strong>Falhe      cedo</strong> <br />        Um programa morto costuma causar menos estrago do que um programa      aleijado.</li>
	<li><strong>Use      asser&ccedil;&otilde;es para prevenir o impossível</strong> <br />        Asser&ccedil;&otilde;es validam suas suposi&ccedil;&otilde;es. Utilize-as para proteger seu código do      mundo incerto. </li>
	<li><strong>Use      exce&ccedil;&otilde;es para problemas excepcionais</strong> <br />        Exce&ccedil;&otilde;es podem sofrer dos mesmos problemas de manuten&ccedil;&atilde;o e legibilidade      dos clássicos códigos em espaguete. Reserve as exce&ccedil;&otilde;es para coisas      realmente excepcionais. </li>
	<li><strong>Acabe o      que voc&ecirc; come&ccedil;ou</strong> <br />        Sempre que possível os métodos e objetos que alocam recursos devem ser      responsáveis por desalocá-los. </li>
	<li><strong>Minimize      o acoplamento entre módulos</strong> <br />        Evite o acoplamento escrevendo código &ldquo;tímido&rdquo; e aplicando a lei de      Demeter. </li>
	<li><strong>Configure      ao invés de integrar</strong><br />        Implemente as escolhas tecnológicas de uma aplica&ccedil;&atilde;o como op&ccedil;&otilde;es de      configura&ccedil;&atilde;o, n&atilde;o como partes integradas da aplica&ccedil;&atilde;o. </li>
	<li><strong>Coloque      a abstra&ccedil;&atilde;o no código e os detalhes em metadados <br />         Programe para o      caso geral e coloque as especificidades fora da base do código compilado. </strong></li>
	<li><strong>Analise      o processo para melhorar a concorr&ecirc;ncia</strong> <br />        Explore a concorr&ecirc;ncia dos processos dos seus usuários. </li>
	<li><strong>Projete      utilizando servi&ccedil;os</strong> <br />        Projete em termos de servi&ccedil;os independentes, com interfaces consistentes e      para objetos concorrentes e bem definidos. </li>
	<li><strong>Sempre      projete para concorr&ecirc;ncia</strong> <br />        Permita a concorr&ecirc;ncia e voc&ecirc; irá projetar interfaces limpas e com poucas      suposi&ccedil;&otilde;es. </li>
	<li><strong>Separe      vis&otilde;es de modelos</strong> <br />        Ganhe flexibilidade a um baixo custo projetando suas aplica&ccedil;&otilde;es em termos      de modelos e vis&otilde;es. </li>
	<li><strong>Use      quadro-negro para coordenar processos</strong> <br />        Use quadros-negro para coordenar agentes ou fatos discrepantes enquanto      mantém a isola&ccedil;&atilde;o e independ&ecirc;ncia entre os participantes. </li>
	<li><strong>N&atilde;o      programe por coincid&ecirc;ncia</strong> <br />        Mantenha-se nas coisas confiáveis. Cuidado com complexidade acidental e      n&atilde;o confunda uma feliz coincid&ecirc;ncia com uma regra geral. </li>
	<li><strong>Estime      a ordem dos seus algoritmos</strong> <br />        Fa&ccedil;a uma estimativa do que algoritmo precisa suportar antes de escrever      código. </li>
	<li><strong>Teste      suas estimativas</strong> <br />        Análises matemáticas de algoritmos n&atilde;o lhe dizem tudo. Tente medir o      desempenho do seu código no ambiente real. </li>
	<li><strong>Refatore      cedo, refatore sempre</strong> <br />        Assim como voc&ecirc; remove as ervas daninhas e rearranja o jardim, reescreva e      reestruture o código constantemente. Corrija na raiz do problema. </li>
	<li><strong>Projete      para os testes</strong> <br />        Comece a pensar como testar antes de escrever uma linha de código. </li>
	<li><strong>Teste o      seu software; ou o seu usuário testará por voc&ecirc;</strong><br />        Teste arduamente. N&atilde;o fa&ccedil;a o seu usuário encontrar os erros que voc&ecirc;      deveria ter encontrado. </li>
	<li><strong>N&atilde;o      utilize assistentes de código que voc&ecirc; n&atilde;o entenda</strong> <br />        Assistentes podem gerar toneladas de código. Esteja certo de que voc&ecirc;      entenda tudo o que foi gerado antes de incorporá-lo ao seu projeto. </li>
	<li><strong>N&atilde;o      colha os requerimentos &ndash; Procure por eles profundamente</strong> <br />        Requerimentos raramente est&atilde;o na superfície. Normalmente eles est&atilde;o      soterrados sob várias camadas de suposi&ccedil;&otilde;es, preconceitos e politicagem. </li>
	<li><strong>Trabalhe      com o usuário para pensar como o usuário</strong> <br />        Esta é a melhor maneira conseguir inspira&ccedil;&atilde;o sobre como o sistema será utilizado.      </li>
	<li><strong>Abstra&ccedil;&otilde;es      vivem mais do que detalhes</strong> <br />        Invista na abstra&ccedil;&atilde;o, n&atilde;o na implementa&ccedil;&atilde;o. Abstra&ccedil;&otilde;es podem sobreviver &agrave;s      barreiras criadas pelas mudan&ccedil;as de implementa&ccedil;&atilde;o e pelas novas      tecnologias. </li>
	<li><strong>Use um      glossário de projeto</strong> <br />        Crie e mantenha uma fonte única com todos os termos e vocabulários      específicos do projeto. </li>
	<li><strong>N&atilde;o      pense fora caixa &ndash; Encontre a caixa</strong> <br />        Quando confrontado com um problema impossível, identifique as verdadeiras      limita&ccedil;&otilde;es. Pergunte a voc&ecirc; mesmo: &ldquo;Isso precisa ser feito dessa maneira?      Isso precisa ser feito por completo?&rdquo;. </li>
	<li><strong>Comece      quando voc&ecirc; estiver pronto</strong><br />        Voc&ecirc; adquire experi&ecirc;ncia durante toda a sua vida. N&atilde;o deixe passar      desapercebido as pequenas dúvidas. </li>
	<li><strong>Algumas      coisas s&atilde;o melhores feitas do que descritas</strong> <br />        N&atilde;o caia na espiral da especifica&ccedil;&atilde;o &ndash; em algum momento voc&ecirc; precisa      come&ccedil;ar a codificar. </li>
	<li><strong>N&atilde;o      seja um escravo dos métodos formais</strong><br />        N&atilde;o adote uma técnica sem antes analisá-la no contexto de suas práticas de      desenvolvimento e capacidade. </li>
	<li><strong>Ferramentas      caras n&atilde;o produzem projetos</strong> <strong>melhores</strong><br />        N&atilde;o se impressione somente pelo pre&ccedil;o estampado na etiqueta. Julgue as      ferramentas pelos seus méritos. </li>
	<li><strong>Organize      o time pela funcionalidade</strong> <br />        N&atilde;o separe os designers dos programadores nem os testadores dos      modeladores. Forme os times da mesma maneira que voc&ecirc; organiza o código. </li>
	<li><strong>N&atilde;o use      manual de procedimentos</strong> <br />        Um script ou arquivo de lote pode executar as mesmas instru&ccedil;&otilde;es, na mesma      ordem, o tempo todo. </li>
	<li><strong>Teste      cedo. Teste sempre. Teste automaticamente</strong> <br />        Testes que rodam a cada build s&atilde;o muito mais eficientes do que planos de      testes empoeirados em uma prateleira. </li>
	<li><strong>O      código n&atilde;o está terminado até todos os testes rodarem</strong> <br />        E ponto final.</li>
	<li><strong>Use      sabotadores para testar seus testes</strong> <br />        Coloque bugs propositalmente em uma cópia separada do código para      verificar se os testes ir&atilde;o apontá-los. </li>
	<li><strong>Teste a      cobertura de estados, n&atilde;o a cobertura de código</strong> <br />        Identifique e teste estados significativos do programa. Testar apenas      linhas de código n&atilde;o é o suficiente. </li>
	<li><strong>Encontre      um bug uma única vez</strong> <br />        Quando um testador humano encontrar um bug deve ser a última vez que um      humano encontre esse bug. Utilize testes automáticos para verificar esse      bug a partir de ent&atilde;o. </li>
	<li><strong>O      portugu&ecirc;s também é uma linguagem de programa&ccedil;&atilde;o</strong> <br />        Escreva documentos da mesma forma que voc&ecirc; escreve código: obede&ccedil;a ao      principio do DRY (n&atilde;o se repita), utilize metadados, MVC, geradores      automáticos, etc. </li>
	<li><strong>Crie      documenta&ccedil;&atilde;o durante, ao invés de tentar encaixá-la depois</strong> <br />        Documenta&ccedil;&atilde;o criada separada do código muito mais chance de estar      incorreta e desatualizada. </li>
	<li><strong>Supere      um pouco as expectativas dos seus usuários</strong> <br />        Compreenda quais s&atilde;o as expectativas do seu usuário e ent&atilde;o entregue um      pouquinho mais do que ele estava esperando. </li>
	<li><strong>Assine      o seu trabalho</strong> <br />        Mesmo os primeiros artes&otilde;es ficavam orgulhosos de assinar seus trabalhos. Voc&ecirc;      também deveria ficar.</li>
  </ol>
	<p>Estas dicas foram extraidas do livro <a href="http://preco.buscape.com.br/mylivro_resposta.asp?isbn=020161622X&#038;data=31/03/2006&#038;dollar=2.19440&#038;eur=2.66773&#038;libra=3.83384&#038;dollarc=1.88961&#038;id=3482&#038;raiz=3482&#038;or=&#038;site_origem=&#038;auto=0&#038;pr=" target="_blank" title="Encontre o melhor preço para este livro"><em>The Pragmatic Programmer</em></a> </p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/04/01/a-beleza-esta-nos-detalhes/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Análise de Requisitos</title>
		<link>http://nebp.blogsome.com/2006/03/24/analise-de-requisitos/</link>
		<comments>http://nebp.blogsome.com/2006/03/24/analise-de-requisitos/#comments</comments>
		<pubDate>Fri, 24 Mar 2006 03:54:49 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Desenvolvimento de Software</category>
	<category>Humor</category>
		<guid>http://nebp.blogsome.com/2006/03/24/analise-de-requisitos/</guid>
		<description><![CDATA[	Se você já fez uma análise de requisitos para desenvolvimento de software muito provavelmente já se sentiu assim também&#8230;
	
	A minha dica para você que está tentando descobrir o que o seu cliente quer do seu novo software é a seguinte:
	
	Em primeiro lugar nunca pergunte ao cliente o que ele quer que o novo sistema faça.
	Compreenda [...]]]></description>
			<content:encoded><![CDATA[	<p>Se você já fez uma análise de requisitos para desenvolvimento de software muito provavelmente já se sentiu assim também&#8230;</p>
	<p><img src='/images/Dilbert.jpg' alt='Dilbert' /></p>
	<p>A minha dica para você que está tentando descobrir o que o seu cliente quer do seu novo software é a seguinte:</p>
	<blockquote><ol style='list-style-type: disc;'>
	<li>Em primeiro lugar <strong>nunca</strong> pergunte ao cliente o que ele quer que o novo sistema faça.</li>
	<li>Compreenda como são feitos hoje os processos do cliente.</li>
	<li>Pergunte ao cliente quais processos que ele sabe que funcionam bem no sistema atual. Faça o cliente explicar porque ele acha que funcionam bem.</li>
	<li>Descubra quais são processos atuais que existem mas ninguém usa.</li>
	<li>Baseado nessas informações desenvolva um protótipo do que você acredita que o cliente precisa. Quanto mais claramente esse protótipo puder ser compreendido pelo cliente melhor. Por exemplo, se for um cliente da área técnica você poderá lhe mostrar os casos de uso. Se for um cliente de negócio você vai precisar de algo mais visual&#8230;</li>
	<li><strong>Faça</strong> (<em>essa parte às vezes é difícil</em>) o cliente analisar o seu protótipo. </li>
<strong>Sempre</strong> esteja cara-a-cara com ele enquanto estiver fazendo a análise.</p>
	<li>Assinale os requisitos que o cliente concorda e aqueles que ele discorda. Baseado nessas informações descubra se ainda existem pontos do processo que você não entendeu corretamente.</li>
	<li>Faça um novo protótipo. A partir daqui o processo se repete até que o cliente concorde <strong>com a maioria dos requisitos do sistema</strong>.</li>
	</ol></blockquote>
	<p>Tentar fazer com que todos os requisitos sejam validados e aprovados pelo cliente pode consumir muito tempo. Se o cliente já concordou com a maior parte então está na hora de colocar a mão na massa e começar o desenvolvimento. Quanto aos requisitos que não foram aprovados eles fazem parte dos requisitos que iriam mudar de qualquer jeito&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/03/24/analise-de-requisitos/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Contando as linhas de código</title>
		<link>http://nebp.blogsome.com/2006/03/22/contando-as-linhas-de-codigo/</link>
		<comments>http://nebp.blogsome.com/2006/03/22/contando-as-linhas-de-codigo/#comments</comments>
		<pubDate>Wed, 22 Mar 2006 04:06:08 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Desenvolvimento de Software</category>
		<guid>http://nebp.blogsome.com/2006/03/22/contando-as-linhas-de-codigo/</guid>
		<description><![CDATA[	Desde quando o desenvolvimento de software se tornou uma atividade profissional milhares de pessoas têm tentado medir a produtividade dos seus programadores. E a primeira “métrica” que se imaginou, e talvez a mais famosa, é o loc ou lines of code.
A idéia é bem simples: basta contar quantas novas linhas de código o programador escreveu [...]]]></description>
			<content:encoded><![CDATA[	<p>Desde quando o desenvolvimento de software se tornou uma atividade profissional milhares de pessoas têm tentado medir a produtividade dos seus programadores. E a primeira “métrica” que se imaginou, e talvez a mais famosa, é o <a href="http://en.wikipedia.org/wiki/Source_lines_of_code" target="_blank">loc</a> ou <em>lines of code</em>.<br />
A idéia é bem simples: basta contar quantas novas linhas de código o programador escreveu em cada dia, colocar tudo em uma planilha, e verificar se ele está rendendo mais ou menos.</p>
	<p>Claro que hoje é fácil de perceber que não pode haver uma idéia mais absurda do que essa para se medir o trabalho de um programador. Acho que a <a href="http://www.folklore.org/StoryView.py?project=Macintosh&#038;story=Negative_2000_Lines_Of_Code.txt" target="_blank">estória</a> que melhor ilustra essa incoerência foi o que aconteceu com um programador que participava do desenvolvimento do sistema operacional do <a href="http://pt.wikipedia.org/wiki/Lisa" target="_blank">Lisa</a>, da Apple, em 1982.</p>
	<p><img src='/images/AppleLisa.jpg' alt='Apple Lisa OS - 1983' style='position: relative; float: right; margin: 10px;'/><br />
Naquela época, os gerentes do projeto decidiram que cada desenvolvedor iria anotar semanalmente quantas linhas de código eles tinham produzido. Um desses desenvolvedores, Bill Atkinson, estava trabalhando na otimização de uma parte de código e acabou reescrevendo toda aquela seção de uma maneira mais genérica e que ainda por cima rodava seis vezes mais rápido. Como conseqüência, esse novo trecho acabou sendo bem mais conciso e acabou economizando 2000 linhas de código.<br />
Quando teve que preencher o relatório de quantas linhas de código tinham sido produzidas, Bill anotou -2000 linhas. Isso mesmo, ele anotou um número negativo, o que deve ter criado uma grande inconsistência nos resultados de acompanhamento do projeto. Algumas semanas depois os gerentes pararam de cobrar a quantidade de linhas de código dos desenvolvedores.<br />
Como desenvolvedor, acredito que qualquer tentativa de medir o progresso através de informações de baixo nível, como o código fonte, não mostra absolutamente nada de conclusivo. Mesmo existindo várias outras métricas mais aprimoradas que derivaram da loc mesmo assim são indicadores de quase nada. Mas o que fazer se, como disse <a href="http://en.wikipedia.org/wiki/William_Thomson" target="_blank">Lord Kelvin</a>, “o que não pode ser medido não existe”?</p>
	<p><img src='/images/animated_timer_bar.gif' alt='Progress Bar' style='position: relative; float: left; margin: 10px;'/><br />
Eu só vejo uma solução: se você quer medir o progresso do desenvolvimento de um sistema então precisa medir funcionalidades macro. Por exemplo, medir quantos casos de uso foram implementados ou quantas funcionalidades de alto nível estão prontas para serem usadas. Tentar medir em níveis mais baixos que isso pode até gerar planilhas recheadas de números, mas que irão dizer absolutamente nada.</p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/03/22/contando-as-linhas-de-codigo/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Você contrata um mágico sem pedir a ele para mostrar alguns truques?</title>
		<link>http://nebp.blogsome.com/2006/03/21/voce-contrata-um-magico-sem-pedir-a-ele-para-mostrar-alguns-truques/</link>
		<comments>http://nebp.blogsome.com/2006/03/21/voce-contrata-um-magico-sem-pedir-a-ele-para-mostrar-alguns-truques/#comments</comments>
		<pubDate>Tue, 21 Mar 2006 02:34:13 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Mundo Corporativo</category>
		<guid>http://nebp.blogsome.com/2006/03/21/voce-contrata-um-magico-sem-pedir-a-ele-para-mostrar-alguns-truques/</guid>
		<description><![CDATA[	Já faz um tempo eu assisti na tv uma entrevista com o Maurício de Souza, aquele dos gibis da m&ocirc;nica. O que mais me chamou a aten&ccedil;&atilde;o foi quando ele contou a maneira como ele contrata os seus desenhistas. 
	  Segundo o próprio Maurício, todos os desenhos dos gibis s&atilde;o feitos &agrave; m&atilde;o pela [...]]]></description>
			<content:encoded><![CDATA[	<p>Já faz um tempo eu assisti na tv uma entrevista com o <a href="http://pt.wikipedia.org/wiki/Maur%C3%ADcio_de_Souza" target="_blank">Maurício de Souza</a>, aquele dos <a href="http://www.monica.com.br" target="_blank">gibis da m&ocirc;nica</a>. O que mais me chamou a aten&ccedil;&atilde;o foi quando ele contou a maneira como ele contrata os seus desenhistas. <img border="0" src="http://nebp.blogsome.com/wp-admin/images/cebolinhapensador.gif" alt="cebolinha pensador" style="margin: 5px; position: relative; float: left;" /></p>
	<p>  Segundo o próprio Maurício, todos os desenhos dos gibis s&atilde;o feitos &agrave; m&atilde;o pela sua equipe, o que exige ter um time bastante entrosado, já que todos os personagens precisam ter um mesmo tra&ccedil;o uniforme.</p>
	<p>  Para contratar um novo desenhista o próprio Maurício passa para o candidato uma &quot;li&ccedil;&atilde;o de casa&quot;, alguns desenhos, e pede para que ele volte alguns meses depois com o material que ele tenha conseguido produzir.  Se o candidato volta meses depois e, além do que foi pedido, ele ainda fez outros desenhos, ent&atilde;o é passada mais uma li&ccedil;&atilde;o e, novamente, ele vai para casa treinar e desenhar para apresentar os resultados depois de outro tanto de tempo.</p>
	<p>  Esse processo se repete várias vezes e pode durar até um ano, mas garante ao estúdio do Maurício de Sousa conseguir encontrar aquele desenhista que realmente tem talento e vontade de fazer parte da equipe.</p>
	<p>  Para mim esse parece ser um processo bem razoável para encontrar bons desenvolvedores de software. N&atilde;o quero dizer que ele precise durar um ano inteiro, mas seria bom sempre analisar o código que cada candidato é capaz de produzir. E n&atilde;o estou falando apenas de alguns pequenos trechos de código ou algoritmos de faculdade. Estou falando de escrever um sistema completo. Só assim voc&ecirc; vai poder saber se o seu candidato consegue criar código de boa qualidade e que seja de fácil manuten&ccedil;&atilde;o e altera&ccedil;&atilde;o. Pedindo para o candidato ir modificando o seu sistema a cada nova entrevista e acompanhando quanto de bangun&ccedil;a ele coloca no próprio código é um bom indicador de como ele irá se comportar quando estiver mexendo nos sistemas da sua empresa.</p>
	<p>  Em um dos melhores artigos que <a href="http://www.joelonsoftware.com/" target="_blank">Joel Spolsky</a> escreveu sobre desenvolvimento de software está &quot;<a href="http://brazil.joelonsoftware.com/Articles/TheJoelTest.html" target="_blank">O Teste do Joel: 12 Passos para um Código Melhor</a>&quot;, onde um dos passos se refere a contrata&ccedil;&atilde;o dos desenvolvedores:  </p>
	<blockquote><p>Voc&ecirc; contrata um mágico sem pedir a ele para mostrar alguns truques? Claro que n&atilde;o.   </p>
	<p>     Voc&ecirc; contrata um buf&ecirc; para seu casamento sem provar sua comida? Eu duvido. (A menos que seja sua tia Maria e ela iria odiá-lo para sempre se voc&ecirc; n&atilde;o a deixasse fazer seu &quot;famoso&quot; bolo de fígado moído). </p>
	<p>     Apesar disso, todo dia, programadores s&atilde;o contratados com base num currículo bonito ou porque o entrevistador gostou de conversar com ele. Ou perguntam-se quest&otilde;es triviais (&quot;Qual a diferen&ccedil;a entre CreateDialog() e DialogBox()?&quot;), que poderiam ser respondidas com uma olhada na documenta&ccedil;&atilde;o. </p>
	<p>     Voc&ecirc; n&atilde;o deve se preocupar com as habilidades dos candidatos em memorizar milhares de trivialidades sobre programa&ccedil;&atilde;o, voc&ecirc; deve se preocupar com suas habilidades em produzir código.Ou, pior ainda, perguntam-se quest&otilde;es &quot;AHA!&quot;: o tipo de quest&otilde;es que parecem fáceis quando voc&ecirc; sabe a resposta, mas se voc&ecirc; n&atilde;o sabe, s&atilde;o impossíveis.  Por favor, pare de fazer isto. </p>
	<p>    Fa&ccedil;a o que quiser durante a entrevista, mas fa&ccedil;a o candidato escrever algum código.</blockquote>
      Eu realmente acredito que se pode conhecer um bom desenvolvedor pelo código que ele escreve. É mais fácil identificar um bom desenvolvedor pelo seu código do que pelo que ele diz em qualquer entrevista. </p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/03/21/voce-contrata-um-magico-sem-pedir-a-ele-para-mostrar-alguns-truques/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Comece pelo início&#8230;</title>
		<link>http://nebp.blogsome.com/2006/03/20/comece-pelo-inicio/</link>
		<comments>http://nebp.blogsome.com/2006/03/20/comece-pelo-inicio/#comments</comments>
		<pubDate>Mon, 20 Mar 2006 05:36:39 +0000</pubDate>
		<dc:creator>Beto</dc:creator>
		
	<category>Pessoal</category>
		<guid>http://nebp.blogsome.com/2006/03/20/comece-pelo-inicio/</guid>
		<description><![CDATA[	
Bom, finalmente vou começar esse blog&#8230; Acho que enrolei demais para fazer isso, afinal de contas já estava com vontade de ter um blog há uns 3 ou 4 meses. Só não saiu antes devido ao meu problema de procrastinação.
É, eu tenho que adimitir, eu sempre acabo adiando as coisas, mesmo aquelas que eu sei [...]]]></description>
			<content:encoded><![CDATA[	<p><img src='/images/SP.jpg' alt='' width='520' /><br />
Bom, finalmente vou começar esse blog&#8230; Acho que enrolei demais para fazer isso, afinal de contas já estava com vontade de ter um blog há uns 3 ou 4 meses. Só não saiu antes devido ao meu problema de procrastinação.<br />
É, eu tenho que adimitir, eu sempre acabo adiando as coisas, mesmo aquelas que eu sei eu preciso realmente fazer. Mas não vou falar sobre isso agora, senão eu mesmo me assusto. Afinal, ainda precisa ser feita muita coisa até esse blog ficar &#8220;habitável&#8221;.<br />
Mas  o primeiro passo está dado!
</p>
]]></content:encoded>
			<wfw:commentRss>http://nebp.blogsome.com/2006/03/20/comece-pelo-inicio/feed/</wfw:commentRss>
	</item>
	</channel>
</rss>
