Suporte à aprendizagem da programação com o ambiente SICAS


António José Nunes Mendes
Universidade de Coimbra
Centro de Informática e Sistemas
Portugal
toze@dei.uc.pt
Anabela Jesus Gomes
Universidade de Coimbra
Centro de Informática e Sistemas
Portugal
anabela@isec.pt

Resumo

O ensino da programação através dos métodos clássicos, onde a leccionação de conceitos dinâmicos é realizada utilizando principalmente materiais de índole estática, não se tem revelado muito eficaz. Neste trabalho são referidas algumas das diversas ferramentas que têm surgido ao longo dos anos, recorrendo às mais variadas técnicas, para apoiar o ensino da programação. Porém, apesar da existência de diversos estudos que constatam a contribuição positiva por parte de algumas delas, não existem indicações de uma vasta utilização no ensino/aprendizagem. Neste trabalho é apresentado um ambiente, o SICAS, que tenta ser apelativo, estimulando os alunos a desempenhar as suas práticas de programação. Para isso, apresenta um elevado grau de interactividade para com o aluno permitindo a concepção de algoritmos de uma forma visualmente atractiva e organizada, para além de possibilitar a sua simulação e teste, com alguns parâmetros passíveis de configuração. Para melhor concretizar as funcionalidades e aplicabilidades do SICAS é ainda apresentada a construção de um exemplo, bem como as suas formas possíveis de utilização.
 

1. Introdução

Os professores tentam habitualmente utilizar diversas estratégias no sentido de facilitar a aprendizagem dos seus alunos. Também no que respeita ao ensino da programação têm sido realizados diversos esforços. Desde os finais dos anos 70 que o recurso aos sistemas assistidos por computador tem sido proposto como complemento dos materiais tradicionais para tentar ultrapassar as enormes dificuldades que os alunos apresentam nesta área. Da literatura podemos recolher referências à utilização de diversas aplicações, como por exemplo: PMS (Tomek et al., 1985), PROUST (Johnson e Soloway, 1985), VIP (Mendes e Mendes, 1988), Lisp-Tutor (Anderson e Reiser, 1990), Ceilidh (Benford e Burke 1993), COACH (Selker, 1994), C-Tutor (Song et al., 1997), Programação Assistida por Computador (Santos et al., 1996), MRUDS (Hanciles et al., 1997). Também os micro-mundos, inspirados no LOGO (Papert, 1980), têm sido utilizados no. campo da programação. Entre outros podemos destacar os seguintes: "Karel the robot" (Pattis, 1981), "Josef the robot", (Tomek, 1982), Martino, (Olimpo et al., 1985), Marta (Calabrese, 1989), Pascal Genie (Miller e Chandhok, 1989), Turingal (Brusilovsky, 1991), Karel-3D (Hvoreky, 1992), Darel (Kay e Tyler, 1993), "Karel Genie" (Miller et al., 1994), Tortoise (Brusilovsky, 1994), TurtleGraph (Jehng et al. 1994), referidos em (Brusilovsky et al, 1997). Ao longo do tempo surgiram também outros sistemas, com recurso a representações visuais e animações, entre eles: SEE (Baecker e Marcus, 1986), BALSAII (Brown, 1988), GAIGS (Naps, 1990), Tango (Stasko, 1990), ANIM (Bently e Kerninghan, 1991a), Pavane (Roman et al., 1992), Xtango (Stasko, 1992), POLKA (Stasko e Kraemer, 1993), DRUIDS (Whale, 1994), FLAIR (Ingargiola et al., 1994), POLKA-RC (Stasko e McCrickard, 1995).

