Complexidade e emergência

No excelent post Complicado, Complexo ou Caótico?, Giovanni Bassi fala sobre a base teórica dos métodos ágeis: os estudos sobre sistemas complexos. A explicação do que é não-linearidade e no que isso afeta o desenvolvimento de software é muito boa.

Vale a pena dar uma lida!

Na versão original de A New Methodology, Martin Fowler indica o livro  Adaptative Software Development de Jim Highsmith. Nesse livro, o autor aplica idéias da Teoria do Caos (ou sistemas complexos adaptativos) para explicar porque os métodos ágeis/adaptativos são melhores que os métodos tradicionais no desenvolvimento de software.

Também vale a pena dar uma lida! Quem arranjar esse livro, me empresta! 🙂

Código Limpo

Bons programadores com certeza já investiram algum tempo limpando seu próprio código. Eles fazem isso porque aprenderam que código limpo é mais fácil de mudar do que código complexo e bagunçado, e bons programadores sabem que raramente eles escrevem código limpo logo de cara.

Martin Fowler, em Refatoração

Complexidade é débito

Não se preocupar com o design do seu código é como entrar em dívida.

No mundo dos negócios, a maioria das empresas precisa de algum débito para poder funcionar eficientemente.

No entanto, com a dívida vem o pagamentos de juros que, em software, é o custo adicional de manutenção e extensão causada por código demasiadamente complexo.

Você pode suportar um pouco de juros, mas se os pagamentos se tornam muito grandes, você ficará sobrecarregado.

É importante gerenciar a sua dívida, pagando-a aos poucos através de refatoração.

Martin Fowler, em Refactoring

TDD e Profissionalismo

Robert C. Martin, também conhecido como Uncle Bob, escreveu um texto muito interessante sobre como TDD define a nós programadores como profissionais.

Para quem não conhece Uncle Bob, ele é programador desde a década 60, escreveu livros sobre código limpoOOC++UMLXPAgilidade. Foi ele que mobilizou vários metodologistas a se juntarem para discutir, o que gerou o Manifesto Ágil. Ele tem um blog que frequentemente tem posts polêmicos.

O texto abaixo chama “Are you a professional?” ou “Você é profissional?”. É da conferência Norueguesa de Desenvolvimento de Software de 2009 (NDC 2009). O keynote do evento foi uma palestra dele com o mesmo nome. Dá pra baixar os vídeos via torrent.

As Três Leis

Desenvolvimento Orientado a Testes (TDD) é definido por três leis simples.

  • Você deve escrever um teste unitário que falha antes de escrever qualquer código de produção.
  • Você deve parar de escrever o teste unitário assim que ele falhar; e não compilar é falhar.
  • Você deve parar de escrever código de produção assim que os testes que estão falhando passarem.

Se você seguir essas três leis que parecem tão bobas, você vai:

  • Reduzir dramaticamente o tempo que você passa debugando código.
  • Aumentar significativamente a flexibilidade do seu sistema, permitindo que você o mantenha com código limpo.
  • Criar documentos que descrever de maneira completa o comportamento do seu sistema.
  • Criar um design para o seu sistema com baixíssimo acoplamento.

Tudo isso a partir dessas três simples regras. Pode soar absurdo. Pode parecer bom demais pra ser verdade.

Profissionalismo

Mas imagine que você é um médico em 1846 e um cara te diz que você pode reduzir drasticamente as taxas de mortalidade, evitar doenças e ferimentos horríveis, e tudo que você tem a fazer é simplesmente lavar as mãos.

Se você não aceitar esse aceitar esse argumento, talvez você aceite esse outro: contadores fazem tudo duas vezes. Toda transação que entra como crédito, também entra como débito. Porque eles fazem esse trabalho dobrado? É uma verificação de segurança. Há uma subtração engenhosa no balanço que produz um zero se não foram cometidos erros. Contadores chamam essa disciplina de Método das Partidas Dobradas.

TDD é o Método das Partidas Dobradas do Software. Cada declaração é feita duas vezes; uma no teste e uma em código de produção.

Nosso código é menos sensível a erros do que uma planilha? Os erros são menos importantes?

Uncle Bob, em Are You a Professional?