<?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>WTF-Brasil &#187; dicas</title>
	<atom:link href="http://www.wtfbrasil.com/category/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wtfbrasil.com</link>
	<description>Perversões na área de tecnologia</description>
	<lastBuildDate>Mon, 13 Dec 2010 12:34:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Bons programadores são preguiçosos e burros</title>
		<link>http://www.wtfbrasil.com/wtf/bons-programadores-sao-preguicosos-e-burros/</link>
		<comments>http://www.wtfbrasil.com/wtf/bons-programadores-sao-preguicosos-e-burros/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 15:22:44 +0000</pubDate>
		<dc:creator>GraveHeart</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://www.wtfbrasil.com/?p=462</guid>
		<description><![CDATA[Escrito em 2005 por Philipp Lenssen, um texto mostrava a importância de bons programadores terem condutas que muitos poderiam considerar &#8216;defeitos&#8217;. Dias atrás, tive o prazer de reencontrar esse mesmo texto, e percebi que muita coisa continua atual. O que se segue é uma tradução / adaptação do texto original, com alguns comentários pessoais sobre [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.wtfbrasil.com%252Fwtf%252Fbons-programadores-sao-preguicosos-e-burros%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Bons%20programadores%20s%C3%A3o%20pregui%C3%A7osos%20e%20burros%22%20%7D);"></div>
<p><em>Escrito em 2005 por Philipp Lenssen, um texto mostrava a importância de bons programadores terem condutas que muitos poderiam considerar &#8216;defeitos&#8217;. Dias atrás, tive o prazer de reencontrar <a href="http://blogoscoped.com/archive/2005-08-24-n14.html">esse mesmo texto</a>, e percebi que muita coisa continua atual. O que se segue é uma tradução / adaptação do texto original, com alguns comentários pessoais sobre o assunto. Reflitam. WTF&#8217;s não vem apenas dos usuários, mas principalmente dos programadores&#8230;</em></p>
<p>Ao longo dos anos, percebi que, por mais paradoxal que isso possa parecer, bons programadores devem ser <em>preguiçosos </em>e <em>burros</em>.</p>
<p><strong>Preguiçosos</strong>, porque apenas programadores preguiçosos irão pensar em escrever o tipo de código que no fim fará o trabalho por eles. Preguiçosos, porque apenas um programador preguiçoso evitará a todo custo escrever trechos repetitivos e monótonos de código – o que evita a <em><strong>redundância</strong></em>, principal inimigo da manutenção no código-fonte. Principalmente, as ferramentas e processos criados por esse comportamento de pura preguiça irão aumentar a velocidade de desenvolvimento.</p>
<p>Isso tudo faz com que o programador preguiçoso um bom programador. Claro, isso é apenas uma parte da verdade: para um programador preguiçoso ser um bom programador, ele (ou ela) também deve ser extremamente &#8216;não-preguiçoso&#8217; quando se trata de aprender a como <strong>permanecer</strong> preguiçoso – ou seja, qual software faz sey trabalho mais simples, quais métodos evitam redundância, e como ele pode fazer com que a manutenção do seu código seja a mais simples possível.</p>
<p>Em segundo, (e vou elaborar um pouco mais a partir daqui, porque o conceito é bem menos claro que o primeiro) um bom programador deve ser <strong>burro</strong>. Por que? Oras, se ele for inteligente, e tiver a consciência de que ele é inteligente, o programador irá:</p>
<p>a) parar de aprender<br />
b) parar de ser crítico com relação ao seu próprio trabalho</p>
<p>O primeiro ponto fará com que seja complicado para ele encontrar novas técnicas para que trabalhar mais rápido. Basicamente, o programador que para de aprender não busca novas soluções, não busca novas alternativas e permanece preso às ferramentas e métodos que ele já conhece. O segundo ponto fará com que ele perca muito tempo <em>debugando </em>o próprio código. Na interminável luta entre um programador e o compilador, é melhor que o programador desista logo e admita que a culpa é sempre <strong>dele</strong>, e não do compilador, e vá tentar entender o quê ele está fazendo de errado. (<em><strong>nota:</strong> OK, há casos em que a culpa É do compilador. Mas são tão raros que dificilmente você vai encontrar várias situações assim no seu dia-a-dia</em>).</p>
<p>Mas há um ponto ainda mais importante sobre porque um programador deve ser burro. Para encontrar sempre a melhor solução para o problema, ele deve ser capaz de manter uma mentalidade fresca e aprender a &#8220;pensar fora da caixa&#8221;. Tem em mente que o problema nem sempre é o que parece, e a melhor solução nem sempre é o que você imagina, e saber pensar em soluções alternativas e fora do comum.</p>
<p>O contrário disso não seria muito construtivo: conhecer todos os parâmetros e funções, e aceitá-los. Quem garante que os limites que você conhece são <strong>reais</strong>? Quanto menos você souber, mais radicais serão suas soluções: assim, melhores serão as ferramentes que você criará, e melhores serão os produtos que você desenvolverá com <strong>essas</strong> ferramentas.</p>
<p><em><strong>Um bom programador sempre se perguntará &#8220;Por que?&#8221;, porque ele é burro (ou suspeita de um problema maior).</strong></em></p>
<p>Um bom programador, quando confrontado com um problema vindo dos usuários, vai adotar a mentalidade de <strong>ser burro</strong>: ele começará a fazer as perguntas mais simples e infantis possíveis. Isso é porque ele <strong>não aceita</strong> os parâmetros sugeridos pra ele do que alguém <strong><em>pensa</em></strong> que pode estar causando o problema. Por exemplo, veja uma conversa típica de desenvolvedores web frente a um problema:</p>
<blockquote><p><em>“Desde ontem, nosso cliente não consegue ver o logo no site.”<br />
“Ele reiniciou o navegador?”<br />
“Sim.”<br />
“Ele reiniciou o computador?”<br />
“Sim.”<br />
“Limpou o cache?”<br />
“Sim.”<br />
“Ele roda o Internet Explorer 6?”<br />
“Sim.”<br />
“Tem certeza de que ele não consegue ver o logo?”<br />
“Sim.”<br />
&#8220;Ele olhou para o site na tela?”<br />
“Como assim?”<br />
“Talvez ele tenha visto o site impresso em papel.”<br />
“Não, ele estava olhando para a tela.”<br />
“Ele não consegue ver outras imagens também, ou só o logo?”<br />
“Como? Bom, vou perguntar pra ele.”</em></p></blockquote>
<p>Para fins de argumentação, vamos dizer que o cliente na verdade tenha desligado a exibição de imagens no navegador. Ou o seu filho desligou. Ou um funcionário desligou. Em qualquer caso, a resposta não poderia ser encontrada da &#8220;<em>maneira inteligente</em>&#8220;. Nenhuma das questões levantadas pelo programador exigiam algum talento em programação. <em>Nenhuma</em>. Mas simplesmente pelo motivo ser tão estúpido, somente a estupidez pode lidar com isso.</p>
<p>Muitas vezes, a suposição de que alguma ação do programador gerou um problema não passa de uma suposição. Sempre que possível, ouça <strong>apenas os fatos</strong> antes de começar a debugar, e ignore o que as pessoas <em>pensam</em> que seja a razão do problema.</p>
<p>E isso se aplica a VOCÊ. Recentemente, tive um problema aparentemente simples: migrar um sistema de um domínio X para o subdomínio de um domínio Y. Coisa aparentemente simples, se o domínio Y não redirecionasse automaticamente para o domínio Z no <strong>Ning</strong>, e o subdomínio não estivesse fazendo a mesma coisa. Depois de várias horas batendo cabeça com o DNS e o CPanel, decidi deixar pra lá e fazer algumas atualizações no sistema em questão. Nos primeiros minutos, descubro que o redirecionamento era feito <strong>pelo sistema</strong>, em um trecho de código que <strong>eu </strong>havia colocado por questões de segurança. Removido o trecho, tudo funcionou como deveria desde o princípio. Por descuido, cansaço e vários outros motivos, havia perdido tempo e cabelo com um problema que não existia, na verdade&#8230;.</p>
<p>Pode parecer complicado, ou até mesmo burocrático, mas esse é um processo investigativo simples: quanto mais informações reais você possui, mais fácil é o processo de chegar ao que realmente está causando o problema. Aceitar que o usuário diga apenas &#8220;Há um problema no site, e acho que pode ter sido causado pela sua última atualização&#8221; só fará com que você perca horas, talvez dias, até perceber que na verdade o problema era mais simples do que parecia.</p>
<p>(<strong>Nota:</strong> sim, meus caros usuários, nós não tratamos vocês como idiotas ou ignoramos completamente o que você fala do problema por acharmos que somos melhores do que vocês. Nós fazemos perguntas E chegamos à conclusões baseado no que você nos diz que está acontecendo, não no que você acha que pode ser o problema. Na verdade, muitas vezes o que você <em>acha</em> só nos atrapalha. Bons programadores <strong>vão</strong> ignorar suas sugestões, pelo menos em um primeiro momento&#8230;)</p>
<p>Pensem nisso. Sejam burros e preguiçosos. E sejam bons programadores.</p>

]]></content:encoded>
			<wfw:commentRss>http://www.wtfbrasil.com/wtf/bons-programadores-sao-preguicosos-e-burros/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>1 X 0 pro Racíocinio Lógico&#8230;.</title>
		<link>http://www.wtfbrasil.com/wtf/1-x-0-pro-raciocinio-logico/</link>
		<comments>http://www.wtfbrasil.com/wtf/1-x-0-pro-raciocinio-logico/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 02:03:35 +0000</pubDate>
		<dc:creator>GraveHeart</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[sistema]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Suporte]]></category>
		<category><![CDATA[usuário]]></category>
		<category><![CDATA[Usuários]]></category>

		<guid isPermaLink="false">http://www.wtfbrasil.com/wtf/1-x-0-pro-raciocinio-logico/</guid>
		<description><![CDATA[Semanas atrás, meu superior me ligou, perguntando se eu estava sabendo de um problema que estava rolando no sistema, com relação a títulos enviados para o banco. Respondi que não, e imediatamente fui &#8216;escalado&#8217; para resolver um problema que já durava há mais de dois meses: alguns títulos não eram reconhecidos pelo banco. E eu [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.wtfbrasil.com%252Fwtf%252F1-x-0-pro-raciocinio-logico%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%221%20X%200%20pro%20Rac%C3%ADocinio%20L%C3%B3gico....%22%20%7D);"></div>
<p>Semanas atrás, meu superior me ligou, perguntando se eu estava sabendo de um problema que estava rolando no sistema, com relação a títulos enviados para o banco. Respondi que não, e imediatamente fui &#8216;escalado&#8217; para resolver um problema que já durava há mais de dois meses: alguns títulos não eram reconhecidos pelo banco. E eu tinha que descobrir a causa do problema em menos de um dia, pois alguns desses títulos já estavam para vencer.</p>
<p>Explicando: nosso sistema (assim como qualquer outro, imagino), logo após emitir nota fiscal dos produtos vendidos, também permite a emissão de boletos para que o cliente efetue o pagamento. Esses boletos possuem uma identificação, e para facilitar todo o processo de pagamento e reconhecimento pelo banco, o mesmo exige que seja enviado diariamente um arquivo com informações dos boletos (ou títulos, como preferir), utilizando um software próprio (cada banco usa um sistema diferente). Esse arquivo é gerado pelo sistema, contendo todas as informações referentes aos boletos emitidos. Mas, de uma hora pra outra, alguns títulos enviados acabavam sendo rejeitados pelo banco, o que trazia uma série de problemas, até mesmo na hora de identificar se o cliente realmente havia pago o boleto.</p>
<p>E o problema se alastrava há dois meses. E eu tinha um dia pra descascar esse abacaxi.</p>
<p>Normalmente, é aqui que os funcionários de TI ficam loucos e começam a correr atrás de soluções bizarras ou explicações malucas para tentar explicar o <em>bug</em>. Mas, acostumado a sofrer com problemas malucos e prazos apertados, me acostumei a utilizar um sistema conhecido como <em>análise da causa raiz, </em>muito utilizado em empresas que possuam certificação ISO. Com a análise da causa raiz, o que é necessário é entender o erro, listar algumas possíveis causas para o mesmo, e testar essas causas, até que uma se mostre a &#8216;verdadeira&#8217;.</p>
<p>No caso, após conversar com os usuários que estavam tratando do problema (e em nenhum momento tiveram a idéia de usar um pouco de raciocínio ou ao menos vieram falar comigo, vejam bem), pude perceber que tudo o que tinha de concreto era uma série de emails enviados tanto para o suporte do sistema quanto para o banco, a maioria com ameaças, e retornos dos mesmos, a maioria com comentários como &#8220;<em>está tudo OK aqui, favor verificar com o sistema / banco, o problema é lá</em>&#8220;. Ou seja, nada de muito útil. Era hora de tentar entender o problema. Com isso, cheguei às conclusões:</p>
<ul>
<li><strong>Apenas alguns títulos davam problema, não todos;</strong></li>
<li><strong>Os títulos rejeitados eram sempre dos mesmos clientes;</strong></li>
<li><strong>O mesmo cliente não tinha títulos aceitos e outros rejeitados;</strong></li>
<li><strong>Não havia qualquer relação entre os clientes, ou seja, detalhes que pudessem fazer pensar que o problema estava no tipo de cadastro deles;</strong></li>
<li><strong>Tentar re-enviar o arquivo não resolvia; </strong>(usuário pensa que se não deu certo na primeira, tenta de novo, e assim vai, até funcionar);</li>
</ul>
<p>Com isso, já dava para entender alguma coisa, e formular que a causa raiz poderia estar em três pontos:</p>
<ul>
<li><strong>No momento da geração do título, alguma informação para esses clientes estava sendo gerada de forma errada ou incompleta </strong>(falha no sistema);</li>
<li><strong>No momento do recebimento do arquivo, o mesmo não estava reconhecendo alguma informação, e dando o título como rejeitado </strong>(falha no banco);</li>
<li><strong>Usuário errou em algum ponto </strong>(falha ao nascer);</li>
<li><strong>Algum outro problema, ainda desconhecido;</strong></li>
</ul>
<p>Com minha experiência, havia uma certeza de que o problema estava na 3ª alternativa, mas por obrigações contratuais eu era obrigado a provar minha teoria. Perguntei à responsável pelo Financeiro se havia como saber através do contato no banco qual havia sido o motivo da rejeição (percebam que, em dois meses, ninguém havia pensado nisso). Enquanto a mesma procurava obter essa informação, parti para outra linha de frente: investigar algum problema visível no arquivo enviado para o banco. O arquivo na verdade era até bem simples: um arquivo de texto puro, várias linhas, cada linha correspondia a um título, e as informações tinha &#8216;colunas&#8217; certas para estarem dispostas. Mais ou menos assim:</p>
<p><em>nomedocliente    CNPJInscriçãoEstadual           Valoretc.</em></p>
<p>Claro, era bem mais complicado do que isso, e em uma primeira olhada, o arquivo não trazia nenhum erro visível. Como eu não tinha uma tabela mostrando o que cada &#8216;coluna&#8217; do arquivo significava, era difícil chegar à alguma conclusão. Mas eu já sabia que, se fosse algo na geração do arquivo, seria alguma informação de cadastro. Nesse meio tempo, a resposta do banco chegou: todos os títulos rejeitados traziam o mesmo erro: &#8216;CEP incorreto&#8221;. E a responsável pelo Faturamento (que deixei sem qualquer atividade nesse período, ela seria mais útil assim) começou a armar a maior confusão, dizendo que havia revisado todos os cadastros, que ela nunca iria deixar um cadastro com o endereço incorreto, e etc. Mas era o que o banco havia informado, valia uma investigação. Nesse momento, nenhuma das possíveis causas apontadas era a &#8216;preferida&#8217;, mas já sabíamos que:</p>
<ul>
<li><strong>O banco, por alguma razão, rejeitava alguns títulos de clientes específicos, alegando que o CEP estava incorreto</strong></li>
</ul>
<p>E qual a melhor forma de descobrir se isso era causado pelo sistema? Comparando um título que havia sido enviado corretamente, com outro que tivesse sido rejeitado. Abrindo o cadastro de um cliente que estava OK, copiei o CEP, fiz uma busca no arquivo de texto, e encontrei em qual coluna estava a informação. Procurando na linha referente ao título rejeitado, tinhamos &#8217;00000000&#8242;. Zero.</p>
<p>Nova explosão da responsável pelo Faturamento. Frases como &#8220;Eu não estou louca! Eu não estou louca! Esse sistema está trazendo informação errada! O cadastro está correto!&#8221; preenchiam a minha sala. E, realmente, o cadastro do cliente estava correto. O cadastro principal dele.</p>
<p>Explico novamente: é muito comum existirem clientes cuja empresa reside em um endereço, mas a entrega do produto ou dos títulos a pagar é em um ou mais endereços diferentes. E o nosso sistema trata isso possibilitando a criação de endereços alternativos, tanto de <strong>Entrega</strong> quanto de <strong>Cobrança</strong>. Caso alguma dessas informações esteja cadastrada, o sistema pergunta qual o endereço de entrega, ou qual o endereço para o qual deve ser feita a cobrança. E essas informações aparecem na Nota Fiscal E no Boleto gerado. Agora, advinhem QUAL desses endereços estava SEM o CEP&#8230;&#8230;</p>
<p>Exato. Por algum motivo, a responsável pelo faturamento havia pensado que, se já havia sido cadastrado todas as informações de um endereço, todos os outros endereços poderiam ser cadastrados com o mínimo de detalhes, já que tudo seria &#8216;puxado&#8217; do endereço principal (mesmo que o endereço fosse diferente).</p>
<p>Estava resolvido, em menos de três horas (sendo que dessas, uma hora foi o tempo que o banco levou para responder sobre o erro nos títulos), chegamos à verdadeira causa raiz:</p>
<ul>
<li><strong>O usuário não havia cadastrado o CEP no endereço de cobrança, fazendo com que o título fosse gerado sem essa informação, causando assim, erro no banco.</strong></li>
</ul>
<p>E, lembrando, isso já vinha ocorrendo há dois meses&#8230;.</p>
<h6>(esse post faz parte da &#8220;<a href="http://www.interney.net/?p=9761731">blogagem inédita</a>&#8220;)</h6>

]]></content:encoded>
			<wfw:commentRss>http://www.wtfbrasil.com/wtf/1-x-0-pro-raciocinio-logico/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

