Espacios. Vol. 37 (Nº 29) Año 2016. Pág. 11
Cleverson Sebastião DOS ANJOS 1; Rodrigo DUDA 2; Sani de Carvalho Rutz Da SILVA 3
Recibido: 23/06/16 • Aprobado: 30/06/2016
1. Ferramentas de Auxílio de Escrita e Execução
2. Ferramentas de Programação Visual
RESUMO: As disciplinas de Algoritmos e Programação estão intimamente ligadas, uma vez que um algoritmo é a base de um programa de computador. Ambas as disciplinas, em especial a de algoritmos, apresenta grande dificuldade no aprendizado por parte dos alunos e impõe um grande desafio para os professores. Além dos desafios impostos pela dificuldade natural da disciplina, os professores da rede básica de educação brasileira contam ainda com a superlotação das salas de aula e a escassez de recursos, como a falta de computadores para os alunos. Considerando esses problemas, apresentam-se aqui nove ferramentas gratuitas que visam facilitar e estimular o ensino e aprendizagem dessas disciplinas |
ABSTRACT: The algorithms and programming courses are closely related, since an algorithm is the base of a computer program. Both disciplines, in particular the algorithms one, present great difficulty in learning by students and pose a great challenge for teachers. In addition to the challenges posed by the natural difficulty of these courses, elementary school teachers in Brazilian education have also to deal with classroom overcrowding and shortage of resources, such as the lack of computers for students. Considering these problems, here nine free tools to facilitate and encourage the teaching and learning of these subjects are presented. |
Um algoritmo é um procedimento computacional bem definido que recebe um ou mais valores, chamados de entrada do algoritmo, e produz um ou mais valores, chamados de saída do algoritmo (Cormen, Leiserson, Rivest, Stein, 2009). Algoritmos são essenciais, principalmente para a informática, pois são a base de todo e qualquer software.
A disciplina de Algoritmos busca ensinar a resolução de problemas na forma de algoritmos, ou seja, o aluno deverá encontrar uma solução para o problema que possa ser expresso na forma de passos lógicos bem definidos, chamados de comandos ou instruções.
Tais passos deverão estar preparados para tratar com os dados especificados como a entrada do algoritmo e deverão resultar nos dados também especificados pelo enunciado do problema, a saída do algoritmo.
Para isso, são trabalhados conceitos básicos, como o uso de variáveis, estrutura sequencial, de decisão e de repetição, vetores, matrizes, sub-rotinas e registros. Os alunos devem empregar esses conceitos para resolver os problemas propostos.
Após a concepção de um algoritmo, o mesmo pode ser transformado em um programa executável por um computador através da sua reescrita com uma linguagem de programação, que é o foco da disciplina de Programação.
As disciplinas de Algoritmos e de Programação, entretanto, são umas das que mais impõe desafios para professores e alunos dentro das salas de aula de cursos técnicos e de nível superior, estando a média de reprovação de alunos entre 30 e 40% (Beauboef, Mason; 2005, Noschang Et Al.; 2014, Raabe Et Al.; 2007).
Além da dificuldade inerente do próprio conteúdo dessas disciplinas, um outro problema que afeta negativamente o desempenho dos alunos é de que tal conteúdo é completamente novo para a grande maioria deles.
Ao passo que todos os que ingressam no ensino médio e superior já estudaram conceitos como matemática, história, geografia, ciências e afins, praticamente nenhum aluno teve contato com o que será apresentado nas disciplinas de Algoritmos e Programação.
A principal ferramenta requerida do aluno para essas matérias é o uso da abstração, que é a capacidade de tratar um objeto com base em suas características de interesse, ignorando as demais. O aluno precisa tratar os elementos de um algoritmo de forma genérica, sem atrelá-los a valores específicos, o que dificulta muito seu aprendizado (Falckembach, Araujo, 2006).
Trabalhar com conceitos abstratos constitui um grande desafio para os alunos uma vez que os mesmos estão habituados a aprender associando os conceitos aprendidos em sala de aula com elementos concretos do mundo real.
Sendo assim, procura-se atrelar ao ensino de conceitos abstratos, representações concretas. Uma forma de facilitar esse processo dá-se através da utilização de ferramentas tecnológicas que, além de preencher essa ponte entre o abstrato e o concreto, aumentam o interesse do aluno do século XXI, que já nasceu cercado pela tecnologia.
Descrevem-se aqui uma série de tecnologias que podem auxiliar tanto o professor quanto o aluno no ensino e aprendizado dessas disciplinas tão importantes em suas carreiras acadêmicas e profissionais.
O trabalho divide-se da seguinte forma: na seção 1, encontram-se ferramentas que auxiliam os alunos na escrita e teste dos seus algoritmos. Na seção 2, tem-se ferramentas de programação visual destinadas à criação de aplicativos para smartphones e animações. Na seção 3, encontram-se ferramentas de animação que auxiliam na visualização da execução de algoritmos. Na seção 4, temos sites de colaboração, onde os alunos podem submeter suas dúvidas e interagir com outras pessoas com vasto conhecimento da área. Em seguida, expõe-se as considerações finais.
Normalmente, algoritmos são escritos em papel e testados pelo próprio aluno, através de testes de mesa, onde cada instrução é executada individualmente e seu resultado registrado. Embora essa abordagem seja apropriada, uma vez que o aluno contará apenas com seu conhecimento para criar e testar o seu algoritmo, ensinar apenas através desta prática pode dificultar o trabalho do professor e tornar o processo solitário e desestimulante para o aluno.
A dificuldade para o professor advém do fato de que ele deverá analisar os algoritmos de cada aluno separadamente, uma vez que existem diversas formas de resolver o mesmo problema.
Considerando que a média de alunos por turma no ensino público de nível médio brasileiro, é de 32,8 (Média De Alunos Por Turma Na Educação Básica, 2015) torna-se impraticável atender cada aluno individualmente para cada exercício ou atividade propostos. Devemos considerar também que muitas das instituições de ensino públicas no Brasil possuem um número insuficiente de computadores. O Censo da Educação Básica apontou que em 2013, a média nas escolas era de 34 alunos por computador (Censo Escolar De Educação Básica, 2013).
Por ter que compartilhar o computador com seus colegas, o aprendizado do aluno pode não ser pleno, ao passo de que nem todos os que compartilham o computador estarão realizando os exercícios e tarefas propostos.
Precisamos então viabilizar e estimular um aprendizado mais autônomo, para que o aluno possa dar andamento ao aprendizado também fora da escola e sem a presença do professor.
Visando amenizar não somente esse problema, mas também a dificuldade do aluno de lembrar a sintaxe de comandos, podem-se utilizar ferramentas que auxiliam na escrita dos algoritmos, uma vez que elas possuem a funcionalidade de analisar o algoritmo e indicar ao aluno onde errou, muitas vezes oferecendo alternativas de correção.
Todavia, não é porque um algoritmo está escrito de forma correta, ou seja, sem erro de sintaxe, que temos a garantia de que ele apresenta corretude funcional, ou seja, que ele faz o que deve. De forma análoga, não é porque durante a resolução de uma equação o aluno respeitou todas as regras de álgebra e aritmética, que temos a garantia de que a resolução da equação está correta.
Para saber se o algoritmo escrito realmente faz o que deve, o aluno deverá executá-lo. Uma forma de fazer isso é com um teste de mesa, onde, no papel, o aluno executa cada uma das instruções que compõe seu algoritmo. O problema aqui é que, assim como o aluno pode errar na construção, pode também cometer erros no teste.
A funcionalidade de execução de algoritmos dessas ferramentas permite que um terceiro (o computador) execute o algoritmo, informando ao aluno o resultado. O aluno então, compara o resultado esperado com o obtido, sabendo imediatamente se está correto ou não. Essa funcionalidade pode ainda estar combinada com a de depuração, onde a ferramenta mostra, instrução por instrução, o fluxo de dados dentro algoritmo.
Temos nos itens 1.1, 1.2 e 1.3 três ferramentas que fornecem as funcionalidades de auxílio na escrita, execução, depuração e testes.
Ferramenta de auxílio na escrita e execução desenvolvida pela empresa Apoio Informática (VisualG, 2016). É distribuída pela internet e pode ser instalada apenas no sistema operacional Microsoft Windows 95 ou posterior.
A tela principal do VisualG encontra-se na Figura 1.
Figura 1: tela principal do VisualG, (1) menus de controle, para a execução e depuração do algoritmo, por exemplo,
(2) área de digitação do algoritmo, (3) campo para depuração do algoritmo e (4) console para saída de erros de compilação
Além de verificar a sintaxe do algoritmo, o VisualG oferece a funcionalidade de auto digitação, em que o programa prevê o que o usuário está escrevendo e oferece opções para completar a instrução que está sendo digitada.
O software apresenta os comandos básicos utilizados em algoritmos, sem, no entanto, apresentar bibliotecas de funções. Permite efetuar a depuração do algoritmo, ou seja, visualizar as alterações nos valores das variáveis e o fluxo de execução em tempo real.
Outra opção de ferramenta para auxílio na escrita e execução de algoritmos é o Portugol Studio, oriundo de um esforço conjunto de desenvolvimento da Univali - Universidade Vale do Itajaí, do estado brasileiro de Santa Cataria e da Beholder Desenvolvimento e está disponível para os sistemas operacionais Linux, Mac OS e Microsoft Windows (Portugol Studio, 2016). Na Figura 2 encontramos a tela de edição de algoritmos do Portugol Studio.
Figura 2: Portugol Studio, (1) opções para salvar, depurar e executar algoritmo,
(2) árvore de símbolos, (3) área de digitação do código, (4) console de entrada, saída e mensagens.
A ferramenta também possui a funcionalidade de conclusão de código, execução e depuração. Diferentemente do VisualG, o Portugol Studio oferece uma considerável biblioteca de funções como manipulação de arquivos e imagens, funcionalidades gráficas, como desenho; funções matemáticas; funções de manipulação de texto, entre outras.
O Portugol Studio permite ainda o desenvolvimento de jogos com algoritmos. Uma de suas principais vantagens é a integração com a ferramenta run.codes, descrita a seguir.
Um estudo extensivo sobre essa ferramenta pode ser encontrado em (Noschang, Pelz, Raabe, 2014).
Esta ferramenta diferencia-se das citadas anteriormente nesta seção ao passo que foca apenas na correção de algoritmos (Sikanski, Duarte, Fadel, 2016).
Esse sistema possui duas interfaces diferentes, a do aluno e a do professor. O professor cadastra exercícios e casos de teste (valores de entrada para os algoritmos e os respectivos valores de saída que são esperados) e pode acompanhar a correção dos exercícios submetidos. O aluno resolve os exercícios, podendo usar diferentes linguagens de programação ou ainda o Portugol Studio e os submete para a correção automática da ferramenta.
Podemos ver na Figura 3 a tela onde o professor tem acesso ao desempenho individual de seus alunos.
Figura 3: Lista de alunos cadastrados para um professor.
Após concluir seu algoritmo, o aluno o envia para o run.codes que faz a correção automática, em tempo real, com base em casos de teste definidos previamente pelo professor.
O aluno assim, obtém instantaneamente um feedback sobre o algoritmo submetido. Além disso, o run.codes analisa a similaridade dos algoritmos enviados, para que o professor seja notificado no caso de plágio entre os alunos.
O professor, ao selecionar a opção "Ver Desempenho" de um aluno específico, na Figura 3, é direcionado para a tela na Figura 4.
Figura 4: Lista de resultados de correções de exercícios submetidos por um aluno.
(1) Lista de exercícios disponibilizados ao aluno, (2) data em que a resposta foi submetida pelo aluno,
(3) status do exercício (finalizado, incompleto, erro ou não entregue),
(4) número de casos de teste corretos e (5) a nota final do exercício.
Nessa tela, o professor pode acompanhar o desempenho individual de cada aluno. É exibida a lista de exercícios que foi disponibilizada para o aluno; a data de submissão da resposta; se a resposta está correta, incorreta, incompleta ou se não foi entregue; a quantidade de casos de teste previamente definidos pelo professor que o aluno acertou e a nota final do exercício.
Ferramentas de programação visual buscam sanar o problema da dificuldade que os alunos apresentam em dominar e aplicar o conceito de abstração.
Os principais objetivos das linguagens de programação visual são (BURNETT, 1999):
Ainda segundo (Burnett, 1999), as quatro estratégias comuns usadas para atingir tais objetivos são:
Sendo assim, o aluno não somente escreverá instruções na forma de texto, mas manipulará objetos que representam os elementos de algoritmos. Tem-se nos itens 2.1 e 2.2 dois exemplos dessas ferramentas:
Desenvolvido pela Lifelong Kindergarten Group, na MIT, o Scratch é uma ferramenta de programação visual em blocos (Scratch, 2016). Isso quer dizer que, ao invés de escrever instruções, o usuário manipula blocos visuais que representam essas instruções. A ferramenta permite desenvolver animações, jogos, artes interativas, entre outros.
Podemos ver na Figura 5 a tela de desenvolvimento do Scratch. Percebe-se que não existe espaço para a digitação de texto. O que se têm são blocos no centro da figura que são arrastados para o espaço na direita, formando assim o algoritmo. As formas nos blocos indicam onde eles podem ser encaixados. Ao lado esquerdo temos a animação resultante.
A integração desses elementos aumenta a sensação de concretude do aluno, que sente estar manipulando diretamente os elementos.
Figura 5: tela de edição de código do Scratch, (1) espaço para visualização da animação, (2) blocos com códigos,
(3) menu de escolha de scripts, imagens e sons e (4) área onde os blocos são arrastados e conectados, formando assim algoritmos
O MIT AppInventor utiliza programação visual em blocos, de forma bastante semelhante ao Scratch, mas para o desenvolvimento de aplicativos para o sistema operacional de dispositivos móveis Android (MIT App Inventor, 2016).
A ferramenta possui basicamente duas telas, "Design" e "Blocks". Um recorte da tela de "Design" pode ser visto na Figura 6 e da tela "Blocks" na Figura 7.
Na tela "Blocks", na Figura 7, não existem campos para que o usuário digite comandos de texto. A "escrita" do algoritmo é feita apenas arrastando e soltando os blocos que se encontram na paleta à esquerda da tela.
Na tela "Design", Figura 6, o usuário constrói a interface do aplicativo, na tela "Blocks", utiliza blocos de forma semelhante ao Scratch para determinar o funcionamento interno de tais elementos.
Figura 6: tela "Design" do MIT AppInventor, (1) objetos de interface disponíveis,
(2) tela do smartphone, onde o usuário deve arrastas e soltar os objetos de interface,
(3) listagem em forma de árvore dos componentes e (4) propriedades do objeto selecionado.
Figura 7: tela "Blocks" do MIT AppInventor,
(1) objetos disponíveis para a manipulação no aplicativo, (2) área onde os blocos são manipulados diretamente,
(3) menus, onde o usuário pode, por exemplo, ver o aplicativo sendo executado em um smartphone emulado e
(4) alternância entre as telas "Design" e "Blocks".
Podemos perceber também que os blocos representam instruções de algoritmos, como laços de repetição, ou seja, o usuário ainda assim está escrevendo um algoritmo, mas utilizando elementos concretos, os blocos, ao invés de instruções na forma de texto.
Estas ferramentas utilizam animações para demonstrar visualmente como um algoritmo funciona. Encontramos mais uma vez ferramentas que buscam fornecer concretude à abstração que domina o âmbito dos algoritmos.
A imagens simbólicas e dinâmicas na animação de algoritmos ajuda a fornecer uma aparência concreta às noções abstratas de metodologias de algoritmos, tornando-as assim mais explícitas e claras (Kehoe, Stasko, Taylor, 2001).
São descritos a seguir nos itens 3.1 e 3.2 duas ferramentas de animação de algoritmos.
Desenvolvida pelo Dr. Steven Halim, em 2011, a ferramenta VisuAlgo permite visualizar o funcionamento de algoritmos de ordenação e diversas estruturas de dados, como uma vasta variedade de tipos de árvores, listas, grafos, entre outros (VisuAlgo, 2016).
Uma das principais vantagens do VisuAlgo é que o usuário pode submeter seus próprios valores de entrada, e visualizar, através da animação, como o algoritmo se comporta com aqueles valores. Podemos ver na Figura 8 algumas das animações disponível no VisuAlgo. Na Figura 9, tem-se a tela de execução de animações do VisuAlgo.
Figura 8: Algumas das animações disponíveis no VisuAlgo.
Figura 9: A animação do algoritmo de ordenação Bolha.
(1) Área onde a animação é exibida, (2) controle da animação, podendo o usuário pausá-la, avançar e retroceder, além de controlar sua velocidade e
(3) O algoritmo é exibido, a área em preto indica qual parte está causando o efeito mostrado na animação.
O Algomation é uma plataforma de visualização, criação e edição de algoritmos (Algomation, 2016). Qualquer pessoa pode criar uma animação para qualquer algoritmo e publicá-lo na plataforma.
Encontramos nela uma grande variedade de animações para diversos algoritmos, mesmo os não tão populares como de ordenação.
Na Figura 10 vemos a tela de execução de animação. Além de poder acompanhar paralelamente à animação o algoritmo em si, o desenvolvedor da animação pode fornecer uma explicação detalhada de cada instrução executada. Tal explicação é exibida no canto superior esquerdo no momento em que a instrução é executada.
Figura 10: tela de execução da animação do Algomation.
(1) A descrição do algoritmo e a explicação passo a passo do que está sendo mostrado na animação,
(2) o algoritmo em si, a linha destacada mostra qual parte está sendo executada no momento,
(3) controles de velocidade da animação e (4) área onde a animação é exibida.
Fóruns são sites colaborativos, onde membros cadastrados podem iniciar e participar de discussões sobre diversos temas, desde culinária até política.
Fóruns direcionados à algoritmos e programação são ferramentas que auxiliam no aprendizado ao passo que permitem que os alunos interajam com pessoas de fora do seu convívio, com experiências de aprendizado diversificadas e níveis de formação relativamente mais elevados.
O funcionamento é bastante simples e intuitivo. O usuário se cadastra e já pode submeter e responder perguntas ou iniciar e participar de discussões.
Existe uma grande variedade de sites de fóruns disponíveis, citamos aqui o Stack Overflow e o Fórum Clube do Hardware.
Faz parte da rede Stack Exchange, com mais de 150 fóruns sobre os mais diversos temas, e é a maior comunidade on-line para aprendizado de algoritmos e codificação (Stack Overflow, 2016). Possui mais de 40 milhões de visitantes mensais. Possui 5 milhões de usuários cadastrados e 4,6 milhões de respostas submetidas.
Embora o nome indique explicitamente tratar de um site com conteúdo relativo à hardware, o Fórum Clube do Hardware possui várias seções para discussão de algoritmos e codificação (Fórum Clube Do Hardware, 2016). Possui pouco mais de 510 mil membros.
O ensino e aprendizagem das disciplinas de algoritmos e programação impõe uma série de desafios para professores e estudantes.
Pode-se constatar, através do alto índice de reprovação nessas disciplinas, que tanto professores quanto alunos necessitam buscar formas diferentes de ensinar e de aprender esses conteúdos.
Existe uma grande variedade de ferramentas disponíveis de forma gratuita que podem auxiliar na superação dessas barreiras. Ferramentas essas que muitas vezes, por desconhecimento, acabam não sendo utilizadas ou não tem seu total potencial explorado.
Categorizamos e descrevemos neste artigo as principais funcionalidades, o propósito e a utilidade de nove ferramentas de apoio ao ensino e aprendizagem das disciplinas de algoritmos e programação.
Essas ferramentas podem ser utilizadas em diversos estágios da aprendizagem, desde a concepção de algoritmos básicos, até a compreensão de algoritmos avançados e o desenvolvimento de aplicativos para celular e animações.
Esperamos que o uso dessas ferramentas facilite e estimule tanto o aprendizado do aluno, quanto o trabalho do professor.
De forma alguma insinuamos que essa listagem é exaustiva, ou que não existem outras ferramentas importantes.
Com o conhecimento a respeito dessas ferramentas e categorias de ferramentas, o leitor é encorajado a testar qual melhor se adapta as suas necessidades, tornando assim mais fácil, estimulante e agradável o aprendizado de disciplinas tão importantes.
Algomation. Disponível em <http://www.algomation.com>, acesso em 20 de junho de 2016.
Burnett, M. M. 1999. Visual Programming. Wiley Encyclopedia of Electrical and Electronics Engineering.
Censo Escolar De Educação Básica, Ministério da Educação. Disponível em <http://download.inep.gov.br/educacao_basica/censo_escolar/resumos_tecnicos/resumo_tecnico_censo_educacao_basica_2013.pdf>. Acesso em 20 de junho de 2016.
Cormen, T.H., Leiserson, C. E., Rivest, R. L., Stein, C. (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. p-5.
Falckembach, G. A. M., Araujo, F. V. de M (2006). Aprendizagem De Algoritmos: Dificuldades Na ResoluçÃo De Problemas. Anais Sulcomp v. 2 ISSN: 2359-2656
Fórum Clube Do Hardware: Programação e Desenvolvimento. Disponível em <http://forum.clubedohardware.com.br/forum/25-programação-e-desenvolvimento/>, acesso em 20 de junho de 2016.
Kehoe, C.; Stasko, J.; Taylor, A. (2001). Rethinking the evaluation of algorithm animations as learning aids: an observational study. International Journal of Human-Computer Studies, v. 54, n. 2, p. 265-284.
Noschang, L. F., Pelz, E. A., Raabe, A. L. (2014). Portugol studio: Uma ide para iniciantes em programaçao. Workshop de Educação em Computação, Anais do Congresso Anual da Sociedade Brasileira de Computação.
Média De Alunos Por Turma Na Educação Básica, Ministério da Educação. Disponível em <http://dados.gov.br/dataset/media-de-alunos-por-turma-na-educacao-basica>, acesso em 20 de junho de 2016.
MIT App Inventor. Disponível em <http://appinventor.mit.edu/explore/index-2.html>, acesso em 20 de junho de 2016.
Portugol Studio, versão 2.5: IDE de desenvolvimento. [S.l.]: Univale, Beholder Desenvolvimento, 2016. Obtido em <http://lite.acad.univali.br/portugol/>.
Sikanski, F. G., Duarte, F. S. L. G., Fadel, S. G., Run.Codes. Disponível em <http://we.run.codes>, acesso em 20 de junho de 2016.
Scratch. Disponível em <https://scratch.mit.edu>, acesso em 20 de junho de 2016.
Shneiderman, B (1993). Direct manipulation: a step beyond programming languages. Computer 16(8): 57-69.
Stack Overflow. Disponível em <http://pt.stackoverflow.com>, acesso em 20 de junho de 2016.
VISUALG: IDE de desenvolvimento. [S.l.]: Apoio Informática, 2016. Obtido em <http://www.apoioinformatica.inf.br/produtos/visualg/item/32-instalacao-e-requerimentos-de-hardware>
VISUALGO. Disponível em <http://visualgo.net>, acesso em 20 de junho de 2016.
1. Professor do curso de Tecnologia em Análise e Desenvolvimento de Sistemas, Instituto Federal do Paraná – IFPR – PR – Brasil. E-mail cleverson.anjos@ifpr.edu.br
2. Doutorando do Programa de Pós-Graduação em Ensino de Ciência e Tecnologia (PPGECT), Universidade Tecnológica Federal do Paraná – UTFPR – PR – Brasil. E-mail: rodrigo.duda@ifpr.edu.br
3. Professora do Programa de Pós-Graduação em Ensino de Ciência e Tecnologia (PPGECT), Universidade Tecnológica Federal do Paraná – UTFPR – PR – Brasil. E-mail: sani@utfpr.edu.br