Produtividade quase de graça

Esses dias estávamos discutindo no .Net Architects sobre ferramentas, e sua relação custo x benefício. Em vez de me repetir, vou colocar aqui um pouco do que falei na thread, editado por brevidade. É apenas uma introdução, o que quero apresentar vem em seguida.

(…) Software é barato. Caro é hora de programação. O custo do software, se houver, dilui no custo das horas. Vamos fazer um teste de mesa rápido: um Visual Studio de R$ 2 mil reais (está por aí), e dois desenvolvedores de R$ 8 mil reais (aprox R$47,6 /h a 168 horas/mês). Se os desenvolvedores trabalharem 6 meses, fica aproximadamente 96 mil reais de hora de programação, mais 4 mil de licença, totalizando 100 mil reais. O Windows veio na máquina Dell ou HP que você comprou, OEM. O server você já deve ter, e o Team Foundation Server (TFS) vem de graça para até 5 usuários na versão workgroup. Então a hora subiu cerca de dois reais, para aproximadamente de R$ 49,6. Uma diferença de menos de 5%. E você vai poder usar o VS por mais uns anos, diluindo ainda mais. (…) Poupar na compra de licença do VS chega a ser tão absurdo quanto contratar o melhor cozinheiro do planeta e dar dez reais pra ele comprar os ingredientes. É igual a Ferrari contratar o Senna e jogar na mão dele um fusca, porque o carro é muito caro. Não faz o menor sentido.

Pois é, a produtividade do Visual Studio é absurdamente alta. Chutei o custo de mais ou menos 2 mil reais no VS, e isso pode variar, mas acho que não muito. De qualquer forma, o custo é muito baixo considerando a produtividade que ele entrega. Com 5% de custo a mais, você mais que dobra sua produtividade. Não vou nem comentar o custo de programas como o Microsoft SOL, ou as assinaturas MSDN, porque aí fica barato demais.

