<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
<title>RodrigoStrauss::WebLog();</title>
<language>pt-br</language>
<link>http://www.1bit.com.br/content.1bit/weblog</link>
<description>Rodrigo Strauss - WebLog</description>
<webMaster>weblog@1bit.com.br</webMaster>
<managingEditor>weblog@1bit.com.br</managingEditor>
<item><title>Proposta aos favoráveis à regulamentação da profissão de Analista de Sistemas</title><link>http://www.1bit.com.br/content.1bit/weblog/regulamentacao_proposta</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/regulamentacao_proposta</guid><comments>http://www.1bit.com.br/content.1bit/weblog/regulamentacao_proposta#comments</comments><description>&lt;p&gt;Li recentemente &lt;a href=&quot;http://www.apinfo.com/p12sumario.htm&quot;&gt;uma pesquisa&lt;/a&gt; que diz que a maioria dos profissionais da área são a favor da &lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/lei_estupida&quot;&gt;regulamentação da profissão de analista de sistemas&lt;/a&gt;. Eu, sendo um cara otimista e de boa fé, me acalmo pensando que esse número é grande por pura desinformação. 

&lt;p&gt;De qualquer forma, ao invés de simplesmente debater com argumentos, coisa que já fiz bastante, deixo aqui uma proposta:

&lt;p style=&quot;font-size:14pt; text-align:center&quot;&gt;Concorda que só pessoas com formação acadêmica na área de TI possam fazer sistemas? &lt;br&gt;Comece desinstalando da sua máquina todos os programas feitos por programadores não formados.&lt;/p&gt;

&lt;p&gt;Fechado? Não esqueça de desinstalar o sistema operacional também.&lt;/p&gt;

&lt;p&gt;Argumente a vontade na área de comentários, acho que esse assunto precisa ser mais discutido. Mas lembre-se que sou formado em Ciências da Computação e acho que uma faculdade ajuda bastante na formação profissional. O resto dos argumentos já coloquei em outro post.&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/regulamentacao_proposta#comments&quot;&gt;14 coment&amp;aacute;rio(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Aug 2012 15:15:12 GMT</pubDate></item><item><title>Sobre minha nomeação como Microsoft MVP em Visual C++</title><link>http://www.1bit.com.br/content.1bit/weblog/mvp</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/mvp</guid><comments>http://www.1bit.com.br/content.1bit/weblog/mvp#comments</comments><description>&lt;p&gt;Como alguns de vocês devem saber, esse ano eu fui nomeado Microsoft Most Valuable Professional em Visual C++. Aos que estão fora do mundo Microsoft, MVP é um &quot;título&quot; que a Microsoft concede aos profissionais que colaboram com a &quot;comunidade&quot; difundindo conhecimento sobre um dos produtos deles. É basicamente o que eu faço na &lt;a href=&quot;https://groups.google.com/forum/#!forum/ccppbrasil&quot;&gt;lista de discussão do grupo C &amp;amp; C++ Brasil&lt;/a&gt;, com os eventos sobre C++ que eu ajudo a organizar e com os posts sobre Visual C++ aqui no blog. Mais detalhes sobre o programa MVP &lt;a href=&quot;https://mvp.support.microsoft.com/gp/aboutmvp&quot;&gt;no site da Microsoft&lt;/a&gt;.

&lt;p&gt;O único MVP de Visual C++ no Brasil era o &lt;a href=&quot;http://fabiogaluppo.wordpress.com/&quot;&gt;Fabio Galuppo&lt;/a&gt;, que é também membro do grupo C &amp;amp; C++ Brasil.

&lt;p&gt;Seja lá o que for, eu recebi isso por causa do grupo C &amp;amp; C++ Brasil, afinal, não costumo participar dos eventos da própria Microsoft e não respondo perguntas nos newsgroups da Microsoft faz anos. Até onde sei isso não é comum, e acho bem legal ter esse reconhecimento devido à uma comunidade não-Microsoft. Na minha primeira mensagem para lista-vip-clube-de-campo dos MVPs eu falei sobre o grupo C &amp;amp; C++ Brasil, a lista, e a variedade de tecnologias que usamos. Afinal, o último evento do grupo teve C++11 (com Visual C++), Android+Bada+iOS, ARM e até um framework usado pelo CERN. Mas sempre falamos de Visual C++ também.

