Logo Fratech

Utilizando metáforas no design de software

Publicado por: Felipe Rodrigues de Almeida
em: 20 Feb 2009 às 17:55

Bad Designer BrainsUma das principais dificuldades no desenvolvimento de software moderno é disseminar o conhecimento e difundir as necessidades do usuário. É muito difícil para nós desenvolvedores enteder o sistema, pois temos de nos adaptar às diversas situações de negócio, que mudam conforme cada projeto.
O problema é que entendemos de computação, mas fazemos softwares para tratar situações que não tem relação direta com a computação. Isso nos obriga a lidar com teorias e conceitos que não são familiares ao nosso cérebro. Isso pode complicar de forma significativa o design. 

O lado direito do cérebro (R-mode)

Hemisférios do Cérebro O fato é que na maioria das vezes essas informações chegam para nós de forma textual, o que estimula apenas o lado esquerdo do cérebro (L-mode). Acontece que design de software é uma atividade de intuição, criatividade e resolução de problemas, atribuições do lado direito do cérebro (R-mode). Estes dois lados são assíncronos. Não podemos utilizá-los ao mesmo tempo. Pior que isso, é o fato de que nào controlamos o R-mode, apenas o L-mode de nosso cérebro. Para mais informações sobre isso leia este livro. Ao tentar raciocinar textualmente com o L-mode, pensando em sintaxe e detalhes técnicos, perdemos o contato com o R-mode e consequentemente a capacidade de criar, contando apenas com a capacidade analítica e lógica de nosso cérebro. Em outras palavras, somos fisicamente limitados a criar péssimos modelos a não ser que dominemos o assunto de que o software trata (domain). 

As metáforas vem para ajudar

Após aceitar o fato de que somo limitados, devemos procurar formas de ultrapassar nossos limites. De acordo com a explicação acima, isso envolve ser capaz de usar o processo criativo quando projetando um software, ou, dominar o domain em questão. Precisamos criar um ambiente onde o L-mode se encontre com o R-mode, possibilitando criatividade e análise simultâneamente. Este ambiente é o mundo virtual das metáforas.

 "Metáfora é um local comum para a verbalização e as imagens, uma forma de viajar de para trás e para a frente entre o consciente e o subconsciente, entre os hemisférios direito e esquerdo de nosso cérebro." [The Journal of Creative Behavior, 15(1), 1981.] 

Metáforas e os métodos ágeis

O uso de metáforas é algo muito difundido na comunidade de métodos ágeis. O Extreme Programming chega ao ponto de listá-la como uma de suas práticas, destacando a importância do seu uso. Outros conceitos e processos, como Domain Driven Design contém referências ao uso de metáfora e seus benefícios.
Como visto no post no infoQ, muitos projetos ágeis tem falhado e conforme Martin Fowler relata neste post, a maioria por falta da adoção de boas práticas de engenharia de software. O uso de metáfora, é uma delas.

Metáforas e Domain Driven Design

No Domain Driven Design, devemos orientar e restringir o design do software às peculiaridades de seu domínio. O Domain Driven Design, prega o uso de uma linguagem comum e amplamente utilizada pelo time, com o objetivo de tornar mais fácil o entendimento e a comunicação de ambas as partes.

Metáfora do Sistema

Eric Evans afirma em seu livro, Domain Driven Design - Tackling Complexity in the Heart of Software, que "o design de software tende a ser muito abstrato e difícil de entender. Os desenvolvedores e usuários precisam de uma forma tangível de entender e compartilhar uma visão do sistema como um todo.". Utilizando as metáforas, os desenvolvedores e experts do domain tem um ponto de referência para discussões que podem ser mais concretas que o modelo por si só.
Na verdade, as metáforas devem ser utilizadas como ponto de partida para a criação de uma boa ubiquitous language. As metáforas são consolidadas através do uso de modelos explanatórios (Explanatory Models), uma espécie de diagrama sugerido por Evans em seu livro.

Criando metáforas

Brain Connections

