sábado, 11 de dezembro de 2010

"Agile" nunca mais

Outro dia, em uma thread na lista de discussão do núcleo de pesquisa onde trabalho (a.k.a. glorioso NSI), debatíamos a respeito de uma palestra apresentada na Agile Conference 2009, chamada "Let's stop calling it 'agile'", em cujo resumo constava:
Agile development has grown a lot since its rebeleous 2001 start. In fact, it has grown to be the mainstream way of developing software. The time has come to drop the word 'agile.' Agile development is just modern practices in software development. There is no need to explicitly mark practices as Agile. There is no need anymore for opposing camps. Keeping the word Agile and things like ""the Agile conference"" is holding the development of modern SW development practices back.
Ou, em português:
O desenvolvimento ágil cresceu bastante desde seu início em 2001. De lá pra cá, se tornou o modo "mainstream" de desenvolver software. É chegada a hora de abandonar a palavra "ágil". Desenvolvimento ágil é tão-somente o uso de técnicas modernas no desenvolvimento de software. Não há necessidade de nomear explicitamente estas práticas como ágeis. Não há mais necessidade para campos opostos. Manter a palavra "ágil" e coisas como "a Conferência Ágil" é atrasar a evolução das práticas modernas de desenvolvimento de software.

Eu não fui primeiro no NSI a repercutir a conversa: o Rogério Atemfalou sobre o assunto em seu blog. Com este post, quero apenas apresentar a discussão e oferecer meus dois centavos ao assunto. De cara, concordo plenamente com a ideia de que o termo "ágil" tem feito mais mal do que bem hoje em dia. Principalmente por ser relativamente fácil passar um verniz ágil em um projeto ("olha, estamos fazendo Scrum, temos daily meetings, post-its no vidro da janela, e agora o analista de sistemas se chama scrum master, tem até certificado"). Uma vez que está na moda ser "ágil", o modelo se prolifera como erva daninha. Mas isto é assunto para outro post.

A discussão, inicialmente, era sobre o agilismo e a preponderância, na academia, de um estranho ente teórico-prático chamado "modelo tradicional". Minha opinião é de que a camada pensante do mundo tradicional é cada vez mais um grupo deslocado em um mundo que já não mais compreende. Imagino como estariam fora de lugar em qualquer bom evento de desenvolvimento de software envolvendo desenvolvedores militantes (i.e. que efetivamente desenvolvem software), como, por exemplo, o Dev In Rio.

Vou tentar explicar melhor como eu vejo essa questão. A idéia de deixar a palavra "agile" de lado é simplesmente continuar vivendo a vida e trabalhando como se os métodos tradicionais fossem o que realmente são: uma etapa ultrapassada - e, hoje, sem qualquer sentido - da evolução da engenharia de software.

Tenho tentado seguir isto hoje em dia e deixado discussões envolvendo "métodos tradicionais" apenas para contextos específicos como aulas de disciplinas universitárias de "Análise de Sistemas" (pois a própria estrutura das grades de cursos de graduação tem visivelmente inscrita a cascata). Ou então em discussões diretas com tradicionalistas. Fora destes contextos, procuro simplesmente sustentar que TDD/BDD é o modo considerado correto de se criar grande parte aplicações modernas, que integração contínua é condição necessária para a saúde de um projeto, que ubiquitous language é uma obrigação em qualquer projeto de software que queira ter sucesso, que código limpo é um requisito para qualquer programador digno do nome. Sem precisar citar que são técnicas "ágeis" ou qualquer coisa do tipo. E normalmente ignorando completamente o fato de que existe, ou existiu, alguma outra coisa. Tradicionalismo, só em história da engenharia de software, arqueologia, sei lá.

Para quem está em ambientes modernos de desenvolvimento de software, tudo isto é chover no molhado, é o óbvio. Porém, a academia está muito longe disto, e é no "método tradicional" - o que quer que isto seja - que os estudantes ainda estão sendo educados.

Assim, penso que o melhor a fazer é apresentar os conceitos tidos como "ágeis" simplesmente como o modo certo de fazer engenharia de software e não como técnicas alternativas ou coisa do tipo. E apresentar rapidamente o tradicionalismo (caso alguém o traga à discussão) simplesmente como um conjunto de ideias ligado a um contexto técnico que já passou (linguagens de baixo nível, computadores pouco poderosos, ambientes de desenvolvimento precários, extrema dificuldade ou impossibilidade de verificação automatizada, inexistência de controle de versão etc). Em nichos específicos, como por exemplo EIS, agile ainda é "alternativo". Mas no geral, não há mais porque continuarmos uma briga (pelo menos no campo simbólico) com um adversário que já morreu de velho. Tratar o tradicionalismo como um adversário é reconhecer-lhe um valor que já não tem mais.

Let's stop calling it "agile"!

3 comentários:

Daniel disse...

Condordo. E qual seria o método viável para livrar o meio acadêmico de "PRESSMAN et al" (que deveria ser considerado um método cruel de tortura)?

Rogerio Atem de Carvalho disse...

Para livrar o meio acadêmico é necessário que os professores desenvolvam. Infelizmente, muitos colegas NUNCA foram desenvolvedores, se formaram, fizeram pós graduação e nunca desenvolveram. Outros desenvolveram e depois pararam. Daí eles ficam presos a paradigmas de sua época de faculdade ou quando ainda programavam. O "tradicionalismo",por ser obsoleto, é uma má influencia, de um grupo de pesquisa específico aqui do Estado do RJ, que forma muita gente em o que chamo de "pesquisa velha". E como esse pessoal se prendeu ao próprio legado de "pesquisa", ainda insite na tecla do "tradicionalismo" para valorizar o que faz, já que perdeu o bonde do agilismo.
Em tempo: muitas empresas ainda estão no mundo "tradicional" também. Muitas mesmo.

Rodrigo Manhães disse...

Daniel,

concordo com o Rogério a respeito da solução. É preciso que os professores realmente conheçam desenvolvimento de software, e não só arrastar quadrados e setas em ferramentas CASE.

Eu tenho tentado mudar esse quadro por onde passo (sim, é muito pouco, mas é aquela coisa de "estou fazendo a minha parte"). Na UENF, só para citar um exemplo, estou começando, nas aulas de Análise OO (olha aí a cascata inscrita na grade...), a introduzir a implementação dos modelos como parte do ciclo, sendo coerente com as afirmações de que modelagem é comunicação e que só se realiza de verdade com código rodando. Na UENF, também, já lecionei uma eletiva de Desenvolvimento Àgil de Software e todas as minhas orientações de trabalhos práticos (extensão, etc) são feitas sob o ponto de vista ágil (ops!).

Gostei da caracterização de "Pressman et al." como método de tortura, certamente vou usar isso... haha!


Rogério,

sobre as empresas ainda no meio tradicional, certamente temos muitas. Mas na academia acho que a coisa é mais feia. Veja o caso da comunidade do RJ, com o dojo-rio, os forks, as comunidades (PythonRio, RubyOnRio), os eventos (DevInRio, PythOnCampus), todos eles afinados com os ideais do manifesto ágil. Enquanto na academia, fora iniciativas (ainda) isoladas, o que temos?