3 ENSINO DE ALGORITMOS
3.1 Dificuldades no processo de ensino e aprendizagem
Apesar do esforço realizado por pesquisadores e professores, ainda são muitas as dúvidas e os obstáculos a serem superados em relação ao processo de ensino e aprendizagem nas disciplinas da área de algoritmos e programação. Parte desse problema pode ter sido originada pela falta de conhecimento dos professores sobre as teorias de aprendizagem. Como a maioria dos cursos de graduação e pós- graduação não têm o objetivo de formar professores, seus egressos não são preparados para atuarem como docentes. Ao entrar em uma sala de aula pela primeira vez, o novo professor de algoritmos e programação, ou de qualquer outra disciplina na área, busca, em seus antigos professores exemplos, a serem seguidos ou evitados, a partir de uma análise empírica de sua experiência como discente.
Assim, muitas práticas vão se repetindo ao longo dos anos, impedindo que melhorias no processo de ensino e aprendizagem sejam efetivadas.
Outra questão relevante quanto ao ensino de algoritmos e programação refere- se ao foco do curso na exposição de conteúdos (unidades didáticas). O compromisso temporal com o conteúdo fragmenta a evolução e o aprendizado diminui a cada nova unidade didática porque o pré-requisito – o aprendizado da fase anterior – não se completou. O aluno sem vocação natural, com os conteúdos anteriores comprometidos, progride muito devagar ou continua na mesma posição (DELGADO et al., 2005).
Dentre as dificuldades enfrentadas por parte dos alunos, evidenciam-se a dificuldade de interpretação dos enunciados, de abstração das informações contidas nos problemas e, conseqüentemente, a falta de habilidade na resolução dos problemas.
Procurar por falhas também é uma dificuldade enfrentada principalmente por alunos iniciantes. “O termo falha, usado freqüentemente como sinônimo de bug, corresponde a um passo incorreto, processo ou definição incorreta de dados” (BARROS e DELGADO, 2006, p.32). Uma falha pode estar no código fonte do programa ou no projeto do algoritmo, fazendo com que o programa não funcione corretamente ou não gere o resultado esperado, e pode não ser detectada enquanto seus efeitos não forem observados. O processo de procurar, encontrar e consertar falhas é chamado de depuração ou diagnóstico de programas. Freqüentemente, programadores gastam muito mais esforço e tempo para encontrar e consertar falhas do que escrevendo um novo código. Existem ferramentas, chamadas de depuradores, que ajudam, por exemplo: a monitorar a execução do programa, seguir o fluxo, verificar os valores das variáveis e parar a execução do programa em determinados pontos. Nesse processo, são usados também os chamados casos de teste, isto é, um conjunto de dados de entrada com os respectivos dados esperados de saída para um programa correto. No entanto, a depuração de programas continua sendo uma tarefa difícil, e quase manual.
No caso de um programador iniciante, o professor costuma recomendar o uso da simulação (também chamada de teste-de-mesa), que consiste em executar manualmente as instruções do algoritmo, tomando as entradas de um caso de teste
e comparando a saída do algoritmo com a saída esperada. No entanto, o processo de simulação pode não ser suficiente para o aluno descobrir e corrigir seus erros. Por exemplo, na simulação, o aluno pode tentar executar o programa com suas concepções erradas sobre a funcionalidade dos comandos da linguagem. O aluno pode ainda identificar erros na saída, sem ser capaz de identificar as causas no programa. Tais situações tendem a dificultar o seu aprendizado, tornando-o repetitivo, monótono, não permitindo que ele avance na compreensão do conteúdo.
Outra prática recomendada pelo professor e freqüentemente adotada por alunos refere-se à verificação dos valores das variáveis, sem parar a execução do programa. Tal procedimento é efetuado pelo próprio aluno, inserindo comandos de impressão em pontos estratégicos do programa. No entanto, nem sempre o aluno sabe escolher os pontos de teste adequados. Uma das vantagens de um sistema de diagnóstico automático de programas é a escolha automática desses pontos de teste, ou seja, o sistema deve ser capaz de identificar quais são os pontos estratégicos.
Em seus estudos, Rosa et al. (2006) salientam aspectos relacionados à motivação. A dificuldade enfrentada pelo aluno para desenvolver o raciocínio lógico tende a levá-lo a um desinteresse pela disciplina e, neste ponto, os jogos podem ser ferramentas eficientes. Tarouco et al. (2004) asseveram que os jogos divertem enquanto motivam, facilitando o aprendizado e aumentando a capacidade de retenção do que é ensinado, exercitando as funções mentais e intelectuais do jogador.
Outro problema no processo de ensino de programação, apontada por Tobar et al. (2001), é a dificuldade encontrada pelos professores para acompanhar efetivamente as atividades laboratoriais, dado o grande número de alunos geralmente sob sua supervisão. Pereira Junior et al. (2006) avaliam que esta dificuldade pode ser minimizada com a utilização de um ambiente virtual de apoio ao ensino, em que o professor acompanha, de fato, as atividades realizadas pelo aluno, analisa e comenta suas soluções.
Raabe e Silva (2005) lembram mais um aspecto que se faz significativo, o fato de que, em sala de aula, as turmas são constituídas por grupos de aprendizagem heterogêneos, cujos sujeitos apresentam ritmos de aprendizagem e graus de
dificuldades diferentes, exigindo uma demanda de interação para atendimento muitas vezes impossível de ser alcançada pelo professor.
Ainda devem ser considerados como fatores importantes neste rol: as listas de exercícios devem conter problemas com dificuldades crescentes; a quantidade de alunos por máquina no laboratório, nas aulas práticas; o número de alunos na turma; a linguagem de programação utilizada - é aconselhável o uso da linguagem Pascal, considerada uma linguagem acadêmica, de fácil aprendizagem e que não exige grandes esforços dos alunos. Assim todo o esforço fica para a construção do modelo da solução e a programação fica com o objetivo de validar o algoritmo desenvolvido (FALKEMBACH, 2003).
Branco Neto e Cechinel (2006) ressaltam que tais dificuldades e suas respectivas causas dependem sempre do contexto em que a disciplina, os alunos e o professor estão inseridos. De acordo com os pesquisadores, essa é uma das razões para não existir um consenso sobre um conjunto de estratégias indicadas para a apresentação, o estudo e a prática desses conteúdos, obrigando cada instituição a percorrer seus próprios caminhos na busca de soluções.