Na convicção de que existem benefícios em utilizar metodologias gráficas em vez de textuais, outras propostas foram para a criação de linguagens de programação baseadas em ícones, de que se destacam o BACII (Calloni e Bagert, 1993) e o BACII++ (Calloni et al., 1996) e de design languages de que é exemplo a G2 (Ellis e Lund, 1994). No entanto, apesar de se encontrarem relatos da obtenção de resultados positivos na sequência da utilização de algumas destas ferramentas, a verdade é que nenhuma delas tem uma utilização generalizada. A realidade é, precisamente, a oposta, pois as ferramentas referidas acabam por ser apenas resultado de produtos de investigação, com utilização limitada e sem grande divulgação junto da maioria dos professores e alunos. Assim, surgiu a ideia de criar um ambiente, a que chamámos SICAS (Sistema Interactivo para Construção de Algoritmos e sua Simulação), apelativo e motivador, sem as limitações a nível de hardware e características gráficas que muitas das aplicações referidas apresentam, destinado a apoiar o ensino/aprendizagem da programação. O SICAS é um ambiente essencialmente dirigido para a concepção de algoritmos, isto porque, na nossa opinião, um dos principais obstáculos para uma resolução eficiente de problemas de programação reside na incapacidade que muitos alunos mostram na obtenção de estratégias algorítmicas. Desta forma, o SICAS apresenta não uma abordagem descritiva dos assuntos a ensinar/aprender, mas antes exibe um ambiente que permite que os alunos desenvolvam as suas resoluções com base na experimentação e na prática.

Este ambiente permite-lhes a construção de resoluções para problemas, bem como a sua simulação, observação e análise. Caso a solução não seja adequada, o aluno poderá detectar e corrigir os erros cometidos, por forma a encontrar uma solução satisfatória. Este processo de detecção e correcção de erros é fundamental para o desenvolvimento nos alunos de competências de programação. A construção da resolução do problema é realizada no SICAS, através de fluxogramas. Esta decisão foi tomada no sentido de privilegiar o uso de representações gráficas (fluxogramas), em detrimento de especificações verbais (pseudocódigo), não apenas pelos estudos analisados (ex: Scanlan, 1989), mas por uma forte convicção de que essa forma de representação é mais apelativa (prendendo mais a atenção do aluno), tira mais partido do potencial do sistema visual humano para facilitar a compreensão, é mais clara e está menos sujeita a erros, mantendo uma actividade mais organizada e estruturada.
 

2. Descrição

O SICAS prevê dois tipos diferentes de utilizadores: alunos e professores. Como tal, de forma a permitir a existência de módulos com diferentes características consoante o perfil apresentado, o utilizador terá que realizar em primeiro lugar a sua identificação. Esta consiste na introdução de um nome, que terá para além do propósito anteriormente mencionado, a finalidade de gerar feedback personalizado com base no nome fornecido.

2.1. Modo Professor

Este módulo tem como finalidade principal permitir ao professor orientar e verificar a actividade do aluno. Esta característica é especialmente importante na medida em que o SICAS é passível de ser utilizado não apenas em ambiente de sala de aula, mas também em sessões de estudo isoladas em que o aluno se encontra desprovido de um acompanhamento especializado como aquele que é fornecido pelo professor. Assim, este módulo permite ao professor indicar enunciados de problemas que pretende ver resolvidos pelos alunos, fornecer soluções que os alunos podem consultar, testar e/ou editar. Estas soluções poderão ser correctas ou incorrectas, completas ou incompletas, dependendo das actividades pedagógicas que o professor pretenda que os alunos levem a cabo. Utilizando este modo, o professor pode também aceder às resoluções produzidas por cada aluno para os diversos problemas propostos. Desta forma poderá aperceber-se facilmente das dificuldades apresentadas por cada um deles e tentar as medidas que entender adequadas em cada caso (por exemplo problemas com um nível de dificuldade mais adequado). Outro aspecto importante deste módulo reside na possibilidade de o professor fornecer, para um dado enunciado, conjuntos de dados de entrada e respectivos resultados esperados, por forma a permitir aos alunos uma maior fiabilidade nos testes à sua resolução desse problema. De seguida passamos a apresentar as funcionalidades presentes no SICAS do ponto de vista do aluno, mas que não são exclusivas deste modo, pois também se encontram disponíveis no modo professor.

2.2. Modo Aluno

Como já foi referido, a actividade fundamental de um aluno com o SICAS consiste na resolução de problemas que lhe são propostos. O aluno poderá visualizar uma simulação animada da sua resolução ou, caso haja dados de teste facultados pelo professor, verificar se o seu algoritmo se comporta correctamente em qualquer caso. Nas secções seguintes vamos descrever as funcionalidades de suporte a estas actividades.

2.2.1. Construção/Edição da resolução do problema

