É um mau sinal que eu estou frequentemente reprojetando enquanto desenvolvo um projeto?

39

Quando comecei a programar, presumi que um dia chegaria ao ponto em que começaria um projeto sentando e desenhando um diagrama UML de todas as classes, e depois ficaria bem com isso. Eu já programo há alguns anos e não está dando certo. Ao passar por um projeto, muitas vezes digo

  • "Ei, eu preciso de uma aula para fazer _ _. Eu não pensei nisso antes."
  • "Espere, essa função deve estar nessa classe em vez desta. Eu vou mova-o. "
  • "Isso deve realmente ser duas classes em vez de uma. Vou separar."
  • "Eu deveria fazer essas três classes autônomas, todas herdadas de uma classe abstrata".
  • Etcetera, etc.

É um mau sinal que eu estou frequentemente reprojetando assim enquanto eu vou junto? Isso significa que eu sou um programador ruim ou isso é normal?

    
por juicy lucy 10.05.2011 / 17:59
fonte

7 respostas

41

Esta é uma parte normal do desenvolvimento. Dois dos principais princípios do Desenho Contínuo são:

  1. Você não é onisciente, não pode conhecer todo o sistema do começo ao fim antes de começar.
  2. O design não é estático. Isso é mais comum quando um projeto está em uso há muito tempo e os problemas que ele está resolvendo agora não são os problemas que ele estava resolvendo quando foi escrito pela primeira vez.

Minha opinião pessoal sobre o assunto é que você deve ter uma boa idéia do projeto macro , mas permitir que o design do micro evolua. Outra maneira de expressar isso é que o design de alto nível (que é tão longe quanto eu vá com ferramentas UML / modelagem) provavelmente permanecerá bastante estático durante a vida de um projeto. O design detalhado de quais métodos fazem o que e a hierarquia de classes precisam estar livres para serem maleáveis.

Quando você realmente não sabe muito sobre o problema que está resolvendo, você fará muito mais erros iniciais. No entanto, depois de ter trabalhado com ele por tempo suficiente, o design geral começará a se ajustar e as refatorações das quais você está falando são tudo o que será necessário para manter o código organizado.

    
por 10.05.2011 / 18:09
fonte
12

O que você está fazendo é popularmente conhecido como "refatoração". Se você parar de fazer isso, então você está com problemas.

O fato é que a maioria dos códigos é complexa e os humanos, mesmo os mais espertos, não conseguem descobrir tudo de uma vez.

    
por 10.05.2011 / 18:07
fonte
10

Não, você parece estar seguindo YAGNI e refatoração dos exemplos dados. Você não acha que é melhor ter essa solução melhor e ser capaz de fazer isso do que simplesmente nunca pensar em algo de novo?

Desenvolvimento ágil de software geralmente tem práticas para acomodar isso que é bem diferente do modelo de queda de água.

    
por 10.05.2011 / 18:08
fonte
5

Isso é perfeitamente aceitável (a menos que esses novos designs sejam sempre grandes revisões ou reconstruções a partir do zero). Não se preocupe. Pode ser bom começar com um diagrama UML no início do projeto, mas não o faça em pedra, pois você quase sempre descobrirá que as coisas mudam conforme você trabalha. Você pode aprender novas técnicas que você não sabia no início, você pode querer melhorar alguns recursos de maneiras que você não tinha durante o projeto inicial, os requisitos de negócios mudam, às vezes há incógnitas durante o projeto inicial que pode < em> somente será contabilizado mais tarde, etc ...

O que é importante é ir e atualizar esses documentos UML iniciais para que eles reflitam quaisquer mudanças significativas no design, senão futuros desenvolvedores (incluindo você) podem ficar muito confusos. Isso pode ser difícil e geralmente requer boa disciplina (e tempo).

É muito, muito muito raro começar com um design e aderir a ele 100% até a implementação. Eu pessoalmente nunca nunca vi tal coisa acontecer, exceto por programas muito pequenos e triviais.

    
por 10.05.2011 / 18:08
fonte
4

O que você está fazendo é perfeitamente normal (desde que você não esteja completamente começando do zero a cada vez). Estou nisso há mais de vinte anos e ainda é um processo interativo.

A única vez que você será capaz de projetar tudo na frente e cumpri-lo é se você está resolvendo exatamente o mesmo problema que você resolveu da última vez, e mesmo assim você provavelmente pode encontrar espaço para melhorias.

    
por 10.05.2011 / 18:18
fonte
2

Eu não sou um desenvolvedor altamente experiente, mas também faço isso. Nos últimos anos, minha capacidade de construir mentalmente a arquitetura necessária melhorou muito. No entanto, quando eu escrevo um software, não importa quanto planejamento eu faça, sempre há lugares que precisam de um pouco de reformulação. Spots que eu não sabia que estaria me repetindo até que o código estivesse sendo escrito.

Meu objetivo neste post é dizer que faço tudo na sua lista e não sinto que essas coisas sejam necessariamente ruins, a menos que estejam acontecendo constantemente e tenham um efeito negativo real em sua produtividade.

    
por 10.05.2011 / 18:14
fonte
0

Isso chamou de processo iterativo e é um conceito básico em todas as técnicas modernas de desenvolvimento de software.

    
por 10.05.2011 / 18:11
fonte