<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Alinhavado</title>
	<atom:link href="http://alinhavado.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://alinhavado.wordpress.com</link>
	<description>O mundo tá torto, hora de consertar ele</description>
	<lastBuildDate>Fri, 07 Nov 2008 02:25:59 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='alinhavado.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/b8aa96d1e95d2b9df9389549a9f66b8a?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Alinhavado</title>
		<link>http://alinhavado.wordpress.com</link>
	</image>
			<item>
		<title>Porque é importante saber como o protocolo HTTP funciona</title>
		<link>http://alinhavado.wordpress.com/2008/11/07/porque-e-importante-saber-como-o-protocolo-http-funciona/</link>
		<comments>http://alinhavado.wordpress.com/2008/11/07/porque-e-importante-saber-como-o-protocolo-http-funciona/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 02:24:17 +0000</pubDate>
		<dc:creator>Maurício Linhares</dc:creator>
				<category><![CDATA[diversos]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[http]]></category>

		<guid isPermaLink="false">http://alinhavado.wordpress.com/?p=15</guid>
		<description><![CDATA[É interessante perceber que há tantas pessoas trabalhando escrevendo aplicações web que não entendem o básico sobre a internet e o protocolo HTTP. Você pode encontrar aplicações que demonstram comportamentos bizarros em qualquer lugar, as pessoas simplesmente esquecem de ler as especificações ou dormiram durante as aulas sobre o protocolo HTTP na universidade.
Um dos casos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=15&subd=alinhavado&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>É interessante perceber que há tantas pessoas trabalhando escrevendo aplicações web que não entendem o básico sobre a internet e o protocolo HTTP. Você pode encontrar aplicações que demonstram comportamentos bizarros em qualquer lugar, as pessoas simplesmente esquecem de ler as especificações ou dormiram durante as aulas sobre o protocolo HTTP na universidade.</p>
<p>Um dos casos mais infelizes dessa falta de conhecimento é a “febre do POST”. Todos so formulários na aplicação usam o método POST para se comunicar com o servidor, não importa o que ele está fazendo ou se existem ou não “efeitos colaterais” envolvidos no caso. Simplesmente funciona dessa forma e as pessoas aparentemente não tem nenhum motivo pra não fazer dessa forma. Se você pergunta a alguém, eles vão provavelmente soltar a pérola, “ah, me disseram que o GET tem o limite no tamanho dos parâmetros que você pode mandar, então é melhor prevenir do que remediar”.</p>
<p>Mas o que é que há de tão mal nisso?</p>
<p>Se você der uma olhada no <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1">RFC do HTTP</a>, vai descrobrir que o método GET é descrito como “seguro” (&#8217;safe&#8217;). Seguro, no contexto do HTTP, significa que você deveria ser capaz de fazer vários GETs para uma aplicação web e isso não deveria causar efeitos colaterais, como apagar um cliente ou coisas do gênero, ele não deve causar alterações no recurso que está sendo requisitado, porque toda a idéia do método GET é de que você deveria simplesmente receber uma cópia (bem no estilo copiar-colar) do recurso que está naquela URL específica. Você não está fazendo nada de especial com o recurso, você deveria ser capaz de recebê-lo em qualqure lugar e a qualquer momento que desejasse.</p>
<p>Mas se você olhar a descrição do método POST vai descobrir que ele é um método “inseguro” (&#8216;unsafe&#8217;). Se você manda um POST pra uma URL, você pode estar definitivamente alterando alguma coisa no servidor e causando efeitos colaterais malignos, como libertar a Skynet e os Exterminadores que vão trazer o armagedom para a Terra. Ou você pode simplesmente estar criando um novo recurso naquela aplicação, como esse post de blog que você está lendo.</p>
<p>A diferença óbvia é que POSTs podem (e normalmente devem) alterar o estado de alguma coisa do lado do servidor, enquanto um GET nunca deveria ser capaz de fazer uma coisa dessas. Comparando com bancos de dados que usam SQL, GETs seriam como “selects” e POSTs como “inserts”. Você já viu um “insert” que retornava uma tabela de resultados ou um “select” que inseria dados no banco? Nem eu <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mas é claro que tudo ainda pode ficar pior. Imagine que você é o dono daquele site maligno que usa apenas POSTs em todos os seus formulários e um desses é um formulário de pesquisa. Usuários vão usá-lo para buscar produtos e adicioná-los as seus carrinhos de compra. Um usuário está interessado em comprar o novo disco do AC/DC, mas ele não tem certeza do nome, então ele simplesmente digita AC/DC e aperta “enter” no teclado.</p>
<p>Voila! </p>
<p>Lá, no topo da página, está “Black Ice”, o novo album deles (Já comprou o seu? Deveria!). Ele clica no link e enquanto ele está vendo a página, se lembra que não comprou o album antes desse, “Stiff Upper Lip”. “Vou apertar no botão voltar e procurar por ele na lista de discos do AC/DC”, pensa o incauto usuário e quando ele clica no botão, o navegador mostra uma mensagem interessante:</p>
<blockquote><p>“O navegador precisa enviar dados para o servidor para executar esta ação. Você tem certeza que deseja fazer isso?”</p></blockquote>
<p>O usuário olha aterrorizado para a mensagem. “O que foi que eu fiz? Será que eles vão me cobrar por isso? Vão me mandar o novo disco da Britney Spears porque eu estou tentando apertar no botão de voltar?”.</p>
<p>Como protocolo HTTP define, POSTs não são métodos “seguros” e as ferramentas (normalmente os navegadores) devem avisar o usuário de que alguma coisa ruim pode acontecer se eles tentarem dar um POST por acidente em uma página e é exatamente isso que acontece se você tenta clicar no botão voltar após um POST. Nesse exemplo, o usuário não estaria fazendo nada de errado, mas imagine se em vez de estar voltando pra uma página de busca, ele poderia estar voltando para o formulário de “adicionar cliente” e um “voltar” poderia muito bem fazer com que ele re-criasse o cliente no banco de dados, o que não é exatamente a idéia.</p>
<p>Pior, se você está usando POST em um formulário de busca, os usuários nunca vão poder usar o botão voltar (os mestres da usabilidade dizem que ele é a coisa mais usada nos navegadores) e eles também não vão poder colocar aquela página de resultado nos seus favoritos! Você consegue imaginar algo pior do que isso? Você está evitando que as pessoas possam expressar todo o seu amor pelo seu site postando links pra eles no del.icio.us!</p>
<p>A idéia é bem simples, se você não está alterando nada no servidor, você deveria sempre usar GETs, seja lá o que for. Eles não quebram o botão voltar ou atualizar, deixam os usuários colocar as páginas requisitadas nos favoritos e não vão fazer com que os navegadores mostrem mensagens assustadoras para os usuários. Se você estiver alterando o estado de alguma coisa no servidor, você deve usar POST (e os outros métodos do HTTP que são definidos como “inseguros”, como PUT e DELETE), requisições que usam GET NUNCA deveriam alterar coisas no servidor (sabe aquele link que você fez que apaga um registro no banco de dados? Foi uma péssima idéia!).</p>
<p>E antes que eu me esqueça, depois de um POST com sucesso você deve sempre REDIRECIONAR o usuário para a página de sucesso, nunca, por motivo nenhum do universo, mostre a página de sucesso como resultado do POST. Ao redirecionar o usuário após um POST com sucesso você evita que ele reenvie os dados usando um “atualizar” ou clicando no botão voltar do navegador.</p>
<p><strong>PS</strong>: Tradução de <a href="http://blog.codevader.com/2008/11/02/why-learning-http-does-matter/">&#8220;Why learning HTTP does matter&#8221;</a>, prometo que eu vou traduzir mais posts de lá, é só ter tempo o suficiente, de qualquer forma, se você sabe inglês, pode ler lá antes <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alinhavado.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alinhavado.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alinhavado.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alinhavado.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alinhavado.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alinhavado.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alinhavado.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alinhavado.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alinhavado.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alinhavado.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=15&subd=alinhavado&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alinhavado.wordpress.com/2008/11/07/porque-e-importante-saber-como-o-protocolo-http-funciona/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1426a9fd5267e73d9e30ebaac1bde144?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Maurício Linhares</media:title>
		</media:content>
	</item>
		<item>
		<title>Como tratar os seus testes?</title>
		<link>http://alinhavado.wordpress.com/2008/01/27/como-tratar-os-seus-testes/</link>
		<comments>http://alinhavado.wordpress.com/2008/01/27/como-tratar-os-seus-testes/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 04:54:45 +0000</pubDate>
		<dc:creator>Maurício Linhares</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[qualidade]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://alinhavado.wordpress.com/?p=9</guid>
		<description><![CDATA[Já percebeu o quanto se fala em qualidade e testes de software nos últimos tempos? Testar software hoje não é mais apenas sentar o seu usuário (vulgo “cliente”) na frente de uma tela rodando o seu sistema pra que ele possa validar se as funcionalidades estão implementadas a contento. A algum o uso de testes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=9&subd=alinhavado&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Já percebeu o quanto se fala em qualidade e testes de software nos últimos tempos? Testar software hoje não é mais apenas sentar o seu usuário (vulgo “cliente”) na frente de uma tela rodando o seu sistema pra que ele possa validar se as funcionalidades estão implementadas a contento. A algum o uso de testes unitários, de integração e funcionais se tornaram um fato corriqueiro para equipes que trabalham com software e prezam pela mínima qualidade (<a href="http://imasters.uol.com.br/artigo/6061/gerencia/qualidade_e_de_graca">até porque qualidade não é apenas falta de bugs</a>) e facilidade de se fazer alterações sem quebrar o sistema todo.</p>
<p>No caminhar da escrita de testes, os desenvolvedores aprenderam muitas coisas, sendo uma delas que o teste que você escreve já é o primeiro cliente do seu código. Quando você está escrevendo um teste pra um método ou função do seu programa, você está escrevendo também o primeiro código que vai fazer o uso dessa funcionalidade e vai poder perceber se é fácil ou difícil fazer uso desse método, se existem muitas dependências e se é necessário carregar estado demais para fazer com que o resultado final aconteça. </p>
<p>Você poderia, inclusive, escrever o teste antes do código que vai ser testado para guiar a sua implementação através do teste, assim você já escreve a sua funcionalidade partindo de um cliente real, que é o próprio teste, e não da sua imaginação, que acha que uma coisa deve ser de um jeito ou de outro. Com desenvolvimento orientado a testes você consegue caminhar mais rápido e escrever código que vai realmente ser utilizado, não apenas o que você “acha” que deveria escrever porque alguém pode vir algum dia a utilizar.</p>
<p>Com esse primeiro “cliente” do seu código você já pode perceber falhas na sua abstração e até mesmo na forma que você pensava que a funcionalidade deveria ser implementada. Você consegue descobrir falhas no seu design, no modo que você pensou que a funcionalidade deveria ser implementada e essa é uma característica que vai levar os nossos testes a um novo patamar, onde eles não vão mais ser testes.</p>
<p><strong>Ora, mas se os meus testes não são testes, eles são o que?</strong></p>
<p>Quando nós pensamos em um “teste”, o que vem a mente é alguma coisa que você faz a um objeto pra descobrir se ele “funciona” ou não. Normalmente você faz testes em um objeto que já está ou acredita-se que esteja “pronto”, você normalmente não testa objetos incompletos ou que já sejam conhecidamente falhos, porque você sabe que eles vão falhar de uma forma ou outra. E, principalmente, você não testa para melhorar, apenas para verificar.</p>
<p>No mundo do software você não precisa ter acesso ao que vai ser testado antes de escrever o teste, você pode já escrever o código do teste antes mesmo de ter a funcionalidade implementada, no seu teste você especificaria o que você espera passar como entrada e o que você espera receber na saída. O seu teste, neste momento, deixa de ser apenas um teste e se transforma em uma especificação, ele descreve como alguma coisa no sistema deve se comportar através de um conjunto finito de entradas e saídas (porque você não tem tempo infinito pra testar).</p>
<p>Ao deixar de encarar os testes como simples validadores de que o seu código funciona e assumir que eles definem as características do programa, você dá um passo além não apenas na questão de garantir a qualidade como também na própria documentação do sistema e gerência do projeto. Se você tem diversas “estórias” (ou “casos de uso”) pra serem implementados no sistema, eles se transformariam em diversas especificações do que o sistema faz e você teria, a cada especificação que passasse, a indicação de que alguma coisa está sendo produzida, você ganha de brinde, além das vantagens de ter software testado, um medidor de funcionalidades embutido.</p>
<p>A questão de deixar de tratar testes apenas como validadores do código chegou ao ponto de que até mesmo as ferramentas de testes unitários estão começando a ser suplantadas por ferramentas de desenvolvimento direcionado a comportamentos (ou Behaviour Driven Development – BDD). </p>
<p>É possível encontrar <a href="http://en.wikipedia.org/wiki/Behavior_driven_development">uma pequena definição sobre BDD na Wikipedia</a>:</p>
<p>“Behavior Driven Development (or BDD) is a software development technique that questions the behavior of an application before and during the development process. Created in response to the failings the founders perceived in Test Driven Development, Behavior Driven Development addresses requirements and specification in a way that is more textual than its predecessor. By asking questions such as &#8220;What should this application do?&#8221; or &#8220;What should this part do?&#8221; developers can identify gaps in their understanding of the problem domain and talk to their peers or domain experts to find the answers. By focusing on the behavior of applications, developers try to create a common language that&#8217;s shared by all stakeholders: management, users, developers, project management and domain experts.”</p>
<p>A idéia é, além de tornar os testes, que agora são especificações, a documentação natural e a fonte de informações sobre o que o sistema faz e como faz. Cada especificação diz que “o sistema deveria fazer X” e se a especificação passa, é porque o sistema realmente faz “X”. Isso facilita a comunicação dentro da equipe, pois agora eles não se perguntam se o teste “Z” passou, mas se a funcionalidade “Z” foi implementada e também vai facilitar ainda mais para os especialistas de domínio que podem simplesmente chegar pra equipe e explicar o que o sistema deve fazer e as especificações garantindo que ele faz vão ser escritas.</p>
<p>Deixar de pensar em testes como validadores e passar a vê-los como definições facilita a comunicação entre todos os envolvidos no projeto, pois agora eles tendem a falar uma mesma língua (a “linguagem ubíqua” tanto pregada pelos defensores do <a href="http://domaindrivendesign.org/">Domain Driven Design</a>), já que as funcionalidades do sistema vão ser expressas através de especificações definidas pelo especialista do domínio e a equipe de desenvolvimento.</p>
<p>Vejamos um simples exemplo de especificação utilizando o framework <a href="http://rspec.info/">RSpec</a>, que é uma ferramenta de BDD para Ruby:</p>
<pre class="brush: ruby;">
it 'Should not allow a not logged in user send an upload' do
    post :prepare
    response.should redirect_to( :action =&gt; 'login' )
end
</pre>
<p>A nossa especificação diz que “Usuários não logados não devem poder fazer um upload”, então o código dela deve comprovar que é isso que acontece e é exatamente isso que ele faz, ele primeiro faz uma requisição usando o método HTTP “POST” (na primeira linha da especificação) e depois garante que a resposta seja um “redirect” para a “ação” login. Mesmo que você não entenda Ruby ou RSpec, é fácil entender o que esse código quer dizer, as afirmações são claras e é essa facilidade de entendimento que faz com que BDD seja realmente uma ótima maneira de se expressar as funcionalidades que um software deve ter.</p>
<p>Então, se você continua vendo testes apenas como um modo de validar o seu sistema, está na hora de começar a mudar o pensamento e aproveitar melhor esses testes tranformando-os nas especificações de o que o seu sistema faz. Você iria escrever os testes de qualquer maneira, não vai custar nem um pouco a mais, vai?</p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://dannorth.net/introducing-bdd">Introducing BDD &#8211; Dan North</a></li>
<li><a href="http://www.infoq.com/interviews/Dave-Astels-and-Steven-Baker">Dave Astels and Steven Baker on RSpec and Behavior-Driven Development</a></li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alinhavado.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alinhavado.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alinhavado.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alinhavado.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alinhavado.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alinhavado.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alinhavado.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alinhavado.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alinhavado.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alinhavado.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alinhavado.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alinhavado.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=9&subd=alinhavado&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alinhavado.wordpress.com/2008/01/27/como-tratar-os-seus-testes/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1426a9fd5267e73d9e30ebaac1bde144?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Maurício Linhares</media:title>
		</media:content>
	</item>
		<item>
		<title>De many-to-many para many-to-one com JPA</title>
		<link>http://alinhavado.wordpress.com/2008/01/02/de-many-to-many-para-many-to-one-com-jpa/</link>
		<comments>http://alinhavado.wordpress.com/2008/01/02/de-many-to-many-para-many-to-one-com-jpa/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 03:52:11 +0000</pubDate>
		<dc:creator>Maurício Linhares</dc:creator>
				<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[exemplos]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[tutoriais]]></category>

		<guid isPermaLink="false">http://alinhavado.wordpress.com/2008/01/02/de-many-to-many-para-many-to-one-com-jpa/</guid>
		<description><![CDATA[Relacionamentos &#8220;many-to-many&#8221; são um fato comum na modelagem de bancos de dados relacionais. Quando trabalhamos com eles, invariavelmente surge a necessidade de se adicionar uma propriedade ao relacionamento e quando isso acontece nós costumamos ir pelo caminho mais simples de apenas colocar mais uma coluna na tabela, isso complica o modo que se trata o [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=5&subd=alinhavado&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Relacionamentos &#8220;many-to-many&#8221; são um fato comum na modelagem de bancos de dados relacionais. Quando trabalhamos com eles, invariavelmente surge a necessidade de se adicionar uma propriedade ao relacionamento e quando isso acontece nós costumamos ir pelo caminho mais simples de apenas colocar mais uma coluna na tabela, isso complica o modo que se trata o relacionamento e mesmo parecendo simples, vai trazer problemas pois aonde você vai colocar essa propriedade para que ela esteja visível? Relacionamentos não tem informações complementares.</p>
<p>Nesse tutorial você vai ver como transformar um relacionamento N:N em um N:1 de forma que a tabela de relacionamento vire uma nova entidade com suas próprias propriedades utilizando JPA: <a href="/tutoriais/de-many-to-many-para-many-to-one-com-jpa/">De many-to-many para many-to-one com JPA</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alinhavado.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alinhavado.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alinhavado.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alinhavado.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alinhavado.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alinhavado.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alinhavado.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alinhavado.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alinhavado.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alinhavado.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alinhavado.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alinhavado.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=5&subd=alinhavado&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alinhavado.wordpress.com/2008/01/02/de-many-to-many-para-many-to-one-com-jpa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1426a9fd5267e73d9e30ebaac1bde144?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Maurício Linhares</media:title>
		</media:content>
	</item>
		<item>
		<title>Quem quer ser gerente?</title>
		<link>http://alinhavado.wordpress.com/2007/12/20/quem-quer-ser-gerente/</link>
		<comments>http://alinhavado.wordpress.com/2007/12/20/quem-quer-ser-gerente/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 01:58:45 +0000</pubDate>
		<dc:creator>Maurício Linhares</dc:creator>
				<category><![CDATA[diversos]]></category>
		<category><![CDATA[agil]]></category>
		<category><![CDATA[carreira]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[gerencia]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Em uma empresa comum, havia um programador comum.
O programador comum não era tão comum como todos pensavam, ele fazia muito bem o seu trabalho, o código que ele escrevia funcionava corretamente, os problemas eram poucos e os clientes, satisfeitos. Tanto sucesso começou a chamar a atenção dos superiores do programador. Ele começou a subir na [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=1&subd=alinhavado&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>Em uma empresa comum, havia um programador comum.</p>
<p>O programador comum não era tão comum como todos pensavam, ele fazia muito bem o seu trabalho, o código que ele escrevia funcionava corretamente, os problemas eram poucos e os clientes, satisfeitos. Tanto sucesso começou a chamar a atenção dos superiores do programador. Ele começou a subir na empresa, recebendo mais e também podendo tomar decisões mais importantes, ele começava a sentir-se parte de tudo aquilo que o cercava.</p>
<p>Enfim, ele galgou o último degrau que um programador chegaria, havia se tornado &#8216;arquiteto&#8217; dos sistemas que desenvolvia. Ele continuava fazendo muito bem o seu trabalho, e os seus superiores mais uma vez acharam por bem dar-lhe mais uma promoção, ele agora seria um gerente de projetos. Até então, ele não sabia o que o cargo significava, ninguém havia lhe dito o que ou como as coisas seriam feitas, mas ele aceitou de bom grado, afinal, era uma promoção.</p>
<p>Em poucas semanas, ele percebeu o problema que havia recebido de presente, não podia mais escrever código, seu trabalho agora era lidar com pessoas, interesses, prazos e custos. Ele havia passado anos na universidade, estudado por livros e cursos de extensão para aprender a programar, mas a única coisa que ele recebeu sobre gerenciar foi um pequeno livro, &#8220;os 10 ideais do gerente perfeito&#8221;, tão gasto que até a capa havia se perdido. Em pouco tempo, a infelicidade e os problemas já haviam extinguido  suas forças, os projetos não mais andavam, os resultados eram pífios e seus superiores não paravam de pressionar.</p>
<p>Nesse momento, o simples programador perguntou a si mesmo, &#8220;quem disse que eu queria ser gerente?&#8221;.</em></p>
<p>Por mais que pareça um tanto quanto exagerada, a novelização da breve carreira de um programador até as posições de gestão normalmente segue esse caminho, especialmente no Brasil, onde praticamente não existem carreiras diferenciadas para quem faz e quem gerencia o que tem que ser feito. Em grandes empresas por todo mundo existem caminhos diferentes de crescimento, onde um funcinário pode optar por sair da carreira puramente técnica e passar para o lado da gestão de pessoas e projetos, ou ele pode simplesmente continuar evoluindo no caminho técnico e ter os mesmos vencimentos que teria um gerente na sua posição.</p>
<p>A carreira de gerência não é mais nem menos glamurosa do que a do técnico (ou engenheiro, como alguns preferem chamar) e chega a ser esquisito que se entenda que o gerente, especialmente em um lugar onde se faz trabalho intelectual, como desenvolvimento de software, seja visto como alguém que está acima hierarquicamente de toda a equipe. O Google tem engenheiros incríveis como <a href="http://crazybob.org/">&#8220;Crazy&#8221; Bob Lee</a> e esses engenheiros valem tanto quanto os gerentes que fazem com que os engenheiros tenham condições de trabalhar. Ao contrário do que a lenda diz, o trabalho do bom gerente não é simplesmente ficar com o açoite na mão pra ter certeza de que todo mundo está trabalhando, mas garantir que todos tem condições de fazer o seu trabalho corretamente. Já pensou o que seria do Google sem os seus engenheiros geniais trabalhando em coisas como o GMail?</p>
<p>Mas os técnicos são tudo? Claro que não. Se não fosse um gerente com visão, o próprio GMail seria um projeto engavetado pelo pessoal do Google. Mas são trabalhos diferentes que existem pessoas e perfis diferentes. Um bom técnico não necessariamente vai dar um bom gerente e vice-versa. E ninguém nunca vai ser um bom gerente se nunca tiver sido treinado pra isso. Na maior parte das empresas, as pessoas simplesmente recebem a notícia de que agora vão &#8220;gereciar projetos&#8221;, em momento algum se fala em como se gerencia projetos, além daquela &#8220;repassada básica&#8221; do que precisa ser feito ou dos artefatos que precisam ser gerados e isso é um dos maiores motivos das falhas em posições de gerência, não ter conhecimento o suficiente para assumir o cargo.</p>
<p>Outro grande impedimento é que ninguém sabe tudo e ninguém precisa ser bom gerenciando, bons técnicos que não tem aptidão para gerência deveriam continuar como técnicos mas mesmo assim poder subir na carreira e ter posições equivalentes aos seus companheiros que tomaram o caminho da gerência, pois sem os ténicos, quem é que os gerentes vão gerenciar? Ambos os papéis são necessários, um não pode ser tomado em detrimento do outro. Precisamos entender que pessoas diferentes tem motivações e interesses diferentes, forçar alguém a assimir uma posição ou responsabilidades que não o interessam só torna o problema ainda maior para os dois lados.</p>
<p>Então, antes de simplesmente pegar o seu engenheiro predileto e colocar ele em uma posição de gestão, faça a pergunta mágica a ele, &#8220;você quer ser gerente?&#8221;.</p>
<p><strong>Referências:</strong></p>
<p><a href="http://www.dorsethouse.com/books/pw.html">Peopleware: Productive Projects and Teams</a><br />
<a href="http://www.pragprog.com/titles/rdbcd">Behind Closed Doors: Secrets of Great Management</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alinhavado.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alinhavado.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alinhavado.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alinhavado.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alinhavado.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alinhavado.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alinhavado.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alinhavado.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alinhavado.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alinhavado.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alinhavado.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alinhavado.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alinhavado.wordpress.com&blog=2359360&post=1&subd=alinhavado&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alinhavado.wordpress.com/2007/12/20/quem-quer-ser-gerente/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1426a9fd5267e73d9e30ebaac1bde144?s=96&#38;d=monsterid&#38;r=G" medium="image">
			<media:title type="html">Maurício Linhares</media:title>
		</media:content>
	</item>
	</channel>
</rss>