Metáfora
Comecei a me interessar sobre a forma como metáforas influenciam o nosso pensamento
depois de ler o livro de George Lakoff e Mark Johnson
"Metaphors We Live By".
Uma ideia importante é a de que
nós raciocinamos por analogia com metáforas que existem no nosso idioma.
Dívida
Eu criei a metáfora da dívida para explicar
o refatoramento que estávamos fazendo no aplicativo WyCash.
Era um software escrito em Smalltalk
e era importante para mim
que acumulássemos o aprendizado obtido sobre o aplicativo ao longo do tempo
modificando o programa para que parecesse
que nós sabíamos o tempo todo o que estávamos fazendo
e também para parecer que havia sido fácil fazê-lo.
A explicação que dei ao meu chefe, dado que era um software financeiro,
foi uma analogia financeira que eu chamei de "a metáfora da dívida".
Eu disse que se falhássemos em fazer o nosso programa se alinhar
com o que entendíamos ser a forma apropriada de se pensar a respeito dos objetos financeiros
então iríamos continuamente tropeçar nesse desacordo, e isso iria deter o nosso avanço,
seria como pagar os juros de uma dívida.
Velocidade
Com dinheiro emprestado você pode fazer coisas mais cedo do que poderia sem ele
mas até que você pague de volta este dinheiro, você estará pagando juros.
Eu achava que pegar dinheiro emprestado era uma boa ideia,
eu achava que entregar software rapidamente,
a fim de ganhar alguma experiência com ele, era uma boa ideia
mas é claro, em algum momento você teria que voltar
e ao aprender coisas a respeito do software, você iria pagar aquele empréstimo
refatorando o programa para refletir o entendimento que você adquiriu.
Carga
Acho que há muitos casos em que as pessoas entregam software rapidamente
e aprendem coisas, mas nunca colocam aquele aprendizado de volta no programa
e por analogia, isso é como
pegar dinheiro emprestado achando que você nunca precisará pagá-lo.
É claro que, se você fizer isso,
com seu cartão de crédito, por exemplo,
eventualmente todo a sua renda será para pagar os juros
e seu poder de compra vai a zero.
Da mesma forma, se você desenvolver um programa por um longo período de tempo,
apenas adicionando funcionalidades
e nunca reorganizando o código para refletir o seu entendimento dessas funcionalidades
eventualmente o seu programa não conterá mais nenhum entendimento
e todos os esforços para trabalhar nesse software tomarão mais e mais tempo.
Em outras palavras, todo o seu tempo será para pagar os juros
e você não fará mais nenhum progresso.
Agilidade
Muitos bloggers tem explicado a metáfora da dívida
e eu acho que eles a confundem com a ideia de que
você poderia escrever código de baixa qualidade com a intenção de melhorá-lo depois
pensando que seria essa a fonte primária da dívida.
Eu nunca sou a favor de escrever código de baixa qualidade
mas sou a favor de escrever código que reflete a sua compreensão atual do problema
mesmo que essa compreensão seja parcial.
Se você quiser ser capaz de adquirir uma dívida dessa maneira,
desenvolvendo um software que você ainda não compreende completamente,
você deverá fazer esse software refletir o seu entendimento da melhor forma possível
para que quando chegue a hora de refatorar
esteja claro o que você estava pensando quando o escreveu
e fique mais fácil você refatorar para que ele se alinhe com o seu entendimento atual.
Em outras palavras, a metáfora da dívida,
ou seja, a habilidade de pagar uma dívida,
e fazer a metáfora funcionar a seu favor
depende de você escrever um código limpo o suficiente para que você seja capaz de refatorá-lo
no momento em que você entender melhor o problema que está tentando resolver.
Eu acho que essa é uma boa metodogia.
Ela está no cerne do Extreme Programming,
e é uma boa explicação, uma das muitas explicações
de por que o Extreme Programming funciona.