Após a sua identificação, o aluno é direccionado para um ambiente de edição/resolução de um determinado problema. Este ambiente é constituído essencialmente por três áreas: área de construção/edição do problema, área de dados auxiliares e área de geração de resultados e descrição do problema.

 





2.2.1.1. Área de construção/edição do problema

Esta é a área destinada à concepção de resoluções de problemas. No SICAS um problema é composto por um enunciado, uma ou mais resoluções (algoritmos) e, eventualmente, uma solução (definida pelo professor) acompanhada dos respectivos dados de teste. Por forma a organizar as tarefas do aluno, o SICAS pressupõe que este apenas possa realizar as suas actividades depois da abertura do enunciado de um problema, podendo em seguida optar entre a construção/edição de um algoritmo e a sua simulação ou teste (caso tenha uma resolução activa). O SICAS possibilita, desta forma, a existência de dois tipos de cenários: resolução de problemas e execução/simulação de resoluções previamente construídas. Debruçar-nos-emos em primeiro lugar sobre o ambiente de resolução de problemas. Neste ambiente o aluno não terá forçosamente de construir uma resolução de raiz, podendo optar por editar/alterar uma previamente construída por si ou uma das resoluções que o professor tenha disponibilizado para esse problema. Para a criação/edição de uma resolução o aluno é direccionado para um ambiente icónico, que lhe dá a possibilidade de construir, sob a forma de fluxograma, uma sequência de operações (acções) que, quando executadas, produzirão a solução do problema. A construção de um fluxograma é realizada recorrendo a simbologia gráfica standard que representa as principais estruturas necessárias à construção de um algoritmo. De seguida são apresentadas, de forma abreviada, as estruturas existentes/definidas para a construção de fluxogramas no SICAS, acompanhadas do símbolo que as representa.

 





Atribuição É a instrução mais simples presente no SICAS e, como o próprio nome indica, possibilita a atribuição de um valor de uma determinada expressão a uma variável





Entrada/Saída

É a estrutura que permite escrever expressões na janela de saída e ler valores para variáveis.





Repetição O SICAS suporta as duas estruturas que consideramos fundamentais, num estágio inicial de aprendizagem de programação, para a execução repetida de um conjunto de instruções. Estas estruturas são conhecidas em muitas linguagens de programação como for e while. A estrutura for é adequada e normalmente utilizada para as situações em que se sabe à partida o número de vezes que deve ser realizada uma repetição. A estrutura while mantém a repetição enquanto se verificar uma dada expressão lógica, terminando-a quando essa expressão tiver um resultado falso.





Selecção

Esta estrutura tem como função seleccionar entre a execução de dois conjuntos de acções (ou entre executar ou não dado conjunto). Esta escolha é feita em função do resultado de uma expressão lógica.





ChamaFunção

Esta estrutura tem como finalidade evocar uma função definida pelo utilizador e a eventual atribuição a uma variável do valor por ela retornado.

Outra estrutura de controlo que não é explicitamente definida mas está subjacente em qualquer resolução existente no SICAS é a sequência, a qual provoca a execução de um conjunto de acções, uma após a outra, pela ordem em que estão definidas. A sequência é representada por uma linha interligando, dois a dois, os componentes constituintes do programa. A criação de uma estrutura envolve a escolha do seu tipo através da selecção do elemento adequado, a sua introdução no local desejado no fluxograma e o preenchimento completo dos campos necessários à sua total definição. Para a tarefa de introdução dos componentes existem pontos de inserção bem definidos, no centro de linhas que interligam as diversas estruturas, de forma a evitar diagramas inconsistentes. Em qualquer um dos componentes a inserir, os campos a preencher são concebidos de forma a minimizar os erros do aluno. Além disso, só é possível inserir um componente, quando houver em todos os campos indispensáveis à sua definição informação mínima para o descrever completamente. Para além dos elementos específicos de cada uma das estruturas existe um campo que é parte integrante de qualquer uma, o "Comentário". Este tem por finalidade permitir aos alunos associar a cada componente uma nota, quer para registar uma dúvida que lhe ocorra, uma opção de desenvolvimento a seu ver importante, ou qualquer outro tipo de análise que ache pertinente para a resolução em causa e que posteriormente também surgirá no código correspondente à resolução que pode ser gerado automaticamente nas linguagens C e Java. É de salientar que a definição e localização de qualquer estrutura jamais terá um carácter definitivo, podendo o aluno em qualquer momento apagar, modificar ou copiar um dos componentes bem como proceder à alteração da sua definição.