Todos estamos felizes com o Visual Studio, dificilmente alguém reclama da ferramenta e quando reclama é que ele consome muita memória. Que tal então ganhar pelo menos mais uns 30% de produtividade, por menos de quinhentos reais? Que tal anabolizar o Visual Studio? Pois é isso que o Resharper (R#) faz.

Eu não usava o R# até me tornar MVP. Quando fui nomeado fiquei sabendo que a JetBrains, fabricante da ferramenta, dava uma licença de graça para todos os MVPs. Já tendo ouvido falar muito da ferramenta, baixei uma versão completa de testes, gostei muito do que vi, daí pedi uma licença full. Já tens uns meses, e continuo ficando cada vez mais produtivo.

Não é brincadeira, a ferramenta aumenta pelo menos uns 30% na produtividade, mas estou desconfiado que é mais. Pra quem gosta de deixar o mouse de lado e machucar o teclado o R# é sensacional. Praticamente todos os atalhos estão ligados ao teclado, e você faz o que quiser sem colocar a mão no mouse.

Você ganha muito tempo na refatoração. Ele tem um módulo que facilita a execução de testes unitários. Tem um revisor de padrão de nomeação de variáveis. Torna os code snippets ainda mais poderosos, e acrescenta mais um monte. Auxilia na geração de código repetitivo, como implementação de interfaces (de maneira bem mais inteligente que a presente no VS), entre mais um monte de outras outras coisas. Ah, já ia esquecendo, ele habilita TDD no VS, tirando boa parte da fricção existente em uma linguagem estática, como o C#. Aliás, programar com R# faz você esquecer que o C# é uma linguagem estática, facilitando muito a refatoração, ao mesmo tempo que permite todo o poder de uma linguagem deste tipo.

Alguns exemplos:

Você renomeia uma classe, quer renomear o arquivo, basta clicar clicar na lampadinha, o R# renomeia o arquivo pra você:

R# renomeando arquivo

Esse é um dos mais legais. Você move uma classe no Visual Studio, ele percebe que ela está sob uma outra estrutura de projeto ou diretório, e sugere o rename do namespace:

R# renomeando namespaces

Ele não só renomeia os namespaces. Ele refatora todo e qualquer uso da classe, adicionando usings em todos os arquivos de classes que chamavam a classe alterada e não tinham elas nos usings ainda.

Repararam que os "usings" estão meio cinzas no exemplo anterior? É porque todo código desnecessário fica assim quando você usa o R#. Por exemplo, usar "this", ou um construtor inútil, e para remover, é só clicar na lampadinha:

R# limpando os usings

E se eu referencio uma classe que não está nos meus usings, ele percebe que ela existe, e coloca o using pra mim. Se está em outro projeto, ele já faz a referência, e adiciona o using, tudo de uma vez. Aqui referenciando uma classe no mesmo projeto.

R# consertando os usings automaticamente

Aqui a de outro projeto, onde ele mesmo adiciona a referência:

R# adicionando uma referência automaticamente

E é assim que ele habilita TDD também. Vocês viram que a segunda opção é criar uma nova Classe1, não é? Ele faz isso também com método, propriedades… Você escreve todo o código, e depois sai criando o que falta.

E a refatoração? Além do comum "Extract Method", que o VS já trás, ele tem mais alguns:

Refatorações do R#

Pouca coisa, né?

Para quem já usa, ou vai testar, tenho duas dicas de atalhos. O R# tem dezenas de atalhos pro teclado, mas há dois que você não pode esquecer. O primeiro é o ALT+Enter, que aparece na quarta figura daqui do post. Toda vez que ele percebe que você fez algo que está errado ou podia ser melhor e aparece a lampadinha amarela ou vermelha, respectivamente, é só entrar com um ALT+Enter, que ele te ajuda. O segundo é CTRL+SHIFT+R. Esse segundo trás o menu de contexto, com as refatorações possíveis no código selecionado, já com os atalhos anotados para da próxima vez você fazer direto:

Refatorando com atalho CTRL+SHIFT+R e R#

Aí é só escolher o que você precisa fazer na refatoração.

Quando estou em clientes costumo usar meu próprio Notebook, porque não é tão comum ainda o cliente ter o R#, então eu ganho em produtividade. E não é fácil programar sem ele quando você acostuma, você fica muito mais rápido… O engraçado é que é muito comum o cliente comprar o R# durante a minha consultoria. Depois de palestras também é bem comum eu ser questionado "que ferramenta é essa" que estou usando.

 

Passamos um tempão procurando melhores maneiras de codificar, estudando padrões, técnicas de acesso a dados, etc, etc. Produtividade é algo difícil de espremer, e os caras conseguiram.

O custo é bem tranquilo. A licença profissional completa (C# e VB) fica USD 350, a só de C# fica USD 250. Licenças para projetos open source são de graça. A licença pessoal vai de 50 dólares (VB) e USD 150 (C#) a USD 200 (C# e VB), e a licença acadêmica vai de zero a USD 50.

Em tempo: não ganho absolutamente nada para indicar a ferramenta. O faço porque a ferramenta é realmente excelente e realmente acho que vocês vão ganhar muito em usá-la. Para ajudar mais, eles me convidaram para fazer parte do programa de incentivo da ferramenta, então se alguém for comprar uma licença, fale comigo que consigo um cupom de 10% de desconto. Basta deixar um comentário aqui que eu entro em contato, ok? Mas antes de me pedir o cupom, baixe a ferramenta, avalie, e, se for realmente comprar, aí sim entre em contato.

Pra terminar, vejam o vídeo de uma sessão chamada Jedi coding. São só 8 minutos, onde você fica de boca aberta, o cara monta um sistema cheio de detalhes em 8 minutos. O nome "Jedi coding" não é à toa.

Quem já usa, ou vier a usar, comente aqui o que achou.

  • http://hugoestevam.blogspot.com/ Hugo Estevam

    Realmente esse tipo de ferramenta faz a diferença. Usei o R# durante o período de avaliação e gostei muito. A tela mais interessante que achei dele você não colocou aí, que é a tela das Seções de testes. Ficou muito boa essa tela. Outra ferramenta que tiro o chapéu e que atualmente uso é o CodeRush da DevExpress. Tem a verão CodeRush Xpress que é free, pra quem não tem grana no momento e é bem completa por sinal. E a versão paga que tem inúmeras features, acho que num comparativo ele só não tem a seção de testes e atalho para criar ou mover arquivos, no mais é bem completo. Adoro os atalhos sugestivos dele para criar métodos, variáveis, etc. O CodeRush por sinal, na versão que está em Beta 9.2 ficou bem leve, no site da DevExpress da para acompanhar um comparativo que é feito sobre o consumo de memória das versões antigas e da nova versão, isso deve ser levado em conta também, não adianta ter atalhos mais rápidos se no geral a execução da ação leva mais tempo :)

  • rodolfo

    A ferramente realmente é muito boa, só tive 3 pequenos contra-tempos.
    1: Ele substitui alguns do atalhos do VS.
    2: Ela gera um monte de arquivo temp na pasta do projeto.
    3: O Visual Studio ficou incrivelmente mais pesado com ele.

    Mas isso foi no VS 2K5, já faz uns 2 anos. Talvez eles tenham mudado coisa.

  • http://blog.egomesbrandao.net/ Brandão

    Tenho usado o Code Rush mais para experimentação, pois uso os componentes FREE do pacotão dele, e quando baixo o pacote inteiro ele instala para avaliação. Esse tipo de ferramenta é muito boa mesmo! Você demora um pouco para decorar atalhos, mas depois sempre tá usando. A versão completa tem bem mais funcionalidades que a Express.
    E realmente, Hugo, acho que no Code Rush só o que não tem são testes… Quer dizer, não sei direito…

  • http://magodigital.info/ Raphael

    Acabei de baixa e estou usando. É realmente muito bom. Me lembrou (mas nem deu saudades) muito o Netbeans. Mas tenho umas duvidas.
    Percebi que ele "aconselha" algumas coisa como:
    a) usar o prefixo "_" para variáveis privadas,
    b) usar var para declarações
    c) em alguns métodos, ele "aconselha" que seja static

    Fico confuso, se sigo, ou se continuo seguir a minha maneira (eu sei que pode mudar)
    Mas as "regras" que ele propõe, são baseadas em que?
    O que a microsoft aconselha, tem algum doc que mostra isso?
    E por fim, o que você aconselha!

    acho que a resposta da pra vira um post :)

    Abraço!

  • http://magodigital.info/ Raphael

    Acabei de baixa e estou usando. É realmente muito bom. Me lembrou (mas nem deu saudades) muito o Netbeans. Mas tenho umas duvidas.
    Percebi que ele "aconselha" algumas coisa como:
    a) usar o prefixo "_" para variáveis privadas,
    b) usar var para declarações
    c) em alguns métodos, ele "aconselha" que seja static

    Fico confuso, se sigo, ou se continuo seguir a minha maneira (eu sei que pode mudar)
    Mas as "regras" que ele propõe, são baseadas em que?
    O que a microsoft aconselha, tem algum doc que mostra isso?
    E por fim, o que você aconselha!

    acho que a resposta da pra vira um post :)

    Abraço!

  • http://magodigital.info/ Raphael

    Acabei de baixa e estou usando. É realmente muito bom. Me lembrou (mas nem deu saudades) muito o Netbeans. Mas tenho umas duvidas.
    Percebi que ele "aconselha" algumas coisa como:
    a) usar o prefixo "_" para variáveis privadas,
    b) usar var para declarações
    c) em alguns métodos, ele "aconselha" que seja static

    Fico confuso, se sigo, ou se continuo seguir a minha maneira (eu sei que pode mudar)
    Mas as "regras" que ele propõe, são baseadas em que?
    O que a microsoft aconselha, tem algum doc que mostra isso?
    E por fim, o que você aconselha!

    acho que a resposta da pra vira um post :)

    Abraço!

  • http://magodigital.info/ Raphael

    Acabei de baixa e estou usando. É realmente muito bom. Me lembrou (mas nem deu saudades) muito o Netbeans. Mas tenho umas duvidas.
    Percebi que ele "aconselha" algumas coisa como:
    a) usar o prefixo "_" para variáveis privadas,
    b) usar var para declarações
    c) em alguns métodos, ele "aconselha" que seja static

    Fico confuso, se sigo, ou se continuo seguir a minha maneira (eu sei que pode mudar)
    Mas as "regras" que ele propõe, são baseadas em que?
    O que a microsoft aconselha, tem algum doc que mostra isso?
    E por fim, o que você aconselha!

    acho que a resposta da pra vira um post :)

    Abraço!

  • http://blog.fujiy.net/ Felipe Fujiy

    Estou testando a ferramenta também e achei maravilhosa, ja mandei pro meu chefe, ele pediu pro pessoal testar também para poder comprar.

    Se rolar mesmo vou querer esse desconto, vale pra qualquer quantidade de licenças?

    Abraços

  • http://blog.fujiy.net/ Felipe Fujiy

    rodolfo, realmente fica mais pesado, estou usando no VS2008 e minha maquina que já chorava, agora da umas travadas….no do meu amigo também(usamos um projeto bem pesadinho).

    Raphael, quanto aos métodos static, eu concordo com o R#, pois se um método tem tudo pra ser static, melhor que seja(do ponto de vista de performance e memoria). Mas usar var e _ como prefixo, acho ruim. O uso de var deixa o código menos claro para mim, além de poder levar a erros de execução, caso alguem mude o código, alterando alguma conversao, ou quando se tem conversao implicita.

  • http://magodigital.info/ Raphael

    Felipe, mas eu gostaria de saber se é realmente a "melhor maneira"! Mas ate agora eu soh nao concordei mesmo foi com o prefix "_" e o uso do var!

  • Jessé Haniel

    Bacana, mas o Eclipse já faz isso há muuuuito tempo! No dia que conseguirem colocar o poder do editor de código do Eclipse dentro do Visual Studio, aí não haverá mais limites. O pessoal terá que caprichar pra explicar pq o projeto atrasou :P

  • http://blog.fujiy.net/ Felipe Fujiy

    Raphael, talvez ele diga pra usar o prefixo _ pra diferenciar dos nomes dos argumentos.

    Porém a Microsoft tem um padrão de nomenclatura, e é sem o _. Mas no final, você que deve escolher qual padrão seguir e ser consistente.(http://msdn.microsoft.com/en-us/library/xzf533w0(VS.71).aspx)

    De qq forma, no R# voce pode mudar, ele deixa configurar o prefixo pra essa regra, é só tirar o _ e deixar vazio.

    Obs.: O post de comentario só funciona no IE =/

  • http://unplugged.giggio.net/ Giovanni Bassi

    Raphael,
    Sim, da pra customizar, como o Felipe disse. Eu particularmente acabo usando o "_" e o var.
    Os métodos são aconselhados para serem estáticos se eles não acessam nenhuma informação de objeto, ou seja, nenhum campo ou método.

    Jessé, o R# existe faz um bom tempo também… A Microsoft foca o desenvolvimento do VS em várias frentes, e algumas ficam pra parceiros.

    Felipe, acho que rola sim. Se precisar me fala.

    A todos: sim, o R# pesa. Já vi meu VS usando 700 MB de memória. Mas tudo bem, eu tenho 4 GB no Notebook, e 8GB no desktop. :)

  • http://www.pedroreys.com/ Pedro Reys

    Giovanni,

    Estou atualmente morando em Austin, no Texas, na verdade acabei de chegar fazem 2 semanas. Bem essa semana fui em uma apresentacao do Agile User Group daqui e o Eric Anderson(http://www.lostechies.com/blogs/eric/default.aspx), que tava falando sobre TDD e SOLID, quando comecou a codificar tinha o R# e utilizou um monte de code-snippets. Com isso surgiu o assunto do uso ou nao de ferramentas como o R#. Foi quando o Eric disse algo muito interessante, mais ou menos assim: Mesmo que sua empresa nao queira arcar com os custos das ferramentas, o proprio desenvolvedor deve arcar com estes, pois sao estas ferramentas que o farao se destacar e o tornarao inumeras vezes mais produtivo.

    Bem,

  • Robson Alves

    Cara, eu instalei a versão beta e me tornei um viciado pelo R#, pena que acabou o tempo de avaliação, ai cai no seu post!

    Você ainda tem esse cupom de descontos?!