Wednesday, August 26, 2009

Construção civil e engenharia de software

A construção de uma casa nos EUA é muito diferente da construção de uma casa no Brasil. Aqui a casa comum é construída tijolo por tijolo, azulejo por azulejo, telha por telha. Numa economia mais desenvolvida, os custos de mão de obra tornam inviável esse modo de construção artesanal.

A casa típica da classe média americana não é propriamente construída, e sim montada. Apenas a construção da fundação se parece com o que se faz no Brasil. Sobre a fundação, a casa gringa é montada a partir de elementos estruturais, paredes, pisos e coberturas que chegam prontos ao local da construção, como um kit. As peças em sua maioria já vem até cortadas nos tamanhos e formatos certos. Os banheiros, que são a parte mais complicada de qualquer casa, costumam ser entregues prontos: chegam pré-montados em uma carreta e são colocados no lugar por um guindaste.

Em outras palavras, os americanos montam casas mais ou menos como se montam automóveis nos EUA, no Brasil ou em qualquer lugar. Na Ford por exemplo, desde os tempos do Modelo T, motores, painéis e bancos não são construídos na linha de montagem, mas apenas integrados. Ou seja, a prática da construção civil americana já é industrial, enquanto que a brasileira ainda é artesanal.

Na engenharia de software o sonho que vem impulsionando a adoção da Orientação a Objetos é o uso de componentes pré-montados, permitindo a redução do tempo de desenvolvimento e o aumento da qualidade. Quando as aplicações são feitas artesanalmente, a produtividade é muito baixa. Esse modelo só se sustenta quando a remuneração dos programadores também é baixa. Vira um ciclo vicioso: o cara ganha pouco porque trabalha mal, e trabalha mal porque ganha pouco. Como ganha pouco tem que trabalhar muito, e aí não tem tempo para estudar.

O uso de frameworks vai além: oferece um conjunto de componentes já integrado, e o papel do programador passa a ser implementar componentes específicos que se conectam de forma bem definida aos demais. O framework é como o kit estrutural de uma casa.

Usar um framework exige um investimento maior do tempo programador até ele entender como as partes se encaixam e atingir um bom nível de produtividade. Não dá para simplesmente sair programando do jeito que você quer, é preciso estudar antes, às vezes bastante, para entender como programar componentes que vão se encaixar num framework. Mas uma vez superada esta fase, é possível entrar em um ciclo virtuoso: você ganha bem porque produz bastante e com qualidade, e ganhando bem pode investir mais na própria formação e atualização.

Por sinal, uma das melhores formas que eu conheço de investir em mim mesmo é frequentar congressos de alta qualidade como a Python Brasil.

6 comments:

Anonymous said...

Luciano, aqui vai uma sugestão de correção: o "como" parece estar sobrando na última frase.

Luciano Ramalho said...

Valeu, Antonio!

Mario Domenech Goulart said...

Alô Luciano

Interessante a analogia. O trecho "é preciso estudar antes, às vezes bastante, para entender como programar componentes que vão se encaixar num framework" é, de fato, real. Normalmente é muito mais divertido "fazer justiça com as próprias mãos" do que aprender a usar um um framework já bem desenvolvido.

E também tem a temerosa questão que normalmente pensamos antes de adotar um framework "ok, vou investir tempo para estudar esse negócio; provavelmente ele fará mais do que preciso, mas há o risco de NÃO me permitir fazer o que realmente quero com facilidade -- aí terei que apelar para hacks bárbaros".

No caso da construção de casas, imagino que o resultado final seja mais previsível e livre de riscos de não atender as demandas que no desenvolvimento de software. E casas normalmente não têm problemas de desempenho... :-)

Um abraço.
Mario

Luciano Ramalho said...

Hoje na PythonBrasil o Jacob Kaplan-Moss, um dos criadores do Django, falou sobre a evolução do desenovlvimento Web. No meio da palestra ele usou uma analogia com a construção de casas, idêntica à que eu postei aqui há duas semanas. Confira o trecho intitulado The Industrial Age: Web Frameworks em Snakes on the Web.

Marcelo Amorim said...

Luciano

Gostei do post. Me manda seu email para eu falar contigo.

O meu novo é amorim.marc@gmail.com (agora livre e solto)

Abs

Marcelo Amorim (ximite)

Altherlex Alves said...

Olá, achei interessante seu artigo a tomei a liberdade de fazer referencia no meu blog.
http://gimenes-alves.blogspot.com/2010/01/ciclo-vicioso-vs-ciclo-virtuoso.html