<?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>Hespanha &#187; programação</title>
	<atom:link href="http://www.hespanha.com.br/blog/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hespanha.com.br/blog</link>
	<description>Apenas um programador que ama o que faz e servo do Senhor Jesus</description>
	<lastBuildDate>Wed, 21 Sep 2011 22:47:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Os três principais problemas da Concorrência</title>
		<link>http://www.hespanha.com.br/blog/2011/09/os-tres-principais-problemas-da-concorrencia/</link>
		<comments>http://www.hespanha.com.br/blog/2011/09/os-tres-principais-problemas-da-concorrencia/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 22:46:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=123</guid>
		<description><![CDATA[Ultimamente se tornou inevitável desenvolver programas que funcionam de maneira concorrente, já que os processadores com multiplos cores já estão em todo lugar, até mesmo nos celulares. E ao mesmo tempo que é extremamente prazeroso ver o seu software muito mais rápido graças a concorrência, também se pode perder muitas noites de sono com os [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente se tornou inevitável desenvolver programas que funcionam de maneira concorrente, já que os processadores com multiplos cores já estão em todo lugar, até mesmo nos celulares. E ao mesmo tempo que é extremamente prazeroso ver o seu software muito mais rápido graças a concorrência, também se pode perder muitas noites de sono com os problemas causados por erros no desenvolvimento de software concorrente. Neste post eu pretendo falar de maneira breve dos três principais problemas que podem surgir quando se desenvolve software concorrente. São eles: Starvation, Deadlocks e Race Conditions.</p>
<p><strong>Starvation</strong></p>
<p><strong>Starvation</strong> ocorre quando uma thread fica esperando uma resposta pra prosseguir e essa resposta nunca chega, logo, a thread permanece viva, ocupando recursos, mas não produzindo nada de útil para o software. Uma boa forma de tratar esse problema é sempre trabalhar com timeout e fluxo de exceção, para que caso a resposta não chegue em um determinado tempo seja seguido o fluxo de exceção e a thread possa finalizar o seu trabalho.</p>
<p><strong>Deadlocks</strong></p>
<p><strong>Deadlock</strong> ocorre se duas ou mais threads ficam aguardando uma a outra para realizar alguma ação ou liberar algum recurso, por exemplo, a thread A ficar aguardando a thread B liberar algum recurso e B ficar aguardando A terminar alguma ação pra liberar esse recurso, logo, ambas vão permanecer eternamente esperando. Não existe uma solução simples pra resolver esse problema como o timeout para o problema de Starvation, mas se a aplicação não possuir locks explicitos e estados mutáveis então ela estará a salvo de deadlocks, então esse pode ser um bom caminho a se seguir.</p>
<p><strong>Race Conditions</strong></p>
<p><strong>Race Condition</strong> ocorre se duas threads concorrem para usar o mesmo recurso ou dado. É um problema bem difícil de tratar pois o comportamento da aplicação se torna imprevisível e uma Race Condition pode ocorrer depois de meses do software em produção. Pra piorar, este problema não ocorre apenas quando duas threads tentam modificar o mesmo dado, ele pode correr quando uma thread tenta gravar um dado e a outra está tentando apenas ler este mesmo dado. Pra piorar ainda mais, existem casos aonde se o código não é otimizado com O JIT(Just In Time) Compiler a Race Condition não aparece, mas se o código é elegível ao JIT e é compilado então a Race Condition surge, basicamente porque a JVM passa a usar cache para acessar algumas variáveis e se outra thread muda o valor da variável, esse valor não é replicado para o cache. Neste caso citado a solução seria usar volatile e/ou synchronized.</p>
<p>Novamente não usar objetos mutáveis evitaria o problema de Race Conditions, por isso que imutabilidade tem sido um tema tão comentado ultimamente, e linguagens que pregam essa técnica tem ganhado cada vez mais força.</p>
<p>Para se aprofundar mais no assunto, inclusive com um código de exemplo que mostra uma Race Condition causada pelo JIT, recomendo a leitura do livro <strong>&#8220;Programming Concurrency on the JVM&#8221;</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2011/09/os-tres-principais-problemas-da-concorrencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que esperar das linguagens de programação para o futuro?</title>
		<link>http://www.hespanha.com.br/blog/2010/07/linguagens-de-programacao-modernas/</link>
		<comments>http://www.hespanha.com.br/blog/2010/07/linguagens-de-programacao-modernas/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 18:53:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=71</guid>
		<description><![CDATA[Dizem que os melhores perfumes são aqueles que estão nos menores frascos. Ao menos pelo show que o Rod Pike do Google deu quando falou no OSCON 2010, parece que isso vale para palestras também. Foram doze minutos e meio de um conteúdo riquissímo pra fazer qualquer programador refletir. Nesta palestra, o Rod tentou mostrar [...]]]></description>
			<content:encoded><![CDATA[<p>Dizem que os melhores perfumes são aqueles que estão nos menores frascos. Ao menos pelo show que o Rod Pike do Google deu quando falou no OSCON 2010, parece que isso vale para palestras também. Foram doze minutos e meio de um conteúdo riquissímo pra fazer qualquer programador refletir.</p>
<p>Nesta palestra, o Rod tentou mostrar como as principais linguagens que dominam o mercado hoje são burocráticas e chatas de trabalhar. Ele deixa claro que são linguagens robustas e de qualidade, isso é um fato inquestionável, mas elas podiam ser mais amigáveis.</p>
<p>O Rod usou a conhecida do frase do Norvig que diz “patterns are a a demonstration of weakness in a language” para embassar seus argumentos, e também não deixou de mostrar muitos códigos para comprovar o quão verboso é fazer algumas coisas em linguagens como o Java por exemplo. Além disso, também foi falado que o hardware evoluiu muito esses últimos anos, hoje em dia qualquer um tem um computador com dois cores no mínimo, mas nas linguagens de programação tradicionais por assim dizer, não é nada trivial fazer uso deste poder.</p>
<p>Após mostrar todos esses pontos, o Rod expõe quais são os objetivos das linguagens de programação para o futuro. Ou seja, o que precisa ser feito para que elas se tornem melhores, e no final, puxa um pouquinho a sardinha pro lado dele, falando um pouco da Go, a linguagem de programação do Google.</p>
<p>Um fato importante é que para conseguir ver tudo isso que o Rod viu e falou, é preciso pensar fora da caixa como dizem por aí, e aprender novas linguagens de programação. Eu atualmente tenho dado uma olhada mais profunda em duas: Python e Haskell, e não estou me arrependendo. O pessoal pode falar: “Mas aonde você vai usar Haskell profissionalmente?”. Bom, talvez eu nunca use Haskell profissionalmente, mas com certeza seja qual for a linguagem que eu trabalhar, aprender Haskell e programação funcional me tornará um programador melhor.</p>
<p>Enfim, para quem ainda não viu, não deixe de ver essa palestra. E viva a internet, aonde você consegue ter acesso a uma palestra de um evento de fora do país quase que no mesmo dia em que a palestra foi dada.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/5kj5ApnhPAE&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5kj5ApnhPAE&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2010/07/linguagens-de-programacao-modernas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matemática: A melhor amiga de um programador</title>
		<link>http://www.hespanha.com.br/blog/2008/08/matematica-a-melhor-amiga-de-um-programador/</link>
		<comments>http://www.hespanha.com.br/blog/2008/08/matematica-a-melhor-amiga-de-um-programador/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 14:45:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[matematica]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=14</guid>
		<description><![CDATA[Neste post quero mostrar como um bom conhecimento matemático pode facilitar e muito a vida de um programador. Para isso, vou usar 3 exemplos. Vamos e eles&#8230;. O primeiro exemplo foi uma situação que passei com um ex-colega de trabalho. Ele tinha que resolver para a faculdade o problema das &#8220;Torres de Hanói&#8221;, creio que [...]]]></description>
			<content:encoded><![CDATA[<p>Neste post quero mostrar como um bom conhecimento matemático pode facilitar e muito a vida de um programador. Para isso, vou usar 3 exemplos. Vamos e eles&#8230;.</p>
<p>O primeiro exemplo foi uma situação que passei com um ex-colega de trabalho. Ele tinha que resolver para a faculdade o problema das &#8220;Torres de Hanói&#8221;, creio que conhecido de todos que frequentam esse blog. O professor queria que fosse desenvolvido um algoritmo para dado uma quantidade de discos, todos inicialmente no pino 1, retornasse quantos movimentos seriam necessários para mover todos os discos para algum outro pino. Meu amigo me pediu para ajudar ele com esse problema. Ele tava fazendo um algoritmo, mas não estava conseguindo&#8230;.porém, a solução deste problema é totalmente matemática. A formula pow(2, n) &#8211; 1 retorna exatamente o resultado esperado. Simples assim.</p>
<p>Outro problema é por exemplo, você quer somar todos os números de 0 a N. Como resolver isso? Simples não? Faz um for até N e vai somando numa variavel. Gauss diria que voce pode resolver isso da seguinte forma:</p>
<p>Soma = N * (N+1) / 2</p>
<p>Quem não gosta de matemática, provavelmente não liga para analise de algoritmos, então acha que dá na mesma. Mas tenta fazer isso com N igual a 1000000 com o for e compara com a solução da expressão.</p>
<p>Um blog que eu gosto muito e sempre acompanho é o DQSoft do Daniel Quadros (<a title="http://dqsoft.blogspot.com" href="http://dqsoft.blogspot.com" target="_blank">http://dqsoft.blogspot.com</a>). O Daniel fez um post falando de um problema recente que ele teve que resolver no &#8220;Google Code Jam&#8221;. (<a title="http://dqsoft.blogspot.com/2008/08/google-code-jam-2008-triangle-areas.htm" href="http://dqsoft.blogspot.com/2008/08/google-code-jam-2008-triangle-areas.htm" target="_blank">http://dqsoft.blogspot.com/2008/08/google-code-jam-2008-triangle-areas.htm</a>l)Reparem como a solução é trivial, dependendo apenas de sacadas matemáticas.</p>
<p>Viram só? Os exemplos não estão relacionados a coisas que usamos no nosso dia-a-dia, mas eu creio que o mais importante disso tudo é a capacidade lógica que a matemática proporciona.</p>
<p>[]&#8216;s</p>
<p>PS: A prova do problema das Torres de Hanói pode ser encontrada no livro &#8220;Matematica Concreta&#8221;</p>
<p>PS1: A questão da soma foi descoberta por Gauss, que em uma aula do ensino fundamental, recebeu como castigo somar até 100, e rapidamente falou 5050, surpreendendo a todos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/08/matematica-a-melhor-amiga-de-um-programador/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

