Você acredita que há um algoritmo para projetar “estações móveis de produção de sanduíche”? Quando o algoritmo é executado temos como resultado um “projeto” que atende os requisitos e detalha a estação móvel?
- Não, porque projetar estações móveis de produção de sanduíche depende de muitas decisões que não podem ser tomadas por um algorítmo.
Você acredita que há um algoritmo para projetar software? Quando o algoritmo é executado temos como resultado um conjunto de módulos, ou no caso do algoritmo optar pelo projeto orientado a objetos teríamos um diagrama de classes, interfaces, a herança, a organização destes elementos em grupos (packages), a identificação de métodos e outros detalhes que, quando implementados e colocados em execução, atendem os requisitos estabelecidos?
- Não. Em vez de algorítmos existem boas práticas que podem ser empregadas para projetar um software.
Steve McConnell, no livro Code Complete, 2nd edition, Capítulo 5, afirma: “em projetos informais, muito do esforço de design é realizado enquanto programadores estão diante do teclado. O design é escrever em pseudocódigo a interface de uma classe, ou desenhar diagramas registrando o relacionamento entre algumas classes, ou perguntar a um outro programador qual padrão de projeto é uma melhor escolha.” Você concorda?
- Concordo já que em projetos informais não há muita preocupação em separar o design da construção do software.
Steve McConnell, no livro Code Complete, 2nd edition, Capítulo 5, afirma: “técnicas de projeto tendem a ser “heurísticas”, “regras práticas” ou “coisas para tentar que algumas vezes funcionam” em vez de processos que podem ser repetidos e que produzem resultados previsíveis. Design envolve tentativa e erro. Uma técnica ou ferramenta que funciona bem em um cenário ou em algum aspecto de um cenário pode não funcionar no próximo projeto.” Você concorda?
- Concordo, o design de software é subjetivo e depende de decisões feitas pelo designer responsável, assim como do contexto do projeto em questão.