&lt;p&gt;Meu agradecimento pela nomeação (não é um prêmio) vai para os membros do grupo C &amp;amp; C++ Brasil, mas se extende à todos os programadores C &amp;amp; C++ do Brasil. Nós já vimos muitas modinhas irem e virem, mas continuamos aqui. E continuamos multiparadigma,  multilinguagem e na maioria das vezes muitissistemaoperacional. (essas regras novas de gramática ainda me confundem...). 
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/mvp#comments&quot;&gt;1 coment&amp;aacute;rio(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Mon, 16 Jan 2012 01:28:58 GMT</pubDate></item><item><title>C++11: auto</title><link>http://www.1bit.com.br/content.1bit/weblog/cpp11_2_auto</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/cpp11_2_auto</guid><comments>http://www.1bit.com.br/content.1bit/weblog/cpp11_2_auto#comments</comments><description>&lt;p&gt;A palavra chave &lt;i&gt;auto&lt;/i&gt; já existe no C++ desde os tempos mais primórdios. Ela sempre era (sim, era) um modificador de storage de variáveis. Você podia escolher o modificador &lt;i&gt;auto&lt;/i&gt; para variáveis de armazenamento automático e &lt;i&gt;register&lt;/i&gt; para armazenar a variável em um registrador. Esse modificador hoje em dia é implícito: se não especificado o armazenamento o compilador decide onde armazenar. De forma &lt;i&gt;auto&lt;/i&gt;mática. O modificador &lt;i&gt;register&lt;/i&gt;, até onde sei, é grande conhecido do pessoal de embarcados, que muitas vezes trabalham com recursos limitados e precisam gerenciá-los a ponto de dizer ao compilador onde a variável &lt;i&gt;x&lt;/i&gt; será armazenada.

&lt;p&gt;Interessante lembrar que a palavra chave &lt;i&gt;register&lt;/i&gt; gera alguns efeitos colaterais, como a impossibilidade de pegar o endereço da variável com o operador &amp;amp;. E tem ainda o fato de que muitos compiladores modernos &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/482s4fy9(VS.80).aspx&quot;&gt;simplesmente não respeitam o &lt;i&gt;register&lt;/i&gt;&lt;/a&gt;.

&lt;div class=&quot;cpp&quot;&gt;&lt;ol&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Eu dizendo ao compilador que quero a variável a&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// *preferencialmente* armazenada em um registrador.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;register&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Eu dizendo para o compilador &amp;quot;eis minha variável b, enfie&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// onde bem entender&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; b &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Quando não especifico nada, o &amp;quot;enfie onde quiser&amp;quot; &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// está subentendido&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; c &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;

&lt;p&gt;Com o padrão C++11 o significado dessa palavra chave foi modificada. Agora ela é usada para tipar uma variável de acordo com a expressão a ela atribuída. Na linha &lt;i&gt;&quot;int a = &quot;2 + 2&quot;&lt;/i&gt;, o compilador sabe que a expressão &quot;2 + 2&quot; retorna um tipo inteiro - na realidade o compilador sempre sabe o tipo de uma expressão em uma linguagem tipada - e pode muito bem acertar a declaração de acordo. 

&lt;p&gt;Esse recurso não é lá muito útil para expressões simples e pode até prejudicar a legibilidade do código, já que o leitor terá que efetuar de cabeça a mesma avaliação de expressão que o compilador fez. Ele realmente se torna útil para tipos e subtipos de classes templates, onde só o tamanho da declaração do tipo da variável pode tomar mais da metade da tela. Exemplo:

