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.

Sunday, August 2, 2009

Unibabel: bricando com Unicode

Este fim-de-semana eu comecei um novo projeto experimental, o Unibabel.

É uma interface Web para explorar a Unicode database que vem embutida na linguagem Python. Eu me divirto passeando entre as páginas e encontrando caracteres, ideogramas e símbolos elegantes, exóticos, familiares ou bizarros.

Veja por exemplo esta página de operadores matemáticos, e esta letra do alfabeto malaio. Link
Serve também como um exemplo bem básico de como fazer rodar uma aplicação Django no Google App Engine.

O código do Unibabel está publicado:

http://code.google.com/p/unibabel/source/browse/unibabel/views.py


Por enquanto o Unibabel não usa o datastore do Google, todos os dados vêm do módulo unicodedata do Python. Futuramente vou usar o datastore para permitir buscas por atributos dos caracteres (por exemplo, listar todos os caracteres numéricos, todos os símbolos, ou todas as variantes da letra 'A'...).

Se alguém quiser colaborar, fique à vontade para clonar o repositório e se fizer algo interessante me manda uma mensagem que eu posso incorporar a sua contribuição.