O que é design de software?


Nós desenvolvedores, artesãos de software ou simplesmente programadores, vivemos em uma jornada incessante em busca do aprimoramento em nosso ofício.

Afora o estudo de novas tecnologias, novos processos e melhores algoritmos para resolvermos os problemas de forma mais eficiente, uma das habilidades mais importantes a ser buscada por um programador é a de se fazer um bom design.

A existência de um bom design é independente de tecnologia ou problema, e é a razão por trás de todos os princípios de programação que se encontra por aí.

Mas o que é design?

Por ser uma palavra da língua inglesa vejamos primeiro sua definição nessa língua:


Merriam-webster:
– the arrangement of elements or details in a product or work of art
– deliberate purposive planning
– a preliminary sketch or outline showing the main features of something to be executed

Em português, design é geralmente traduzido como:


– projeto, plano, desenho

Vemos que o termo design está intimamente associado com o planejamento de uma atividade que, em geral, dará origem a algum artefato como resultado. Uma atividade de construção, digamos assim.

Dessa forma, antes de iniciar a execução da construção do artefato, realiza-se um plano que servirá como um guia nessa tarefa, delineando a forma, organização e detalhes dos elementos que compõem tal objeto.

Mas design é só isso?

De fato podemos ir além da noção de planejamento e pensar em design como algo mais concreto: desenho, forma, disposição de elementos, organização – como usualmente usa-se o termo nas artes plásticas.

Quando você ouve uma música, contempla uma pintura ou lê um poema, você pode perceber claramente sua forma: a escolha, disposição e interação entre elementos que compõem aquela obra e a caracterizam.

Então, após a execução de uma obra – e aqui englobamos qualquer ofício – pode-se dizer que o design fica concretizado, impresso no artefato criado, tornando-se parte dele, parte de sua história.

Portanto, podemos afirmar que design é a organização de elementos que ocorre tanto antes, durante ou depois da existência do artefato, e é um processo inevitável.

Por que se pensa em design?

Se o processo de design é inevitável, então posso simplesmente esquecê-lo, executar e parar de me preocupar com isso?

Claro que não. O design deve ser sempre cuidadosamente pensado, consciente e acima de tudo alinhado com o papel que ele desempenha na atividade. Caso isso não aconteça, o resultado será um artefato com um design ruim, onde bom e ruim são conceitos relativos ao contexto em que ele existe.

Precisamos ter em mente que para cada tipo de atividade o design tem um propósito diferente e é com base nesse propósito que classificamos um design como bom ou ruim. Alguns exemplos:

Na arte o objetivo do design é a estética.
Na construção civil o objetivo do design é dimensionar estruturas, mitigar riscos, reduzir custos.
No front-end web, o objetivo é a estética e a usabilidade.

O propósito do design no software

No desenvolvimento de software o objetivo do design é facilitar a mudança.

Danilo Sato, da Thoughtworks, em uma palestra explica que para ele Design é Código, e ele está certíssimo, porque o código é o artefato do programador, e o design está ali, concretizado no código. Cada decisão tomada antes e durante seu desenvolvimento será refletida no código.

Mas indo um pouco além, o design também é a atividade que ocorreu antes da existência do código, é também o diagrama de classes desenhado no quadro branco; design também é planejamento.

Beethoven fazendo Big-Upfront-Design

Beethoven fazendo um Big Design Upfront

Como na analogia com a música feita por Rich Hickey em uma palestra inspiradora, mais decisões de design podem ser tomadas antes da execução, em diagramas UML por exemplo, analogamente a um compositor que escreve uma sinfonia; ou mais decisões de design podem ser adiadas, basicamente deixando o programador livre para tomá-las durante a execução, como um jazzista improvisando sobre uma sequência de acordes apenas.

No mundo do software, como o objetivo do design é facilitar a mudança, e o rítmo das mudanças é alucinante, uma tendência é jogar o máximo das decisões para frente, até o ponto que chegamos no Design Emergente. Dessa forma, só inserimos complexidade no design do nosso sistema quando essa complexidade for de fato necessária, seguindo o bom e velho princípio do YAGNI.

Estudar Design de Software é essencial

A diferença crucial entre um grande design planejado – como uma composição orquestral, e um design ágil – como uma improvisação de Jazz, é que para esse último caso é obrigatório que o executor, seja ele o músico ou o programador, tenha um grande conhecimento sobre como fazer um bom design.

No caso ágil, as decisões de design são tomadas na hora, pelo executor, baseado no contexto daquele exato momento, com as informações mais atuais possíveis e com o feedback imediato, por isso é preciso que o executor tenha interiorizado os princípios que regem um bom design.

O “artefato software” não é tão efêmero quanto uma improvisação de uma música, que só acontece uma vez, nem tão imutável quanto uma estátua de mármore, ele vive em algum lugar no meio desse espectro. Por ter essa natureza mais “flexível”, temos a possibilidade de remodelá-lo constantemente com mais facilidade, criando o design mais apropriado durante a construção, e adaptando-o a cada iteração, através da refatoração.

Portanto, como um artesão de software, interiorize a “harmonia”, pratique as “escalas”, estude os melhores “solos” e, acima de tudo, nunca se esqueça do propósito do design que você está criando.

Miles Davis fazendo design emergente

Miles Davis fazendo design emergente

Anúncios

2 comentários sobre “O que é design de software?

Os comentários estão desativados.