<?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>codificando.com &#187; pragmatic</title>
	<atom:link href="http://codificando.com/category/pragmatic/feed/" rel="self" type="application/rss+xml" />
	<link>http://codificando.com</link>
	<description>Desenvolvimento de Software com qualidade</description>
	<lastBuildDate>Mon, 19 Jul 2010 21:28:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Gerencie seu ambiente Ruby com RVM</title>
		<link>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/</link>
		<comments>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 03:52:05 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ferramentas]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=461</guid>
		<description><![CDATA[Introdução Ruby 1.8, Ruby 1.9, Rails 2, Rails 3, cada projeto usando diversas gems. Como isolar esses ambientes para evitar conflitos? Em Outubro de 2007, surgiu uma ferramenta chamada RVM, com o objetivo de criar ambientes isolados para desenvolver software &#8230; <a href="http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3><strong>Introdução</strong></h3>
<p>Ruby 1.8, Ruby 1.9, Rails 2, Rails 3, cada projeto usando diversas gems. Como isolar esses ambientes para evitar conflitos?</p>
<p>Em Outubro de 2007, surgiu uma ferramenta chamada <a href="http://rvm.beginrescueend.com/">RVM</a>, com o objetivo de criar ambientes isolados para desenvolver software em Ruby, permitindo que programadores pudessem usar várias versões de Ruby e Gems numa mesma máquina de forma limpa e sem conflitos. O projeto vem se tornando mais popular este ano, e de fato tem se mostrado muito útil. A lista dos autores pode ser conferida <a href="http://beginrescueend.com/authors" target="_blank">aqui</a>.</p>
<h3><strong>Instalação</strong></h3>
<p>Para instalar o RVM, não é preciso muita coisa além de um ambiente POSIX (linux, bsd, etc). Eu instalei no meu Mac sem problemas. Eu acho que a única coisa que não vem por padrão que você precisa instalar é o <a href="http://git-scm.com/" target="_blank">git</a>, que é usado para instalar/atualizar o RVM e instalar/atualizar as versões de Ruby.</p>
<p>Dito isso, abra o terminal e execute o seguinte comando:</p>
<p><strong>$ bash &lt; &lt;( curl http://rvm.beginrescueend.com/releases/rvm-install-head )</strong></p>
<p>O procedimento não deve demorar mais que alguns minutos, dependendo da sua conexão. Em seguida, abra seu profile (.bash_profile, .profile, .bashrc, etc) e adicione as seguintes linhas:</p>
<p><strong>[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;&amp; source &#8220;$HOME/.rvm/scripts/rvm&#8221;<br />
PS1=&#8221;\$(~/.rvm/bin/rvm-prompt) $PS1&#8243;<br />
</strong><br />
A segunda linha é para que a versão do Ruby que você estiver usando apareça no prompt, caso contrário você vai precisar ficar verificando a todo momento qual versão você está usando e isso pode ser bem chato.</p>
<p>Em seguida, carregue o rvm (da próxima vez que abrir o shell isso não será mais necessário):</p>
<p><strong>$ source ~/.rvm/scripts/rvm</strong></p>
<p>Pronto, o RVM está instalado e é hora de começar a arrumar nosso ambiente.</p>
<h3><strong>Instalando versões de Ruby</strong></h3>
<p>A partir do RVM, é possível instalar qualquer implementação Ruby. Por exemplo, podemos instalar o Ruby, Ruby Enterprise e o Jruby. Para uma lista completa acesse <a href="http://rvm.beginrescueend.com/interpreters/" target="_blank">aqui</a>.</p>
<p>Nesse tutorial, vamos instalar o ruby 1.8.7 . Execute o comando abaixo no terminal:</p>
<p><strong>$ rvm install 1.8.7</strong></p>
<p>1.8.7 é um atalho para o último patchlevel da verão 1.8.7 do Ruby. Em geral, isso funciona para todas as versões. A instalação demora um pouquinho, mas nada absurdo, portanto vá tomar um café e volte. Após o termino, &#8220;entre&#8221; no ambiente do Ruby instalado.</p>
<p><strong>$ rvm &#8211;default 1.8.7</strong></p>
<p>Nesse momento, você entrou no Ruby 1.8.7 e definiu essa VM como default no RVM.</p>
<p>Para voltar ao Ruby do systema (fora da RVM), basta ir no shell e digital:</p>
<p><strong>$ rvm use system</strong></p>
<p>Para listar as VMs instaladas (ou Rubies como preferem os criadores e como chamaremos a partir de agora), basta digitar:</p>
<p><strong>$ rvm list</strong></p>
<p>Escolha a Rubie e use-a conforme o exemplo abaixo:</p>
<p><strong>$ rvm use 1.8.7</strong></p>
<h3><strong>Instalando as Gems</strong></h3>
<p>Uma das manias que a maioria dos Rubistas tem é instalar as gems usando sudo. Isso hoje em dia é considerado má prática. Ainda mais com RVM, já que a intenção é criar uma espécie de SANDBOX por usuário/aplicação, conforme veremos a seguir.</p>
<p>Primeiramente vamos ver as gems que estão instaladas na nova Rubie. O comando é o já conhecido gem list. Ao rodar esse comando na Rubie instalada pelo RVM, você pode ter a impressão que suas gems sumiram, mas na verdade isso é exatamente o esperado, pois cada Rubie tem seu ambiente totalmente isolado. Para ter uma idéia, rode o seguinte comando e veja o output:</p>
<p><strong>$ rvm info</strong></p>
<p>O output fornece toda a informação sobre o ambiente dessa Rubie que está sendo usada no momento. Observe bem a linha home: \n gem:. Nela você verá onde estão sendo instaladas as gems. Repare que ele cria uma estrutura de diretórios sugestiva para você manter suas gems bem isoladas. A estrutura é a seguinte:</p>
<p><strong>~/.rvm/gems/{Rubie@Gemset}/</strong></p>
<p>Todas as gems serão instaladas nesse diretório. Não estranhe o <strong>@Gemset</strong>, falaremos dele adiante.</p>
<p>Vamos então instalar o Rails nessa Rubie. Não use sudo pelo amor de Deus <img src='http://codificando.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>$ gem install rails &#8211;no-ri &#8211;no-rdoc</strong></p>
<p>Depois execute um gem list para ver seu ambiente instalado. Se quiser, execute rvm system e veja que suas gems no ruby do sistema provavelmente são totalmente diferentes.</p>
<h3><strong>Gemsets</strong></h3>
<p>Vamos falar agora do tal @Gemset que eu coloquei na estrutura. Gemsets é uma forma de criar uma SANDBOX mais &#8220;profunda&#8221;. Em um primeiro momento pode parecer desnecessário, mas se você pensar que pode ter mais de um projeto por Rubie e não quer que as gems deles se misturem nem gerem algum tipo de conflito, essa estrutura passa a fazer todo sentido.</p>
<p>Supunha que você tenha um projeto chamado blog. Para criar uma gemset (e entrar nele) para esse projeto basta executar o seguinte comando:</p>
<p><strong>$ rvm gemset create blog &amp;&amp; rvm gemset use blog</strong></p>
<p>Feito isso você verá que no seu prompt (se você fez essa configuração de instalação) estará aparecendo da seguinte forma: <strong>rubie@gemset</strong>. Rode o comando gemlist e verá que novamente suas gems que foram instaladas na Rubie sumiram. Mais uma vez isso é esperado, pois acabamos de criar uma nova SANDBOX para esse projeto específico. Nesse momento, basta instalar suas gems nessa gemset que seu projeto terá um ambiente totalmente isolado.</p>
<p>Se você executar o rvm info, verá que a home das suas gems está com um path diferente do anterior, pois o rvm criou um diretório para a Ruby com a nova Gemset, deixando tudo muito bem organizado.</p>
<p>Existem algumas gems que todos os projetos podem precisar, como Rake e Capistrano. Não seria uma boa idéia instalar essas gems em cada gemset. O RVM nos dá uma ajuda nesse sentido, criando uma gemset global, permitindo compartilhar gems entre todas as gemsets de uma Rubie. Para instalar uma gem nessa gemset basta mudar para ela e installar, como já vimos anteriormente. Vamos a um exemplo:</p>
<p><strong>$ rvm gemset use global<br />
$ gem install capistrano capistrano-ext &#8211;no-ri &#8211;no-rdoc</strong></p>
<p><span style="color: #000000;">Pronto, essas gems não precisam mais ser instaladas para cada projeto novo que você for rodar nessa Rubie.</span></p>
<h3><strong>Conclusão</strong></h3>
<p>O Ruby Version Manager é uma ferramenta muito interessante para gerênciar seu ambiente Ruby. Ter vários Rubies instalado se torna cada vez mais comum, pois os projetos antigos precisam ser mantidos e novos projetos surgem, usando Rubies mais novos. O uso dos gemsets para isolar as gems também faz toda a diferença, evitando diversas dores de cabeça e deixando o ambiente organizado e limpo. Vale a pena experimentar.</p>
<h3><strong>&lt;&lt; UPDATE &gt;&gt;<strong> </strong></strong></h3>
<p><strong><strong><span style="font-weight: normal;">Tem um comando importante que não abordei que é o </span>rvm list known<span style="font-weight: normal;"> que mostra as opções de Rubies disponíveis para instalação. Créditos ao <a href="http://twitter.com/rodvlopes" target="_blank">Rodrigo Lopes</a>.</span></strong></strong></p>
<p><strong><strong> </strong></strong>
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/07/gerencie-ambiente-ruby-rvm/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>No Limite, Lata Velha e uma plataforma que nasce</title>
		<link>http://codificando.com/2010/05/no-limite-lata-velha-e-uma-plataforma-que-nasce/</link>
		<comments>http://codificando.com/2010/05/no-limite-lata-velha-e-uma-plataforma-que-nasce/#comments</comments>
		<pubDate>Wed, 05 May 2010 14:28:24 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[reflexao]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[experiencias]]></category>
		<category><![CDATA[plataforma]]></category>
		<category><![CDATA[produto]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=352</guid>
		<description><![CDATA[Quem é telespectador da TV Globo já está acostumado com os diversos programas de TV que oferecem a oportunidade de participação ao público. Geralmente esses programas abrem uma inscrição através do envio de uma carta ao programa, email, download de &#8230; <a href="http://codificando.com/2010/05/no-limite-lata-velha-e-uma-plataforma-que-nasce/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quem é telespectador da <a href="http://redeglobo.globo.com/" target="_blank">TV Globo</a> já está acostumado com os diversos programas de TV que oferecem a oportunidade de participação ao público. Geralmente esses programas abrem uma inscrição através do envio de uma carta ao programa, email, download de um formulário para preenchimento, etc.</p>
<p style="text-align: center;"><a href="http://codificando.com/wp-content/uploads/2010/05/nolimite.png"><img class="aligncenter size-full wp-image-356" title="nolimite" src="http://codificando.com/wp-content/uploads/2010/05/nolimite.png" alt="" width="648" height="176" /></a></p>
<p>Nos últimos anos, alguns sistemas foram construídos para melhorar esse canal de casting (i.e seleção de pessoas)desses programas para a <a href="http://redeglobo.globo.com/" target="_blank">TV Globo</a>. Porém, a cada iniciativa nova de casting por parte de um programa, era necessário criar um novo sistema de acordo com as necessidades. Até ai tudo bem, afinal de contas cada programa tem uma necessidade específica. Por muito tempo, usamos também o nosso <a href="http://8p.com.br" target="_blank">8p</a> para ajudar nesse sentido, inclusive para clientes importantes, como <a href="http://globoesporte.globo.com/Esportes/Futebol/Brasileirao/musa/0,,16810,00.html" target="_blank">Musas do Brasileirão</a> e <a href="http://bbb.globo.com/" target="_blank">Big Brother Brasil</a>.</p>
<p>Passado algum tempo, percebemos alguma semelhança entre as iniciativas de casting. Em sua maioria, a opção era um formulário de perguntas e respostas e o envio de um vídeo. Sendo assim, resolvemos desenvolver uma solução para possibilitar o cliente criar uma nova campanha de casting em alguns dias.</p>
<p>De toda essa experiência, criamos um projeto chamado Plataforma de Participações, com o objetivo de oferecer aos nossos clientes da TV essa forma simples de criar campanhas. Basicamente quem monta uma campanha hoje pode escolher se tem formulário, vídeo ou ambos e pode fazer uma definição completa do seu formulário (caso exista), configurando cada pergunta e seu tipo de resposta, precisando de pouca ajuda técnica para colocar sua campanha de casting no ar. Cada cliente também personaliza seu header, preservando assim a identidade visual da sua marca.</p>
<p><img class="aligncenter size-full wp-image-357" title="lata_velha" src="http://codificando.com/wp-content/uploads/2010/05/lata_velha.png" alt="" width="645" height="167" /></p>
<p>Como todo produto ágil, existem outras features no backlog para atenderem algumas demandas dos nossos clientes.</p>
<p>Nossos primeiros clientes são o <a href="http://nolimite.globo.com/inscricao/2010/04/30/inscricoes-internet/">No Limite</a> e o <a href="http://tvglobo.caldeiraodohuck.globo.com/participe/2010/04/29/o-seu-carro-esta-caindo-aos-pedacos-a-gente-da-um-jeito/" target="_blank">Lata Velha</a> do <a href="http://caldeiraodohuck.globo.com/" target="_blank">Caldeirão do Huck</a> que já estão no ar há algumas semanas e mostrando que essa Plataforma de Participações tem se comportado muito bem nesse começo.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/05/no-limite-lata-velha-e-uma-plataforma-que-nasce/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Não se apaixone pela sua tecnologia</title>
		<link>http://codificando.com/2010/02/nao-se-apaixone-pela-sua-tecnologia/</link>
		<comments>http://codificando.com/2010/02/nao-se-apaixone-pela-sua-tecnologia/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 00:06:03 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[arquitetura]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=324</guid>
		<description><![CDATA[Cansado das briguinhas recentes em listas de discussão, blogs e foruns sobre Ruby x Python, resolvi escrever sobre o assunto de forma totalmente imparcial. Serei imparcial, não por causa do blog, mas porque com esse tipo de assunto eu sempre &#8230; <a href="http://codificando.com/2010/02/nao-se-apaixone-pela-sua-tecnologia/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cansado das briguinhas recentes em listas de discussão, blogs e foruns sobre Ruby x Python, resolvi escrever sobre o assunto de forma totalmente imparcial. Serei imparcial, não por causa do blog, mas porque com esse tipo de assunto eu <del datetime="2010-02-03T22:29:37+00:00">sempre</del> geralmente sou imparcial, pois pela diversidade de empresas que trabalhei durante os meus mais de 12 anos de carreira, acabei sempre trabalhando com as 2 linguagens que eram o motivo da briguinha, em cada época distinta.</p>
<p><strong>No início</strong></p>
<p>Em meados de 1997/1998, pouco antes da bolha da internet, quando eu comecei a trabalhar profissionalmente, eu trabalhava com eletrônica e informática em uma empresa de automação de ponto e acesso. Tive a oportunidade de usar Delphi para desenvolver um protótipo de sistema integrado ao hardware de ponto e acesso dessa empresa, pois eles usavam um programas DOS para extrair dados e jogar num arquivo texto, e o outro programa DOS fazia a leitura desse arquivo para gerar o resuldado de ponto e o acesso. Foi uma experiência ótima, pois meu protótipo acessava diretamente o equipamento pela porta serial e já mostrava as informações em tempo real. Essa idéia foi pouco tempo depois usada pela fábrica para novas versões do software.</p>
<p>Nessa época, a programação desktop ainda reinava e as opções mais comuns  eram Delphi e Visual Basic, então sempre algum colega ou outro puxava a sardinha pro lado do Delphi ou do VB. Nessa época, confesso que eu era meio bobo no assunto e eu acabava entrando na onda também, principalmente falando mau do coitado do VB. Tempos depois acabei trabalhando com VB em outros lugares e pude perceber que existia aplicação para ele dependendo do caso. Confesso que sempre gostei mais do Delphi, mas nesse momento eu deixava de ser um apaixonado e passava a fazer a escolha de forma mais racional.</p>
<p><strong>Surge o desenvolvimento pra Web</strong></p>
<p>Quando começei a trabalhar com web em meados de 2000, trabalhei com PERL, depois ASP e ColdFusion. Nesse tempo, surgiu a versão Beta do DotNET em 2001. Foi quando comecei a desenvolver aplicações desktop em WindowsForms e alguma coisa web, com o objetivo de aprender.</p>
<p>Passado pouco tempo e fui trabalhar numa empresa onde usavam tudo da Microsoft. Java nem pensar nessa empresa. Todos falavam mau da Sun e do Java. Nessa época eu já estava bem escaldado com isso e não ia cair nessa novamente, perdendo meu tempo discutindo sobre quem era melhor, Java ou DotNET.</p>
<p>Passado mais um tempo, fui para uma outra empresa onde tinha projetos em DotNET, mas também tinha projetos Java. Como eu já estava estudando Java fazia um tempo, era uma ótima oportunidade para por em prática em algum projeto. Assim que surgiu uma vaga, me ofereci para entrar num projeto de um grande ecommerce brasileiro (que por algumas questões não posso citar o nome). Esse projeto foi ótimo para eu por em prática meus conhecimentos de Java. Nesse momento eu percebi que o pessoal de Java também gostava de falar mau do pessoal de DotNET. Na minha mente estava bem claro que isso era pura perda de tempo, pois claramente nos projetos que eu havia trabalhado eu pude perceber o valor de cada uma dessas tecnologias em cada contexto.</p>
<p>Passou o tempo e acabei não trabalhando mais com DotNET. As empresas seguintes foram todas com Java, exceto aqui na <a href="http://globo.com">globo.com</a>, onde voltarei a falar mais pra frente.</p>
<p><strong>Muitos FUDs</strong></p>
<p>Uma coisa que sempre percebi nessas brigas é que raramente usava-se argumentos lógicos e bem fundamentados. Geralmente as discussões eram baseadas em achismos e usavam algum argumento <a href="http://pt.wikipedia.org/wiki/Fal%C3%A1cia" target="_blank">falacioso</a> ou <a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt" target="_blank">duvidoso/pouco claro</a>.</p>
<p>Quando trabalhei para algumas empresas de Telecomunicações, Bancos e Seguradoras aqui no Rio de Janeiro, quase sempre havia um bom legado em COBOL e seus velhinhos de plantão dando manutenção nesses sistemas. Volta e meia eu ouvia algo do tipo: <em>&#8220;Esse negócio de Java é apertar botãozinho e ta tudo pronto. Homem que é homem programa em COBOL&#8221;</em>. Isso não fazia o menor sentido e por mais que eu tentasse explicar pros caras que não era bem assim, não adiantava, já existia uma opinião sem fundamentos formada na cabeça deles.</p>
<p>Numa dessas últimas empresas que trabalhei (para um dos maiores Bancos do nosso país), eu era Arquiteto junto com mais 14 desenvolvedores em um projeto Java que precisava se comunicar com programas COBOL/CICS. Sabe o que os COBOLEIROS diziam? <em>&#8220;Só usem java pra pegar o que for processado aqui no COBOL porque aqui é que aguenta o tranco. Esse negócio de Java só serve para a parte levinha</em>&#8220;. Apesar de conhecer sobre todo o poder de processamento dos <a href="http://pt.wikipedia.org/wiki/Mainframe" target="_blank">Mainframes</a>, eu sabia que aquilo era apenas uma provocação, pois eu já havia trabalhado em sistemas web feitos com Java com volumes bem maiores que os desse sistema e tudo correu muito bem. Sendo assim, nem entrei em discussão sobre isso, pois eles já tinham se fechado para o assunto.</p>
<p><strong>Nossos dias atuais</strong></p>
<p>Hoje em dia está muito na moda o uso de linguagens dinâmicas como Ruby e Python para desenvolvimento de software, muitos deles aplicações web. Existem diversos casos de sucesso usando essas tecnologias, e mais uma vez surgem as brigas pra saber qual é a melhor: Ruby ou Python.</p>
<p>Não espere aqui uma opinião minha sobre o que é melhor entre as 2, pois isso não vai acontecer. Não porque eu não tenha preferências, mas simplesmente porque melhor ou pior sempre dependerá do contexto e não somente da tecnologia.</p>
<p>Python é uma linguagem muito usada no mundo opensource, tendo muitos aplicativos console e desktop desenvolvidos para linux. A primeira versão do <a href="http://www.youtube.com" target="_blank">Youtube</a> foi escrita em Python (não sei se ainda é). O <a href="http://code.google.com/intl/pt-BR/appengine/" target="_blank">Google AppEngine</a> apesar de suportar Java, foi construido para Python. Existem diversas iniciativas que usam Python e são bem sucedidas.</p>
<p>Ruby apesar de ser uma linguagem bem antiga (1993), só explodiu mesmo com a chegada do Rails (2004/2005). Antes disso ninguém ouvia falar de Ruby. Mesmo assim, Rails trouxe uma ascensão meteórica para o Ruby, surgindo um ecosistema incrível, com uma série de produtos bem sucedidos e documentações fantasticas, screencasts, entre outros. Destacou-se muito com as <a href="http://rspec.info/" target="_blank">ferramentas de testes</a> <a href="http://cukes.info/">automatizados</a> que tanto precisamos hoje em dia para desenvolvermos software com qualidade.</p>
<p>No time onde eu trabalho na <a href="http://globo.com">globo.com</a>, desenvolvemos projetos em Java, em Python/Django e Ruby on Rails (projeto atual). Cada uma das escolhas teve razões lógicas e seus benefícios (que se comprovaram). Essa versatilidade faz com que esse time possa trabalhar em praticamente qualquer projeto da empresa, já que tem conhecimento nas principais linguagens que a empresa trabalha. Isso é muito mais benéfico do que ficar preso a uma tecnologia, defendendo-a com unhas e dentes.</p>
<p><strong>O Mito do não escala</strong></p>
<p>Com o advento dessas linguagens dinâmicas, deu bem pra perceber como a maioria dos profissionais não entendia/não entende quase nada sobre escalabilidade de sistemas web. Assim como o COBOLEIRO falava que o Java não aguentava o tranco, começaram a falar que linguagens dinâmicas não escalavam, principalmente o famoso &#8220;Rails não escala&#8221;.</p>
<p>Certa vez eu lí um post de 2004 (antes do Rails) que já falava sobre esse mito de não escala. Vale a pena conferir <a href="http://www.infoworld.com/d/developer-world/it-myth-6-it-doesnt-scale-007" target="_blank">aqui</a>. E tem também <a href="http://content.newrelic.com/railslab/videos/01-ScalingRails-Page-Responsiveness.mp4" target="_blank">um screencast mais recente</a>(baixe o vídeo e assista) do <a href="http://twitter.com/GreggPollack">Gregg Pollack</a> que nos primeiros minutos mostra na maioria das vezes o que deixa um site lento. Dica: tem pouco a ver com a tecnologia usada.</p>
<p>Portanto, não caia nessa. Pesquise e aprenda como escalar sua aplicação, independente de você estar usando Python/Django Ruby/Rails, Java, DotNET ou qualquer outra tenologia do seu projeto.</p>
<p><strong>Conclusão</strong></p>
<p>Mesmo com essas 2 tecnologias (Ruby e Python) fazendo seu sucesso nos dias de hoje e tendo seu contexto para serem aplicadas, o pessoal ainda continua brigando pra defender a sua tecnologia preferida. Parece que cria-se uma paixão cega pela linguagem, como se fosse uma espécie de religião, saindo do racional e passando a ser totalmente irracional.</p>
<p>Dessa forma, meu conselho para todos os profissionais é que não entrem nessa de ficar defendendo sua tecnologia preferida e atirando pedra na tecnologia concorrente. Aprenda ambas e saiba onde e quando usar cada uma delas.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/02/nao-se-apaixone-pela-sua-tecnologia/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://content.newrelic.com/railslab/videos/01-ScalingRails-Page-Responsiveness.mp4" length="52234333" type="video/mp4" />
		</item>
		<item>
		<title>Afinal, o que seria um profissional sênior?</title>
		<link>http://codificando.com/2009/06/afinal-o-que-seria-um-profissional-senior/</link>
		<comments>http://codificando.com/2009/06/afinal-o-que-seria-um-profissional-senior/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 03:44:05 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[gestão]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[carreira]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[trabalho]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=99</guid>
		<description><![CDATA[Certo dia um amigo com alguns bons anos de experiência e trabalhando na função de pleno, achou que era a hora de mudar de cargo para sênior. Chegando no seu gerênte, recebeu a seguinte resposta: &#8220;fulano, não posso te passar &#8230; <a href="http://codificando.com/2009/06/afinal-o-que-seria-um-profissional-senior/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Certo dia um amigo com alguns bons anos de experiência e trabalhando na função de pleno, achou que era a hora de mudar de cargo para sênior. Chegando no seu gerênte, recebeu a seguinte resposta: &#8220;fulano, não posso te passar pra sênior porque você não conhece o <a href="http://pt.wikipedia.org/wiki/Brainfuck">framework xyz e a lingaugem abc</a>&#8220;. Esse meu amigo chegou perto de mim bem cabisbaixo e me contou o que tinha acontecido. Simplesmente achei o fato ridículo. Talvez ele realmente não fosse o momento de se tornar sênior (i.e. em relação ao cargo), mas esse argumento realmente não cola.</p>
<p>Como já mencionei em <a href="http://codificando.com/2008/06/25/informatica-traducao-confusao/">outros</a> <a href="http://codificando.com/2008/12/12/a-diferenca-entre-criar-e-fabricar/">posts</a> nesse mesmo blog, nossa área de desenvolvimento de software/informática está cheia de termos/nomenclatura que se confundem facilmente (e.g. as discussões no <a href="http://www.guj.com.br" target="_blank">GUJ</a> sobre DTO). Mais uma vez, falarei sobre um deles: a classificação júnior, pleno, sênior.</p>
<p>Dando uma passeada pelos sites de <a href="http://www.apinfo.com/">emprego</a> de <a href="http://netcarreiras.com/">informática</a>, é fácil ver vagas para <a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/">analista de sistemas</a> / programador / desenvolvedor júnior, pleno e sênior, etc. Acontece que a maioria das pessoas (inclusive os gerêntes de TI) não sabem muito bem fazer essa distinção entre os níveis, causando uma grande confusão na cabeça de todo mundo, inclusive na hora de negociar o cascalho. Portanto, vamos começar pelo básico &#8230;</p>
<div class="mceTemp">
<dl id="attachment_121" class="wp-caption alignright" style="width: 310px;">
<dt class="wp-caption-dt"><img class="size-medium wp-image-121" title="yoda" src="http://codificando.com/wp-content/uploads/2009/06/yoda-300x226.png" alt="Master Yoda" width="300" height="226" /></dt>
</dl>
</div>
<p>Não sou uma pessoa entendida de RH, muito menos sei a história sobre como começou essa nomenclatura de júnior, pleno e sênior. Mas como trabalho na área de TI faz 12 anos e já passei por um bocado de empresas, acho que posso dar meu pitaco sobre o assunto. As melhores <a href="http://pt.wikipedia.org/wiki/S%C3%AAnior">definições que consegui</a> <a href="http://www.priberam.pt/DLPO/default.aspx?pal=s%C3%A9nior">na internet</a> para sênior foram: <strong>ancião, velho, pessoa com mais experiência em alguma profissão</strong>. De cara tem alguma coisa estranha na resposta que o tal gerente deu pro meu amigo, mas não para por ai.</p>
<p>No início da minha carreira, nas empresas onde passei, <strong><em>geralmente o cara sênior era um cara com mais experiência, uma pessoa que viveu mais situações, uma pessoa mais madura (não necessáriamente velha ou idosa)</em></strong>. Por muitas vezes, essa pessoa não conhecia uma ferramenta ou outra de trabalho que eu conhecia, mas isso de maneira alguma me colocava no mesmo nível daquele profissional, pois tomando conhecimento da existência daquela ferramenta e utilizando um pouco do seu tempo, a tal ferramenta estava absorvida por este.</p>
<p>E o que eu quero dizer com isso? <strong><em>Eu quero dizer que se você começou agora, mesmo que você saiba python, ruby, java, erlang, haskell, xpto, brainfuck, você é Júnior ainda. Lógico que é ótimo saber diversas ferramentas e eu recomendo a todos estudar para isso.</em></strong> O mesmo princípio se aplica ao profissional sênior. Fatalmente tem algumas coisas que lhe fogem ao conhecimento, porém a diferência é que esse naturalmente conhece muitas ferramentas  devido a sua experiência ao longo dos anos. Não foi simplesmente um livro que leu ou um tutorial da internet que fez, mas projetos reais que participou. <strong><em>Um sênior deve saber debater com seus superiores sem medo, com argumentações bem formuladas, sabendo exatamente a sua posição, mas sem muito se intimidar quando conversa com outro profissional acima na hierarquia. </em></strong>Deve chamar a responsabilidade para si em momentos críticos, deve ajudar e ensinar os demais simplesmente porque isso é de sua responsabilidade.<strong><em><br />
</em></strong></p>
<p><em><strong>Saber ou não uma determinada linguagem ou ferramenta não faz necessáriamente de você nem júnior nem sênior</strong></em>, pois isso as vezes depende da sua trajetória de carreira. Eu por exemplo não sei nada de <a href="http://pt.wikipedia.org/wiki/ABAP" target="_blank">ABAP</a>, pois nunca trabalhei com <a href="http://www.sap.com/">SAP</a> ou algo que use essa linguagem. Talvez você esteja aprendendo Java nesse momento mas tem 10 anos de experiência com C/C++ e tem ótimas práticas de programação. Em fim, é bem relativo.</p>
<p>Pra finalizar, certa vez um amigo me disse que sênioridade é algo como um estado de espírito. Vou até um pouco além disso. Acredito que sêrionidade é um estado avançado de profissionalismo aliado a maturidade alcançada ao longo do tempo.</p>
<p><strong>Disclaimer: </strong></p>
<p>Para que não pareça que defendo regime de quartel, quero deixar bem claro que hoje em dia de nada adianta você ser maduro e experiente se você é um profissional encostado e desatualizado. E o talento, é claro, sempre fala mais alto.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2009/06/afinal-o-que-seria-um-profissional-senior/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
