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.

25 de janeiro de 2010

Em busca do guardanapo ideal

Dessa vez eu passei dos limites e fiquei um ano sem escrever neste blog. Mas não estava parado. Tenho postado artigos no ReadWriteWeb Brasil e iMasters, e tambpem mantido alguns toques aqui e ali no Twitter. Mas o post de hoje não é sobre isso, é sobre idéias que eu tenho desde que comecei a mexer com computadores, na época em que a gente ainda sonhava com chips e com projetos eletrônicos.

Formei no COLTEC em 1983, como Técnico em Eletrônica. Meu primeiro estágio já foi em informática, algo atípico na época, mas compreensível tendo em vista que desde o final do 1o ano de colégio eu já estava envolvido com o assunto - primeiro com calculadoras programáveis, depois com computadores como o NE2000, TK85 e CP200. Tive a sorte de ter um NE2000 com 4 KB de ROM - nem lembro quanta RAM ele tinha.

Logo que eu saí do COLTEC, já trabalhando com Apple II, eu mantive contato com alguns amigos. Tivemos uma discussão na casa do Marco Antônio, o "Gordo" ou "Sasquatch" (quem lembra do "Homem de Seis Milhões de Dólares"?). O outro cara que estava com a gente era o Feu, ou Aufleury (se não me falha a memória - aliás eu duvido que algum dos dois se lembre disso). A casa do Gordo era na Sergipe, onde hoje fica um prédio imenso, pertinho do Redentor. Pensamos em fazer algo que seria um PDA - uma agenda eletrônica de bolso, a pilha, com tecladinho alfanumérico e display LCD de duas ou quatro linhas, para manter informações pessoais na mão sempre. Obviamente que isso nunca foi para a frente.

Alguns anos depois, eu fiquei um tempão pensando em outro tema que me interessava, que eram os antigos "jogos sociais" de tabuleiro. Antes do videogame e coisas parecidas, era comum a molecada se reunir de noite e ficar jogando Banco Imobiliário, Detetive ou War até altas horas. Entre meus 12 e 20 anos, perdi a conta de quantas noites passamos jogando assim. Já estávamos nos anos 90 e começavam a aparecer os primeiros notebooks com tela LCD colorida. Minha idéia era revigorar esse tipo de jogo com uma plataforma digital. Teríamos um display LCD colorido, grande, que ficaria no lugar do tabuleiro. Cada jogador ficaria com um controle na mão, que também teria seu próprio display. O tabuleiro permitiria jogar qualquer jogo - War, Banco Imobiliário, ou alguma outra coisa qualquer. Seria um videogame social, de raciocínio, do tipo que mantém as pessoas horas à mesa conversando (e não tão concentradas em seus próprios movimentos que se esquecem de fazer companhia umas às outras).

Bem depois, com o desenvolvimento da Web 2.0, uma outra idéia me veio à cabeça: criar uma plataforma para trabalho colaborativo, flexível como só o lápis e papel podem ser. Uma das idéias recorrentes é uma planilha que começa com uma folha em branco - ao invés de uma grade fixa de linhas e colunas, a planilha pode ser criada em qualquer lugar da folha, riscando um quadrado e as linhas divisórias. A idéia nunca foi além do "protótipo mental", mas representa para mim a captura de uma crença antiga: o verdadeiro computador pessoal será o "guardanapo ideal", um pedaço de papel digital onde podemos rabiscar idéias e desenhos, fórmulas e programas. Seria a combinação de leitor de livros eletrônicos e bloco de notas perfeita para trabalho e estudo.

Chegando aos dias de hoje, eu fiquei bastante entusiasmado com a idéia do Apple Tablet. À primeira vista, apostei mais na idéia do guardanapo ideal do que na idéia de uma máquina de mídia, um tipo de iTouch turbinado. E ainda acredito muito nisso. Mas vendo as notícias dos últimos dias, e o grande foco em mídia digital e jogos que tem sido dado, me lembrei do "jogo social de tabuleiro". São idéias complementares e que podem ser suportadas em um só dispositivo.

É por isso que eu acredito que no próximo dia 27, veremos um lançamento realmente diferente por parte da Apple. E será uma combinação de vários sonhos de quase 30 anos de carreira - um misto de PDA, máquina de jogos sociais, leitor de livros e bloco de notas. Tem tudo para ser revolucionário. É essa minha expectativa, e é por isso que eu pretendo acompanhar de perto. A tecnologia está disponível, e se a Apple não acertar agora, alguém o fará em breve!