The OOPSLA diaries

Meu diário na OOPSLA'2006 apontando algumas das coisas mais interessantes que vi.

Thursday, October 26, 2006


dia 5 - 26/10/2006 - quinta-feira

O dia começou anunciando que a próxima OOPSLA será em Montreal, Canadá (IEBA!! :-) A apresentação foi em francês, traduzida ao vivo para o inglês, o que foi muito divertido...

Logo em seguida, tivemos a palestra de Philip Wadler, da University of Edinburgh que é um dos papas da programação funcional intitulada Faith, Evolution, and Programming Languages: from Haskell to Java to Links. Nesta palestra ele introduziu a linguagem funcional Links mas começou dizendo que temos que abraçar o multiculturalismo nas linguagens de programação, i.e., há uma série de guerras que são religiosas e que são uma questão de fé:
  • OO vs. programação funcional
  • tipagem dinâmica (scheme, Smalltalk) vs. tipagem estática (C++, Java)
e que nenhum dos lados tem argumentos suficientes para descartar o outro.

A palestra continuou com um monte de lógica (me senti numa palestra do LIAMF :-) Ele começou mostrando como vários trabalhos conjuntos de lógicos junto com computólogos levaram a linguagens de programação sólidas. Ele apresentou então toda a fundamentação lógica de Haskell, uma linguagem funcional que ele ajudou a criar e que é baseado no Cálculo-Lambda.

Ele comentou então que Java incorporou a grande maioria das boas idéias de Haskell e um amigo dele disse: e agora o que fazemos dado que eles já incorporaram quase tudo; aí ele disse: já sei o que falta!!! Tipos!!!! E isso é um trabalho para Super-Lambda; aí ele tirou o casaco e por baixo estava com uma roupa de super-homem só que com um Lambda no lugar do S :-)) E o que ele fez foi criar o Java Generics em Java 1.5. O livro Java Generics da O'Reilly é de autoria dele.

Links é uma linguagem derivada de Haskell usada para aplicações Web; a grande vantagem é que é uma única linguagem que pode ser usada nas 3 camadas de uma aplicação Web típica: navegador, servidor Web e Banco de Dados.

Ele irá colocar os slides da palestra no ar para quem quiser ver os detalhes. Se você tiver interesse, Google it!

No resto do dia, participei de um workshop sobre Ultra-Large-Scale Systems. É um assunto fascinante mas me incomoda muito a motivação militar que o pessoal da área está dando. Se a motivação é só militar eu estou fora! Como o assunto pode ser usado em muitos outros contextos benignos, eu acho que pode ter muita pesquisa interessante para se fazer neste campo, mas antes vou ter que encontrar outras motivações para a pesquisa. Um detalhe interessante que o Doug Schmidt citou no workshop é o emulab, um testbed da Universidade de Utah para experimentação com redes de grande escala; fiquei com vontade de entrar nessa.

Nessa OOPSLA, ao falar de sistemas de ultra-grande-escala o pessoal de design citou muito uma tal de Lei de Conway que eu não conhecia. A idéia é que a estrutura de um sistema de grande escala emula a estrutura de comunicação dos grupos de pessoas que projetam este sistema. Procurei na Web e achei um artigo interessante que descreve esta lei de Conway e suas conseqüências.

Em meus diários OOPSLAnos eu não falei nada sobre os artigos de pesquisa, research papers pois eu não assisti a essas sessões, mas são nessas sessões que a "hard science" da orientação a objetos acontece, se é que isso existe :-) Para os interessados neste assunto, sugiro visitar o sítio da conferência ou a página correspondente na biblioteca digital da ACM e baixar os artigos de seu interesse. Mas, um artigo que me chamou a atenção foi um estudo que analisou centenas de milhares (talvez milhões) de linhas de código de programas Java que existem por aí e tirou uma série de conclusões quantitativas e qualitativas sobre a estruturação dos programas Java que existem no mundo real. O título do artigo é Understanding the Shape of Java Software.



Finalmente a OOPSLA terminou com o tradicional ice scream social e todos nós voltamos para casa um pouquinho mais sábios.

