Willian Fernandes

Pair Programming – Por que e como usar?

Comente »

Pair Programming é, para mim, a melhor forma de trabalhar em equipe. Facilita a comunicações e impede que o conhecimento de uma funcionalidade/lógica fique somente com um desenvolvedor.

Trabalhando em Pair foi fácil perceber a evolução das pessoas como profissionais. Um profissional Jr. rapidamente ganhava experiência, adquiria habilidades e virava fluente na linguagem[bb], ou seja, treinar a equipe usando Pair foi muito mais simples e barato para a empresa.

Mas, essa é minha opinião. Muita gente compartilha comigo esse mesmo sentimento, mas muita gente torce o nariz quando escuta as palavras Pair Programming juntas.

Mas como começar com Pair Programming?

Não adianta impor sua equipe a trabalhar assim. Mas antes de aceitar um não da equipe, é interessante testar e analisar a aceitação de todos.

Quando trabalhava na WebCo (Abril Dgital), resolvemos usar a Programação em Par[bb]. Foi fácil convencer todos, pois, no nosso caso, todos a maioria que torciam o nariz nunca tinham usado Pair, ou seja, não tinham argumentos.
No começo havia discussões, stress, mas com o tempo todos foram percebendo os ganhos que estávamos tendo com a adoção e virou regra da empresa utilizar Pair 100% do dia. Quando entrevistávamos alguém, um dos requisitos era a pessoa não ter nada contra ao trabalho em equipe, principalmente ao Pair.

Mas isso tudo poderia ter sido um tiro no pé. Por isso precisamos estudar caso à caso.
Hoje trabalho numa empresa que somente EU trabalhei com Pair Programming. Tive muitas barreiras para quebrar, principalmente dos gerente, mas felizmente consegui convencê-los e vou começar com Pair na minha equipe.

Como uso Pair Programming

Como uso Scrum para gerenciar o processo do desenvolvimento, ficou fácil dividir as duplas do Pair. No Daily Meeting, quando definimos o que faremos hoje, também definimos com quem faremos Pair. E durante o dia todo não trocamos de par, apenas revezamos, de tempos em tempos, o driver e o navigator. Esse revezamento pode ser feito marcando em um cronometro que avisará quando a troca ocorrerá, ou simplesmente quando a dupla julgar necessário (o que eu prefiro).

No dia seguinte, um das pessoas do par continua na história e a outra pessoa escolhe em qual história trabalhará e com quem fará par. O mesmo ocorre com os outros pares. Ou seja, assim conseguimos manter uma boa rotatividade. A idéia é que o maior número de pessoas possam trabalhar juntas durante o Sprint.

A dinamica


História 1: Juca - Pedro
História 2: Lucas - Thiago
História 3: Maria - Carla
1º Dia


História 1: Juca - Carla
História 2: Lucas - Pedro
História 3: Maria - Thiago
2º Dia


História 1: Carla - Thiago
História 2: Lucas - Juca
História 3: Maria - Pedro
3º Dia

E assim por diante…

Baby steps

Como disse, hoje estou começando com Pair na minha equipe, ela será uma cobaia dentro da empresa. Tendo bons resultados, poderemos expor para as outras equipes também dotarem o uso do Pair Programming.

Resumindo…

Não adianta impor, de cara, que toda a empresa adote o uso do Pair, escolha uma equipe madura, pense pequeno e, dando tudo certo, vá expandindo até que isso vire uma cultura dentro da empresa.

Respeite a opinião dos outros, aceite a derrota e mude de empresa se for o caso. Mas não faça inimigos tentando evangelizar algo. Acredite, não vale a pena. Se for necessário, peça ajuda. Tem muita gente na internet usando Pair.

Programador Lento x Produtividade x Cultura

Comente »

Hoje li o post do Rafael Lima e me deu vontade de falar sobre o assunto.

Conheço muita gente, incluindo donos de empresas de desenvolvimento, que confudem Programador Rápido com Qualidade/Produtividade. Além disso, essas pessoas costumam achar que quanto mais “Programadores Rápidos” forem contratados, mais rápidos seus projetos serão entregues, mais felizes seus clientes ficarão e mais projetos poderão desenvolver.

Isto é mentira!

Essas pessoas se esquecem que quanto maior a equipe mais complicado fica o gerenciamento[bb], que quanto mais rápido[bb] um programador for mais bug este código terá. Sim, sim, eu também conheço muita gente boa que programa rápido e entrega código com qualidade, mas vamos concordar que infelizmente essa não é a realidade da grande maioria.

