O Logo é uma tecnologia obsoleta?
Esta é uma discussão que foi mantida na comp.lang.logo (e na correspondente
lista de discussão por e-mail de 16 de novembro a 2 de
dezembro, em 1998. A discussão foi intitulada "O Logo é uma tecnologia obsoleta?"
Bill Kerr escreveu na mensagem...
Ken Kahn escreveu:
"Eu não tenho ciência de nenhuma forma de sincronizar processos paralelos no MicroWorlds."
"Eu penso que esse procedimento do MicroWorlds (da ajuda do MW,
e também realizá-lo?) realiza processos paralelos sincronizados."
"To sq-circ
T1, pd launch [repeat 36 [fd 10 rt 10]]
; t1 draws a circle
t2, pd launch [repeat 4[ fd 50 rt 90]]
; ts draws a square
waituntil [ done?[repeat 36 [fd 10 rt 10]]]
; the procedure does not continue until the circle is finished
; so that the drawings of circles and square are synchronised
t1, pu rt random 360 fd random 50
t2, pu rt random 360 fd random 50
; repositions turtles for next drawing
sq- circ
end"
Eu estou neutro, obrigado. Esta é uma espécie de controle de
sincronização de fluxo desde que espera até que os processos gerados por t1 e t2 tenham terminado.
Ou "waituntil[ done? "espera" até que todos os processos tenham terminado? O MicroWorlds
também tem a sincronização de processos baseada em dados?
Então, por exemplo, um processo consumidor de alguns dados
esperará até que o gerador o tenha gerado? Observe quem em geral o gerador não precisa ter terminado, ele pode apenas estar
reportando os resultados enquanto ele os encontra (por exemplo, um
mecanismo de pesquisa na Web).
O ToonTalk tem apenas sincronização de dados, mas esta é apenas a espécie mais geral de sincronização, desde que alguém pode ajustar dados (no ToonTalk, dar um comando a um pombo) indicando que o processo está
terminando.
A propósito, há em algum lugar da Web um manual do MicroWorlds?
"E o único meio pelo qual os processos podem se comunicar são
variáveis globais. Esta é uma modularidade pobre e pode levar a
que seja extremamente difícil detectar problemas. E em que sentido
o MicroWorlds é orientado para objetos?"
"O MicroWorlds tem um primitivo `turtlesown´ que lhe permite localizar coisas como a velocidade ou a posição de um `turtle´ que está, por exemplo, simulando um cavalo.
Eu colarei na explicação da ajuda do MW, o que nos dará alguma espécie de ponto para as discussões posteriores.
Eu não estou tentando sugerir que o MW é totalmente
orientado para objetos, mas o código pode residir em objetos como
cores, `turtles´, botões.
Isto dá aos estudantes uma introdução a conceitos elementares e para crianças pequenas eu não posso ver que a questão vá além.
O MW e o Logo têm variáveis locais as quais
poderiam ser a coisa principal, não? Minha impressão principal a partir de alguns java `oops´ no início deste ano é que tudo é dez vezes mais difícil do que utilizando o Logo."
"Start of paste from MW help
Turtlesown word
Determina uma variável
para todos os "turtles" no projeto em
andamento. Essa variável pode então ser definida para um valor específico para cada "turtle".
Este comando também cria um novo uso primitivo da definição da palavra seguida pelo nome da variável (por exemplo, turtlesown" velocidade cria um comando de ajuste de velocidade como em t1, ajuste de velocidade 12).
Há dois modos de obter o valor de uma variável de um "turtle" definido: você pode informar a um "turtle" e utilizar o nome da variável para reportar o valor (por exemplo, t1, exibe a velocidade 12, neste exemplo) ou você pode utilizar o nome do "turtle" seguido por 's 9 por exemplo, exibir t1's velocidade exibe 12).
Utilize "remove" para remover uma variável de um "turtle". Isto
remove a variável nomeada para todos os "turtles" no projeto.
Depois de uma instrução "turtlesown" , o valor da variável é ajustado para a lista vazia ( vide as três primeiras linhas do exemplo abaixo).
Turtlesown "speed
T1, show speed
(empty list)
t1, setspeed 10
t2, setspeed 20
t3, setspeed 5
t1, show speed
10
show t2's "speed
20
everyone [fd speed]
everyone [forever [fd speed]]
Choose Stop All from the Edit menu.
Remove "speed
End of paste from MW help"
Para mim, e para muitos outros, a essência da idéia de um objeto é que ele une dados locais e comportamento.
Você pede a um objeto que se mova e se ele caminha, nada ou voa depende do tipo de objeto que ele é, e de que métodos de 'movimento' foram associados a ele.
O 'turtlesown' dá aos objetos alguns dados locais
(mas é estranho que todo objeto no sistema tenha o mesmo ajuste
de variáveis locais). Mas o comportamento é crítico.
(Não ocorre que se pense que a herança é crítica, embora ela sempre seja muito adequada.)
Saudações,
- Ken Kahn (www.ToonTalk.com)
De Bill Kerr:
"A propósito, há em algum lugar da Web um manual do MicroWorlds?"
Eu creio que você pode fazer o download de uma cópia exemplo do
MW com manual, em www.microworlds.com
"Para mim, e para muitos outros, a essência da idéia de um objeto é que ele une dados locais e comportamento.
Você pede a um objeto que se mova e se ele caminha, nada ou voa depende do tipo de objeto que ele é, e de que métodos de `movimento´ foram associados a ele.
O `turtlesown´ dá aos objetos alguns dados locais
(mas é estranho que todo objeto no sistema tenha o mesmo ajuste
de variáveis locais). Mas o comportamento é crítico.
(Não ocorre que se pense que a herança é crítica, embora ela sempre seja muito adequada.)"
Eu imagino que compreendo onde você quer chegar. Eu me lembro,
do meu curso de Java, do que é chamado poliformismo.
Eu terei de aguardar até que tenha tempo fazer um exame mais acurado no ToonTalk para tentar avaliar seus comentários acerca dos aspectos de sincronização e de dados de oops que devem ser incorporados aos softwares infantis.
Grato pelas respostas rápidas às minhas questões.
- Bill Kerr
De Wen Su:
Eu creio que, se minha compreensão é correta, há uma
diferença principal entre MW e TT aqui.
Supondo-se os códigos abaixo, ambos os subprocessos (chamados Círculo e Quadrado) que são lançados tentam modificar uma variável possuída pelo processo corrente (chamado Pai), no MW, não há nenhum mecanismo construído diretamente que permite que o processo Pai informe qual o processo lançado que modifica a variável primeiro, por exemplo.
Claro que isto pode ser feito por usuários por outros meios. A mesma questão surge em um código de driver de hardware de nível inferior, ou quando tanto o código do processo ativado se interrompe (o código que é acionado para ser executado por um evento de interrupção do hardware) e o código de linha principal tenta modificar a mesma variável.
No TT, as solicitações de alteração de dados são enviados do Círculo e do Quadrado ao Pai e as solicitações são colocadas em uma fila, e o processo
Pai pode informar qual das requisições de modificação de dados vem em primeiro lugar através de seus métodos construídos de passagem de mensagens (Pombos).
Este comentário acima (se correto) não implica que o MW é inferior, tanto quanto se considere seu valor educacional, IMHO. Talvez os desenvolvedores do MW não creiam que esta característica seja importante para as crianças estudantes. Algumas pessoas (Ken Kahn?) podem acreditar que isto é muito importante (eu suponho que esta é a razão pela qual ele fala acerca da questão do acesso de "variável global"); outras podem não crer nisso.
Saudações,
Wen
De Ken Kahn:
Wen forneceu um bom exemplo no MicroWorlds do meu ponto
acerca dos perigos da concorrência em linguagens com estado
compartilhado (a variável possuída pelo processo "pai" em sua mensagem). Obrigado.
Sua questão é acerca de quão importante é esta questão. Não me surpreederia se muitos leitores deste grupo de notícias tiverem ensinado MicroWorlds por vários anos e nunca tiverem visto uma criança rodá-lo.
Por que deveríamos nos preocupar? Uma razão é o
princípio que não deveríamos dar às crianças ferramentas de programação que nós, adultos, não usaríamos.
Outra razão é que as crianças que fazem a tarefa se tornam ambiciosas e podem começar a explorar que tipos de programação paralela elas podem fazer no MicroWorlds chegarão a estes problemas.
Estes problemas são de difícil solução para que programadores os detectem, localizem e consertem. E ainda pior é que o MicroWorlds não dá aos usuários
ferramentas para lidar com estes problemas (chaves ou regiões
críticas, por exemplo).
Saudações,
- Ken Kahn (www.ToonTalk.com)
De Brian Harvey:
"Ken Kahn" <KenKahn@ToonTalk.com> escreveu: "E ainda pior é que o MicroWorlds não dá aos usuários ferramentas
para lidar com estes problemas (chaves ou regiões críticas, por exemplo)".
Eu não sei o que o MW faz, mas o StarLogo tenta garantir resultados
corretos sem que o usuário esteja atento para as questões de
sincronização,
por exemplo, garantindo sempre que se está num IF, o teste e a primeira ação na seqüência de instrução condicional são realizados atomicamente.
De Ken Kahn:
Brian Harvey escreveu na mensagem...
"Eu não sei o que o MW faz, mas o StarLogo tenta garantir
resultados corretos sem que o usuário esteja atento para as
questões de sincronização, por exemplo, garantindo sempre que se
está num IF, o teste e a primeira ação na seqüência de instrução
condicional são realizados atomicamente."
Isto provavelmente funciona bem em uma linguagem SIMD como o
StarLogo.
Mas a atomicidade é perigosa em geral, pois ela pode
levar a uma situação sem saída.
Aqui, se o teste condicional é um procedimento, chamar então aquele procedimento pode por sua vez acessar alguma coisa que havia sido fechada por esta regra de atomicidade oculta.
E então o progresso se interrompe.
Saudações,
- Ken Kahn (www.ToonTalk.com)
De Tom Woods:
Para mim, a programação textual permite que os estudantes
expressem seus pensamentos de maneiras similares à linguagem
falada.
A leitura, a escrita, a fala e a escuta são, necessariamente, seriais. Isto não é uma coisa má.
Embora eu não esteja familiarizado com o ToonTalk, eu posso
imaginar a programação visual como similar a outros
processos visuais criativos.
Nas artes visuais, a presença de uma linguagem é inegável. Com ela, os artistas podem expressar ricos pensamentos paralelos através de imagens. Também isto não é uma coisa indesejável.
Eu me preocupo com qualquer implicação que uma forma é inferior a outra, que foi a mensagem que eu recebi quando se disse que o
Logo é "tecnologia antiga". Ambas as formas de expressão são importantes. Uma não é inferior à outra – apenas diferente.
Para aqueles dentre vocês que possam se lembrar de minha
participação muito mais ativa na lista há alguns anos, olá novamente.
Eu terminei a escola e fui preso na cadeia. Não se preocupem, eles me libertaram no final do dia. Eu tenho a maravilhosamente criativa tarefa de começar uma escola, onde não havia nada.
Uma coisa que eu espero fazer em breve é conseguir que alguns de meus alunos construam computadores a partir de componentes usados e entrem na programação.
Muitas das discussões aqui parecem envolver crianças. Alguém teria experiência com a utilização do Logo com estudantes adultos?
Saudações,
Tom Woods
De Ken Kahn:
Tom & Adele Woods escreveram:
"Para mim, a programação textual permite que os estudantes
expressem seus pensamentos de maneiras similares à linguagem
falada.
A leitura, a escrita, a fala e a escuta são, necessariamente, seriais. Isto não é uma coisa má."
"Embora eu não esteja familiarizado com o ToonTalk, eu posso
imaginar a programação visual como similar a outros
processos visuais criativos.
Nas artes visuais, a presença de uma
linguagem é inegável. Com ela, os artistas podem expressar ricos pensamentos paralelos através de imagens. Também isto não é uma coisa indesejável.
Eu me preocupo com qualquer implicação que uma forma é inferior a outra, que foi a mensagem que eu recebi quando se disse que o
Logo é `tecnologia antiga´. Ambas as formas de expressão são importantes. Uma não é inferior à outra – apenas diferente."
Eu concordo, o texto é bom. Mas como eu escrevi em outra parte
desta discussão com relação a se alguns paradigmas de
programação são superiores a outros – há uma necessidade de prioridades aqui.
Se um professor está ensinando apenas uma linguagem em um curso, ela deveria ser visual ou textual? Se um pai está comprando uma linguagem de programação para seus filhos, qual delas é a melhor primeira linguagem?
Em um mundo ideal, eu adoraria ver as crianças aprenderem ambos os tipos de linguagem. (E também as linguagens procedurais e as concorrentes orientadas para objetos.)
Talvez eu deva reformular a questão da obsolescência do Logo como "o Logo é ainda a melhor primeira linguagem a ser aprendida pelas crianças?".
Eu não creio. Eu acho que as linguagens visuais/animadas são mais atraentes para as crianças e mais fáceis de aprender.
Eu penso que linguagens concorrentes orientadas para objetos proporcionam uma ferramenta de pensamento mais natural e mais poderosa do que as linguagens procedurais seqüenciais.
Se concordam comigo, então a próxima questão é se o Logo é a segunda melhor linguagem a ser aprendida. Eu me sinto menos seguro acerca desse ponto, mas imagino se uma criança que tenha
se tornado proficiente no ToonTalk não esteja, ao invés, pronta para o Java ou Scheme.
Saudações,
- Ken Kahn
Ken Kahn escreveu:
"Eu acho que as linguagens visuais/animadas são mais atraentes
para as crianças e mais fáceis de aprender."
Eu penso que a melhor solução
para este problema é um sistema
híbrido, no qual as coisas que são facilmente expressas
graficamente possam sê-lo, mas também que tudo possa ser
expresso textualmente.
O Scheme Paint de Mike Eisenberg é ainda o melhor exemplo do que eu quero dizer. Há o programa gráfico padrão, com suas ferramentas de apontar e clicar, mas você também pode escrever programas Scheme, e na verdade você pode fazer novas ferramentas de apontar e clicar, implementando-as como
programas Scheme.
O MicroWorlds é uma tentativa decente feita pela comunidade Logo
para construir alguma coisa com estas linhas, embora esteja longe
da perfeição.
(Eu estou avaliando a perfeição apenas baseada na
questão de ser intercambiável o texto e as interfaces gráficas.)
Talvez o ToonTalk o seja, também,
desde que você diz que ele
produz códigos Java. Se o código Java não é convoluto também (eu
ainda não tive chance de jogar com ele – eu tentarei fazê-lo em
breve!) e se você pode usar o código Java para criar novas
habilidades no GUI, eu ficarei satisfeito, então.
Btw, dizer que a concorrência é
"natural" para as pessoas levanta
muitas questões para mim. Realmente, eu creio que se você está
simulando um mundo de atores independentes, parece natural
programá-los separadamente. Mas meus alunos de Ciência da
Computação certamente não consideram natural os problemas de
sincronização que surgem se aqueles atores querem compartilhar
estados!
(E finalmente, você e outras pessoas mencionaram que pessoas
diferentes têm estilos de aprendizagem diversos; parte de mim
ocasionalmente não deseja fazer animações, e eu sou mais inclinado
a saber quantas combinações uma simples fechadura tem. Eu
imagino que eu seja estranho.)
:-)
|