Para a construção de um algoritmo há sempre dois componentes especiais ("Principal" e "Retornar") que surgem automaticamente e que indicam o início e o fim da resolução, sendo impossível alterá-los, copiá-los ou removê-los. Estes elementos têm como propósito delimitar as instruções que determinam as acções a executar ao longo do programa. Como o nosso objectivo é a concentração máxima do aluno na actividade de construção do algoritmo propriamente dito, optámos pela sua introdução de forma automática.

A definição de qualquer estrutura/componente implica normalmente a utilização de expressões que envolvem variáveis. Antes de utilizar qualquer variável é necessário proceder à sua declaração, a qual consiste na definição de um nome e indicação do seu tipo. O SICAS possibilita apenas a existência de quatro tipos de informação: "Numéricos", "Cadeia de Caracteres", "Tabela de numéricos" e "Tabela de caracteres". O reduzido número de tipos de dados permitidos não tem como objectivo a desvalorização deste assunto, mas antes prende-se com o facto de não se pretender preocupar o aluno com a sua diversidade permitindo a sua concentração com o que achamos crucial - as estratégias para a concepção de um algoritmo que resolva o problema. Para destacar a importância do acto de declaração de variáveis, o SICAS não permite a utilização de variáveis não declaradas, assim, sempre que o aluno tente evocar uma variável ainda não declarada, notifica-o com uma mensagem alertando-o para esse facto. De salientar, no entanto, que o aluno pode em qualquer etapa da sua resolução realizar a gestão das suas variáveis quer pela sua introdução ou eliminação, quer pela alteração do seu tipo, dimensão ou nome.

Para a construção de expressões, o SICAS não segue uma sintaxe rígida de uma determinada linguagem de programação, mas está mais orientado para o C e o JAVA, na medida em que o público alvo previsível para utilização do SICAS irá, numa fase posterior, programar numa dessas linguagens. No entanto, há um esforço constante para minimizar os detalhes sintácticos, de forma a que o aluno se possa concentrar plenamente na sua tarefa principal. O SICAS possui também um conjunto de funções intrínsecas, pré- definidas que podem ser utilizadas na construção de expressões sem que haja a preocupação da sua declaração. As funções existentes no SICAS são as mais frequentemente utilizadas na generalidade das linguagens de programação e que proporcionam a resolução de grande número de problemas numa fase inicial de aprendizagem deste tipo de matéria. Foram definidas funções para manipulação de dados numéricos (ex: min, sqrt, cos,...) e de cadeias de caracteres (ex: ascii, length, charAt,...).

O SICAS permite que o aluno defina as suas próprias funções. Esta é uma possibilidade importante, pois pensamos que é fundamental incutir desde cedo nos alunos o conceito de modularização, bem como a sua importância para uma programação correcta (facilitam a resolução de problemas mais complexos e de maiores dimensões; permitem a alteração de uma função independentemente das restantes; evitam a redundância possibilitando a redução do número de componentes; tornam a resolução mais legível e fácil de entender).

A construção de uma função é feita segundo as regras e opções definidas anteriormente para qualquer resolução. A diferença principal tem a ver com os elementos delimitadores da sequência de instruções. O componente inicial apresenta agora um cabeçalho que inclui o nome atribuído à função e os seus parâmetros. O elemento final indicará um eventual valor a devolver como resultado da execução da função. Após a definição de uma função, ela só é realmente evocada após a inserção do componente ChamaFunção no local desejado, segundo o procedimento habitualmente seguido para a inserção de qualquer componente. Essa inserção fica completa com a indicação dos parâmetros de chamada da função (parâmetros reais) e da variável onde deve ser armazenado o valor de retorno da função, caso este exista. O SICAS também apresenta a possibilidade de eliminação das funções construídas (desde que não seja a função principal), bastando para tal que o aluno se encontre na função a eliminar. Relativamente a este aspecto apresenta várias possibilidades, entre elas eliminar todas as chamadas à função em causa, substituir as chamadas por chamadas a uma outra função já definida (estando a cargo do aluno a eventual alteração dos parâmetros de forma a que não haja incongruências) ou ainda, eliminar apenas a função construída, mas não removendo as chamadas à função eliminada nos diversos locais onde são evocadas. Obviamente, com esta última possibilidade é provável que o aluno cometa erros, no entanto, pensamos que é importante responsabilizá-lo para este tipo de atitudes para que reflicta sobre a importância destas acções. Este tipo de responsabilização das atitudes do aluno também se aplica aquando da alteração dos parâmetros das funções.

