ToonTalk -- Um ambiente de programação animada para crianças

 

Ken Kahn, Animated Programs

Kahn@CSLI.Stanford.edu

 

Versão de 22 de Novembro de 1995

 

Traduzido por Leonel Morgado em Janeiro de 2001

 

Este documento é uma actualização e expansão do constante, com idêntico nome, em:

Proceedings of the National Educational Computing Conference (NECC'95),

combinado com parcelas da comunicação:

"Metaphor Design -- Case Study of an Animated Programming Environment",

incluída em "Proceedings of the 1995 Computer Game Developers Conference".

 

   Copyright 1995 Ken Kahn, todos os direitos reservados.

 

Palavras-chave: programação de computadores, crianças, jogos de vídeo, jogos de computador, programação concorrente.

Resumo

Seymour Papert, em certa ocasião, descreveu a concepção da linguagem de programação Logo da seguinte forma: pegar nas melhores ideias da informática, no tocante a concepção de linguagens de programação, e fazer com elas "engenharia infantil" [Pap77]. Vinte e cinco anos após o nascimento do Logo, verificaram-se imensos progressos na investigação de linguagens de programação e nas interfaces homem-máquina. Actualmente, existem linguagens de programação muito expressivas, muito elegantes do ponto de vista matemático, mas que continuam a ser de aprendizagem e domínio difíceis. Acreditamos estar na altura certa para repetir o êxito de quem concebeu o Logo, realizando a engenharia infantil de uma destas linguagens modernas.

Aquando da construção inicial do Logo, uma questão crucial foi a recolha dos elementos computacionais da linguagem de programação Lisp e a concepção para estes de uma sintaxe agradável para as crianças. No Lisp, havia instruções como "CAR", que foi substituída por "FIRST" ("primeiro"), e "DEFUN", que passou a "TO" ("para", "até"), os parênteses foram eliminados, etc.. Hoje em dia, há linguagens completamente visuais, cujos programas existem sob a forma de imagens, em vez de texto. Acreditamos estar perante um passo na direcção certa, mas melhor do que os programas visuais são os programas animados. A animação adequa-se muito melhor à dinâmica dos programas de computador do que diagramas ou ícones estáticos. Embora tenha havido progressos enormes nas interfaces gráficas de utilizador, nos últimos vinte e cinco anos, optámos por não procurar a maioria das ideias na metáfora do ambiente de trabalho, mas sim nos jogos de vídeo. Estes são geralmente mais directos, mais concretos e mais fáceis de aprender do que o restante software. São também mais divertidos.

Construímos um sistema genérico de programação concorrente, o ToonTalk, no qual o código-fonte é animado e o ambiente de programação é um jogo de vídeo. Todos os pormenores da computação abstracta foram concretizados em metáforas específicas. Por exemplo: uma computação é uma cidade, um objecto ou agente activo é uma casa, há pássaros que transportam mensagens de casa para casa, um método é um robô treinado pelo utilizador, etc. O programador controla uma "personagem-programador" neste mundo de vídeo, para construir, executar, depurar e modificar programas. Acreditamos que o ToonTalk se adequa particularmente bem a conferir às crianças a possibilidade de construir verdadeiros programas, de um forma divertida e fácil de aprender.


1º objectivo: um sistema de programação para crianças para auto‑aprendizagem

A programação pode ser uma actividade divertida e potenciadora, mas acessível apenas a quem consegue ultrapassar a grande barreira inicial. Esta barreira é constituída, entre outros aspectos, pela aprendizagem de uma linguagem de programação formal e conceitos computacionais, como as variáveis, os procedimentos e o controlo de fluxo. Se fosse possível minimizar esta barreira e ultrapassar o que restar, com divertimento, as crianças e os adultos seriam capazes, de forma criativa, de moldar os computadores à forma que desejassem. Aprender a usar computadores sem aprender a programar é como aprender a ler sem aprender a escrever.

O nosso objectivo é criar um sistema informático que possa ser utilizado pelas crianças para construir uma grande variedade de programas, sem que seja necessário ensiná-las. Muitos acreditam que um sistema tão fácil de aprender, que qualquer um utiliza sem ajuda de qualquer professor, é necessariamente bastante limitado. O ToonTalk, contudo, é um sistema de auto-aprendizagem flexível e expressivo. É possível construir uma grande variedade de programas, desde jogos como ténis, o enforcado e o PacMan, a programas para controlo de motores e sensores de Lego ou de outros brinquedos de construção, passando por exemplos de programação convencional, como factoriais e ordenação quick sort em paralelo.

Existem precedentes, em areas exteriores à programação de computadores, de sistemas com muitas potencialidades, que possuem características de auto-aprendizagem. Por exemplo: as crianças aprendem sozinhas a fazer construções complexas em Lego. Conseguem dominar jogos de video que implicam exploração e resolução de problemas em mundos fictícios complexos. A análise dos sistemas dos jogos de vídeo e do Lego contribuiu com muitas das ideias que fazem com que o ToonTalk seja fácil de aprender ([Mal80] e [Pro91]).

Entre os princípios de concepção obtidos a partir de bons jogos de vídeo ou de construção, incluem-se os que se seguem.

1.  Fazer com que a primeira experiência seja simples, aumentando a complexidade gradualmente.

2.  Incentivar a exploração e a curiosidade.

3.  Apresentar e manter fantasias interessantes.

4.  Ser um desafio constante, mas não frustrante.

5.  Utilizar frequentemente princípios e técnicas de cinema e de animação (esta ideia provém exclusivamente dos jogos de vídeo).

Ao construir o sistema de programação do ToonTalk, esforçámo-nos por seguir estes princípios. Também recorremos, fortemente, à tecnologia dos jogos de vídeo. Por exemplo: imitámos o método, utilizado frequentemente pelos jogos de video, de colocar o jogador no mundo do jogo, disponibilizando uma personagem ou avatar, que o jogador controla e com a qual se identifica. As crianças reagem aos acontecimentos como se fossem, por exemplo, um dos irmãos Mario, nos jogos Mario Brothers. No ToonTalk, o programador é uma personagem animada que constrói, testa e depura programas.

A brincadeira das crianças com as peças de Lego pode ser decomposta, em termos práticos, em três componentes: concepção, construção e utilização. Para algumas crianças, em certos projectos, a concepção é muito difícil. Mas conseguem divertir-se bastante e sentir-se realizadas quando constroem um brinquedo, seguindo instruções pormenorizadas, e depois brincam com esse brinquedo. As crianças mais experientes, ou com maiores ambições, fazem uso da criatividade para construir versões de projectos que já existem, ou mesmo conceber novos projectos de raiz. Da mesma forma, a parte mais difícil da programação é a concepção de programas. Construí-los é, geralmente, uma sequência de tarefas monótonas, como escrever ou corrigir erros de sintaxe. O ToonTalk é distinto dos restantes ambientes de programação por fazer com que o processo de construção de um programa seja uma brincadeira divertida. Um utilizador novato do ToonTalk, ao construir programas, pode não ser mais criativo do que na construção de um modelo de avião, ou a seguir as instruções pormenorizadas de Lego. Mas em todas estas situações, o processo de construção, bem como a brincadeira com os resultados, podem ser actividades divertidas. Uma forma muito eficaz de fazer com que as crianças aprendam a conceber algo é a brincar com as boas concepções de outras pessoas.

O ToonTalk, ao contrário do Logo ou do Basic, foi concebido para que uma criança, em casa, possa tornar-se um programador competente sem formação veiculada por humanos. A título de exemplo, refira-se que uma sondagem recente indicou que, nos Estados Unidos, o tempo médio empregue pelos alunos do ensino secundário na programação de computadores era inferior a 20% do tempo total de utilização dos mesmos. [Bec93] Na maior parte dos casos, trata-se de tempo manifestamente insuficiente para que as crianças possam aprender a arte da programação.

A comunidade Logo também está empenhada em conferir às crianças a capacidade de programar, por motivos epistemológicos [Pap93]. Advogam que a programação é um terreno fértil para a aprendizagem de competências fundamentais de raciocínio e de resolução de problemas. A criança aprende conceitos como representação, decomposição de problemas, abstracção, depuração, etc. Estas actividades podem ocorrer durante a aprendizagem da programação e são muito importantes. Mas, infelizmente, não são parte dos resultados habituais da aprendizagem do Logo [Yod94]. Embora seja nossa espectativa que este tipo de aprendizagem venha a ser cada vez mais frequente com o ToonTalk, já ficamos satisfeitos se o resultado for simplesmente conferir às crianças a capacidade de dominar os computadores de forma criativa.

 

2º objectivo: um sistema poderoso de programação para crianças

O ToonTalk foi construído por forma a ser simultaneamente muito fácil de aprender e ser uma ferramenta de programação muito poderosa e flexível. Estes objectivos são considerados, normalmente, como estando opostos, implicando compromissos. Uma linguagem como o C++ é muito flexível e poderosa, mas é também muito difícil de aprender. O HyperTalk, por outro lado, é uma linguagem que foi aprendida e utilizada por muitas pessoas que não são programadores, mas possui muitas limitações inerentes. As crianças podem fazer de conta que ajudam no jardim com pás e ancinhos de brincar, mas se realmente quiserem fazer jardinagem, devem ter ferramentas de verdade, adaptadas às suas necessidades especiais.

A concepção de linguagens de programação apoiada em conceitos teóricos produziu muitas linguagens que são pequenas, mas poderosas. Entre os exemplos contam-se a maioria das linguagens de programação lógica ou funcional, bem como algumas linguagens de programação orientada a objectos. O problema reside em que linguagens como o Scheme, o ML, o Prolog, o FGHC (Flat Guarded Horn Clauses) e o SmallTalk-80, apesar de serem pequenas e elegantes, são de aprendizagem difícil, até mesmo para alunos de informática. Seria absurdo esperar, de alunos do ensino básico, o domínio de uma linguagem de programação que é considerada muito difícil, mesmo para programadores profissionais.

Mas talvez a dificuldade não esteja nos conceitos em si, mas na falta de metáforas acessíveis. Considere-se, a título de exemplo, o conceito de canais de comunicação, presente em muitos sistemas concorrentes. Associados a estes canais estão privilégios de leitura e de escrita. Alguns adoptam o conceito de que uma tentativa de leitura de um canal vazio suspende a actividade até que algo seja escrito no canal. Geralmente, estes conceitos são ensinados em disciplinas de informática avançada. Mas este conceitos abstractos difíceis podem ser substituídos por analogias concretas com o dia-a-dia, perfeitamente equivalentes. No ToonTalk, os canais de comunicação são os pássaros e os ninhos. A capacidade de escrever num canal é um pássaro que se comporta como um pombo-correio. O acesso de leitura ao canal é o ninho desse pássaro. Os pássaros podem ser copiados, pertencedo todas as cópias ao mesmo ninho (ou seja, cada cópia do pássaro possui capacidade de escrita no mesmo canal). O comportamento dos pássaros implementa a semântica operacional dos canais. Quando um pássaro recebe uma mensagem, voa para o ninho, deixa lá a mensagem e regressa ao ponto de partida. Se já estavam coisas no ninho, coloca o novo item sob esse conteúdo (o que constitui uma implementação de uma semântica first-in, first-out, relativamente às mensagens em fila: o primeiro a entrar é o primeiro a sair). Se algum outro pássaro estiver a colocar alguma coisa no ninho, o primeiro espera pela sua vez (o que representa a arbitragem entre várias escritas no mesmo canal). Um pássaro consegue sempre encontrar o ninho correspondente, ainda que se tenha deslocado (assim, a capacidade de leitura continua a funcionar, mesmo após uma transferência). Estas regras de comportamento dos pássaros são fáceis de compreender, mesmo para uma criança de 7 anos.

O desafio consiste assim em pegar numa boa concepção de linguagem, de orientação teórica, que seja pequena e poderosa, e encontrar um conjunto coerente de concretizações, que abarquem todos os elementos da linguagem. O ToonTalk baseia-se numa linguagem de lógica concorrente por restrições [Sar93], semelhante ao Janus [SKL90] e ao Linear Janus. O Janus é suficientemente semelhante a outras linguagens de programação em lógica concorrente, pelo que programas escritos em linguagens de programação em lógica concorrente, como FGHC (Flat Guarded Horn Clauses), FCP, Parlog, Strand e PCN [Sha89], podem ser construidos de forma simples em ToonTalk. Reciprocamente, os programas em ToonTalk, embora construídos de forma interactive e animada, podem ser traduzidos para estas linguagens, em formas textuais equivalentes.

Escolhemos a programação concorrente por restrições como base global para o ToonTalk por vários motivos. Um deles é que ao longo de mais de dez anos de utilização, em muitos centros de investigação, ficou demonstrado que não há qualquer risco de que a linguagem seja inadequada à construção de uma grande variedade de programas grandes [Sha89]. As linguagens são pequenas, contudo muito poderosas. Estes factos fizeram com que a concepção do ToonTalk fosse muito mais simples do que se nos baseássemos nas linguagens convencionais.

Outro motivo para esta escolha é que estas linguagens são inerentemente concorrentes. Muitos consideram surpreendente que uma linguagem concorrente seja mais adequada às crianças do que uma linguagem sequencial. Têm a visão de que a programação sequencial já é suficientemente difícil, para ainda se ter que levar em linha de conta a existências de vários programas sequenciais interagindo entre si. Contudo, as linguagens sequenciais que foram expandidas por forma a tornarem-se concorrentes são muito complexas, enquanto que as linguagens concebidas de raiz como concorrentes conseguem ser muito elegantes.

Geralmente, os programas tentam modelar a realidade. E a realidade é concorrente. As linguagens de programação sequencial disponibilizam um mundo onde só pode ocorrer uma coisa de cada vez. Trata-se de um mundo muito estranho. As crianças, quando se lhes apresenta pela primeira vez a programação, particularmente a programação orientada a objectos, estão à espera que ela seja concorrente. A maioria dos programas que as crianças querem escrever são, por natureza, concorrentes. Um jogo de ténis, por exemplo, é composto – pelo menos – por uma raquete, uma bola e um marcador de pontuação. Uma boa concepção orientada a objectos indica que cada um destes elementos deve ser tratado por um componente computacional independente. As crianças (e a maioria das pessoas que não sejam programadoras, quando se lhes apresenta um sistema de programação orientada a objectos) estão à espera que cada objecto esteja permanentemente em execução. Como é estranho, ter de passar a atenção entre o controlo da raquete, da bola e da pontuação, em vez de simplesmente deixar que cada um faça o que tem a fazer! Mas o resultado será anárquico, a menos que os componentes possam comunicar e sincronizar-se. Tornar concorrentes as linguagens convencionais, com mecanismos de comunicação e sincronização, conduz a uma confusão de complexidade, que confere à programação concorrente a actual reputação de ser algo muito difícil. Uma linguagem nova, de programação concorrente, com uma concepção motivada para a obtenção de boa semântica, pode evitar esta confusão.

Resnick tentou introduzir o conceito de concorrência às crianças, expandindo a linguagem de programação Logo para suportar várias linhas de execução concorrentes [Res88]. As linguagem era muito complexa, mas a investigação confirmou que as linguagens de programação concorrentes são adequadas às crianças. Resnick também construiu uma forma paralela do Logo, chamada StarLogo, com a limitação – simplificadora mas grave – de que só era possível executar em paralelo cópias idênticas do mesmo programa. Recentemente, o MicroWorlds Logo da LCSI introduziu no Logo uma forma muito simples de paralelismo. Embora seja por vezes útil, é muito limitada quanto à capacidade de descrever a comunicação e sincronização entre actividades paralelas.

As actuais linguagens de programação visuais não bastam

Grande parte da investigação sobre linguagens de programação visuais tem objectivos idênticos aos desta obra. A ideia de base é que a utilização de imagens para representação de programas faz com que a programação seja fácil de aprender, além de originar programas de compreensão fácil. Provas caricatas indicam que linguagens visuais de programação poderosas, embora mais fáceis, continuam a ser de aprendizagem e domínio difíceis. Outras linguagens visuais possuem um âmbito ou capacidade expressiva limitados, mas são de aprendizagem e utilização fáceis (por exemplo, o KidSim [Smi94]).

Uma das deficiências da maioria dos sistemas de programação visuais é o facto de não animarem a execução dos programas – ou fazê-lo, mas sendo a animação não mais do que o realçar de algumas imagens. A maior parte dos sistemas que produzem efectivamente animações da execução dos programas começam por programas em texto com anotações (por exemplo, [Bro87]). O Pictorial Janus [KS90b] foi uma tentativa de remediar este problema, por via do suporte de visualizações completas do código-fonte e respectiva execução. Esta característica ajudou os utilizadores a compreender os próprios programas, bem como os programas de terceiros. Também facilitou a aprendizagem do modelo computacional subjacente. Mas isto não bastava. A aprendizagem levava algum tempo, estando o domínio da linguagem ao alcance apenas de utilizadores relativamente sofisticados (por exemplo, estudantes do ensino superior).

Em nossa opinião, é esta a dificuldade: para que uma imagem estática represente o comportamento dinâmico de um programa, tem de se apoiar num grande conjunto de codificações. O fluxo de controlo e de dados tem de ser codificado em diagramas abstractos. É possível afirmar, embora seja uma opinião discutível, que estes são de utilização mais fácil pelas pessoas, relativamente aos formalismos simbólicos; mas ainda assim, são muito difíceis. Porque não dar o passo seguinte no caminho que vem desde as linguagens de programação visuais estáticas, começando a utilizar imagens dinâmicas, ou seja, animações, para representar os processos dinâmicos de um programa?

Código-fonte animado

A ideia fundamental por trás do ToonTalk é que o código fonte seja animado. (Chama‑se ToonTalk, porque se está a "falar" por meio de bonecos, cartoons.) Isto não quer dizer que se vá pegar numa linguagem de programação visual e substituir alguns ícones estáticos por ícones animados. Significa que a animação é o meio pelo qual se comunica, tanto aos seres humanos como aos computadores, todo o significado dos programas. Enquanto que as vantagens do código-fonte animado são em grande número, a construção das animações é, regra geral, difícil e demorada. As boas ferramentas de criação de animações constituem uma boa ajuda, mas continua a ser muito mais difícil animar uma acção do que descrevê-la simbolicamente.

Felizmente, há um tipo de animação por computador que é de produção trival pelos utilizadores – a animação dos jogos de vídeo. Até mesmo crianças pequenas conseguem facilmente produzir um vasto conjunto de animações sofisticadas, quando brincam com jogos como o Mario Brothers. Embora este conjunto seja, evidentemente, muito limitado se comparado com o que permite uma ferramenta geral de criação de animações, a animação dos jogos de vídeo serve perfeitamente para o efeito em causa: comunicar programas aos computadores. Se, por exemplo, um pedaço de programa necessitar de trocar valores presentes em dois locais, nada mais natural e simples do que agarrar o conteúdo de um dos locais, pousá-lo, agarrar o conteúdo do outro, colocá-lo no primeiro local e depois colocar o primeiro objecto no segundo local. (Consulte a figura 1.) Este tipo de acção pode ser compreendido e executado por crianças muito novas, enquanto que a escrita do código que se segue, equivalente a estas acções, já só está ao alcance de um programador:

temp := x;

x := y;

y := temp;

Uma vez tomado o passo de utilizar a tecnologia dos jogos de video para construir código-fonte, é fácil ver outras formas de utilização desta tecnologia, para consultar, editar, executar e depurar programas. E há mais ideias dos jogos de vídeo em que nos podemos basear. Alguns jogos de video possuem personagens animados, cuja função é ajudar os utilizadores. Estes personagens pode assumir o papel de sistemas on-line de ajuda e iniciação.

Os jogos de vídeo, tal como a literatura e o cinema, devem a respectiva popularidade a momentos de “ausência de incredulidade". O participante humano aprecia ser conduzido pela fantasia subjacente. Um ecrã de ajuda, num jogo de video, ou uma cena desfocada, num filme, interferem no desfrutar desse prazer. A manutenção de uma fantasia coerente e ininterrupta é algo difícil. Por exemplo: quase todos os programas com interface de utilizador gráfica suportam várias teclas de atalho. O acrescento directo de teclas de atalho a um sistema como o ToonTalk iria interferir nesta ausência de incredulidade. Para resolver esta questão, transformámos todas as ferramentas em personagens de desenhos animados. Por exemplo: há um aspirador portátil no ToonTalk, para eliminar coisas. Normalmente, usa-se deslocando a mão do personagem programador por cima dele, agarrando-o, deslocando-o para cima do item que se deseja eliminar e, então, clicando no botão que liga o aspirador. Basta carregar numa tecla de atalho para obter o mesmo resultado de forma mais rápida, mas como pode tal método funcionar sem interferir na fantasia sujbacente? Como o aspirador é uma personagem animada, a história que o sistema apresenta é a de que a tecla de atalho não é mais do que uma forma de assobiar, para que o aspirador venha a correr para a mão.

 

     

Figura 1 – Instantâneos da troca de dois elementos

ToonTalk – a linguagem e a metáfora

Os jogos de vídeo, particularmente os de aventura e de personagens, colocam o utilizador num universo artificial. As leis destes universos são concebidas por forma a respeitar as limitações das formas de jogar, aprender e entreter. Ao jogar estes jogos, o utilizador aprende se há ou não gravidade, se as portas têm de ser abertas com chaves, se a constituição física pode ser restaurada obtendo e ingerindo ervas, etc. E se as leis do universo de jogo fossem concebidas para permitir computação genérica, além de irem ao encontro das limitações de um bom ambiente de jogo?

Ao que parece, nunca ninguém o tentou. (E quando descobrimos como faze-lo, solicitámos o registo de patente da invenção.) Rocky's Boots e Robot Odyssey foram dois jogos da The Learning Company, do início dos anos 80, que entusiasmaram muitos investigadores da informática. Nestes jogos, é possível construir circuitos lógicos à vontade do utilizador, utilizando-os para programar robôs. Tudo se passa no contexto de um jogo de vídeo. O personagem do utilizador, no jogo, pode explorar uma cidade com auxiliares robóticos. Frequentemente, para poder continuar, o utilizador tem de construir (de forma animada e interactiva) um circuito lógico para os robôs, para resolver um problema que tenha em mãos. O ToonTalk leva ao extremo as ideias subjacentes ao Robot Odyssey, dando suporte a computações genéricas por parte dos utilizadores (não apenas as computações em lógica de Boole do Robot Odyssey).

Já foi feita muita investigação acerca de sistemas demonstrativos ou de programação por exemplo. O primeiro foi possivelmente o Pygmalion, construído em meados dos anos 70 por David Canfield Smith, como parte da sua tese de doutoramento [Smi75]. Inclusivamente, David Smith fala dos programas como sendo "filmes". Mas não havia nada que se assemelhasse a um mundo de jogo animado onde o programador pudesse trabalhar. Como alternativa, era possível seleccionar ícones e menus, bem como gerar ícones que representassem uma sequência de selecções.

Os investigadores da informática almejam encontrar boas abstracções para a computação. Aqui, para além disto, procuramos encontrar boas "concretizações" dessas abstracções. O desafio é duplo: disponibilizar objectos de alto nível, para expressão de programas, e disponibilizar sistematicamente no jogo elementos análogos a estes objectos, mas que sejam concretos, intuitivos e fáceis de aprender. Afinal de contas, uma máquina de Turing é simultaneamente algo concreto e um formalismo universal da computação. (Alan Turing procurava não apenas formalismos matemáticos da computação, mas também elementos análogos concretos.) Pode-se imaginar um jogo de máquina de Turing no qual, teoricamente, se suporte a construção de construções arbitrárias, mas não consigo conceber a utilização de tal jogo na concepção de programas reais.

O mundo do ToonTalk assemelha-se a uma cidade do século vinte. Há helicópteros, camiões, casas, ruas, bombas de dar ar, caixas de ferramentas, aspiradores portáteis, caixas e robôs. A vida animal limita-se aos pássaros e repsectivos ninhos. Este é apenas um tema coerente, de muitos que poderiam servir de base a um sistema de programação como o ToonTalk. Um tema espacial, com naves vaivém, teletransportadores, etc., também funcionava perfeitamente. Assim como um tema medieval com magia, ou um baseado na história da Alice no País das Maravilhas.

Uma computação completa em ToonTalk é uma cidade. A maior parte da acção decorre dentro das casas da cidade. A comunicação entre casas (e entre características embutidas) é obtida por intermédio de pássaros (semelhantes a pombos-correio). Os pássaros aceitam coisas, voam para os seus ninhos, deixam-nas lá e regressam. Normalmente, as casas contêm robôs, treinados para desempenhar tarefas simples. Os robôs têm balões de pensamento, com imagens do estado local necessário à execução da tarefa de cada um. O estado local é guardado em buracos em forma de paralelipípedos (ou seja, caixas). Estas caixas também são utilizadas para mensagens e dados combinados (ou seja, tuplos). Se um robô receber uma caixa com tudo o que está no balão de pensamento, inicia a repetição das acções que lhe foram ensinadas. A abrstração é introduzida por via do seguinte facto: a imagem no balão de pensamento pode não ser completa, mas ainda assim corresponder ao que o robô recebe. Os robôs correspondem, aproximadamente, aos métodos ou condições das linguagens orientadas a objectos. Uma linha de robôs representa algo como a construção "if then else" (se/então/senão). Há balanças animadas que podem ser colocadas nos compartimentos das caixas. Os pratos inclinam-se para o lado onde o conteúdo do compartimento vizinho seja maior (ou no caso do texto, que se siga na ordem alfabética) do que o conteúdo do compartimento do lado oposto. Colocando balanças com pratos inclinados para um dos lados, as condições podem incorporar “maior que” e “menor que”. (Mais à frente são apresentados exemplos de utilização destas concretizações.)

A sincronização é conseguida no ToonTalk, pelo facto de que se um robô receber uma caixa, estando no balão de pensamento objectos ausentes da caixa, ele pára até que esses objectos apareçam. Mais concretamente: um buraco vazio pode ser preenchido, e um ninho num buraco pode ser coberto por um objecto trazido por um pássaro. Se o robô quer receber um tipo de caixa específico (por exemplo, uma caixa com o número zero), estando na caixa um objecto diferente (por exemplo, o número um), então este robô passa a caixa para o robô seguinte em linha.

O comportamento de um robô é exactamente aquele que o programador o treinou para ter. Este treino corresponde, em termos tradicionais, à definição do corpo de um método ou condição. As acções possíveis são:

   enviar uma mensagem, dando uma caixa ou tábua a um pássaro;

   gerar um novo agente, largando uma caixa e uma equipa de robôs num camião (que se mete em marcha para construir uma nova casa);

   realizar operações simples de primitivas, como adição, multiplicação ou construir uma pilha de números (que são combinados por um ratinho com uma grande marreta);

   copiar um item, usando uma varinha mágica;

   exterminar um agente, accionando uma bomba;

   alterar um tuplo, tirando itens dos compartimentos da caixa e largando-lhes novos itens.

Estas acções correspondem às que são admissíveis para os actores ou agentes de programação em lógica concorrente [KS90a, Agh87]. A última dela pode aparentar, aos investigadores da informática, estar a introduzir na linguagem estruturas de dados mutáveis, que se sabe serem fonte de imensa complexidade nos programas paralelos. Contudo, visto que as caixas são copiadas, nunca partilhadas, tal não se verifica. O que parece ser uma operação destrutiva numa cópia privada é, semanticamente, equivalente à construição do resultado final a partir do nada. Mas geralmente é mais conveniente realizar a operação destrutiva. Nas situações em que a cópia desnecessária de caixas introduziria uma sobrecarga de processamento, pode-se construir uma casa para guardar uma cópia única, obtendo-se a partilha por meio da cópia de pássaros, que transmitem pedidos para essa casa.

Quando o utilizador controla o robô que desempenha estas acções, está a agir sobre valores concretos. Está-se numa situação com muitos pontos em comum com a programação de macros de teclado e com a programação por exemplos [Smi75]. O problema de difícil resolução para os sistemas de programação por exemplos é a forma de introduzir abstração nos exemplos, introduzindo variáveis genéricas. O ToonTalk não recorre a indução ou aprendizagem. Em seu lugar, o utilizador realiza explicitamente a abstração de um fragmento do programa, retirando pormenores do balão de pensamento. Desta forma, as pré-condições são relaxadas. As acções realizadas no corpo são genéricas, visto que foram gravadas relativamente ao comportamento da caixa sobre o qual se agiu, não relativamente aos objectos que se pudessem encontrar na caixa.

Se um utilizador nunca desligasse o computador nem quisesse partilhar um programa com outro, este mundo de casas e robôs estaria adequado. Para possibilitar o armazenamento permanente, incluímos cadernos no ToonTalk. Um programador pode utilizar os cadernos para armazenar qualquer coisa que tenha construído. Os cadernos podem conter outros cadernos, por forma a disponibilizar um sistema de armazenamento hierárquico. Por meio dos cadernos, é disponibilizada uma interface para a funcionalidade essencial do sistema de ficheiros, sem sair da metáfora do ToonTalk. O caderno inicial contém exemplos de programas e pontos de acesso a funcionalidades como a animação e os sons.

É possível compreender o ToonTalk por si só. Por exemplo: um pássaro, ao receber alguma coisa, voa para o seu ninho, deixa-a lá e regressa. Geralmente, é assim que as crianças compreendem o ToonTalk. Contudo, os investigadores da informática podem ter interesse em compreender a relação entre a computação e estes objectos e actividades do ToonTalk. Apresenta-se de seguida uma tabela de associação entre abstracções computacionais e as concretizações do ToonTalk:

Abstracção computacional ToonTalk
computação cidade
agente (ou actor, processo ou objecto) casa
métodos (ou condições ou fragmentos de programas) robôs (com balões de pensamento)
pré-condições dos métodos conteúdo dos balões de pensamento
acções dos métodos acções ensinadas aos robôs dentro do balão de pensamento
comparações balanças
geração de agentes camiões carregados
eliminação de agentes bombas
constantes tábuas com números ou texto, imagens
capacidades de transmissão por canais pássaros
capacidades de recepção por canais ninhos
armazenamento de programas cadernos

Para além da linguagem de programação

A linguagem de programação Logo é mais do que uma versão de engenharia infantil do Lisp, incluindo também os gráficos de tartaruga. Apesar do Logo ser por vezes utilizado para computação com números e texto, a atracção principal que possui foi sempre o pacote de gráficos de tartaruga. Embora os gráficos de tartaruga continuem a ser uma atracção, tendo muitas das implentações modernas do Logo expandido a ideia, possibilitando a existência de várias tartarugas com imagens diferentes, não atraem tanto as crianças como a programação de jogos. Embora seja possível programar jogos com os gráficos de tartaruga, é difícil.

O ToonTalk, presentemente, não suporta gráficos de tartaruga – em seu lugar, realizou­se um esforço de disponibilização de suporte para a programação de jogos. O nível base de suporte é uma interface de transmissão de mensagens para uma biblioteca de bonecos. Por “bonecos” pretendemos indicar elementos gráficos animados, utilizados para construir jogos. O boneco Mario é deste tipo, assim como os cogumelos que ele pode comer, etc. O aspecto de um boneco é seleccionado a partir de um conjunto de ciclos de animação. As alterações ao tamanho e localização de um boneco também podem ser animadas. É disponibilizado um mecanismo de detecção e acção sobre colisões entre bonecos. Uma interface do ToonTalk para transmissão de mensagens sobre esta funcionalidade permite obter o pássaro correspondente a um boneco, e dar-lhe mensagens com significados tão diversos como "anda para cima 10 unidades", "muda para o tamanho 20", "põe a velocidade a 30" ou "estás a colidir em alguém?". Esta interface é muito genérica e poderosa, mas acabou por se constatar ser uma forma demasiado desagradável e confusa de realizar acções simples.

Para além da interface de transmissão de mensagens, o ToonTalk disponibiliza o controlo directo dos bonecos: estes podem ser virados de costas. Inicialmente, na parte de trás só está um caderno com os controlos remotos do boneco. Neste caderno pode-se encontrar, por exemplo, o controlo da largura. Alterando a largura do boneco, o número no controlo também se altera. O utilizador pode alterar directamente o valor deste controlo, que a largura do boneco é alterada imediatamente. Actualmente existem controlos remotos para a posição, velocidade e tamanho, para detecção de colisões e para selecção do aspecto dos bonecos.

Podemos treinar um robô para, por exemplo, incrementar repetidamente um número, colocando-o depois a trabalhar sobre a velocidade de um boneco, pelo que o boneco acelera. Podemos colocar este robô e o controlo remoto de velocidade nas costas de uma imagem e desvirá-la. Se, posteriormente, esta imagem for copiada ou guardada num caderno, quando lá a formos buscar ainda mantém o comportamento de aceleração, activo, nas costas. Esta característica possibilita a construção de bibliotecas recheadas de comportamentos úteis para bonecos, como fazer ricochete em paredes ou seguir o movimento do rato. Para compor bonecos, basta colocá-los uns sobre os outros. (Para os voltar a separar é necessário utilizar o aspirador portátil.) Os comportamentos podem ser copiados e combinados directamente.

Actualmente, os robôs e as caixas são colocados, simplesmente, nas costas das imagens. Em breve, os utilizadores poderão construir uma cidade inteira nas costas de qualquer boneco. Esta estrutura dá suporte a comportamentos complexos e dinâmicos por parte dos objectos. A metáfora de cidades nas costas dos objectos é, possivelmente, estranha; até talvez mesmo incoerente num tema do século vinte, mas adequa-se bem à semântica, deve ser fácil de aprender e de utilizar, e pode ser divertida (imaginem-se cidades que estão dentro de cidades que estão dentro doutras cidades, que...).

Para além dos gráficos de tartaruga, muitas das implementações do Logo incorporam bibliotecas para controlo de motores e sensores para as construções da Lego, Fisher Technic ou Capsula [Pap93]. Estas permitem às crianças construir brinquedos com comportamentos. Há crianças que constroiem robôs, carros que seguem uma linha traçada no chão, electrodomésticos como máquinas de lavar roupa de brinquedo (que páram quando se abre a porta), semáforos que mudam de cor e respondem ao accionamento de um botão para peões...

Tal como o LegoLogo, o ToonTalk disponibiliza uma interface para ligar e desligar motores e luzes, e ler sensores. A interface é idêntica à dos controlos remotos dos bonecos. É possível obter um controlo remoto para um motor (por exemplo) e utilizá-lo como qualquer outro número. Se o valor for definido a, por exemplo, 5, o motor liga-se e o nível de potência é colocado a 5. Se for dado a um robô treinado para adicionar repetidamente o número 1 a outro número, o motor começa a acelerar. Da mesma forma, há sensores no ToonTalk, que são números em actualização constante, por forma a mostrar o estado do sensor Lego que lhe corresponde. É também desta forma que o ToonTalk lida com outros dispositivos de entrada, como o rato do computador.

Embora a nossa experiência no controlo de aparelhos em Lego com o ToonTalk seja reduzida, parece indicar que a concorrência subjacente ao ToonTalk permite um controlo muito mais modular do que o que é possível com o Logo. Uma casa do ToonTalk pode ser construída contendo robôs para controlar um semáforo, outra para controlar o carro que pára no vermelho, etc. Por oposição, no Logo um programa sequencial tem de alternar a atenção entre os vários elementos. Também a transição entre a manipulação directa e a manipulação pelo programa é muito fácil de se fazer no ToonTalk.

Ferramentas do ToonTalk

Era necessário que o ToonTalk disponibilizasse ao utilizador as possibilidades de copiar, remover e restaurar itens, bem como a possibilidade de lhes alterar o tamanho. A concepção inicial recorria para o efeito a três varinhas mágicas, que se distinguiam visualmente, para as várias funções, pela cor e por efeitos de animação abstractos. Em vez de utilizar uma varinha para cada uma das cinco funções, foram concentradas numa ferramenta funções opostas. A varinha de remoção de objectos também conseguia restaurar objectos que tinham sido removidos. Outra varinha conseguia tanto aumentar como encolher os objectos.

Varinha de copiar
Varinha de aumentar e encolher
Varinha de tirar e pôr

Figura 2 – Primeira versão: 3 varinhas mágicas

Estudos preliminares de utilização revelaram que este método não era óbvio, levando os utilizadores a confundir as varinhas, apesar das cores e da animação. Para que os utilizadores adivinhassem mais facilmente a função de cada ferramenta, mas também para lhes permitir distingui-las mais facilmente, substituí a varinha de alterar tamanhos por uma bomba de dar ar às bicicletas. Substituí a varinha de remover e restaurar por um aspirador portátil.

Podia igualmente ter substituído a varinha de copiar por várias metáforas, como uma fotocopiadora ou uma câmara instantânea. Contudo, a fotocopiadora não se adequava muito bem: as outras ferramentas são utilizadas agarrando nelas, enquanto que uma fotocopiadora é estacionária, sendo necessário levar-lhe os originais a copiar. Além disto, uma fotocopiadora ou câmara, como metáforas, podem implicar que o resultado não é uma cópia funcional, mas uma imagem do item original. A desvantagem da utilização de uma varinha mágica para copiar coisas é ser difícil adivinhar a função desta a partir do aspecto, além de não se enquadrar no tema, como as bombas e os aspiradores. Para suavizar o problema, deu-se à varinha o aspecto das varinhas utilizadas habitualmente pelos ilusionistas do século vinte.

Nova varinha de copiar

                                                 

Bomba de dar ar                                                           Aspirador portátil

(substitui a varinha de aumentar e encolher)      (substitui a varinha de pôr e tirar)

Figura 3 – Versão actual: varinha mágica, bomba de dar ar e aspirador manual

Esta nova concepção também permite uma dualidade ferramenta/personagem. No ToonTalk, a bomba de dar ar e o aspirador não são apenas objectos inertes que se utilizam: podem transformar-se em personagens animados, com capacidade para agir por si próprios. (vd. as figuras 3 e 4.) Uma vantagem dos personagens animados é que estes podem afastar-se quando não são precisos, regressando quando fazem falta. Também contribuem para aumentar o divertimento, atracção e aspecto das ferramentas. Estas metamorfoseiam-se para os respectivos estados inertes quando não estão a ser usadas, evitando assim distrair o utilizador. Esta dualidade entre objecto e personagem também funcionou bem com a caixa de ferramentas e os cadernos do ToonTalk. A dualidade é uma fantasia divertida, explorada com grande sucesso em filmes como A Bela e o Monstro, da Disney.


Figura 4 – A bomba de dar ar e o aspirador, sob a forma de personagens animados


Comunicação no ToonTalk

O conceito original do ToonTalk para comunicação entre robôs espelhava os correios, com caixas de correio, transportades postais e endereços de remetente. Mas a ligação semântica era fraca, pois a comunicação no ToonTalk permite comunicação da capacidade de enviar ou receber mensagens. E os endereços de reencaminhamento apenas conseguem dar resposta parcial a esta situação. Avaliei muitas outras possibilidades, incluindo jangadas em rios, faxes, correio electrónico e papéis mágicos, antes de me decidir por pássaros (parecidos com pombos-correios) e ninhos.

Além de a adequação semântica ser perfeita, a concepção geral com pássaros e ninhos vai de encontro a outros critérios: facilidade de aprendizagem e utilização, serem divertidos e atraentes, e coerência geral com o tema da cidade. Até crianças bastante novas têm facilidade em compreender que quando se dá alguma coisa a um pássaro este leva isso para o ninho e volta. Até se pode fazer um pássaro entregar uma caixa com outro pássaro ou um ninho.

Figura 5 – Um pássaro entrega uma caixa (com um ninho) ao seu próprio ninho

 

Aritmética no ToonTalk

Pode-nos parecer óbvia uma metáfora do ToonTalk para operações aritméticas – dar ao utilizador uma calculadora virtual. De facto, tal esteve planeado durante algum tempo. Embora uma calculadora seja algo comum, pelo que deveria ser fácil de aprender e utilizar, não se adapta bem ao que é habitual no ToonTalk para cálculo com números já existentes. Considere-se o utilizador que precisa de adicionar dois números. O utilizador poderia largar um número na calculadora para o introduzir, carregar no botão "+" e largar o segundo número, carregar no botão '=' e copiar o número resultante. No geral, um processo desagradável e pouco divertido.

Avaliámos várias alternativas, entre as quais a adição por empilhamento e a multiplicação utilizando a varinha de copiar para fazer "n" cópias. Embora sejam atraentes do ponto de vista pedagógico, torna-se complicado abranger todas as operações comuns (divisão, por exemplo) e ainda trabalhar com valores não-inteiros.

A aritmética no ToonTalk é actualmente executada por um rato com uma grande marreta. Quando se coloca um número em cima de outro, o rato vem a correr e esmaga-os um contra o outro, restando apenas a soma. Caso se coloque em cima "x5", o rato multiplica por cinco o número que está por baixo. Seguindo este método são disponibilizadas todas as operações aritméticas normais. O trabalho com crianças veio mostrar que esta funcionalidade é fácil de aprender e utilizar, e que elas a consideram divertida e atraente. Outro benefício deste método é que pode ser generalizado para o texto (largar texto sobre texto produz uma concatenação) e para as imagens (largar imagens sobre imagens produz grupos compostos).

Figura 6 – Um rato a executar 1+2

 

Construção de um jogo de pingue-pongue no ToonTalk

Numa tentativa de possibilitar uma compreensão mais pormenorizada do ToonTalk, considere-se que uma criança quer construir do zero um jogo parecido com o pingue-pongue. (De seguida, tenta-se descrever por palavras uma experiência animada interactiva. Grande parte da complexidade é aparente, desaparecendo quando esta matéria é apresentada sob a forma de demonstração. A actual versão beta do ToonTalk contém uma demonstração, que inclui um diálogo imaginário entre duas crianças, à medida que tentam construir um jogo de pingue-pongue. Ao contrário do cenário que se apresenta de seguida, os processos de exploração, depuração e experimentação, durante a construção do jogo de ténis, são também representados. Os leitores que o desejem podem contactar o autor para obter uma cópia da versão beta do ToonTalk.)

Inicia-se o ToonTalk, encontrando-se o utilizador num helicóptero, a sobrevoar uma cidade. Conseguem-se ver casas, lá em baixo.

 

Figura 7 – O programador a voar sobre as casas


O utilizador pousa em frente a uma casa, na qual entre pela porta da frente. É seguido para toda a parte por uma personagem em forma de caixa de ferramentas.

Figura 8 – O programador e a caixa de ferramentas, na rua


No interior, está um marciano amigável, pronto a disponibilizar visitas guiadas ou conselhos, mas o utilizador ignora-o, pois já utlilizou o sistema algumas vezes e acha-se capaz de construir sozinho um jogo de pingue-pongue simples.

 

Figura 9 – O programador e a caixa de ferramentas, dentro da casa


O programador senta-se no chão, vindo a caixa de ferramentas a correr para a frente dele, onde se abre. Um caderno voa de lá de dentro. Um aspirador portátil com pernas sai de lá a correr. Uma bomba de dar ar salta para fora. E uma varinha mágica sai a flutuar. Ficam na caixa de ferramentas oito tipos de coisas, que o programador pode usar para construir o jogo: placas com números, placas com texto, caixas, ninhos, balanças, robôs, camiões e bombas.

Figura 10 – Aspecto do chão, depois de se sentar

 

Para construir o programa da raquete, começa-se por folhear o caderno que está no ecrã, até encontrar uma imagem boa para a raquete. Pega-se nela, obtendo assim uma cópia. O plano, neste momento, é criar um painel de controlo para a raquete, que apresente a velocidade vertical da raquete e a velocidade vertical do rato. Pretende-se colocar um robô nas costas da raquete, que copie continuamente a velocidade vertical do rato para a raquete. Começa-se por virar a raquete. Nas costas, está um caderno cheio de controlos remotos. Folheando-o, encontra-se o controlo remoto da velocidade vertical. Pega-se nele, colocando no chão a cópia que assim se obtém. Volta-se ao caderno inicial, que se folheia até se encontrar um outro caderno, com sensores. Um deles, descobre-se, é relativo à velocidade vertical do rato. Larga-se este junto ao anterior, com a velocidade vertical da raquete, ficando as duas caixas juntas, sob a forma de uma caixa com dois compartimentos. Então, tira-se um robô da caixa de ferramentas e dá-se-lhe esta caixa recém-construída. Como o robô ainda não foi treinado, não sabe o que há-de fazer. Aparece então uma cópia da caixa no balão de pensamento do robô, sendo apresentada uma animação que mostra o robô a entrar para dentro do balão de pensamento (consultar a figura 11).

 

Figura 11 – Momentos seguintes à construção de uma caixa de controlo da raquete

 

Neste momento, o programador está a controlar o robô, para o treinar dentro do balão de pensamento. Como só se quer que a raquete siga os movimentos verticais do rato, faz-se com que o robô pegue na varinha de copiar, copia-se a velocidade do rato, escreve-se "=" e larga-se o resultado no compartimento que tem a velocidade vertical da raquete (consulte a figura 12).

Figura 12 -- Ensinar o robô a fazer com que a raquete imite os movimentos verticais do rato

 

Carrega-se num botão, para indicar que já se acabou de treinar o robô, voltando o ecrã a mostrar o que está no chão, e o programador encontra-se novamente a controlar a mão que aparece no ecrã. Geralmente, após treinar um robô, é necessário utilizar o aspirador manual para tornar abstractos os valores particulares que estão no balão de pensamento, que ficam vazios, indicando que qualquer valor é aceitável. Quando são colocados no balão de pensamento número constituídos por controlos remotos, o ToonTalk faz este passo automaticamente, visto que os valores particulares não interessam, por se alterarem dinamicamente. (Assemelham-se mais a mostradores do que a constantes.)

Larga-se então o robô nas constas da raquete. Volta-se a dar a caixa ao robô. Desvira-se a imagem. O robô está agora a ser executado nas costas da raquete. Em cada momento, copia a velocidade vertical do rato para a raquete. Experimentando, a raquete move-se agora para cima e para baixo, seguindo o movimento do rato, e ignora os movimentos horizontais. Estando o programador satisfeito com o resultado, larga a raquete no caderno, para aí ficar guardada até mais tarde. (Encontra-se agora no disco rígido, onde permanence ainda que o computador falhe.)

 


A atenção do programador centra-se agora na bola. Pretende-se que a bola ressalte em todos os objectos com os quais colida. Vira-se a imagem da bola, obtendo assim o respectivo caderno. Primeiro, o programador centra-se no movimento horizontal. Prepara-se uma caixa que contém um detector de colisões e um controlo remoto com a velocidade horizontal. Dá-se esta caixa a um robô novo, que é treinado na multiplicação da velocidade por -1.

 

Figura 13 – Treino de robôs para os ressaltos da bola

O robô é colocado, juntamente com a caixa respectiva, nas costas da bola, sendo testado, verificando-se que a bola ressalta quando se desloca para a direita ou para a esquerda. O robô é copiado, recebendo uma caixa semelhante, com os controlos de movimento vertical. O novo robô é também testado, ficando o programador satisfeito com os ressaltos. Outro robô é treinado, por forma a emitir um som sempre que ocorre uma colisão.

O programador pega num rectângulo, para pano de fundo do jogo, colocando nele três rectângulos, que funcionam como paredes superior, inferior e direita, nas quais a bola irá ressaltar. Acrescenta-se a raquete e lança-se a bola (mantendo premida uma tecla modificadora quando se solta a bola). O programador joga o novo jogo, que funciona bem, à parte o facto de que quando não se acerta na bola esta continua a andar para a esquerda, sem parar. Com as balanças, treina-se um robô para agir sempre que a posição horizontal for inferior a zero. O robô faz um som diferente e repõe a bola na area direita do rectângulo de jogo.

 

Figura 14 – Acrescentar outra bola ao jogo da raquete

 

Joga-se com o jogo um bocado, largando-o depois como um todo no caderno, para ficar guardado. De seguida, volta-se a tirar, colocando-lhe outra bola, para ficar mais difícil (consulte a figura 14). Como fica demasiado difícil, o programador larga-lhe em cima também outra raquete. Começa-se então a ponderar a forma de acrescentar um marcador de pontuação, mas também a pensar numa forma de transformar o jogo de pingue-pongue num jogo de derrubar blocos, utilizando os blocos explosivos que um outro colega programador contruiu no dia anterior.

 

Resumo e planos para o futuro

Apresentámos aquilo que cremos ser o primeiro sistema com suporte para código-fonte animado e que utiliza tecnologia dos jogos de vídeo, como base de suporte à programação genérica. Desde Novembro de 1995, o ToonTalk possui versões funcionais de todos os elementos aqui descritos. O personagem marciano está funcional como orientador e sistema de ajuda, mas ainda não funciona como professor.

Os testes do ToonTalk numa turma da 4ª classe e em algumas famílias iniciaram-se em Janeiro de 1995. Mais de 40 crianças brincaram com o ToonTalk durante aproximadamente uma hora. Uma constatação encorajadora, que se retirou desta utilização informal pelas crianças, foi que se verificou algum sucesso do ToonTalk como forma divertida de construir programas. As crianças gostam de brincar com os pássaros, o aspirador portátil, a bomba de dar ar e a varinha mágica, gostam de ver as casas a ser construídas e destruídas, de voar no helicóptero, etc. Isto apesar de não estarem a construir nenhum programa útil. Actualmente é ainda demasiado cedo para avaliar qualitativamente a capacidade das crianças construirem programas com o ToonTalk, mas é muito encorajante saber que elas consideram que brincar, simplesmente, com o equivalente a um editor de programas, é muito divertido.

A realização de testes em pequena escala mostrou que embora as crianças dominem facilmente os objectos e ferramentas do ToonTalk (ou seja, as "primitivas" da linguagem de programação), necessitam de orientação para poder avançar. O sistema está actualmente a ser melhorado, incorporando exemplos, demonstrações, folhas de instruções e uma iniciação interactiva, para lhes permitir avançar por si.

A primeira versão foi feita para computadores compatíveis PC, com o Microsoft Windows. Não deve ser difícil transportar o sistema para o Macintosh.

É possível imaginar, com alguma facilidade, variantes do ToonTalk. Um versão do ToonTalk em realidade virtual permitir-nos-ia construir programas dentro da realidade virtual. Visto que o ToonTalk foi construído sobre bases concorrenciais, uma versão por modem ou via rede seria uma extensão perfeitamente natural. Podem-se desenvolver jogos para muitos utilizadores, além de ser possível a vários programadores trabalhar em conjunto no mesmo mundo. Penso, frequentemente, no aspecto que teria uma versão profissional do ToonTalk. Um compilador poderia expandir o interpretador do sistema, fazendo com que os programas mais ambiciosos fossem muito mais rápidos e compactos.

O ToonTalk é um autêntico ambiente de programação – contudo, não está dependente de um teclado. É útil ter um teclado para recorrer a aceleradores, mas é possível utilizá-lo apenas com um controlador de jogos, um joystick ou um rato. Esta característica abre a possibilidade de transportar o ambiente para uma máquina de jogos. Emociona-nos a possibilidade de ter milhões de crianças por esse mundo fora, com uma máquina de jogos em casa, a utilizar o ToonTalk para criar os seus próprios jogos e fazer autêntica programação.

Agradecimentos. Agradeço imensamente a ajuda, conselhos e apoio que recebi de muitas pessoas durante este projecto. Em particular a David Kahn, Mary Dalrymple e Markus Fromherz, que merecem agradecimentos especiais por toda a ajuda que me prestaram. Igualmente grandes agradecimentos seguem para Ruth Colton e a sua turma da 4ª classe. Agradeço igualmente imenso a Greg Savoia pelos belos desenhos e animações com que contribuiu para o ToonTalk.


Referências

[Agh87] G. Agha, Actors: A Model for Concurrent Computation in Distributed Systems. The MIT Press, 1987.

[Bec93] Henry Becker, Teaching with and about computers in Secondary Schools, Communications of the ACM, Maio de 1993, Vol. 36, N.º 3

[Bro87] Marc H. Brown.  Algorithm Animation. The MIT Press, 1987.

 

[KS90a]  Kenneth Kahn e Vijay Saraswat. Actors as a special case of concurrent constraint programming. Em Proceedings of the Joint Conference on Object-Oriented Programming: Systems, Languages, and Applications and the European Conference on Object-Oriented Programming. ACM Press, Outubro de 1990.

 

[KS90b] Kenneth M. Kahn e Vijay A. Saraswat. Complete visualizations of concurrent programs and their executions. Em Proceedings of the IEEE Visual Language Workshop, Outubro de 1990.

 

[Mal80] Thomas Malone. What Makes Things Fun to Learn? -- A Study of Intrinsically Motivating Computer Games, Tese de doutoramento do Departamento de Psicologia da Stanford University, 1980.

 

[Pap77] Seymour Papert. Apresentação em Agosto de 1977, na Logo Users Meeting, MIT.

 

[Pap93] Seymour Papert. Children's Machines. Basic Books, 1993.

 

[Pro91] Eugene Provenzo, Video Kids – Making Sense of Nintendo, Harvard University Press, Cambridge, Ma. 1991.

 

[Res88] Mitchell Resnick. Multilogo: A study of children and concurrent programming. Relatório técnico, MIT Media Lab, 1988.

 

[SKL90] Vijay A. Saraswat, Kenneth Kahn e Jacob Levy. Janus – A step towards distributed constraint programming. Em Proceedings of the North American Logic Programming Conference. MIT Press, Outubro de 1990.

 

[Sar93] Vijay A. Saraswat. Concurrent constraint programming languages. Doctoral Dissertation Award and Logic Programming Series. MIT Press, 1993.

 

[Sha89] Ehud Shapiro. The family of concurrent logic programming languages. ACM Computing Surveys, 1989.

 

[Smi75] David Smith, Pygmalion: A Creative Programming Environment, Stanford University, relatório técnico de Computer Science, n.º STAN-CS-75-499, Junho de 1975.

 

[Smi94] David Smith, Allen Cypher e Jim Spohrer, KidSim: Programming Agents without a Programming Language, Communications of the ACM, Vol. 37, n.º 7, Julho de 1994.

 

[Yod94] Sharon Yoder, Discouraged?.. Don't Dispair! [sic], Logo Exchange, Vol 12, n.º 4, Verão de 1994, Revista do Special Interest Group do ISTE para educadores que usam Logo.