&lt;div class=&quot;cpp&quot;&gt;&lt;ol&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Variável a será do tipo int&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Variável f será do tipo double, devido à regra de promoção de tipos&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; f &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nu16&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;string&lt;/span&gt;, std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt; um_mapa&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Variável i será do tipo informado&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;string&lt;/span&gt;, std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;iterator&lt;/span&gt; i &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; um_mapa.&lt;span class=&quot;me1&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Variável biggie_smalls terá o mesmo tipo da variável i,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// mas economizando bastante espaço&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; biggie_smalls &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; um_mapa.&lt;span class=&quot;me1&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Só pra mostrar que essa coisa toda funciona&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;assert&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;i &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; biggie_smalls&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;i &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; biggie_smalls&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// ISSO NÃO FUNCIONA. É preciso haver uma atribuição para&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// que o compilador saiba qual o tipo&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; x&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// &amp;lt;- error 12345: you really don't know how to use auto, do you?&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;


&lt;p&gt;Para quem programa em coisas tipo Haskell isso pode parecer óbvio. Mas já vi trocentas pessoas achando que isso é uma tentativa de transformar C++ em uma linguagem dinâmica. Então, só pra garantir:

&lt;p&gt;&lt;b&gt;A &quot;nova&quot; palavra chave auto NÃO TORNA O C++ UMA LINGUAGEM DINÂMICA. O tipo ainda é estático, você só não precisa informá-lo quando o compilador consegue deduzir isso sozinho.&lt;/b&gt; 

&lt;p&gt;Ah, isso é equivalente ao var do C# e igual ao funcionamento de declaração de variáveis da linguagem Go. E *não* é igual à declaração de variável em Python, Ruby ou Perl.

&lt;p&gt;Mais um exemplo, e caso específico onde o &lt;i&gt;auto&lt;/i&gt; é mais usado:


&lt;div class=&quot;cpp&quot;&gt;&lt;ol&gt;&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;using&lt;/span&gt; std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;using&lt;/span&gt; std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;using&lt;/span&gt; std&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;map&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;string, vector&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; connections&lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Como é hoje&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;map&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;string, vector&lt;span class=&quot;sy1&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span class=&quot;sy1&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;sy4&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;iterator&lt;/span&gt; i &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; connections.&lt;span class=&quot;me1&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;sy3&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; connections.&lt;span class=&quot;me1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;++&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// Muito mais fácil de ler.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; i &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; connections.&lt;span class=&quot;me1&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;sy3&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; connections.&lt;span class=&quot;me1&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy4&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy2&quot;&gt;++&lt;/span&gt;i&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;&lt;div class=&quot;de2&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/cpp11_2_auto#comments&quot;&gt;4 coment&amp;aacute;rio(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Mon, 28 Nov 2011 11:39:25 GMT</pubDate></item><item><title>Agora eu visto a camisa da empresa</title><link>http://www.1bit.com.br/content.1bit/weblog/visto</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/visto</guid><comments>http://www.1bit.com.br/content.1bit/weblog/visto#comments</comments><description>&lt;p&gt;Um post que gerou bastante polêmica foi o &lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/eu_nao_visto_camisa&quot;&gt;&quot;Eu não visto a camisa da empresa&quot;&lt;/a&gt;. Em um emprego meu gerente contou que, quando um diretor resolveu me contratar sem consultá-lo ele imprimiu esse artigo, levou pra mesa dele e falou: &quot;É esse cara aqui que você vai contratar?&quot;. O que eu acho ótimo. É mais fácil quando sabem das minhas opiniões antes de eu chegar. Economiza alguma discussões.

&lt;p&gt;Durante muito tempo como programador peão de obra eu vi muitos gerentes cometendo erros crassos. Na realidade, como todo programador já sabe, a cada emprego que você passa você aprende sobre várias coisas que &lt;b&gt;não&lt;/b&gt; deve fazer para ter sucesso em um projeto. Aprende-se muito mais o que não fazer. Conheci gerentes muito bons e projetos bem administrados, mas são, infelizmente, a minoria.

