Pular para o conteúdo principal

TDD como ferramenta de aprendizado

Na penúltima sessão do DojoBrasilia surgiu a seguinte questão:

Será que o TDD não atrapalha no aprendizado de novas tecnologias?
 A grande questão girava em torno de que o respeito estrito as regras ao TDD tornariam o aprendizado lento e enviesado. Isso por que você estaria focado em passar o teste o que estaria limitando sua velocidade no aprendizado na tecnologia, bem como a visão do objetivo final.

Caso do dojoBrasília


No caso da sessão que levantou a questão acho que o principal sentimento de "lentidão" se deve a grande carga de tecnologias novas que estavam envolvidas. Escolhemos iniciar um problema conhecido em não uma, mas várias tecnologias (Backbone.js, Undescore, CoffeeScript, Jasmine, etc). Ao final da sessão a sensação de pouco avanço era justificada pelo tempo gasto compreendendo as tecnologias em questão.

A sessão seguinte não obteve o avanço que muitos esperavam. Mas nela podemos ver como o uso de TDD compensou. Tínhamos apenas 4 casos de teste e não estávamos conseguindo utilizar alguns recursos do Backbone.js que nos pareciam bastante interessantes. Iniciamos então uma série de refactorings testando várias teorias em cima das tecnologias até que no final nosso código estava utilizando os recursos dos frameworks e estava bem mais agradável. Rodamos então nossos testes e todos ficaram felizes com o resultado. Evoluímos e ainda tínhamos a segurança de que nosso código estava funcionando.

Conclusões

O que eu tiro disto é que, apesar de parecer mais lento, o uso de TDD lhe ajuda a ter uma aprendizado mais firme da tecnologia estudada. No exemplo que vimos é claro que o uso de TDD facilitou testarmos hipóteses sobre os frameworks sem perder o que já tínhamos e com a garantia de que estas hipóteses realmente funcionavam. Outro ponto que achei bastante interessante foi que usando TDD fomos obrigados a conhecer mais da interface de cada uma das ferramentas, para que pudêssemos testá-las, isso aprofundou nosso conhecimento.

Um outro ponto interessante é que algumas pessoas podem ter um pouco de pressa em ver o resultado do que estão fazendo. Neste caso acho interessante a abordagem que o James Shore seguiu neste caso. Ele queria testar um novo gerenciador de layout no seu projeto, então ele construiu um outro projeto onde ele testou o novo framework até ter algo que lhe agradasse. Após isso ele foi transferindo o que ele tinha deste "protótipo" (hipóteses) pro seu código através de testes. É muito interessante observar que muitas das hipóteses dele não estavam corretas (assim como as nossas), porém o exercício lhe ajudou a corrigi-las.


Por fim, acredito que o TDD pode sim ser uma boa ferramenta de aprendizado de tecnologias. E convido vocês a experimentar. Eu a usei no meu kata de Scala e, apesar de ser um exemplo bem simples, foi muito proveitoso.

Postagens mais visitadas deste blog

A experiência de software

Hoje em dia está muito em voga se falar sobre o desenvolvimento de produtos e serviços de software. Sendo assim as iniciativas e startups estão alta. Mas para quem está no mercado de Brasília (e de alguns outros centros do país) como eu, sabe que a prestação de serviços nas famigeradas "Software Houses" ( me recuso a chamar de Fábricas de Software ) é bem comum. Porém, este trabalho costuma ser renegado ou, como eu vejo, tratado sob um ponto de vista um pouco equivocado. Uma fábrica de software artesanal Onde se enganam tais pessoas é em que elas estão vendendo. Muitas empresas acreditam, de fato, que vendem software. Eu porém digo que isso é não de todo verdade. Se você é um prestador de serviços e constrói software sob demanda, você não vende apenas o software. Aqui não me refiro aos milhões de outros "artefatos" que são empurrados goela abaixo entregues aos nossos clientes. O que vejo é que vendemos algo que não está limitado ao software que vai pra mão (ou se

Formando pessoas desenvolvedoras na bxblue

Eu sempre fui apaixonado por ensinar. Trabalho com a formação e ensino desde 2003, indo desde o ensino das bases de computação até lecionar em cursos de pós-graduação. Estar no dia-a-dia com pessoas que estão no começo da carreira é um mix de satisfação e desafio. Satisfação por você ter a oportunidade de contribuir com um pedacinho tão especial da história daquela que será uma pessoa desenvolvedora no futuro. Desafiadora pelo fato de precisarmos nos despir de aprendizados já superados em nossas mentes e nos esforçamos por enxergar novamente pelos olhos de quem ainda não tem a mesma vivência que você. Por onde passei, eu sempre acreditei que um bom equilíbrio entre profissionais experientes e em formação é a melhor combinação para um time de tecnologia. Isso é benéfico não apenas para a retenção, como também é estímulo para uma cultura de aprendizado e humildade. Cultura essa que favorece o compartilhamento e interação não apenas entre quem faz o software, mas também as demais áreas da