08 março 2009

Patterns e XP

Ainda traduzindo...
O exemplo do JUnit me leva inevitavelmente a trazer à tona os patterns. A relação entre patterns e XP é interessante, e é uma questão comum. Joshua Kerievky argumenta que patterns são pouco enfatizados em XP e ele coloca seu argumento eloquentemente, de modo que não preciso repeti-lo. Mas vale notar que para algumas pessoas patterns parecem ser conflituosos com XP.

A essência desse argumento é que patterns são frequentemente usado em excesso. O mundo está cheio de programadores legendários, frescos de sua primeira leitura do GOF que aplicam dezesseis patterns em 32 linhas de código. Me lembro uma tarde, movido por uma deliciosa puro-malte, planejando com Kent um artigo a se chamar "Not Design Patterns: 23 truques baratos". Estávamos imaginando coisas como usar um IF ao invés de uma estratégia. A piada tinha um fundo de verdade, patterns são frequentemente usados em excesso, mas isso não faz deles uma má idéia. A questão é como você os usa.

Uma teoria sobre isso é que as forças do design simples o levarão aos patterns. Muitos refactorings fazem isso explicitamente, mas mesmo sem eles, seguindo a regra do design simples, você chegará aos patterns mesmo que você ainda não os conheça. Isso pode ser verdade, mas será que essa é realmente a melhor forma de fazer isso? É claro que é melhor se você já souber de antemão aonde está indo e se tiver um livro que possa te ajudar com as dificuldades, ao invés de ter que inventar isso tudo por conta própria. Eu certamente ainda vou ao GOF sempre que percebo um pattern surgindo. Para mim o design efetivo implica que precisamos saber o preço que vale a pena pagar por um pattern - isso é sua própria habilidade. Similarmente, como Joshua sugere, precisamos estar mais familiarizados sobre como derivar um pattern gradativamente. A esse respeito XP trata o modo como usamos patterns de modo diferente do usual, mas certamente não remove seu valor.


Mas lendo algumas das listas de e-mail eu tenho o sentimento distinto de que muitas pessoas acham que XP desencoraja patterns, apesar da ironia que a maioria dos proponentes de XP foram lideres do movimento de patterns também. Isso é porque eles viram além dos patterns, ou porque os patterns estão tão impregnados em seus pensamentos que eles nem percebem mais? Eu não sei a resposta para os outros, mas pra mim patterns ainda são vitalmente importantes. XP pode ser um processo para desenvolvimento, mas patterns são a espinha dorsal do conhecimento sobre design, conhecimeno que é valioso tanto quanto o processo. Processos diferentes podem usar os patterns de modos diferentes. XP enfatiza tanto a não utilização de patterns até que eles sejam necessários como evoluir o código do seu modo derivando um pattern por meio de uma implementação simples. Mas patterns são ainda uma peça chave de conhecimento a se adquirir.

Meu conselho aos XPeiros usando patterns seriam:

* Invistam tempo aprendendo sobre patterns
* Concentrem-se em quando aplicar o pattern (não tão cedo)
* Concentrem-se em como implementar o patterns em sua forma mais simples primeiro, então adicione complexidade depois.
* Se você utilizar um pattern, e depois descobrir que não valeu a pena - não tenha medo de tirar ele fora de novo.

Eu acho que XP deveria enfatizar mais o aprendizado sobre patters. Não sei ao certo como encaixaria isso nas práticas de XP, mas tenho certeza de que o Kent pode descobrir um jeito.

3 comentários:

  1. Muito bom! Patterns ajudam muito na solução de problemas complexos, mas realmente, como adverte o texto, devem ser utilizados somente quando realmente forem necessários.

    ResponderExcluir
  2. Olá.

    Tudo bom?

    Tive acesso ao s e-mail através do seu blog.



    Me chamo Leandra Vianna e faço parte do Marketing do grupo DevMedia, não sei se você conhece. Atualmente somos editores de 6 revistas sobre desenvolvimento de software, entre elas a Java Magazine, Engenharia de Software Magazine, SQL Magazine, .NET Magazine, WebMobile e Clubedelphi, além do site www.devmedia.com.br.



    Nos dias 22 e 23 de maio estaremos realizando, em São Paulo, a Engenharia de Software Conference, que tenho certeza que tem tudo a ver com o seu blog e seu público. Por isso estou passando este e-mail, na tentativa de fecharmos algum tipo de parceria de divulgação.



    Com caráter independente e inovador, a Engenharia de Software Conference não tem o patrocínio de nenhuma das empresas fabricantes de softwares, o que garantirá a imparcialidade total, apresentando análise comparatória dos mais variados softwares do mercado. O evento pretende garantir aos profissionais da àrea excelentes oportunidades de aprendizado e network.



    As explanações vão desde o projeto até os últimos testes de um software, passando pelos diversos conceitos de gerenciamento. Serão 40 horas de conteúdo, distribuídas em 30 palestras. O evento conta com a presença de palestrantes renomados, como Ana Regina Rocha, que será a keynote da conferência. Ela foi uma das idealizadoras do Modelo Mps.Br (Melhoria de Processos do Software Brasileiro), além de ser implementadora e avaliadora credenciada pela SOFTEX e membro do grupo de pesquisa em Engenharia de Software da Universidade Federal do Rio de Janeiro.



    Posso oferecer, por exemplo, 10 assinaturas digitais das revistas Engenharia de Software para você sortear entre os visitantes do blog. Em troca você divulgaria o evento através de um banner no blog ou de uma notícia sobre o evento publicada nele ( que eu lhe enviaria para postar) .



    Mais informações sobre o evento: www.devmedia.com.br/es_conference





    Gostaria muito de poder contar com sua ajuda para a divulgação.



    Fico aguardando sua resposta.



    Grande abraço,



    Leandra Vianna

    Assistente de Marketing

    DevMedia

    leandra_vianna@devmedia.com.br

    (21) 3382-5021

    http://www.devmedia.com.br

    ResponderExcluir
  3. Disse tudo! Esse é realmente um questionamento recorrente. Como você sempre diz, nem demais nem de menos, realmente temos que aprender a dosar tudo, patterns, frameworks, etc.
    Ótimo post!
    o/

    ResponderExcluir