&lt;p&gt;Depois de ver tanta besteira sendo feita comecei a me perguntar: será que é assim mesmo que as coisas funcionam e nada pode ser feito? Cheguei a cogitar que produção de software no Brasil é isso, uma grande bagunça onde a maioria dos gerentes e diretores são maus programadores que foram promovidos e não fazem a menor ideia do que estão fazendo. 

&lt;p&gt;Um belo dia, depois de anos recusando, resolvi aceitar um cargo de gerente de desenvolvimento, para ver se era realmente impossível fazer as coisas de uma maneira correta. Descobri: não é impossível. Não é fácil, mas tendo disciplina, método, e principalmente interesse, é possível. O que eu descobri é que as pessoas geralmente não se importam com isso. Elas se interessam pelo cargo, não pelo trabalho. Para virar programador eu li dezenas de livros. Quantos gerentes você conhece que leram ao menos um livro sobre o assunto? Além disso, os pseudo programadores recém promovidos costumam esquecer rápido que fazer a coisa certa envolve, no final das contas, dar condições para que os programadores programem, deixando-os distantes de políticas de empresa, não enchendo o saco por causa de horário e coisas estúpidas que todos sabemos que são estúpidas. Já escrevi sobre isso bastante
(&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/ambiente&quot;&gt;aqui&lt;/a&gt;,
&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/contos_empresas&quot;&gt;aqui&lt;/a&gt;,
&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/como_contratar_um_bom_programador&quot;&gt;aqui&lt;/a&gt;), não vou repetir.

&lt;p&gt;(Fim da sessão reclamação. Voltando ao assunto)

&lt;p&gt;Depois de mais de 3 anos programando nas horas vagas, eu finalmente consegui juntar forças com um sócio não-programador e abrir um empresa de desenvolvimento de software para o mercado financeiro, a &lt;a href=&quot;http://www.intelitrader.com.br&quot;&gt;Intelitrader&lt;/a&gt;. Nosso foco é fazer software de alto desempenho e alta disponibilidade, basicamente o que eu tenho feito nos últimos anos. Mas dessa vez eu não preciso preciso explicar porque estou usando C++11, Python e até Assembly quando necessário. :-)

&lt;p&gt;Abrir uma empresa de software é meu projeto de vida desde que tenho 15 anos (esses dias achei o adventure que eu fiz em 1995, com o &quot;copyright&quot; de STRAUSSoft). Aqui na Intelitrader eu tenho silêncio para programar em paz, e mesmo que eu tenha várias tarefas de dono de empresa, sou bem mais produtivo do eu era nos empregos por onde passei. E não é porque o lucro da empresa virá para o meu bolso. É porque meu foco é fazer software bom e com alta disponibilidade.

&lt;p&gt;Como eu fiz quando virei gerente de desenvolvimento, vou tentar fazer aqui. Ver se, na prática, tudo que eu sempre preguei é possível. Sem horários (e com home office), sem regras de vestimenta (estou de bermuda no escritório nesse exato momento), sem frescura. Um lugar onde os escovadores de bits podem fazer o que mais gostam. E onde o importante é fazer software bom, rápido e fácil de usar. Se eu tiver disciplina e organização suficiente (tempo todo mundo tem), vou escrevendo minhas experiências aqui.

&lt;p&gt;Pois é, agora eu visto a camisa da empresa. Por vários motivos. E o motivo principal é o fato de eu poder programar em paz por 4 horas seguidas quase todo dia. Isso não tem preço...&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/visto#comments&quot;&gt;13 coment&amp;aacute;rio(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Wed, 16 Nov 2011 11:23:45 GMT</pubDate></item><item><title>C++11: Introdução</title><link>http://www.1bit.com.br/content.1bit/weblog/cpp11_1</link><guid isPermaLink="true">http://www.1bit.com.br/content.1bit/weblog/cpp11_1</guid><comments>http://www.1bit.com.br/content.1bit/weblog/cpp11_1#comments</comments><description>&lt;p&gt;C++11 é a nova versão da linguagem C++, &lt;a href=&quot;http://www.iso.org/iso/pressrelease.htm?refid=Ref1472&quot;&gt;definida pelo padrão ISO/IEC 14882:2011&lt;/a&gt;. O fato de ser um padrão ISO traz a vantagem de nenhum fabricante ser &quot;dono&quot; da linguagem. Mas isso também cria um problema comum em qualquer coisa que é decidida por comitê: é necessário um consenso entre os membros para que algo seja adicionado ou modificado, e isso torna o processo sempre mais lento. O último padrão C++, por exemplo, foi de 2003. 8 anos depois, finalmente temos uma nova versão.