Como o Rafael Lima disse, antes de julgar e comparar um programador rápido com um lento, vamos ver se estão fazendo testes, se estão se preocupando com a qualidade antes de entregar o produto. Prefiro entregar um produto bom com alguns dias de atraso do que entregar na data e falhar quando o cliente for usar.

E por falar em testes, essas mesmas pessoas insistem em deixar “5 horas” no final do projeto para a equipe de QA. Pensam, ou fingem pensar, que isso é o bastante para garantir a qualidade do produto e o sucesso do projeto.

Vejo isso todos os dias e só lamento.

Essas pessoas precisam ler mais sobre Getting Real, Gerenciamento de Projetos Ágeis e Gestão de Pessoas.

Concordo com o Rafael quando ele diz que prefere um programador lento do que o “rapidão da turma”.

Ambiente de desenvolvimento Ruby on Rails no Mac OS Snow Leopard

Comente »

Recentemente atualizei meu Mac para o Snow Leopard[bb] e fui logo configurar meu ambiente de desenvolvimento[bb].

Como alguns já sabem, programo em Python[bb], mas atualmente estou afastado da linguagem, utilizando 100% Rails[bb].

Uma das coisas que aproveitei quando resolvi instalar o Snow Leopard[bb] foi formatar todo o HD. Com o tempo fui acumulando alguns lixos, então juntei o útil com o agradável e fiz uma bela faxina.

Outra coisa: meu Vim estava todo bagunçado. Fiz uma cagada nele e estava difícil trabalhar com ele, então estava usando somente o TextMate[bb]. Adoro o TextMate, é um baita editor, mas não é meu Vim[bb]. Com o Vim me sinto mais em casa e não sofro quando preciso programar em uma máquina que não seja meu Mac[bb], afinal, o Vim é free e roda até no Windows[bb] (eca!).

Bom, vamos lá!

O Vim

Para facilitar sua vida, criei um repositório do meu Vim, todo configurado, pronto para uso.

Para instalá-lo, basta fazer o clone:

$ git clone git://github.com/willian/willvim.git

Entre no diretório criado pelo comando acima e execute o comando abaixo:

$ chmod +x install.sh
$ ./install.sh

Os comandos acima baixam os repositórios dos plugins e faz a instalação dos arquivos no seu diretório $HOME/.vim.

ATENÇÃO: Esses comandos não funcionarão no Windows[bb]. Em breve configurarei isso.

MacVim

Gosto de usar o MacVim[bb] (ou o gVim quando estou no Linux), pois tem uma aparência melhor do que o Vim no terminal.

Entre na página de download do MacVim e baixe a versão mais nova. A versão "stable" até a data deste post é a MacVim-7_2-stable-1_2.tbz.

Se você está no Linux[bb] e usa Ubuntu[bb], basta rodar o comando abaixo:

$ sudo apt-get install vim vim-gnome vim-full vim-python vim-rails vim-ruby

Agora basta rodar o comando mvim ou gvim (caso você esteja no Linux) no terminal para abrir o Vim no modo gráfico.

Ruby on Rails

Tanto a linguagem quando o framework já estão instalados no seu Mac, mas precisamos atualizá-los. Na verdade, você pode apenas atualizar o Rails[bb], e é exatamente isso que vou mostrar aqui.

Atualizando o RubyGems

$ sudo gem install rubygems-update

Esse comando instala a nova versão do RubyGems[bb]. Para verificar a versão instalada, rode o comando abaixo:

$ gem -v
1.3.5

Até a data deste post a versão mais nova é a 1.3.5.

Atualizando suas gems

$ sudo gem update

Atualizando o Ruby on Rails

Nesse ponto a versão do Rails já deve estar atualizada, mas caso não esteja, rode o comando abaixo:

$ sudo gem install rails

MySQL

Apesar de poder rodar o Rails com o SQLite[bb], gosto de usar o MySQL[bb] no ambiente de desenvolvimento. Para isso, acesso a página de download do MySQL e busque a versão mais nova. Na data de criação deste post a versão mais nova é a MySQL 5.1.

ATENÇÃO: Só fique atento à arquitetura escolhida. O Snow Leopard[bb] roda com 64bits[bb], então baixe a versão x86_64.

Feito isso, hora de instalar a gem do MySQL:

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Testando tudo

Vamos criar um aplicação de teste para verificar se o Rails está rodando corretamente, incluindo o MySQL:

$ rails blog -d mysql
$ cd blog/
$ script/generate scaffold Post title:string body:string
$ rake db:create
$ rake db:migrate