2.2.1.2. Área de geração de resultados e descrição do problema

Esta área apesar de não ser determinante para uma boa concepção do algoritmo, pode ser considerada como um complemento importante de informação de apoio ao aluno. É constituída pelas subsecções Saída, Enunciado e Solução. A subsecção Saída, como o próprio nome sugere, contém a saída gerada pela execução do programa e também o eventual código produzido, sob a forma de Pseudocódigo, Linguagem C ou Linguagem JAVA, se alguma destas opções for escolhida. A subsecção Enunciado é destinada à apresentação do problema a resolver. A subsecção Solução destina-se à indicação, pelo professor, de um conjunto de caracteres representativos da saída esperada para o problema definido, assumindo o conjunto de valores de entrada estabelecidos na secção "Entradas" da "Área de dados auxiliar". A figura seguinte ilustra alguns dos aspectos referidos.





2.2.1.3. Área de dados auxiliares

Esta área possui as subsecções Factos, Variáveis e Entradas. A subsecção Factos apenas se revela útil durante a simulação da resolução construída, daí que apenas se encontre activa nessa situação. Os Factos permitem conhecer, em cada momento, os dados da experiência, estabelecendo para isso a correspondência entre cada variável e o valor que lhe está associado. Este par valor/variável é constantemente actualizado durante a execução da resolução e é de crucial importância para a detecção de eventuais erros lógicos de concepção. A subsecção Variáveis apesar de estar presente quer quando o aluno edita, quer quando simula algoritmos é especialmente conveniente no ambiente de resolução do problema. Tem como objectivo permitir a realização de uma consulta rápida a fim de obter informação sobre as variáveis declaradas e dos respectivos tipos. A subsecção Entradas, embora não visível no modo aluno, tem como finalidade, em conjunto com a subsecção Solução, permitir que o aluno teste a correcção da sua resolução. Assim, esta subsecção destina-se a permitir ao professor fornecer um conjunto de dados de entrada, os quais estabelecem uma correspondência unívoca com as operações de leitura executadas durante a simulação do algoritmo.

2.2.2. Exemplo de utilização

Passamos de seguida a exemplificar o processo de construção de um algoritmo no SICAS a fim de concretizar algumas das explicações anteriormente referidas. Para o efeito seleccionámos um problema que consiste em calcular o quadrado de todos os elementos entre 1 e um valor a especificar pelo utilizador.

Apesar de não ser obrigatório começar por definir as variáveis, decidimos fazê-lo pois entendemos que é uma boa prática de programação, especialmente em problemas desta natureza, com pequenas dimensões, em que se sabe à partida o número e tipo das variáveis a utilizar. Desta forma, procedemos à declaração das variáveis necessárias, como se ilustra na caixa de diálogo apresentada na figura seguinte.





Há então que começar a construção do algoritmo através da inserção das estruturas necessárias. Um dos aspectos que se pretende saber é o número até ao qual o aluno pretende calcular os quadrados, ou seja, o número de iterações a realizar. Para isso há que pedir ao utilizador o valor que impõe esse limite, pelo que há que introduzir a estrutura Entrada/Saída, escolhendo-a previamente, por exemplo, como se indica na janela análoga à apresentada na figura seguinte.





Após a selecção da operação desejada, ler ou escrever, dentro desta estrutura, há que escolher a variável a ler, de entre as que estão declaradas até ao momento.





