<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Fast&#039;n&#039;Furious</title>
	<atom:link href="http://jckodel.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jckodel.wordpress.com</link>
	<description>Extraindo o máximo de performance</description>
	<lastBuildDate>Wed, 04 Nov 2009 00:59:47 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jckodel.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Fast&#039;n&#039;Furious</title>
		<link>http://jckodel.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jckodel.wordpress.com/osd.xml" title="Fast&#039;n&#039;Furious" />
	<atom:link rel='hub' href='http://jckodel.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Array versus Collections</title>
		<link>http://jckodel.wordpress.com/2009/11/04/array-versus-collections/</link>
		<comments>http://jckodel.wordpress.com/2009/11/04/array-versus-collections/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 00:00:00 +0000</pubDate>
		<dc:creator>jckodel</dc:creator>
				<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[ArrayList]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[IList]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://jckodel.wordpress.com/2009/11/04/array-versus-collections/</guid>
		<description><![CDATA[Em breve!


Technorati Tags: performance,vb.net,c#,array,collections,IList,List,ArrayList
del.icio.us Tags: performance,vb.net,c#,array,collections,IList,List,ArrayList<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=7&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Em breve!</p>
<hr />
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1f298884-47d6-4f78-9e26-24a0f7cbbea4" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/performance" rel="tag">performance</a>,<a href="http://technorati.com/tags/vb.net" rel="tag">vb.net</a>,<a href="http://technorati.com/tags/c%23" rel="tag">c#</a>,<a href="http://technorati.com/tags/array" rel="tag">array</a>,<a href="http://technorati.com/tags/collections" rel="tag">collections</a>,<a href="http://technorati.com/tags/IList" rel="tag">IList</a>,<a href="http://technorati.com/tags/List" rel="tag">List</a>,<a href="http://technorati.com/tags/ArrayList" rel="tag">ArrayList</a></div>
<p> 
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fb5d3d75-7a03-4e6e-88f5-0080a1bab795" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/performance" rel="tag">performance</a>,<a href="http://del.icio.us/popular/vb.net" rel="tag">vb.net</a>,<a href="http://del.icio.us/popular/c%23" rel="tag">c#</a>,<a href="http://del.icio.us/popular/array" rel="tag">array</a>,<a href="http://del.icio.us/popular/collections" rel="tag">collections</a>,<a href="http://del.icio.us/popular/IList" rel="tag">IList</a>,<a href="http://del.icio.us/popular/List" rel="tag">List</a>,<a href="http://del.icio.us/popular/ArrayList" rel="tag">ArrayList</a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jckodel.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jckodel.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jckodel.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=7&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jckodel.wordpress.com/2009/11/04/array-versus-collections/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aabe91910beb1da7fc1db831eadc112f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jckodel</media:title>
		</media:content>
	</item>
		<item>
		<title>BASIC???</title>
		<link>http://jckodel.wordpress.com/2009/11/03/basic/</link>
		<comments>http://jckodel.wordpress.com/2009/11/03/basic/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 23:00:00 +0000</pubDate>
		<dc:creator>jckodel</dc:creator>
				<category><![CDATA[Comparação]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://jckodel.wordpress.com/2009/11/03/basic/</guid>
		<description><![CDATA[Código de Instrução Simbólica para Todo-uso para Principiantes

O título do post (e a tradução do acrônimo BASIC, Begginer’s All-purpose Symbolic Instruction Code) não poderiam estar mais errados!

Vamos abrir o blog com um artigo de desmitificação sobre meu assunto predileto: BASIC!

Creio que 102% dos meus amigos e conhecidos são programadores… a grande maioria (diria 99.9%) programam em C#, alguns, como o ilustríssimo grande palestrante Fábio Galuppo é mais… hmmm… radical… e programa em F# e C++ (aliás, é MVP C++), e, é óbvio, em se tratando de programação sou a ovelha-negra dos amigos, aquele que recebe as piadinhas infames que todo programador VB recebe.

Hora do payback &#62;=)

Desmitificando o BASIC

Maturidade

Poucas pessoas sabem disso, mas o BASIC foi criado 8 anos antes do C! Há ótimos artigos no Wikipédia sobre as duas linguagens e lá está toda a história delas (podem verificar as datas). Eu sempre colocarei links aqui do Wikipédia em inglês, pois os artigos em português infelizmente não possuem nem um décimo da qualidade de suas contrapartes em inglês, mas, é muito fácil ver o artigo em português apenas trocando o link de http://en.wik... para http://pt.wik… Então aqui vão os dois links: BASIC (1964) e C (1972).

Tipagem Fraca

Esses dias eu estava vendo alguns slides da Microsoft sobre o futuro do Visual Studio. Nos slides está bem clara a tendência do .net framework de partir para linguagens dinâmicas, onde há a possibilidade de se resolver tipos em runtime. Surpresa! VB, apesar de não ser uma linguagem dinâmica no momento, já possui certos conceitos de dinamismo há décadas.

Em VB nós temos sempre o poder da escolha. Eu posso escolher que a tipagem seja resolvida em runtime ou poder usar uma tipagem do tipo Duck Typing (da mesma forma que C# pode usar Object com este intuito), mas eu também posso ligar o modo Strict (Option Strict On) e ser mais fortemente tipada do que C#! Não acredita? Tente executar o seguinte código em C#:

String variavel = "Olá " + 3.1415 



E não é que ele compila sem problemas? Agora tente fazer o mesmo com VB com Option Strict On e... bum... o compilador acusa erro e você sequer consegue rodar o projeto (a menos que altere o código para 

Dim variavel = "Olá " &#38; 3.1415 



(e, não, não estou usando tipagem fraca no exemplo acima, e sim inferência!) 



Mas, qual a utilidade disso? COM, especialmente. Tente utilizar o maravilhoso componente Office Web Components em C# e terá má supresas =(

Redim Preserve ECAAA

Essa eu nunca entendi… várias pessoas reclamam de BASIC porque ele possui um comando que redimensiona um array, preservando seu conteúdo (note que isso é diferente de simplesmente declarar um novo array, os dados são mantidos!).

Duas frases para estas pessoas:

O .net framework possui um Redim Preserve. Basta fazer Array.Resize.  
Outra forma de se fazer isso (e creio que Array.Resize só foi implementado no .net 2.0) seria criar um novo array, copiar o conteúdo deste via Array.Copy ou Buffer.BlockCopy e descartar o anterior. Várias linhas de código que poderia ser resumida em 1!  

Se está pensando “Ah, mas eu usaria ArrayList ou List e não teria este problema”, engana-se, porque listas em .net são implementadas com arrays que são redimensionados sempre que sua capacidade é excedida, justamente com um Redim Preserve, duplicando o tamanho do array!

É muito importante lembrar que não existe magia em programação. É óbvio e inegável as vantagens e facilidade de uso de listas (collections), porém não podemos nos esquecer que, por trás dos bastidores, eles funcionam com tipos primitivos (neste caso, um Array). Será que sempre duplicar o Array quando a capacidade é alcançada é algo bom? Se quiser mais detalhes sobre a performance de redimensionamento de arrays e a diferença de performance entre arrays e listas, acompanhe este post.

Verbosidade

Aqui entramos em uma questão de gosto (ainda mais quando temos intellisense no VisualStudio). Só para cutucar onça com vara curta, VisualBasic é a única linguagem que implementa 100% de intellisense no VisualStudio (maiores informações no blog oficial do VB).

Vamos fazer alguns testes básicos:

public class foo:bar  
public ~foo()  
if(foo = bar = 10)  
public abstract class foo  

Às perguntas:

bar representa uma classe ou uma interface? É claro que é padrão comum toda interface iniciar com I, mas essa é uma regra facilmente "quebrável". Não vejo porque escrever Public Class foo Inherits algo Implements bar seja pior, já que estamos deixando as coisas extremamente claras!  
Este código representa um Destructor! Ora, como não vi antes! ~ de Destructor. Claríssimo! (E sim, isso é sarcasmo, he he he)  
Ahh... como é que é? Esta linha na verdade associa o valor 10 à variável bar e depois o valor de bar à variável foo e a operação booleana (requerida pelo if) resultante disso é, sinceramente não faço a mínima idéia!  
Classe abstrata. Ou método virtual. Ok... Precisamos de um dicionário técnico para aprender a programar... ou... podemos ser mais humanos e declarar classes abstratas como Public MustInherit Class (Must Inherit = Deve ser Herdada) e Public MustOverride Sub (Must Override = Deve ser Sobreescrita). O mesmo ocorre para outros casos como public new string foo() que em VB fica como Public Shadows Function foo() As String, indicando que este método oculta (shadows) sua contraparte na classe base  

Pode ser algo comigo somente, mas gosto de coisas lógicas e que eu não tenha que decifrar o que diabos aquele monte de símbolos significa (por outro lado sou EXTREMAMENTE péssimo em C++ e F#).

C# é mais rápido que VB (ou vice-versa)

Isso vamos cobrir em um post mais detalhado no futuro, provando que, na grande maioria das vezes, para o código comum que usamos no dia-a-dia, não há diferença entre VB e C#. E não estou dizendo em performance, estou dizendo em tudo.

Todos sabemos que qualquer linguagem .net (e existem dezenas delas) são compiladas para um Assembly intermediário (assembly de linguagem, não no sentido de um pacote/dll como no .net) chamado MSIL. Se compilarmos código em C# e em VB e depois analisarmos o MSIL gerado, veremos que ambos são exatamente iguais para a maioria dos casos.

Portanto, não importa em que linguagem você esteja programando, tirando uma otimização aqui e acolá, o código gerado será exatamente o mesmo no que importa: MSIL

Programadores BASIC são extremamente incompetentes

São sim. E também não são (eu sou um exemplo, =P).

Conheço péssimos programadores em BASIC, em Java, em C#, em C++, em Pascal… Gente sem experiência, com conceitos errados ou simplesmente sem o feeling sobre o que é programar podem ser ruins em qualquer linguagem. E, acreditem… existem váááááários programadores em C# que simplesmente conseguem detonar um código quando saem do feijão-com-arroz dos Wizards do Visual Studio.

Eu gosto de usar uma frase que um amigo (e ex chefe) usou uma vez comigo. O cara é MVP de C++, um programador muito bom que respeito muito. Quando eu estava desenvolvendo um daqueles projetos que ninguém quer fazer (tratava-se de comunicação UDP com um mainframe da década de 70), ouvi a frase “Olha, programador BASIC sempre é ruim, mas tirei meu chapéu pra você agora”. Vindo de quem veio, acredite, foi um baita elogio ;-)

O fato é este mesmo… gente boa e gente ruim existe em todas as áreas de atuação. Eu posso citar zilhões de pessoas que são péssimas em C# (e se dizem programadores), além de várias entrevistas de emprego que eu ministrei onde as pessoas não conseguiam fazer o básico do básico (por exemplo, montar uma treeview com recursividade).

Mas, concordo, que por ser extremamente fácil e acessível, BASIC é fatalmente associado com programadores inexperientes e isso denigre sim um pouco da imagem. Mas, com o trabalho que C# tem tido nos últimos anos para disseminar a linguagem, isso vai mudar radicalmente, porque muita gente inexperiente está iniciando com C# e, pasmem, eles não nascem bons! Vão errar, vão cometer atrocidades. Culpa da linguagem?

Macacos programam em BASIC

Sim! E isso é maravilhoso! Minha linguagem preferida é tão fácil de usar e tão simples de manter que até um macaco pode programar! Eu acho isso ótimo (e não, sem sarcasmo desta vez!) =)

Technorati Tags: comparação,visualbasic,c#,vb.net
del.icio.us Tags: comparação,visualbasic,c#,vb.net<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=8&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Código de Instrução Simbólica para Todo-uso para Principiantes</h1>
<p>O título do post (e a tradução do acrônimo BASIC, <em>Begginer’s All-purpose Symbolic Instruction Code</em>) não poderiam estar mais errados!</p>
<p>Vamos abrir o blog com um artigo de desmitificação sobre meu assunto predileto: BASIC!</p>
<p>Creio que 102% dos meus amigos e conhecidos são programadores… a grande maioria (diria 99.9%) programam em C#, alguns, como o ilustríssimo grande palestrante Fábio Galuppo é mais… hmmm… radical… e programa em F# e C++ (aliás, é MVP C++), e, é óbvio, em se tratando de programação sou a ovelha-negra dos amigos, aquele que recebe as piadinhas infames que todo programador VB recebe.</p>
<p>Hora do payback &gt;=)</p>
<h1>Desmitificando o BASIC</h1>
<h3>Maturidade</h3>
<p>Poucas pessoas sabem disso, mas o BASIC foi criado 8 anos antes do C! Há ótimos artigos no Wikipédia sobre as duas linguagens e lá está toda a história delas (podem verificar as datas). Eu sempre colocarei links aqui do Wikipédia em inglês, pois os artigos em português infelizmente não possuem nem um décimo da qualidade de suas contrapartes em inglês, mas, é muito fácil ver o artigo em português apenas trocando o link de http://en.wik&#8230; para http://pt.wik… Então aqui vão os dois links: <a href="http://en.wikipedia.org/wiki/BASIC" target="_blank">BASIC</a> (1964) e <a href="http://en.wikipedia.org/wiki/C_(programming_language)" target="_blank">C</a> (1972).</p>
<h3>Tipagem Fraca</h3>
<p>Esses dias eu estava vendo alguns slides da Microsoft sobre o futuro do Visual Studio. Nos slides está bem clara a tendência do .net framework de partir para linguagens dinâmicas, onde há a possibilidade de se resolver tipos em runtime. Surpresa! VB, apesar de não ser uma linguagem dinâmica no momento, já possui certos conceitos de dinamismo há décadas.</p>
<p>Em VB nós temos sempre o poder da escolha. Eu posso escolher que a tipagem seja resolvida em runtime ou poder usar uma tipagem do tipo <a href="http://en.wikipedia.org/wiki/Duck_typing" target="_blank">Duck Typing</a> (da mesma forma que C# pode usar Object com este intuito), mas eu também posso ligar o modo Strict (Option Strict On) e ser mais fortemente tipada do que C#! Não acredita? Tente executar o seguinte código em C#:</p>
<div class="csharpcode">
<pre class="alt">String variavel = <span class="str">&quot;Olá &quot;</span> + 3.1415</pre>
</div>
<p>E não é que ele compila sem problemas? Agora tente fazer o mesmo com VB com Option Strict On e&#8230; bum&#8230; o compilador acusa erro e você sequer consegue rodar o projeto (a menos que altere o código para </p>
<div class="csharpcode">
<pre class="alt"><span class="kwrd">Dim</span> variavel = <span class="str">&quot;Olá &quot;</span> &amp; 3.1415</pre>
</div>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</p>
<p>(e, não, não estou usando tipagem fraca no exemplo acima, e sim <a href="http://en.wikipedia.org/wiki/Type_inference" target="_blank">inferência</a>!) </p>
</p>
<p>Mas, qual a utilidade disso? COM, especialmente. Tente utilizar o maravilhoso componente <a href="http://en.wikipedia.org/wiki/Office_Web_Components" target="_blank">Office Web Components</a> em C# e terá má supresas =(</p>
<h3>Redim Preserve ECAAA</h3>
<p>Essa eu nunca entendi… várias pessoas reclamam de BASIC porque ele possui um comando que redimensiona um array, preservando seu conteúdo (note que isso é diferente de simplesmente declarar um novo array, os dados são mantidos!).</p>
<p>Duas frases para estas pessoas:</p>
<ol>
<li>O .net framework possui um Redim Preserve. Basta fazer Array.Resize. </li>
<li>Outra forma de se fazer isso (e creio que Array.Resize só foi implementado no .net 2.0) seria criar um novo array, copiar o conteúdo deste via Array.Copy ou Buffer.BlockCopy e descartar o anterior. Várias linhas de código que poderia ser resumida em 1! </li>
</ol>
<p>Se está pensando “Ah, mas eu usaria ArrayList ou List&lt;T&gt; e não teria este problema”, engana-se, porque listas em .net são implementadas com arrays que são redimensionados sempre que sua capacidade é excedida, justamente com um Redim Preserve, duplicando o tamanho do array!</p>
<p>É muito importante lembrar que não existe magia em programação. É óbvio e inegável as vantagens e facilidade de uso de listas (collections), porém não podemos nos esquecer que, por trás dos bastidores, eles funcionam com tipos primitivos (neste caso, um Array). Será que sempre duplicar o Array quando a capacidade é alcançada é algo bom? Se quiser mais detalhes sobre a performance de redimensionamento de arrays e a diferença de performance entre arrays e listas, acompanhe <a href="http://jckodel.wordpress.com/2009/11/04/array-versus-collections/" target="_blank">este post</a>.</p>
<h3>Verbosidade</h3>
<p>Aqui entramos em uma questão de gosto (ainda mais quando temos intellisense no VisualStudio). Só para cutucar onça com vara curta, VisualBasic é a única linguagem que implementa 100% de intellisense no VisualStudio (maiores informações no <a href="http://blogs.msdn.com/vbteam/archive/2008/01/08/did-you-know-intellisense-everywhere-lisa-feigenbaum.aspx" target="_blank">blog oficial do VB</a>).</p>
<p>Vamos fazer alguns testes básicos:</p>
<ol>
<li>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> foo:bar</pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</li>
<li>
<pre class="csharpcode"><span class="kwrd">public</span> ~foo()</pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</li>
<li>
<pre class="csharpcode"><span class="kwrd">if</span>(foo = bar = 10)</pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</li>
<li>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">abstract</span> <span class="kwrd">class</span> foo</pre>
<p>.csharpcode, .csharpcode pre<br />
{<br />
	font-size: small;<br />
	color: black;<br />
	font-family: consolas, &#8220;Courier New&#8221;, courier, monospace;<br />
	background-color: #ffffff;<br />
	/*white-space: pre;*/<br />
}<br />
.csharpcode pre { margin: 0em; }<br />
.csharpcode .rem { color: #008000; }<br />
.csharpcode .kwrd { color: #0000ff; }<br />
.csharpcode .str { color: #006080; }<br />
.csharpcode .op { color: #0000c0; }<br />
.csharpcode .preproc { color: #cc6633; }<br />
.csharpcode .asp { background-color: #ffff00; }<br />
.csharpcode .html { color: #800000; }<br />
.csharpcode .attr { color: #ff0000; }<br />
.csharpcode .alt<br />
{<br />
	background-color: #f4f4f4;<br />
	width: 100%;<br />
	margin: 0em;<br />
}<br />
.csharpcode .lnum { color: #606060; }</li>
</ol>
<p>Às perguntas:</p>
<ol>
<li>bar representa uma classe ou uma interface? É claro que é padrão comum toda interface iniciar com I, mas essa é uma regra facilmente &quot;quebrável&quot;. Não vejo porque escrever Public Class foo Inherits algo Implements bar seja pior, já que estamos deixando as coisas extremamente claras! </li>
<li>Este código representa um Destructor! Ora, como não vi antes! ~ de Destructor. Claríssimo! (E sim, isso é sarcasmo, he he he) </li>
<li>Ahh&#8230; como é que é? Esta linha na verdade associa o valor 10 à variável bar e depois o valor de bar à variável foo e a operação booleana (requerida pelo if) resultante disso é, sinceramente não faço a mínima idéia! </li>
<li>Classe abstrata. Ou método virtual. Ok&#8230; Precisamos de um dicionário técnico para aprender a programar&#8230; ou&#8230; podemos ser mais humanos e declarar classes abstratas como Public MustInherit Class (Must Inherit = Deve ser Herdada) e Public MustOverride Sub (Must Override = Deve ser Sobreescrita). O mesmo ocorre para outros casos como public new string foo() que em VB fica como Public Shadows Function foo() As String, indicando que este método oculta (shadows) sua contraparte na classe base </li>
</ol>
<p>Pode ser algo comigo somente, mas gosto de coisas lógicas e que eu não tenha que decifrar o que diabos aquele monte de símbolos significa (por outro lado sou EXTREMAMENTE péssimo em C++ e F#).</p>
<h3>C# é mais rápido que VB (ou vice-versa)</h3>
<p>Isso vamos cobrir em um post mais detalhado no futuro, provando que, na grande maioria das vezes, para o código comum que usamos no dia-a-dia, não há diferença entre VB e C#. E não estou dizendo em performance, estou dizendo em tudo.</p>
<p>Todos sabemos que qualquer linguagem .net (e existem dezenas delas) são compiladas para um Assembly intermediário (assembly de linguagem, não no sentido de um pacote/dll como no .net) chamado MSIL. Se compilarmos código em C# e em VB e depois analisarmos o MSIL gerado, veremos que ambos são exatamente iguais para a maioria dos casos.</p>
<p>Portanto, não importa em que linguagem você esteja programando, tirando uma otimização aqui e acolá, o código gerado será exatamente o mesmo no que importa: MSIL</p>
<h3>Programadores BASIC são extremamente incompetentes</h3>
<p>São sim. E também não são (eu sou um exemplo, =P).</p>
<p>Conheço péssimos programadores em BASIC, em Java, em C#, em C++, em Pascal… Gente sem experiência, com conceitos errados ou simplesmente sem o <em>feeling</em> sobre o que é programar podem ser ruins em qualquer linguagem. E, acreditem… existem váááááários programadores em C# que simplesmente conseguem detonar um código quando saem do feijão-com-arroz dos Wizards do Visual Studio.</p>
<p>Eu gosto de usar uma frase que um amigo (e ex chefe) usou uma vez comigo. O cara é MVP de C++, um programador muito bom que respeito muito. Quando eu estava desenvolvendo um daqueles projetos que ninguém quer fazer (tratava-se de comunicação UDP com um mainframe da década de 70), ouvi a frase “Olha, programador BASIC sempre é ruim, mas tirei meu chapéu pra você agora”. Vindo de quem veio, acredite, foi um baita elogio <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>O fato é este mesmo… gente boa e gente ruim existe em todas as áreas de atuação. Eu posso citar zilhões de pessoas que são péssimas em C# (e se dizem programadores), além de várias entrevistas de emprego que eu ministrei onde as pessoas não conseguiam fazer o básico do básico (por exemplo, montar uma treeview com recursividade).</p>
<p>Mas, concordo, que por ser extremamente fácil e acessível, BASIC é fatalmente associado com programadores inexperientes e isso denigre sim um pouco da imagem. Mas, com o trabalho que C# tem tido nos últimos anos para disseminar a linguagem, isso vai mudar radicalmente, porque muita gente inexperiente está iniciando com C# e, pasmem, eles não nascem bons! Vão errar, vão cometer atrocidades. Culpa da linguagem?</p>
<h3>Macacos programam em BASIC</h3>
<p>Sim! E isso é maravilhoso! Minha linguagem preferida é tão fácil de usar e tão simples de manter que até um macaco pode programar! Eu acho isso ótimo (e não, sem sarcasmo desta vez!) =)</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6e00c127-1069-4745-b072-ac83622f0c0b" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/compara%c3%a7%c3%a3o" rel="tag">compara&#231;&#227;o</a>,<a href="http://technorati.com/tags/visualbasic" rel="tag">visualbasic</a>,<a href="http://technorati.com/tags/c%23" rel="tag">c#</a>,<a href="http://technorati.com/tags/vb.net" rel="tag">vb.net</a></div>
<p></p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c17d9f70-63aa-404b-ad1f-f385c7d4feee" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/compara%c3%a7%c3%a3o" rel="tag">compara&#231;&#227;o</a>,<a href="http://del.icio.us/popular/visualbasic" rel="tag">visualbasic</a>,<a href="http://del.icio.us/popular/c%23" rel="tag">c#</a>,<a href="http://del.icio.us/popular/vb.net" rel="tag">vb.net</a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jckodel.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jckodel.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jckodel.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=8&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jckodel.wordpress.com/2009/11/03/basic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aabe91910beb1da7fc1db831eadc112f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jckodel</media:title>
		</media:content>
	</item>
		<item>
		<title>Fast &amp; Furious</title>
		<link>http://jckodel.wordpress.com/2009/11/03/fast-furious/</link>
		<comments>http://jckodel.wordpress.com/2009/11/03/fast-furious/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 22:00:00 +0000</pubDate>
		<dc:creator>jckodel</dc:creator>
				<category><![CDATA[Introdução]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[best practives]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[mitos]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://jckodel.wordpress.com/2009/11/03/fast-furious/</guid>
		<description><![CDATA[Sejam bem vindos ao Fast &#38; Furious

Olá a todos, este é o meu blog, Fast &#38; Furious, dedicado exclusivamente à três pontos:

Extrair o máximo de seu código, provendo testes para a solução de diversos problemas com o intuito de determinar qual a forma mais performática de se obter o resultado desejado, com ampla discussão das técnicas utilizadas, códigos para testes, benchmarks e um pouco de background de como as coisas funcionam.  
Desmitificar certos conceitos tomados como verdade que, no fundo, não são bem assim =)  
Prover um local onde aquelas dúvidas chatas que sempre aparecem no meio do desenvolvimento sejam não só resolvidas, mas explicadas para que se entenda como o todo funciona e prover mais conhecimento para os futuros problemas  

Sobre mim

Sou um programador das antigas, quando nossos processadores tinham meros 3.5 Mhz (ou 0.0035Ghz) e tínhamos que sobreviver com 64 Kilobytes de memória (compartilhada com o resto do sistema, o que nos deixava pouco mais de 24Kb, ou 0.0000267Gb). É… você não leu errado não, os números conferem…

Naquela época (idos de 86), performance e economia de memória não eram luxo, eram necessidades. Os números acima não mentem. Você não determinava se uma List(Of String) (List) era mais rápida ou não do que um ArrayList, você simplesmente fazia o que tinha que fazer rápido em Assembly.

Comecei com o que havia disponível na época: BASIC. Naquele tempo, as máquinas eram cerca de 66% do tamanho de um notebook atual, você o ligava a uma TV comum e a um cassete (sim, daquelas fitas K7 que os rádios de carro possuiam no século passado) e, ao ligar a máquina, quem entrava era um interpretador BASIC e só. Sua opção era programar ou programar =P

Na imagem ao lado um interpretador BASIC da Microsoft para máquinas MSX, com processador de 3.58Mhz e 64Kb de RAM (dos quais, como pode ver na imagem, só restavam cerca de 27Kb. Quando se conectava uma unidade de diskette era consumida cerca de 4Kb por unidade disponível).





Desde então programei em BASIC e Assembly (e muito pouco em C, Modula 2 e Pascal) para virtualmente todas as máquinas disponíveis no Brasil na época. Meu primeiro PC veio de fato só em 1996, com um incrível Windows 3.11.

É óbvio que, mesmo sendo primariamente um programador VB.net, todos os exemplos aqui serão nas duas linguagens, então, não se preocupem ;-) Se desejar, aproveite e leia alguns pontos de desmitificação sobre BASIC aqui.

Technorati Tags: .net,performance,vb.net,c#,best practices,mitos
del.icio.us Tags: .net,performance,vb.net,c#,best practices,mitos<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=11&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Sejam bem vindos ao Fast &amp; Furious</h1>
<p>Olá a todos, este é o meu blog, Fast &amp; Furious, dedicado exclusivamente à três pontos:</p>
<ol>
<li>Extrair o máximo de seu código, provendo testes para a solução de diversos problemas com o intuito de determinar qual a forma mais performática de se obter o resultado desejado, com ampla discussão das técnicas utilizadas, códigos para testes, benchmarks e um pouco de background de como as coisas funcionam. </li>
<li>Desmitificar certos conceitos tomados como verdade que, no fundo, não são bem assim =) </li>
<li>Prover um local onde aquelas dúvidas chatas que sempre aparecem no meio do desenvolvimento sejam não só resolvidas, mas explicadas para que se entenda como o todo funciona e prover mais conhecimento para os futuros problemas </li>
</ol>
<h1>Sobre mim</h1>
<p>Sou um programador das antigas, quando nossos processadores tinham meros 3.5 Mhz (ou 0.0035Ghz) e tínhamos que sobreviver com 64 Kilobytes de memória (compartilhada com o resto do sistema, o que nos deixava pouco mais de 24Kb, ou 0.0000267Gb). É… você não leu errado não, os números conferem…</p>
<p>Naquela época (idos de 86), performance e economia de memória não eram luxo, eram necessidades. Os números acima não mentem. Você não determinava se uma List(Of String) (List&lt;String&gt;) era mais rápida ou não do que um ArrayList, você simplesmente fazia o que tinha que fazer rápido em <a href="http://en.wikipedia.org/wiki/Assembly_language" target="_blank">Assembly</a>.</p>
<p><a href="http://jckodel.files.wordpress.com/2009/11/msx_basic.jpg"><img style="display:inline;border-width:0;margin:0 10px 0 0;" title="msx_basic" border="0" alt="msx_basic" align="left" src="http://jckodel.files.wordpress.com/2009/11/msx_basic_thumb.jpg?w=242&#038;h=182" width="242" height="182" /></a>Comecei com o que havia disponível na época: <a href="http://jckodel.wordpress.com/2009/11/03/basic/" target="_blank">BASIC</a>. Naquele tempo, as máquinas eram cerca de 66% do tamanho de um notebook atual, você o ligava a uma TV comum e a um cassete (sim, daquelas fitas K7 que os rádios de carro possuiam no século passado) e, ao ligar a máquina, quem entrava era um interpretador BASIC e só. Sua opção era programar ou programar =P</p>
<p>Na imagem ao lado um interpretador BASIC da Microsoft para máquinas MSX, com processador de 3.58Mhz e 64Kb de RAM (dos quais, como pode ver na imagem, só restavam cerca de 27Kb. Quando se conectava uma unidade de diskette era consumida cerca de 4Kb por unidade disponível).</p>
</p>
<p>Desde então programei em BASIC e Assembly (e muito pouco em C, Modula 2 e Pascal) para virtualmente todas as máquinas disponíveis no Brasil na época. Meu primeiro PC veio de fato só em 1996, com um incrível Windows 3.11.</p>
<p>É óbvio que, mesmo sendo primariamente um programador VB.net, todos os exemplos aqui serão nas duas linguagens, então, não se preocupem <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Se desejar, aproveite e leia alguns pontos de desmitificação sobre BASIC aqui.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:533d5e42-ddd0-41fc-abb1-1cd203f14d6d" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/.net" rel="tag">.net</a>,<a href="http://technorati.com/tags/performance" rel="tag">performance</a>,<a href="http://technorati.com/tags/vb.net" rel="tag">vb.net</a>,<a href="http://technorati.com/tags/c%23" rel="tag">c#</a>,<a href="http://technorati.com/tags/best+practices" rel="tag">best practices</a>,<a href="http://technorati.com/tags/mitos" rel="tag">mitos</a></div>
<p> 
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6d819648-e9e6-4d3d-b15d-3f28cb8348c1" class="wlWriterEditableSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/.net" rel="tag">.net</a>,<a href="http://del.icio.us/popular/performance" rel="tag">performance</a>,<a href="http://del.icio.us/popular/vb.net" rel="tag">vb.net</a>,<a href="http://del.icio.us/popular/c%23" rel="tag">c#</a>,<a href="http://del.icio.us/popular/best+practices" rel="tag">best practices</a>,<a href="http://del.icio.us/popular/mitos" rel="tag">mitos</a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jckodel.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jckodel.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jckodel.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jckodel.wordpress.com&amp;blog=9026295&amp;post=11&amp;subd=jckodel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jckodel.wordpress.com/2009/11/03/fast-furious/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/aabe91910beb1da7fc1db831eadc112f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jckodel</media:title>
		</media:content>

		<media:content url="http://jckodel.files.wordpress.com/2009/11/msx_basic_thumb.jpg" medium="image">
			<media:title type="html">msx_basic</media:title>
		</media:content>
	</item>
	</channel>
</rss>