Se não aparecer nenhuma mensagem de erro, os procedimentos acima foram executados corretamente e você agora tem um ambiente completo para desenvolver seus aplicativos com Rails.

Rails Summit 2009 – Eu vou!

Comente »

Estou aqui somente para comunicar minha presença no Rails Summit 2009.

Não preciso dizer o quanto estou ansioso para que esse dia chegue. Serão dois dias de muito conteúdo bom, de conhecimento garantido!

Nos vemos lá!

Rails Summit 2009

Rails Summit Latin America 2009 – Eu NÃO VOU (Por enquanto… hehehe)

Comente »

Dias 13 e 14 de outubro acontecerá o Rails Summit 2009. Um mega evento com muita gente boa falando sobre Rails, Agile, Escalabilidade, Testes (TDD, BDD, entre outros) e muitos outros assuntos relacionados ao framework.

Infelizmente não irei nesse ano, por motivos de força maior (casamento consumindo toda grana) não estarei presente no event. Quer dizer, não estarei presente até que eu ganhe o ingresso do sorteio de amanhã.

Boa sorte para mim e bom evento à todos!

O que mudou no Ruby 1.9

Comente »

Meu amigo Nando Vieira acabou de lançar mais um PDF da série HOWTO mostrando as mudanças do Ruby 1.9.

Por apenas R$ 10,00 você encontra um material completo e didático sobre as mudanças que ocorreram na nova versão do Ruby[bb] e as incompatibilidades que enfrentará ao migrar suas aplicações.

Além de ter sido escrito pelo Nando, o material teve seu conteúdo todo revisado pelo Luis Rocha. Ou seja, o material é bom!

Acabei de receber o e-mail com meu PDF e estou lendo ansiosamente, mas não poderia deixar de divulgar este trabalho aqui antes de ler.

Novos rumos, ou não…

Comente »

2008 foi um ano fenomenal!

Pude participar de um puta time enquanto fiz parte da WebCo, um lugar onde adorei trabalhar. Nesse pouco mais de um ano que estive com eles aprendi muito e me diverti mais ainda. Obrigado galera, vocês são fodas!!!

Assim como o Lucas Húngaro, as mudanças que ocorrem com a WebCo me fizeram repensar meu papel na empresa e resolvi mudar de rumo, respirar novos desafios.

Voltei para a Visie, um lugar bem legal, com gente bacana e com vontade de trabalhar. Mas desta vez estou como Gerente de Desenvolvedores, ajudando o pessoal a implantar coisas bem bacanas, como: Scrum[bb], migrar de Subversion[bb] para Git, Pair Programming[bb], Ruby on Rails[bb], Integração Contínua, Testes[bb].

Está sendo uma experiência legal, muito diferente do que eu estava acostumado até então.

Valeu pessoal da WebCo, vivi bons momentos com vocês, momentos que jamais esquecerei…
(sim, como o Lucas se declarou, fiquei com invejinha e me declarei também) :)

Novo Servidor

Comente »

O blog esteve fora do ar por alguns minutos devido à mudança de servidor que fiz.

Estou usando o serviço de Cloud da Locaweb e por enquanto estou gostando.

Agora tudo deve voltar ao normal! ;)

Ensinando uma Criança a Poupar Dinheiro

Comente »

Sábado estava lendo alguns posts no Dinheirama e tive uma idéia. Na verdade não sei se a idéia é 100% minha ou se ouvi/li em algum lugar.

Tenho um irmão de 13 anos e sugeri a simples idéia para minha mãe:

  1. Meu irmão guardará dinheiro em um cofre todo mês;
  2. Meus pais definirão um valor de juros que será rendido nesse “poupança” todo mês, por exemplo, 10%;
  3. Todo final do mês meus pais contarão o dinheiro e somarão à ele o valor dos juros (VALOR * 0,1%).

Essa é uma maneira interessante de ensinar meu irmão que poupar dinheiro trará bons frutos no futuro.

A brincadeira pode ficar um pouco mais interessante se no começo for definido um “prazo limite” para ele “sacar” o dinheiro investido. Assim meus pais poderão cobrar juros caso ele resolva sacar antes do tempo, por exemplo:

  • 10% de juros se for sacado 6 meses antes do prazo final;
  • 5% de juros se for sacado de 3 meses antes do prazo final.

Com isso simularemos o Imposto de Renda.

Essa é apenas uma idéia, vai de você aprimorá-la e deixá-la mais interessante e divertida.

Já fez algo do tipo? Comente dizendo como foi!
Se tiver novas idéias, comente também!