Para os alunos que atuam na área, recomendo fortemente que vocês tentem um dia via a um OOPSLA. Para tanto, você deve ou publicar um artigo em algum workshop, sessão de pôster, ou se conseguir, na trilha principal e pedir ao seu orientador que pague pela viagem. Outra forma é conseguir um student volunteer grant; neste caso você ganha a inscrição na conferência de graça e mais 500 dólares para ajudar nas despesas de viagem; o restando você e/ou seu orientador tem que pagar.

Wednesday, October 25, 2006


dia 4 - 25/10/2006 - quarta-feira

FORTRAN está com os dias contados, finalmente! Já era hora :-) O Guy Steele (um dos 4 criadores de Java) apresentou a nova linguagem que o grupo dele na Sun está criando para computação científica. O trabalho, realmente, é de primeríssima linha e estou sentindo que finalmente está chegando uma linguagem que irá substituir FORTRAN definitivamente no mundo científico. A IBM também está trabalhando numa nova linguagem para o mesmo intuito (chamada X10 e que é fortemente baseada em Java), mas algo me diz que a solução da Sun, coordenada pelo Guy Steele tem mais chances de se tornar o padrão; nos próximos anos saberemos se minha intuição está correta ou não.

O objetivo principal é diminuir drasticamente o tempo entre a formulação matemática de um problema científico e o tempo que demora para obter a resposta (note que isso inclui tanto o tempo para desenvolver o programa e o tempo para executar o programa).

A linguagem se chama Fortress, é orientada a objetos, possui traits como ferramenta básica de extensibilidade e tem uma série de características interessantes:
  • fortemente tipada, inclusive com checagem de dimensões (m/s^2 nos Reais)
  • minimalista com possibilidade de extensões através de bibliotecas
  • as bibliotecas estendem não só a funcionalidade mas a sintaxe e a semântica da linguagem
  • Testes de Unidade embutidas dentro da linguagem e associados às unidades do código. A idéia é que toda biblioteca já virá com seus testes automatizados
  • Interfaces diferentes para os programadores de aplicações e para os programadores de bibliotecas (que são quem estendem a linguagem e portanto, tem acesso a uma interface mais poderosa e sofisticada).
  • Notação bem próxima da notação matemática através de caracteres UNICODE e também através de uma notação ASCII similar ao latex, aliás, a linguagem já vem com um pré-processador que converte o código-fonte para LaTeX.
  • Suporte para paralelismo de forma transparente para o programador da aplicação.
Quem quiser saber mais detalhes, pode dar uma olhada nesses slides de uma apresentação sobre Fortress do ano passado. Só para vocês terem uma idéia, comparem o slide 22 (que contém do lado esquerdo a especificação matemática do problema e do lado direito o programa Fortress que o resolve) com o slide 23 que inclui a versão FORTRAN (não paralela) da mesma especificação. A diferença é enorme.

Em suma, é um projeto super-ambicioso que com certeza produzirá um resultado excelente. Só que em Ciência da Computação isso não é suficiente para que a coisa seja adotada realmente pela comunidade pois depende de fatores sociais, econômicos e mercadológicos. A história da computação está repleta de exemplos de excelentes idéias, linguagens e sistemas que não vingaram enquanto que competidores de pior qualidade vingaram. Vamos esperar para ver e torcer para que dê certo!

À tarde assisti a uma apresentação bem polêmica (disseram que o artigo passou por mais de 10 revisores antes de ser aceito :-)) que criticou fortemente Programação Orientada a Aspectos. Ele recapitula as idéias de Parnas e Dijkstra sobre modularização para argumentar que AOP não resolve problema nenhum, muito pelo contrário. O resumo da idéia do autor é o seguinte:
  1. A comunidade de AOP alega que aspectos servem para aumentar a modularidade de programas através do encapsulamento de funcionalidades transversais.
  2. Mas, na verdade, AOP não só não ajuda a aumentar a modularidade como piora significativamente a modularidade aumentando o acoplamento e a diminuindo a coesão.
