Como lidar com códigos complexos em projetos (enormes)

8

Estou preparando um livro de memórias sobre "Por que (alguns) projetos de TI se tornam muito complexos e como evitá-lo?".

Se você já encontrou projetos com códigos complexos ou era difícil de manter, como conseguiu passar por isso?

Se você precisar escolher entre vários aplicativos para usar em seu projeto, qual seria sua principal prioridade em suas funcionalidades e por quê?

dagofly
fonte
1
Não há códigos complexos em projetos complexos. Consulte english.stackexchange.com/questions/20455/…
Ninguém mencionou o mapa de códigos ou o mapeamento mental porque nunca ensinou a usá-los e não tem experiência em usá-los porque não há plug-in ou software por aí que possa criar um mapa para o fluxo de código do seu grande projeto. Milhões de linhas de código e você precisa passar por elas por horas para entender algo pequeno. A maneira como as pessoas criam programas é brutal e leva muito tempo para gerenciar um projeto. Espero que a programação visual de um dia ou pelo menos os plugins de geração de fluxo de código encontrem seu caminho no mundo da programação como uma ferramenta valiosa.
Eftekhari

Respostas:

8

Documento, Documento, Documento!

Eu trabalho com um código MVC bastante complexo e só agora estou realmente entendendo como ele funciona, em vez de aceitá-lo com fé. Sempre que faço uma alteração difícil de entender, coloco um comentário no código dessa seção para ajudar a esclarecer o que está acontecendo. Pode não ter me ajudado, pois não estava lá, mas ajudará a próxima pessoa por perto. Também gosto de pedir a outros programadores à minha volta que analisem minhas alterações para ver se estão claras.

Minha empresa possui um wiki interno que usamos para documentar muitas das meta tarefas que realizamos, como problemas no servidor virtual, consultas comuns etc. Sempre que me deparo com algo que não havia feito antes, mas que tenho que fazer com frequência, verifiquei para ver se há um wiki nele. Se não houver, eu farei um. Mais pessoas se envolveram nele recentemente, então espero que cresça mais rápido. Eu acho que realmente ajuda na comunicação das tarefas mais mundanas que temos.

Michael K
fonte
1
Interessante! Eu me pergunto por que não temos tais wiki em nossa empresa, ele woul ter sido muito mais fácil
dagofly
+1 para o wiki do desenvolvedor (desde que seja bem feito o backup!) #
MGOwen
6

Eu não acho que você possa evitar completamente a complexidade ao longo do tempo, mas existem maneiras de atenuá-la:

  • Mantenha o código o mais limpo possível o tempo todo, dentro do razoável. (No sentido "como o tio Bob define 'limpo'").
  • Aplique revisões de código e / ou emparelhe a programação para diminuir desnecessariamente as chances de um desenvolvedor fazer um excesso de engenharia.
  • Manter testes de unidade adequados e testes de integração.
  • Invista em um servidor de integração contínua e construa com frequência. Solte frequentemente também, se possível.

Tudo isso depende um pouco do que o projeto realmente envolve. Às vezes, por exemplo, será benéfico aceitar a complexidade em troca do desempenho. Nem todo código complexo é necessariamente uma coisa ruim. Em geral, porém, acho que seguir essas diretrizes deve ajudar.

Adam Lear
fonte
3
  • dívida técnica

    refatorar para eliminar

  • mudanças nos negócios

    adaptar e expurgar

  • trocas de ferramentas

    novas ferramentas, mesma arquitetura antiga = incompatibilidade de impedância

Steven A. Lowe
fonte
exatamente, lidar com padrões complexos (mal escritos) de código / arquitetura, em vez de refatorar, está pagando JUROS em dívidas técnicas. quando você elimina os maus pontos que você está pagando de volta principal sobre dívida técnica
shershen
Maneira interessante de descrever isso, gostaria que alguns de meus clientes pudessem entender isso. Basear-se em códigos básicos incorretos e mal-intencionados significa apenas hacks mais complexos necessários no futuro, em vez de apenas parar, ver onde estamos e como podemos tornar a vida mais fácil e rápida, e seguir essa direção .. while ($ client_does_not_listen) { $ client_does_not_listen = waste_time_and_money_until_client_listens (); }, tenha cuidado, porque esse loop while simples desperdiçará sua vida em minutos e deixará você louco, e claramente só pode ser quebrado pelo cliente. Eu até tentei tentar {} catch () sem sucesso. .
NinjaKC
3

Além disso, resista à tentação de adicionar hacks rápidos, porque o código já é complexo / ruim / hacky. Na minha experiência, você acabará com mais complexidade exponencial.

LennyProgrammers
fonte
5
Absolutamente. Quando você se encontra em um buraco, a primeira coisa a fazer é parar de cavar.
PeterAllenWebb