Uma entrevista com Martin Fowler
Laura Paterson, Gerente Geral do nosso escritório de Londres, conversou com Martin Fowler na última semana sobre seu próximo livro, uma nova edição do clássico ‘Refactoring’. Para receber mais conteúdos como esse, se inscreva na nossa comunidade de aprendizado Access Thoughtworks.
Você pode nos explicar o que significa Refatoração?
Refatoração é o processo de evolução de código para torná-lo mais compreensível e editável com o passar do tempo. É fazer o código comunicar claramente o que está sendo feito. Isso leva à simplificação, é claro.
Já faz 20 anos desde o primeiro livro - o que mudou de lá até aqui?
Nesta época, refatoração era um termo desconhecido (fora do mundo Smalltalk). O livro colocou a refatoração no radar das pessoas. Isso foi importante porque sustentou a adoção de métodos ágeis em geral, e Extreme Programming em particular. É realmente uma técnica fundamental.
"Você simplesmente não é capaz de atender requisitos dinâmicos e arquitetura evolutiva sem um código compreensível e maleável. Por isso, refatoração é uma das técnicas fundamentais da metodologia Ágil, ao lado de testes automatizados e integração contínua."
Essse livro irá ajudar pessoas que estão em um sistema legado de Javascript?
Eu espero que este livro possa ajudar pessoas em qualquer ambiente legado. Por mais que os exemplos do livro estejam escritos em Javascript, este não é um livro sobre Javascript - da mesma forma que o livro original também não era um livro sobre Java. Independentemente da linguagem de programação que você esteja usando, se espera que as técnicas descritas sejam abrangentes o suficiente para serem aplicadas.
Quais são as principais mudanças do livro original, que continha exemplos em Java, para o novo, com exemplos em Javascript.
A principal mudança foi tornar muitas das refatorações do livro menos focadas no conceito de classes. Em Java, obviamente, tudo deve ser uma classe ou um objeto. Então, como consequência disso, todas as refatorações do livro antigo foram expressas compreendendo esta perspectiva de classes.
Entretanto, este conceito definitivamente não é necessário para entender o que é refatoração. Isto foi apenas um acaso que reflete o período em que o livro foi escrito. Hoje em dia, o uso de classes aparece muito mais como uma das alternativas para estruturar código, mas não necessariamente a única ou a mais indicada. É claro que os impactos desta mudança vão além de renomear a técnica de "extrair métodos" para "extrair funções". Esta alteração faz parte do processo, mas vai muito além disso.
Seria este o reflexo da mudança de um paradigma orientado à objetos para um estilo mais funcional?
Isto, obviamente, depende do que você quer dizer com "mais funcional". Estamos falando de Javascript, que não é uma linguagem de programação funcional. Como não temos garantias de imutabilidade, não podemos operar de um modo que pessoas funcionais chamariam de funcional.
De fato, esta é a razão pela qual você ainda precisa de classes: para estruturar dados mutáveis. Então, até certo ponto, Javascript é mais funcional, no sentido de que há mais o uso de funções de primeira classe do que havia em Java.
Ironicamente, é bem mais difícil trabalhar com imutabilidade em Javascript do que em Java. Você precisa fazer muitas coisas através de convenções. Além disso, existem algumas lacunas incômodas na linguagem como, por exemplo, a maneira em que trabalhamos com valores. Então, você também poderia argumentar que Javascript é, de diversas formas, menos funcional que Java.
"As técnicas gerais de refatoração são completamente aplicáveis em linguagens funcionais."
Sempre irão haver algumas diferenças entre diferentes paradigmas e linguagens de programação, então tentei manter as lições do livro bem abrangentes e ver como as coisas fluem a partir daí.
Há espaço para algo que nos direcione no sentido de elegância e legibilidade na programação funcional ou isso é algo inerente da linguagem?
Isso é um ponto interessante e discutível. Estou muito interessado na exploração de programação funcional de Brian Marick. Ele questiona se há de fato algum interesse na comunidade de linguagens funcionais no sentido de propor diretrizes para melhorar legibilidade e compreensibilidade de código. É uma discussão interessante e estou ansioso para ver o que pode emergir disso.
Não entrei profundamente nas nuances de mentalidade da comunidade. Cada uma possui diferentes qualidades e sou um visitante em todas elas porque participo de muitas.
Você acredita que seja importante ser generalista - e você se considera um?
Em termos de linguagens de programação, sim. Acredito que para ser uma pessoa programadora boa de verdade, você deve ser generalista. Como cada linguagem de programação é uma ferramenta distinta, você deve ser capaz de trabalhar e aprender com todas elas. 80% do bom conhecimento sobre programação será transversal e aplicável em qualquer linguagem - e o mesmo pode ser dito sobre refatoração.
"As técnicas gerais de refatoração são completamente aplicáveis em linguagens funcionais."
A nova edição do Refactoring estará disponível no final deste ano
Esta conversa continua, com conselhos e reflexões de Martin sobre desenvolvimento de software.
Aviso: As afirmações e opiniões expressas neste artigo são de responsabilidade de quem o assina, e não necessariamente refletem as posições da Thoughtworks.