Logo após a apresentação teve um painel sobre o assunto. Eu estava esperando que o autor fosse estraçalhado e que o pessoal de aspectos sairia como grandes vencedores. Mas não foi isso o que ocorreu, a tarde serviu para aumentar bastante a desconfiança em relação a aspectos na comunidade. Mas aspectos ainda é uma idéia fortíssima e não é uma ondinha dessas que vai afundar o transatlântico. O artigo se chama The Paradoxical Success of Aspect-Oriented Programming.

Agora à noite chegou a hora do grande evento social com muita comidade, bebida e música no Oregon Museum of Science and Industry. O tema da exposição principal era Star Wars e foi muito divertido.

Tuesday, October 24, 2006

dia 3 - 24/10/2006 - terça-feira

Hoje começa a parte principal da conferência e na abertura, a coordenadora, Peri Tarr, da IBM nos informou que a OOPSLA teria 1150 participantes, 450 dos EUA e o resto do exterior (de 46 países).

Seguindo a tradição, a OOPSLA foi aberta com uma palestra excelente de um grande nome de fora da Ciência da Computação; este ano foi Brenda Laurel, professora de Design do California College of Art in San Francisco. Ela falou sobre "designed animism"; animism é a idéia de associar características de vida/espírito a objetos inanimados (a computação ubíqua faria este "designed animism") e como isso cria uma "poética de um novo mundo". A idéia dela é que muito do que a humanidade cria na arte (e hoje na computação) tem muito a ver com padrões encontrados na natureza.

Não vou entrar em detalhes aqui sobre isso mas quero ressaltar apenas o que
ela disse no final em relação a uma pergunta do público: a perguntaram se ela compartilhava com a idéia do Christopher Alexander de que o objetivo da computação era melhorar a vida das pessoas. O que ela respondeu é que a computação, como qualquer coisa, pode ser usada para o bem ou para o mal e que era papel de cada desenvolvedor de software definir o que ele gostaria de fazer com seu trabalho. E a esperança dela é que sim, as pessoas aqui presentes usassem seu trabalho para tornar a vida das pessoas melhor. Eu acho isso muito importante; vejo muitos alunos preocupados em ganhar dinheiro, se enfurnando numa empresa fazendo software medíocre trabalhando com idéias de negócios medíocres para tornar o dono da empresa mais rico mas sem dar uma contribuição real para melhorar a vida das pessoas. We have to change that!



A trilha Onward! da OOPSLA trata de idéias e conceitos que serão importantes para a computação daqui a 10 - 20 anos. Se você gosta de filosofia e de palestras sem uma conclusão cartesiana definida, esta é a sua trilha. Ela se iniciou com uma apresentação poética e heterodoxa (como sempre) do Dick Gabriel e o principal que eu tirei de lá e posso passar para vocês é o seguinte:

Entender o que acontece num nível de complexidade não é simplesmente atingido a partir do entendimento do nível de complexidade inferior; entender o que acontece no nível macroscópico tem muito pouco a ver com as interações entre os átomos; entender o que acontece numa cidade tem muito pouco a ver com os módulos das cidades (prédios, ruas, esgoto, pessoas) isoladamente; entender o que acontece com um sistema de software de grande escala tem muito pouco a ver com os algoritmos e estruturas de dados que estão codificados lá dentro.

Logo em seguida, a Elisa Baniassad apresentou um trabalho sobre The Geography of Programming que aborda as diferenças na forma de pensar e programar dos ocidentais e os orientais (chineses, japoneses e coreanos). Ela diz que ocidentais são mais analíticos e prestam atenção nos objetos enquanto que os orientais são mais holísticos, prestando atenção nas mudanças e nas contradições que precisam exisitir no mundo. Orientais não são obcecados por modularização como nós... O material da apresentação é bem interessante e está disponível na página dela.




A Linda Northrop deu uma palestra sobre Ultra-Large-Scale Systems chamada Scale Changes Everything. É um conceito que está ficando na moda na comunidade e várias atividades da OOPSLA estão tocando neste assunto principalmente porque um conjunto de pesquisadores aqui presentes foram contratados pelos militares americanos para pesquisar este assunto durante um ano e gerar um livro.