De seguida, como pretendemos executar uma acção ou conjunto de acções um determinado número de vezes há que introduzir a estrutura de controlo Repetição. Nesta há que optar por um dos 2 tipos existentes. Como sabemos à partida o número de vezes que deve ser realizada a repetição escolhemos o for. De forma a definir esta estrutura sem qualquer ambiguidade há que definir vários campos especificando, nomeadamente, o valor inicial para a variável de controlo "Atribuição Inicial", os valores sucessivos que são atribuídos à variável de controlo, neste caso incrementos unitários, que lhe permitem representar a sua evolução e a condição que leva ao final do ciclo iterativo "Condição de teste". Estes aspectos estão representados na figura seguinte.





De seguida há que definir uma variável à qual será atribuído o valor de uma determinada expressão que realize o cálculo pretendido. Para tal utiliza-se o componente Atribuição, representado numa janela análoga à apresentada na figura seguinte. Nesta, as actividades do aluno resumem-se a seleccionar, a partir da lista de variáveis já por ele declaradas, a variável à qual se pretende conferir um valor ou expressão seguido da escrita da expressão desejada.





Finalmente, para escrever os valores calculados, há que introduzir o componente Entrada/Saída, mas agora escolhendo a operação Escrever e indicando um parâmetro que corresponde a uma expressão representativa dos caracteres a escrever.





Após a definição e introdução das estruturas mencionadas o fluxograma ficará com o aspecto ilustrado na figura seguinte.





2.2.3. Animação/Simulação da Resolução do Problema

Uma vez concluída a tarefa de construção da resolução do problema, esta poderá ser simulada pelo sistema. Para isso, o aluno terá que transitar para outro ambiente - modo de execução. Este ambiente permite um elevado grau de interacção e controlo por parte do aluno, possibilitando-lhe realizar as seguintes configurações relativamente ao progresso de uma execução: Escolha da direcção da execução: permite que a execução se processe normalmente da primeira instrução para a última (Para a frente) ou recuar na execução (permitindo ao aluno voltar a observar uma situação anterior que, eventualmente, não tenha compreendido). Escolha do tipo de movimento realizado: permite estipular o ritmo de execução, só avançando de uma instrução para a que lhe sucede quando o aluno o autorizar (Passo-a-passo) ou com uma execução contínua mas lenta (Lento) ou ainda uma execução ininterrupta mas mais acelerada (Rápido). Independentemente da direcção e movimento estipulados para o decorrer da execução, o aluno poderá, em qualquer momento, parar a execução pelo período de tempo que desejar e posteriormente retomá-la. No decurso de qualquer simulação o próximo componente a ser executado é devidamente destacado, de forma a melhor localizar e enquadrar o aluno na acção que está a decorrer. Durante a simulação o aluno poderá acompanhar a evolução da execução da sua resolução, conjuntamente com a inspecção das secções que fornecem informação valiosa para essa apreciação, nomeadamente as secções Factos e Saída. Alguns dos aspectos anteriormente referidos estão representados na janela apresentada na figura seguinte.





No caso de a resolução não obter os resultados desejados o aluno poderá aperceber-se das razões desse facto e identificar quais as alterações a introduzir no sentido de corrigir a situação. Esta actividade, conhecida como debugging, é de extrema importância para o desenvolvimento de competência de programação.
 

3. Formas de utilização

O SICAS apresenta um conjunto de possibilidades de utilização educativa que nos parecem relevantes. Destacamos a possibilidade de os alunos construírem e simularem os seus próprios algoritmos, analisando os respectivos resultados e corrigindo aspectos eventualmente menos conseguidos. Esta é uma actividade de grande importância para a aprendizagem dos fundamentos da programação, objectivo primeiro do desenvolvimento deste ambiente. Apesar de ter sido concebido para uma utilização independente, este ambiente pode também suportar actividades em contexto de sala de aula, mesmo que o professor pretenda levar a cabo um conjunto de actividades mais dirigidas. O SICAS pode evidentemente ser utilizado em qualquer outro local, fora do horário curricular, no âmbito do estudo autónomo fundamental na aprendizagem da programação.

