domingo, 9 de novembro de 2008

Ariane e os perigos do overflow



É sempre bom ver esse video antes de começar qualquer projeto grande de software. Meu pai tinha um livro interessante sobre os grandes desastres da História da Medicina - era um livro bem interessante que contava, dentre outros, um caso de uma cirurgia onde morreram o paciente, o médico e um espectador (a muito tempo atrás, no século XIX eu acho, cirugia tinha platéia). Outro bom livro sobre desastres é o ótimo Caixa Preta de Ivan Sant'Anna. Eu li a muito tempo, mas ainda lembro da descrição daqueles três famosos acidentes da aviação brasileira. Eu tenho quase certeza que deve haver um livro semelhante sobre os grandes desastre da Engenharia de Software, mas eu não conheço. De qualquer forma, o Ariane V certamente deve figurar como um dos bugs mais caros da história.

Seguindo o link da Wikipedia para o "Ariane V" acabei lendo duas coisas sobre as quais me deu vontade de falar: HAL 9000 e a Princesa Margriet da Holanda. Primeiro sobre o HAL:

In the 1968 novel 2001: A Space Odyssey (and the corresponding 1968 film), a spaceship's onboard computer, HAL 9000, attempts to kill all its crew members. In the followup 1982 novel, 2010: Odyssey Two, and the accompanying 1984 film, 2010, it is revealed that this action was caused by the computer having been programmed with two conflicting objectives: to fully disclose all its information, and to keep the true purpose of the flight secret from the crew; this conflict caused HAL to become paranoid and eventually homicidal.
Ok, o HAL é um bug bem pop da história da computação. Ele foi programado com objetivos conflitantes que o levaram a ficar paranóico - ok, isso é interessante. Mas o que é ainda mais interessante é que objetivos que nem parecem tão conflitantes, podem levar a resultados inesperadamente desagradáveis. Essa semana vi um ótimo exemplo disso - o Teorema de Arrow. Pode ficar tranquilo que eu não vou entrar em detalhes muito matemáticos (mas se você quiser, sempre posso indicar um livro). Vamos ao resultado:

Temos n pessoas e m candidatos. Cada pessoa rankeia (ordena) os candidatos segundo suas preferencias. Um esquema de votação é um método que toma todas essas preferencias individuais e produz um unico ranking. Duas coisas aparentemente bem razoáveis de se pedir de um esquema de votação são: (i) Unanimidade: se todos escolhem o mesmo ranking, esse será o ranking final escolhido e (ii) Independencia das alternativas irrelevantes: a posição relativa dos candidatos x e y no ranking final só deve depender das posições relativas de x e y em cada uma das preferencias individuais (em outras palavras, não deve depender de um outro candidato z. Isso parece bem natural, no entanto, o Teorema de Arrow diz que o único esquema de votação que satisfaz esse critério é a ditadura, ou seja, escolher um individuo i no grupo e tomar o ranking final como a preferência individual de i. Acho sempre bonitos esses teoremas que violam a intuição (como o Paradoxo de Tarski-Banach). Eu vou me furtar de comentar de possíveis implicações sociais e filosóficas do Teorema de Arrow, até porque sou um grande fã da democracia, mas é sempre bom prestar atenção a condições aparentemente inócuas que levam a coisas possivelmente bastante indesejadas.

Ah, sim, eu falei que ia falar também da Princesa da Holanda. Eu procurei Ariane na Wikipedia e um dos links no Disambiguation era a Princess Ariane of Netherlands. Mas não é dela que eu quero falar. Me lembrei da história de outra princesa - a Princesa Margriet. No começo do ano eu estive no Canadá e fiquei impressionado com a quantidade de tulipas na primavera em Vancouvert. E lembrei da Holanda (não que eu tenha visto muitas tulipas na Holanda, porque só fui lá no inverno). De toda forma, o Canadá está ligado à Holanda de uma forma bem interessante que não tem a ver com Vancouvert (e eu só estou escrevendo essas coisas para dar uma falsa impressão de continuidade no meu texto).

Um pequeno pedaço do Canadá já se tornou território holandês de uma forma bem inusitada. A família real holandesa morou em Ottawa no Canadá durante a ocupação nazista da holanda. Nessa época a rainha Juliana estava grávida e, naturalmente, uma princesa holandesa não pode nascer fora de terrirório holandês. A solução encontrada foi declarar a maternidade território holandês, para que a princesa não nascesse fora de seu país.

Gosto muito dessas histórias pequenas e interessantes. De toda forma, ando meio preocupado de uma parte considerável da minha expansão cultural se dar via a Wikipedia. Não sei até que ponto estou ficando dependente: de toda forma, não é muito saudável interromper horas produtivas de trabalho para ficar lendo sobre leis inglesas de naturalização ou sobre o pescoço das mulheres em Burma.

3 comentários:

Thiago Castro disse...

Huahuahuahua
Ariane V, sempre presente! Já te falei que tou trabalhando com a Janilma?? =P
Abração!

PS: Muito bom o blog! Que bom que tem poucas postagens, porque assim deu pra ler tudo... só não segui (todos) os hyperlinks, claro... como diria o Alex (que Alex?), o bizu é lazy evaluation! ;)

m&m'f disse...

Heeeeeei!
Um companheiro de blog!
É muito bom q esteja escrevendo este blog, pois de certa forma me sentirei um pouco menos longe de vc e é uma maneira bacana de saber que está td bem por ai!
Sem contar que éum bom registro das coisas que tem vivenciado por estas terras estrangeiras.
Nesta semana um amigo me enviou os arquivos dele de um diário que ele escrevia. Foi tão bom ler, e ver como fazia parte da vida dele e relembrar coisas que haviam se apagado da memória...como as borboletas do meu texto!
Um abração e continue a escrever! Vou colocar link no meu blog para o seu! (assim q lembrar comofaz isso...hehehe)
Cuide-se!

Hugo Mentzingen disse...

Sinal de que o processo eleitoral brasileiro, mesmo não sendo o mais justo, pode ser o mais democrático?

Abs!