Em seguida, o assunto foi destrinchado numa mesa redonda sobre o assunto incluindo pessoas como Gregor Kikzales (criador de Aspect-Oriented Programming que disse que nós ainda não sabemos direito como construir small-scale systems), Doug Schmidt, Martin Rinard (do MIT e que trabalha com sistemas que funcionam mesmo na presença de erros) e Ricardo Lopez que trabalhou em projetos que visavam fazer sistemas (como os de aviação, por exemplo) que fossem capazes de perceber falhas no sistema do avião durante o vôo e consertar as falhas dinamicamente no ar.

Na mesa redonda, foi dito várias vezes que já sabemos como construir prédios (ou sistemas de 1 milhão de linhas de código como o Eclipse e o Linux) mas que precisamos aprender a construir cidades (ou sistemas com 1 bilhão de linhas de código). Por exemplo, apenas a Internet (e a Web) são sistemas desse tipo mas futuramente outros sistemas de ultra-grande escala irão surgir.

À noite tivemos um tributo ao John Vlissides da Gang of Four que faleceu no ano passado. Foi uma festa com sobremesa (parte favorita do John) e uma mesa redonda com os outros 3 membros da GoF (o Helm via um vídeo enviado da Australia onde ele vive). É uma grande pena não termos mais o Vlissides, além de brilhante, ele era uma pessoa humilde, acessível por seres humanos normais como nós e simpática. Só para dar um exemplo disse, uma vez ele até me mandou um presentinho pelo correio pois eu enviei para ele um Uso Conhecido para um padrão que ele estava escrevendo. Durante o painel, o Gamma contou como foi todo o período da escrita do artigo e mostrou uns 10 ou 20 emails dentre os mais de 3 mil que eles trocaram em 92, 93 e 94 durante a escrita do livro.


A OOPSLA tem uma coisa bem legal que são as sessões Birds of a Feather ou simplesmente BoF. A idéia é que alguém posta na parede um assunto que gostaria de discutir dizendo a sala e a hora e todos os interessados aparecem lá para discutir a coisa. Pois bem, hoje de noite, fui ao BoF sobre o Squeak Smalltalk (que usamos há 2 anos na disciplina de POO do IME) e fiquei contente de ver que a comunidade está crescendo (devarinho mas crescendo) e mais e mais sistemas comerciais e de pesquisa usando Squeak estão aparecendo. Dentre os projetos interessantes que foram citados me lembro do:
  • Spoon - um Squeak BEM pequenininho (1300 bytes no mínimo) e extensível; umas das coisas legais que foi demonstrado foi um visualizador gráfico da memória ocupada pelos objetos.
  • Scrutinizer - um verificador de CSS e HTML feito em Squeak/Seaside por um funcionário da Amazon para verificar se as páginas da Amazon estavam sintaticamente corretas. Sugiro experimentar com suas próprias páginas Web.
  • Sophie - um ambiente para autoria de livros multimídia, ou O Livro do Futuro...
  • Gjallar - um "web-based issue tracker" altamente configurável que é baseado no Squeak/Seaside e em um BD OO chamado Magma. Dizem que ele é mais difícil de usar mas muito mais poderoso e flexível do que outras alternativas mais famosas como o Mantis que é um "bug-tracking system".

Monday, October 23, 2006

dia 2 - 23/10/2006 - segunda-feira

O jantar do Hillside ontem foi muito bom, não fomos visitados pela Nina mas pela primeira vez na vida comi uma pizza de alcachofra que tinha gosto de alcachofra, estava muito boa. A novidade da reunião do Hillside é que tudo indica que a Springer-Verlag irá lançar em conjunto com o Hillside um periódico anual ou bi-anual chamado Transactions on Pattern Languages of Programs ou algo parecido onde os melhores padrões dos *PLoPs serão publicados. Outra novidade é que o Dick Gabriel será o co-chair internacional do SugarLoafPLoP'2007 que será em Porto de Galinhas. Portanto, se você tem um bom padrão em mente, não deixe de submetê-lo ao SugarLoafPLoP!!! O prazo para submissão é 29/12/2006.