&lt;p&gt;(Isso me lembra de quando fui a um Coding Dojo no Google Brasil. No final, todo mundo deve escrever as opiniões sobre o Dojo em papeizinhos, um para vantagens, outro para desvantagens. Foram inúmeras as reações de inconformismo quando leram o papel que eu escrevi com uma desvantagem: &quot;Democracia demais&quot;.)

&lt;p&gt;Mas a espera valeu. Todos os novos recursos foram bem, digamos, &quot;azeitados&quot;, e o padrão já nasceu com vários compiladores implementando uma parte considerável dele (isso demorou bem mais no C++03). Além da vantagem de quem vem por último: você aprende com os erros e acertos dos outros (como Java, C# &amp;&amp; Python).

&lt;p&gt;Os principais objetivos do novo padrão, segundo &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/&quot;&gt;quem participou das discussões de definição da linguagem&lt;/a&gt; e segundo eu mesmo são:

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Facilidades de linguagens modernas&lt;/b&gt;: O melhor exemplo é a implementação de lambda, que, antes tarde do que nunca, chegou ao C++. Mas, por tardar e consequentemente aprender com os acertos e erros dos outros, temos em C++ a melhor implementação entre as linguagens mainstream.

&lt;li&gt;&lt;b&gt;Facilidade para ensino&lt;/b&gt;: Essa veio do Stroustrup (o criador da linguagem), que de uns anos pra cá voltou a dar aulas de programação para iniciantes. No último encontro de C++ me perguntaram qual seria a vantagem do C++11 para iniciantes. Não consegui dar uma resposta objetiva, além de citar o fato de que uma linguagem melhor acaba virando uma linguagem mais fácil.

&lt;li&gt;&lt;b&gt;Melhorias na biblioteca padrão&lt;/b&gt;: A STL já estava mesmo precisando de uma atualizada, e resolveu-se unir o útil ao agradável: com o tempo, as bibliotecas mais estáveis e bem aceitas do Boost estão sendo incorporadas à biblioteca padrão. O C++11 tem std::threads, std::shared_ptr, std::function, e inúmeras melhorias que vou detalhar em posts futuros.

&lt;li&gt;&lt;b&gt;Acabar com “gambiarras” do Boost&lt;/b&gt;: Não sei se esse era realmente um dos objetivos iniciais, mas eu gostei disso ter acontecido. Acho metaprogramação em C++ um negócio muito legal, mas exotérico demais. Boost Bind é algo extremamente necessário para programação assíncrona, mas 100+ erros de compilação por esquecer uma vírgula ou um _1 é de matar. E o Boost Lambda, convenhamos, é uma gambiarra que cresceu demais e aprendeu a falar. Com o recurso de lambda da linguagem se tornam desnecessários o Boost.Bind e o Boost.Lambda. Foi bom enquanto durou, mas não sentirei saudades.

&lt;/ul&gt;

&lt;p&gt;Em breve, posts detalhando cada ponto. Enquanto isso, você pode como sempre, &lt;a href=&quot;http://en.wikipedia.org/wiki/C%2B%2B11&quot;&gt;ler a extensiva lista de novidades na Wikipedia&lt;/a&gt;.

&lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://www.1bit.com.br/content.1bit/weblog/cpp11_1#comments&quot;&gt;3 coment&amp;aacute;rio(s)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Thu, 03 Nov 2011 11:23:52 GMT</pubDate></item></channel>
</rss>