Outro aspecto importante da utilização do SICAS reside na possibilidade de, em utilização autónoma e sem preocupações classificativas, o aluno auto-avaliar os seus conhecimentos através da simulação e teste das suas resoluções. Em particular, a possibilidades de verificar que o seu algoritmo se comporta correctamente mesmo com os testes especificados pelo professor (dados de entrada e resultados esperados) pode apresentar uma credibilidade superior, conferindo ao aluno um grau de confiança mais elevado no sistema e como tal levando-o a utilizá-lo um maior número de vezes. Outro aspecto importante reside na possibilidade de permitir ao professor criar conjuntos de exercícios resolvidos, constituindo assim mais um auxiliar para o estudo dos seus alunos. Claro que neste ponto podem ser utilizadas diversas abordagens pedagógicas, como seja fornecer resoluções correctas, incorrectas ou ainda incompletas. Apesar de acharmos que analisar problemas resolvidos não se traduz inevitavelmente num aumento da capacidade de solucionar novos problemas, pensamos que o verdadeiro valor desta característica reside em permitir aos alunos fazer alterações às resoluções existentes e testar essas novas resoluções.

Também a possibilidade de dar aos alunos algoritmos errados, em especial com o tipo de erros lógicos que o aluno em causa habitualmente apresenta, e pedir aos alunos que procurem e corrijam esses erros, pode apresentar um alto valor educativo nesta área. A possibilidade de o professor fornecer resoluções incompletas é visivelmente vantajosa para problemas em que há repetição de código base e que para a determinação completa da resolução há apenas que definir certos módulos possibilitando ao aluno a sua concentração em determinadas partes que o professor ache conveniente para o seu nível de conhecimentos e dificuldades. Outra característica importante do SICAS encontra-se na faculdade de ser possível aos alunos comparar algoritmos diferentes para um mesmo problema e verificar em que situações é que uns apresentam um desempenho superior aos outros, interiorizando assim gradualmente técnicas eficazes de programação.
 

O ambiente pode também ser utilizado numa inversão de papéis, podendo ser pedido ao aluno para indicar o enunciado de um problema cuja resolução lhe é facultada (e que ele pode analisar com o SICAS). Finalmente destacamos a possibilidade de o professor colocar problemas aos alunos e verificar o seu grau de proficiência através da análise das resoluções por eles realizadas. De acordo com esta perspectiva, é possível afirmar que o SICAS permite avaliar e individualizar as actividades desenvolvidas pelos alunos. Com este conhecimento, o professor pode propor actividades de acordo com os níveis actuais de conhecimentos de cada aluno, evitando propor problemas demasiado fáceis ou difíceis, o que geralmente se traduz em desmotivação dos alunos. Este aspecto acrescenta um conjunto de valores importantíssimo ao sistema educativo tradicional, na medida em que possibilita uma actividade de ensino/aprendizagem mais personalizada, contribuindo para que os alunos possam aprender ao seu próprio ritmo, aumentando a sua motivação, pois muitas vezes os factores que mais contribuem para o desinteresse dos alunos nas salas de aula é a sua total incapacidade de acompanhamento dos exercícios que estão a ser abordados. É claro que este objectivo poderia ser atingido por outros meios, mas pensamos que o SICAS pode proporcionar algum suporte a esta abordagem, necessariamente mais trabalhosa para o professor.
 

4. Conclusão

O SICAS é um ambiente que tem como finalidade inverter a carga fortemente negativa atribuída às disciplinas de programação. A experiência tem demonstrado que, independentemente da linguagem leccionada, o problema é comum à generalidade das disciplinas de programação na medida em que as dificuldades residem na concepção do algoritmo e não na codificação da solução construída. Assim, o SICAS apresenta um ambiente que permite que os alunos inventem estratégias e mecanismos para a construção de algoritmos que resolvam problemas de programação, dando pouca atenção aos detalhes sintácticos. O SICAS permite, após a construção do algoritmo, a sua simulação e teste, a fim de possibilitar ao aluno diagnosticar erros lógicos do seu raciocínio. O SICAS está presentemente a ser avaliado por parte de um conjunto de professores com experiência no ensino da programação. As sugestões e críticas obtidas estão a ser registadas, analisadas e repensadas. Da recolha de opiniões conseguida resultará uma versão melhorada do ambiente que será alvo de testes faseados por parte dos alunos que frequentam as disciplinas de introdução à programação, das instituições a que pertencemos.
 

Referências