Vamos agora então às novidades do dia:

O Mario Marques Júnior, aluno do nosso mestrado pediu para eu conversar com o pessoal de aspectos sobre possibilidades de pesquisa misturando aspectos e frameworks. Farei isso durante os próximos dias.

O Workshop do Eclipse continuou hoje pela manhã. Primeiro tivemos uma sessão sobre educação com Eclipse onde foram apresentados 3 artigos:
  1. JExercise - suporte para exercícios em Java baseados em testes dentro do Eclipse. Tem um pouco a ver com o trabalho da Leliane de ambientes de aprendizado.
  2. Um ambiente para aprendizado dentro do Eclipse baseado no Cheat Sheets e no Mylar. O primeiro é um ambiente para criação de tutoriais dentro do Eclipse e o segundo é uma ferramenta para mudar dinamicamente a GUI de forma a mostrar ao usuário apenas o que interessa em um dado momento e esconder todo o resto; assim a ferrramenta mostra em cada ponto do tutorial apenas o que interessa naquele ponto.
  3. XPlainer - um plugin para ajudar a explicar expressões XPath no Eclipse. XPath é um jeito XML de especificar queries, transformações e especificações de restrições em XML.
De noite, tivemos a sessão de posteres da OOPSLA e logo em seguida a sessão de posteres da IBM/Eclipse, tudo regado a bom vinho e comida. Gostei em particular de alguns trabalhos:
  • FitClipse: Fit é uma ferramenta feita pelo Ward Cunningham para que clientes de projetos ágeis possam escrever seus próprios testes de aceitação em quase-linguagem-natural. Eles escrevem os testes num wiki e a ferramenta gera código Java para testes JUnit a partir da especificação feita pelos clientes. O FitClipse é um plugin para o Eclipse que ajudar a gerenciar estes testes de aceitação escritos com o Fit. O FitClipse está no sourceforge mas ainda não é usável; o Fit já é bem usável.
  • FindBugs é uma ferramenta de análise estática de programas Java que supostamente pode achar vários bugs no seu código. Vale a pena baixar e dar uma experimentada no código de vocês: findbugs.sourceforge.net
  • Marmoset é um arcabouço para aplicação de exercícios-programa para alunos via Web de forma que eles podem testar o código com um conjunto de testes de aceitação feitos com JUnit pelo professor da disciplina. Seria legal testar algo assim em MAC 110 ou coisa parecida. A página do projeto é marmoset.cs.umd.edu


  • A Eloisa Sonoda, pos-doc do IME apresentou brilhantemente o OOPS: um arcabouço OO para a construção de aplicações científicas paralelas.
  • Um outro trabalho muito interessante foi uma ferramenta para encontrar aspectos transversais de forma automática em projetos de grande escala de forma a facilitar a reescrita destes aspectos como aspectos AspectJ, por exemplo.




  • Um pôster que me chamou a atenção foi um resumo do Workshop on Domain-Specific Languages e lá eles apresentam, como exemplos da idéia, algumas ferramentas para gerar aplicações móveis e para telefones celulares automaticamente a partir de descrições feitas em linguagens gráficas específicas. Viu Daniel Cukier??? Tem que dar uma olhada nisso :-)




Finalmente, a noite terminou tranqüila, mas como em toda OOPSLA, comi demais...
Agora que acabei de editar o blog, vou estudar a programação de amanhã para decidir o que vou assistir. A dificuldade é que tem muitas sessões interessantes em paralelo e preciso me decidir sobre qual sessão assistirei em cada horário...

Sunday, October 22, 2006

dia 1 - domingo 22/10/2006

Hoje participei do primeiro dia do Eclipse Technology Exchange Workshop na OOPSLA e alguns dos trabalhos foram muito interessantes. O programa completo e os PDFs dos artigos podem ser encontrados aqui: http://www.cs.mcgill.ca/~martin/etx2006/program.html


Eis os que mais gostei:

1) Um plugin eclipse para programação pareada distribuída muito legal!

Next Generation Distributed Pair Programming with Sangam and Facetop - North Carolina University

