A forma como você programa, faz toda a diferença

Quando aprendemos a programar, toda nossa energia está focada em simplesmente fazer as coisas funcionarem. O desafio é entender como a máquina funciona, como a linguagem se comporta e como controlar o fluxo de execução do software.

É nessa fase que a gente aprende a lidar com o elemento mais frequente na programação: o erro! São infinitas as formas pra algo dar errado. Um erro de digitação, uma lógica errada, uma contagem que escapa por 1, um arquivo que você esqueceu de adicionar, etc.

O processo de tentativa e erro é da natureza do aprendizado.

Cada erro nos ajuda a aprender um pouco mais. Com a prática os erros simples vão ficando menos frequentes, dando espaço para questões mais sofisticadas.

Quando desenvolvemos software profissionalmente, é muito importante ter a consciência que erros sempre acontecerão. O desafio então é você administrar o risco e o impacto destes erros.

Na realidade a interação entre o programador e um código, é um erro em potencial. Quando só você usa o software, o erro tem baixo impacto. Mas quando se trata de um software em produção que serve vários usuários, o impacto pode ser catastrófico.

under-migration

Nessa série de artigos eu comecei falando porque é importante ter foco no valor. Na sequência expliquei o que você pode fazer para não perder o valor de vista. Se você ainda não leu estes artigos, vai lá rapidinho antes de continuar que eles vão te dar mais contexto sobre o que falaremos aqui.

Neste artigo vou compartilhar como você pode ir além da programação aprimorando a sua forma de desenvolver software para ter muito mais confiança na solução que você entrega.

Desenvolvimento Guiado por Testes ou Test Driven Development (TDD) é a técnica que eu mais uso e que mais me ajuda a programar sem perder de vista o que eu preciso entregar.

TDD é uma técnica de design de código que te ajuda a administrar e reduzir os riscos do processo de programação. Ao escrever os testes primeiro e evoluir o código teste por teste você evita que o processo de desenvolvimento vire um caos. Assim você se mantém sempre confiante em evoluir o código, sem medo de mexer aqui e quebrar lá do outro lado.

O processo de TDD se baseia em você definir o input e output do seu código antes de se preocupar com o processamento que levará de um estado ao outro. Assim eu começo do mais simples ao mais complicado, aumentando gradualmente a capacidade do meu software realizar a tarefa.

Quando eu escrevo os testes primeiro, eu expresso um código que diz: Rode o processamento X com o input Y e o resultado será o output Z. Se não for, tá errado!

O detalhe é que fazemos isso antes mesmo de criar o processamento X, seja ele uma função, um método de uma classe, ou qualquer outra construção. Eu defino concretamente a expectativa e a interface do que eu ainda vou implementar.

Se você nunca viu isso acontecendo na prática, no vídeo abaixo eu demonstro a construção de um programa utilizando esta técnica. Eu gravei esse vídeo como um exercício pedagógico quando eu estava pesquisando as melhores abordagens para projetar o Welcome to the Django. Olha que maneiro…

Aprender a dominar os testes e entender como utilizar a técnica para entregar valor foi a lição mais marcante que o meu amigo Bruno Barbosa tirou do Welcome to the Django.

Durante todo o processo do curso nós combinamos a estratégia de Baby Steps com o TDD indo desde a primeira linha de código até o sistema todo completão no final.

Dominar essa técnica teve um impacto bem grande na produtividade do trabalho do Bruno e na forma que ele atende seus clientes. Hoje ele se pergunta como ficou tanto tempo programando de outra forma.

E aê curtiu? Deixa um comentário que a gente segue conversando.

Acompanhe as novidades da nova turma inscrevendo seu e-mail no site do Welcome to the Django.

[]’s, HB!

  • O Titulo Já Diz Tudo! Adorei o Artigo! Parabéns!!

  • Silas Vasconcelos

    Muito massa, parabéns Henrique.

  • Gustavo Moreira da Fonseca

    Muito bom artigo e excelente vídeo. Sua didática é muito boa.

    • Valeu @gustavomoreiradafonseca:disqus! Fico feliz que vc curtiu!

  • Gustavo Coelho

    Baby steps e teste… Excelente dica!

    • Quando essas 2 técnicas são integradas… muda tudo. 😀

  • Desenvolver software é uma atividade prazerosa e divertida para quem ama o que faz. Mas quando o software atinge um certo grau de maturidade e ele não possui testes as mudanças ficam cada vez mais difíceis e o trabalho começa a ficar “chato”…

    Já trabalhei em projetos enormes de grandes clientes onde havia passado por lá vários desenvolvedores e um dos maiores problemas que enfrentávamos era quando havia uma mudança em determinada parte do sistema que quebrava uma outra parte que aparentemente não tinha relação entre elas… Com certeza com testes automatizados esse tipo de problema seria bem menos frequente.

    Não utilizar TDD em software é como programar uma bomba relógio.. Em algum momento haverá mudanças, e sempre há, e quando você o fizer o software vai quebrar em algum lugar, isso é fato, faz parte do processo de desenvolvimento. Quando você tem testes, conseguimos identificar essas “quebras” antes do software ir para produção reduzindo conflitos que poderiam ser causados com a insatisfação do cliente com esses bugs.

    Eu amo programar, mas não sabia o que estava acontecendo pois de alguma forma estava perdendo o “tesão” pela arte… Então descobri no WTTD que meu problema era a não utilização de testes. A manutenção de software pode ser tão divertida quanto desenvolver novas funcionalidades, desde que aja testes para que você possa fazê-la com mais confiança e utilizar o tempo que seria gasto na resolução de bugs com outras atividades que gerem mais valor para o cliente. =)

    • Sensacional, Bruno! Foi exatamente essa sua fala que me inspirou a escrever esse artigo. 😀 Happy hacking!

  • … e mais? Quem não vê acha que não precisa, mas se aparecer um bug o problema é de quem?

    • Tem isso. É daí que vem aumento de “demanda de falha” que invariavelmente inunda o projeto matando-o por dentro.

  • TDD é tão importante quanto a fundação de um prédio. Ninguém vê mas ela está lá.