A palavra Metáfora vem do grego "tranferir", implicando a idéia de transferir os atributos de um objeto para um outro de forma literalmente impossível. Combinar dois objetos ou situações de forma que resulte em uma história comum aos dois lados. Edward De Bono propôs uma técnica chamada PO que ajuda na criação de metáforas. Basicamente pegamos um objeto aleatório e associamos com o domínioLiquidificador & brain em questão. Por exemplo:

Domínio em questão: Criação de Metáforas
Palavra Aleatória: Liquidificador

Metáfora:
  Imagine que criar metáforas é semelhante a fazer uma vitamina. Você deve escolher cuidadosamente os ingredientes que você mais gosta. Colocá-los no liquidificador, ligá-lo e esperar. Enquanto o liquidificador faz seu processamento, você deve relaxar. Após algum tempo, a vitamina está pronta. Basta retirar e tomar.

Assim funciona a criação de metáforas. Você junta alguns estímulos (ingredientes) de sua preferência e armazena em seu cérebro. Estimule seu cérebro relaxando (ouvindo música, assistindo TV, caminhando pela cidade) enquanto o seu R-mode processa os ingredientes e derrepente, algo extremamente saboroso fica pronto. Sua nova metáfora. Pronta para utilizar.

Expresse sua metáfora em software, da forma que é explicado neste artigo. O resultado será um design bem feito e simples de ser explicado. Aconselho ainda esta leitura sobre metáforas. 

O que você acha da utilização de metáforas para o design de software? Deixe seu comentário.

Tags: | DDD | Agile | Ubiquitous Language | Design | XP |
3 comentários

Tá abusado heim?

Tá abusado heim Dr? Parabéns. Excelente retórica entre a Neurociência (assunto que sou fascinado) com a nossa área de desenvolvimento de software. Abraços,

Enviado por Manoel Pimentel em 21/02/2009 às 22:17

RE: Tá abusado heim?

Você sabe que eu sempre quis descobrir porque as práticas ágeis funcionam, já que parecem menos formais. A verdade é que a resposta está na neurociência e tenho estudo este assunto já faz algum tempo. Estou obtendo respostas interessantes ultimamente. Quem sabe este artigo não é o primeiro de uma série sobre as práticas e a neurociência. =) Abração

Enviado por Felipe Rodrigues de Almeida em 23/02/2009 às 10:41

Nós somos Metáforas

Parabéns pelo artigo!!! Gostei muito e creio que tem terra boa nisso para a gente colocar sementes. Fui a uma palestra que o hipnólogo famoso dizia que todos nós somos metáforas. Aparentemente, seres humanos com comportamentos semelhantes. Entretanto, a maioria faz de sua vida uma metáfora. É o analista de sistemas que em sua tarefa (inconscientemente) é o Sherlock Holmes; é o Scrum Master que em sua tarefa lembra-se de quando ele era o coronel que cuidava de seus homens dentro de seu Forte Apache contra o ataque oportuno dos índios. O Arquiteto de Software que admirando a colméia se vê Deus como criador e desenha os meandros do software com a harmonia da colméia. Fantástico esse assunto e também acho que é uma prática que ajuda a levar a equipe ao sucesso como visão compartilhada e atos tanto descentralizados quanto centralizados de criação.

Enviado por Marcelo Udo em 25/02/2009 às 12:03

Deixe sua opinião:

Você deve ser cadastrado para enviar comentários. Caso não seja cadastrado clique aqui


Ruby Rails Linguagens Dinâmicas Agile Groovy Scrum DDD Arquitetura Java TI FDD XP OO Ubiquitous Language JVM Ioke Merb Web Frameworks Requisitos FBS Backlog Design TDD Design Evolutivo Planejamento ti2.0 business agile









 
fratech@fratech.net
Fone / Fax:
+55 19 3454-5873
Rua Pedro Furlan, 232 - Miguel Grego
Sta Bárbara D'Oeste - SP
Cep: 13450-150
Copyright © 2009 - Fratech Tecnologia da Informação