Sangam é um plugin existente para DPP; facetop é um sw para colocar o vídeo da face dos programadores em cima da tela do eclipse (usando transparência, como um fantasminha). Esse trabalho junta os dois de forma que os programadores podem apontar para a tela e um enxerga o outro apontando e fazendo gestos em cima da tela. Por enquanto a parte de vídeo mostrando os dois programadores simultaneamente funciona apenas no MacOS X.

Quem quiser usar a ferramenta deles no MacOS X, basta escrever para eles pedindo.

2) Um trabalho da Isabella da Silva da UFRJ mas que está em Irvine sobre como evitar conflitos no repositório através da coordenação do trabalho (not-yet-committed) dos programadores através de um plugin voltado para um ambiente de trabalho com 2 monitores (1 para a programação, outro para visualizar o trabalho em andamento dos outros de uma forma gráfica (emergent design view)).

Lighthouse: Coordination through Emerging Design

Pode ser uma boa ferramenta para grupos distribuídos onde é comum programadores em locais diferentes mexerem no mesmo código.

3) Um analisador de informações sobre repositórios CVS. Ele analisa um projeto guardado no CVS e gera um monte de informações interessantes sobre o projeto.

Esse trabalho tem a ver com dois artigos: APFEL e HAM (gostei mais do primeiro que é veggie-friendly). O segundo fala mais da aplicação específica disso para localizar aspectos transversais no código.

4) Um trabalho do Danny Dig, aluno de doutorado do Ralph Johnson que construiu uma ferramenta para resolução de conflitos em repositórios CVS que leva em consideração o que foi refatoração e o que foi edição manual. Em geral, as refatorações geram dezenas de conflitos; os programadores sabem disso e evitam a priori conflitos deste tipo dizendo: "vamos fazer uma grande refatoração, quero que todo mundo faça um commit no repositório antes de começarmos". Esta ferramenta do Danny guarda num log todas as refatorações feitas e portanto consegue lidar muito bem com refatorações conflitantes, resolvendo elas quase sempre automaticamente sem a intervenção do usuário. O sistema se chama MolhadoRef.

5) Há um trabalho sobre uma ferramenta para verificação de sistemas de tempo real no Eclipse feita por um grupo de pesquisadores da Argentina. Infelizmente, temos muito pouca interação com nossos vizinhos argentinos na área de OO. Precisamos tentar mudar isso nos próximos anos.

6) Para os teóricos, tem um trabalho que parece ser bem interessante intitulado "Proof General in Eclipse" que é um ambiente para prova automática de teoremas.

7) Uma ferramenta para visualização de clones no código-fonte de um projeto. Um clone é código duplicado, resultado do anti-padrão copy-and-paste programming. A ferramenta é construída em cima do visualizador de aspectos do AJDT e mostra o código duplicado de forma gráfica.

8) FrUiT é um projeto interessante que oferece suporte do IDE para a compreensão de arcabouços. Ele usa técnicas de mineração de dados para ajudar programadores a entender como usar um dado arcabouço.

---

Hoje à noite, teremos a reunião executiva do Hillside group. Será numa pizzaria muito interessante, o site deles diz que é mal-assombrada. Amanhã digo se eu encontrei a Nina...

Saturday, October 21, 2006

Diários da OOPSLA

Decidi escrever um blog sobre as coisas interessantes que estou vendo na OOPSLA de forma que meus alunos possam acompanhar as novidades no mundo da OO que estão sendo apresentadas aqui. Para quem não sabe, a OOPSLA, ou ACM International Conference on Object-Oriented Programming, Systems, Languages, and Applications é a principal conferência mundial na área de Sistemas de Software Orientados a Objetos. Neste ano, a OOPSLA está sendo na bonita Portland, Oregon, EUA.


Dois sítios interessantes para se visitar são:

Além da OOPSLA, estou participando também da ACM GPCE, que é a International Conference on Generative Programming e Component Engineering de cujo comitê de programa faço parte. Então, também farei comentários sobre o GPCE no meu blog. Para quem se interessar por este assunto, sugiro dar uma olhada na programação completa do GPCE.