quarta-feira, 23 de outubro de 2013

O Mítico Homem-Mês - O Poço de Alcatrão - Cap. 1

Oi pessoal, tudo bem?

Depois de muito tempo sem postar nada em meu blog e de mudar aqui para o Blogger, estou voltando a escrever basicamente devido a um livro, O Mítico Homem-Mês.

Este livro foi escrito por Frederick Brooks Jr originalmente em 1975 (sim, estamos falando de um clássico!) mas vem recebendo atualizações devido a importância da obra. Este foi um dos primeiros, se não o primeiro, grande livro a tratar da industria de software onde Brooks fala sobre os desafios que encontrou durante o projeto do OS/360 da IBM.

Estou lendo uma edição de 1995 que, apesar dos quase 20 anos, traz reflexões e propostas muito atuais, que lembram em muito as metodologias de desenvolvimento ágil! Eu comprei esta edição por 1/3 do preço praticado nas livrarias em um site chamado Estante Virtual, recomendo!

Minha ideia aqui não é fazer um resumo do livro, mas sim registrar os pontos mais importantes e compartilhar minhas reflexões sobre os temas do livro. Por isso, deixo aberto o campo de comentários para que possamos conversar sobre o assunto!



O Poço de Alcatrão
















No primeiro capítulo, Brooks fala sobre como grandes empresas de desenvolvimento de software têm dificuldade de terminar seus projetos no prazo, com o gasto previsto e com a qualidade esperada, fazendo referencia ao problema mortal do "poço de alcatrão (piche)" para as grandes feras pré-históricas. Ele cita, de forma indireta, o caso da Apple que criou o primeiro computador pessoal na época em que o livro foi lançado. 
"Por que então não substituir todas as equipes de programação por dedicadas duplas de garagem?"
Brooks defende que existe uma grande diferença em o que esta sendo produzido. Uma dupla de garagem pode, facilmente, criar um programa e deixa-lo pronto para uso, mas, para tornar este programa em algo mais valioso existem dois caminhos:

  1. Transforma-lo em um Programa Produto. Neste caso, é preciso generaliza-lo para que funcione em vários ambientes e com vários conjuntos de dados. É preciso testa-lo para garantir seu funcionamento e documenta-lo para que outros possam usar e estender.
  2. Transforma-lo em um componente de um sistema. Neste caso o sistema é um conjunto de programas que trabalham de forma integrada para um objetivo final. Desta forma, o programa precisa ter suas interfaces ajustadas para se comunicar com os outros programas do sistema, ele precisa ter suas integrações testadas para garantir o funcionamento do todo.
Nos dois casos Brooks afirma que são necessários, pelo menos, 3 vezes mais tempo do que foi usado na criação do programa, então, se criar um determinado programa levaria 1 mês, tornar este programa e um Programa Produto levaria pelo menos 3 meses.

Existe ainda um terceiro caso, o caso do Produto de Programação de Sistema, que seria a união dos esforços da criação de um sistema produto com a integração de programas para criar um sistema. Neste caso o esforço seria multiplicado 9 vezes! Brooks defende que este seria o real objetivo da maioria dos investimentos em programação.

Minhas Considerações


Estando certo ou não sobre a relação de tempo entre criar um programa (praticamente um protótipo) e um sistema de programas, Brooks consegue deixar claro um detalhe importante, são coisas bem diferentes e requerem esforços bem diferentes. Pode parecer muito obvio, e talvez o seja, mas o fato é que quando passamos uma estimativa de tempo estamos, geralmente, pensando no tempo para criar um programa e não levamos em consideração o esforço necessário para tornar este programa um produto ou ainda de integra-lo a outros programas.

Nossas estimativas ainda precisam melhorar muito. Muitas das técnicas que são aplicadas em outras engenharias ainda são novidades para nós. Este é um problema que existe a muito tempo e que ainda não conseguimos nos livrar direito. Por sorte, Brooks se aprofunda neste tema no próximo capitulo!

Gostaria de terminar o post um uma citação do livro que não cheguei a abordar onde Brooks tenta definir as alegrias de se trabalhar com programação:
"O programador, como o poeta, trabalha apenas levemente deslocado de um ambiente de pensamento puro. Ele constrói seus castelos no ar, de ar, criando a partir de sua imaginação."
Espero que tenham gostado!
Um abraço!