quinta-feira, 29 de setembro de 2011

Personal trainers para programadores

Hoje li um artigo fantástico no New Yorker sobre um cirurgião que contratou outro cirurgião para observá-lo enquanto fazia cirurgias e sugerir melhorias. Me fez pensar se não poderíamos fazer o mesmo com o desenvolvimento de software: ser observado no ato da programação para encontrar formas de aprimorarmos nossas técnicas.

Quando a Guta e eu estávamos em Waterloo, trabalhamos em um centro da universidade chamado TRACE (Teaching Resources and Continuing Education, que hoje se chama CTE). O objetivo desse centro era promover workshops e outros tipos de atividade para melhorar a qualidade do ensino. Uma das coisas que a gente fazia era observar professores em sala de aula. Qualquer professor podia requisitar esse serviço. Um de nós assistia a uma aula inteira do professor e submetia um relatório avaliando o seu desempenho. O professor podia até ser filmado se quisesse.

Nós éramos treinados para observar as coisas certas. O relatório tinha de mencionar tanto o que o professor fez certo quanto os pontos nos quais ele podia melhorar. Eram itens como "do fundo da sala não conseguíamos ouvir as perguntas que os colegas da frente faziam; seria bom você repetir a pergunta para a classe inteira," ou "você passou 15 minutos apenas escrevendo no quadro e discursando sobre o tema e a turma ficou dispersa; tente envolver a turma a cada 2 ou 3 minutos com alguma pergunta para prender a sua atenção."

Por que não fazer o mesmo com programadores? Imagine programar durante algumas horas com alguém te observando. Seu personal trainer poderia fazer observações como:

  • método: "você gastou 20 minutos  resolvendo um bug que teria sido encontrado com um teste de unidade simples; tente escrever os testes antes do código, ou no mínimo depois de terminar cada classe, ao invés de deixar para testar só quando o programa está pronto para executar"
  • ferramentas: "você muda de janela com frequencia para usar o talk do gmail, e acaba se distraindo com emails novos que chegaram; existe um plugin do gtalk para o Eclipse, por que não usá-lo?"
  • design: "sua classe me parece ter duas responsabilidades distintas; não seria bom dividí-la em duas?"
  • ergonomia: "sua postura é boa inicialmente mas à medida em que o tempo passa sua vista parece ficar cansada e você se inclina para ficar cada vez mais próximo da tela; use um cronômetro de software para lembrá-lo de fazer um pequeno intervalo a cada 30 minutos, assim você voltará à postura adequada".
Esses são só alguns exemplos. Há muitas outras possibilidades. Um personal trainer não precisa ser um excelente programador, precisa apenar saber os pontos aos quais deve estar atento. Nós não éramos   professores melhores do que os que observávamos, mas lemos bastante sobre técnicas de ensino e tínhamos um checklist de itens a observar, boa parte deles tirado do excelente livro Tools for Teaching.

Muitos de nós fazemos revisões de código, que já é uma forma de ter seu trabalho avaliado por outros programadores. No entanto, o revisor só tem a oportunidade de avaliar o produto final do seu trabalho. O personal trainer vai além, observando-o enquanto trabalha e sugerindo idéias para tornar o seu trabalho melhor e mais eficiente.

E aí, alguém quer tentar?

2 comentários:

  1. eu acho a idéia ótima, sempre achei inspeções de código o momento em que mais se aprende justamente por ser um raro momento em que programadores páram para conversar sobre programação.

    acho que nem precisaria ser no estilo pair programming. Só o ato sistemático de parar para refletir e discutir e trocar idéias já seria benéfico o suficiente.

    fala-se muito da comunicação com o cliente e fala-se pouco da comunicação dentro da própria empresa.

    ResponderExcluir
  2. Também acho uma excelente ideia. Enquanto lia a postagem a primeira coisa que me veio a cabeça foram algumas práticas comuns de XP, como o pair programming citado pelo comentário anterior.

    Acredito que as contribuições desse tipo de prática de programação vão além da parte técnica e podem favorecer bastante aspectos de comunicação de uma equipe de desenvolvedores.

    Com a rotatividade de membros de uma equipe atuando hora como Personal trainers, hora como programador e sempre variando de par, pontos de vista diferentes serão apresentados constantemente. Acredito que esse processo tende a gerar discussões construtivas que podem proporcionar melhoras de desempenho individuais e coletivas, e assim afetar positivamente também a qualidade do software produzido.

    ResponderExcluir