6 de fevereiro de 2010

Novas ferramentas para programação visual

Muita gente associa o termo "programação" com letras passando por uma tela monocromática, ao estilo Matrix. Listagens complicadas, cheias de números e palavras em inglês. Essa imagem tem uma certa base na realidade; a grande maioria dos programas de computador é expresso em forma de texto, em linguagens como Java, C, PHP, Basic e outras. Mesmo linguagens visuais como o Visual Basic operam com base em comandos textuais, sendo que a parte visual se limita ao design de telas e formulários. É uma diferença radical de outras disciplinas experimentais, que envolvem a manipulação física de objetos - e é também uma grande barreira para que mais e mais pessoas aprendam a programar um computador.

Uma nova geração de linguagens está mudando esta realidade. Algumas são projetos educativos, como é o caso do Scratch, desenvolvido pelo MIT, e do Kodu, desenvolvido pela Microsoft Research.

O Scratch é um ambiente de prototipagem gráfico, onde o programador manipula objetos multimídia. O programa é montado como se fosse um Lego, com blocos que se encaixam; estruturas de controle como loops e testes são visualmente representadas dessa forma. A página contém bastante conteúdo em português, que vem sendo traduzido por voluntários da comunidade.

Já o Kodu é uma ferramenta completamente diferente, que opera em um ambiente 3D, com "atores" que realizam ações que podem ser programados de forma interativa. A linguagem foi originalmente desenvolvida para o Xbox, mas foi portada recentemente para o PC e está disponível para os interessados. (Aviso: a plataforma ainda é experimental e tem vários bugs).



O Sikuli, também desenvolvido pelo MIT, tem um objetivo diferente - mas ainda assim interessante. O Sikuli permite especificar scripts com componentes visuais, e é efetivamente um "cruzamento" de uma linguagem textual (no caso, um dialeto de Python) com elementos gráficos. A linguagem permite automatizar qualquer tipo de tarefa que possa ser feita em um ambiente GUI. Isso inclui desde aplicações pessoais ou domésticas (por exemplo, verificar o status de uma aplicação) até aplicações profissionais como teste de software.

É interessante comparar esta nova geração com algumas das tentativas pioneiras, como foi o caso do Logo, que teve relativa popularidade nos primórdios da microinformática e foi usado em vários experimentos de ensino de informática no começo dos anos 80. Outro exemplo foi o Hypercard, muito popular na era "pré-Web", e que foi o precursor de várias idéias largamente utilizadas hoje em dia - entre elas wikis e a própria Web.

A grande diferença é a maturidade da tecnologia, e a sua integração com outros elementos do ambiente. Os programas feitos hoje não se limitam a desenhar na tela, e podem expressar condições lógicas bem mais ricas. Outro ponto interessante é que a tecnologia usa recursos "não determinísticos"; em vez de uma precisão matemática rigorosa (por exemplo, contando pixels na tela), são usados gestos e movimentos aproximados, ou (no caso do Sikuli) um sistema de visão artificial sofisticado que trabalha com imagens aproximadas.

O desenvolvimento dessas novas ferramentas vem em boa hora. Linguagens de uso educativo são importantes para atrair novas pessoas para a área de desenvolvimento. Os sistemas que serão desenvolvidos nos próximos anos certamente precisarão de outros paradigmas - mais visuais, mais interativos, e acima de tudo maciçamente paralelos. É preciso desenvolver novas formas de expressar a solução de problemas - e é nesse ponto que uma nova linguagem pode se mostrar útil e necessária.