Escolar Documentos
Profissional Documentos
Cultura Documentos
net/publication/258023558
CITATION READS
1 726
2 authors:
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by César França on 11 August 2015.
1. Introdução
Um programa de computador pode ser definido como uma sequencia lógica de
instruções, designadas para solucionar um problema computacional [GOEL 2010]. Um
programador, por sua vez, é um profissional com habilidades em codificar tais
instruções de forma que o computador possa executá-las com êxito. Portanto, as
competências de um bom profissional estão fundamentadas em uma boa assimilação de
conhecimentos de algoritmos, lógica e programação durante os estágios iniciais de seu
aprendizado.
De acordo com o currículo de referência da Sociedade Brasileira de Computação
(SBC), entende-se por Computação ou Informática o corpo de conhecimento a respeito
de computadores, sistemas de computação e suas aplicações, englobando aspectos
teóricos, experimentais, de modelagem e de projeto. Sugerem, ainda, que os cursos
desta área possam ser divididos nos que têm a computação como atividade-fim, como
atividade-meio e nos cursos de Licenciatura em Computação [SBC 2003]. A SBC ainda
afirma que as disciplinas de linguagens de programação, estruturas de dados e análise de
algoritmos são matérias que devem compor o currículo destes cursos e estas seriam
exatamente as mais comentadas em grau de dificuldade entre os alunos que se iniciam
nesses cursos [Mota et al. 2003].
Iniciativas acadêmicas e industriais, algumas das quais serão apresentados ao
longo deste artigo, buscam a solução para este problema através do desenvolvimento de
ferramentas de auxílio ao aprendizado de conceitos básicos de programação. O intuito
explícito destas ferramentas é o de simplificar o aprendizado, mas elas também podem
gerar benefícios periféricos como a divulgação de uma linguagem de programação
específica como o KidsRuby [The Hybrid Group 2011], a diminuição da carga de
trabalho do professor [Almeida et al. 2002], ou o despertar do interesse para as
disciplinas de programação em crianças e jovens como o RobotProg [Physics Software
2005].
Embora estas iniciativas sejam amplamente divulgadas, não é possível encontrar
muito material literário que discuta o conteúdo teórico e/ou metodológico abordado por
tais ferramentas, a profundidade e completude dos conceitos explorados ou a eficácia de
seu uso. O objetivo deste artigo é não somente ressaltar a importância dos softwares
didáticos como ferramenta de apoio aos iniciantes em linguagem de programação, mas
apresentar uma análise comparativa de alguns aplicativos disponíveis sob a perspectiva
dos conceitos de programação explorados. Espera-se que os resultados também possam
contribuir para a tomada de decisões de professores quanto à sua aplicação prática.
O artigo está organizado da seguinte forma: a Seção 2 apresenta as dificuldades
mais comuns dos alunos iniciantes em programação e explora a importância do uso de
softwares como uma ferramenta de apoio ao ensino; a Seção 3 apresenta o método
através do qual o estudo comparativo foi conduzido; as Seções 4 e 5 apresentam os
resultados da pesquisa e discussões acerca dos dados, respectivamente. Finalmente, na
Seção 6 encontram-se as conclusões e perspectivas futuras com relação a este estudo.
2. Revisão Literária
2.1. Dificuldades no aprendizado de programação
É notável que exista uma grande dificuldade em compreender e aplicar conceitos
abstratos de programação por parte dos alunos que frequentam disciplinas introdutórias
nesta área [Lahtinen et al. 2005]. Tais dificuldades podem estar associadas tanto à forma
de ensino quanto à ansiedade do aluno em querer ver os resultados práticos de seus
códigos. Uma das dificuldades dos que querem aprender é na compreensão e na
aplicação de noções básicas para criação de algoritmos.
Almeida et al. [2002] observou que nos cursos que abordam essas disciplinas,
objetivando o ensino de lógica de programação, há uma certa falta de motivação por
parte dos alunos associada à resistência e dificuldade no aprendizado devido a uma forte
carga de conceitos abstratos que permeiam todo o conhecimento em programação.
Gomes, Henriques e Mendes [2008] comentam que o desinteresse pode acontecer por
dificuldades de interpretação ou devido os alunos se sentirem demasiados ansiosos para
começar a codificar sem antes compreender os dados do problema, dificultando a fase
seguinte, a construção do algoritmo, que seria caracterizado pelo déficit de alunos na
capacidade de resolução de problemas.
Os estudantes de disciplinas introdutórias na área da Computação muitas vezes
têm dificuldades de empregar o raciocínio lógico envolvido, o que gera um ambiente
desmotivante, causando uma grande evasão e também grande reprovação na disciplina
[Barros, Delgado e Machion 2004].
Há muitas dificuldades envolvidas na tarefa de desenvolver as habilidades
relacionadas ao aprendizado de uma nova linguagem de programação e de como
resolver problemas a serem resolvidos por um computador [Barros, Delgado e Machion
2004].
Segundo Gomes, Henriques e Mendes [2008], a um nível mais básico, o ensino
das linguagens de programação tem como propósito conseguir que os alunos
desenvolvam as suas capacidades, adquirindo os conhecimentos básicos necessários
para conceber programas capazes de resolver problemas reais simples. Em
compensação para que o estudante possa passar para um nível de entendimento
avançado, faz-se necessário que ele assimile muito bem os conceitos básicos. Sendo
assim, somente após o aprendizado dos conceitos de algoritmos e fundamentos de
lógica, o estudante pode travar contato com uma linguagem de programação concreta
para experimentar os conceitos [Santos e Costa 2006]. Estimular os alunos com aulas
dinâmicas e uso de ferramentas de auxílio podem ser uma solução para ajudar a elevar o
seu nível de compreensão.
4. Resultados
As Tabelas 1, 2 e 3 sumarizam as informações levantadas nesta pesquisa. O único
software, dos nove escolhidos, que não pudemos avaliar foi o AMBAP pois seu
download não estava mais disponível. Além disto, todos os avaliados são de plataforma
acessível e gratuita, sendo necessário apenas ter o JVM instalado na máquina para o
funcionamento do FutCode e do TBC-AED.
Tabela 1 - Características gerais das ferramentas avaliadas
Idioma Licença Preço
CodeMonster Inglês Freeware Grátis
FutCode Portugês Open Source Grátis
Guido VanRobot Inglês, Francês, Espanhol Open Source Grátis
KidsRuby Inglês, Francês, Espanhol Open Source Grátis
RobotProg Inglês e Francês Freeware Grátis
TBC-AED Português Freeware Grátis
Visual Alg Português Freeware Grátis
Web Portugol Português Open Source Grátis
Em relação aos Paradigmas de Programação destacamos o FutCode e o CodeMonster
como Orientado a Objetos e os demais de paradigmas Imperativo. A interação foi
classificada em textual, visual ou as duas opções e observamos que todas elas trabalham
com os conceitos básicos de programação, porém, o GuidoVanRobot é o único que não
aloca variáveis.
Tabela 2 - Características técnicas das ferramentas avaliadas
Plataforma Forma de Paradigma de Linguagem de
Interação Programação Programação
CodeMonster Web Textual e Visual Orient. a Objetos JavaScript
FutCode Java Textual e Visual Orient. a Objetos Java
Guido Windows, Textual e Visual Imperativa Própria
VanRobot Linux e
MacOS X
KidsRuby Windows, Textual e Visual Imperativa Ruby
Linux e
MacOS X
RobotProg Windows e Imperativa Própria
MacOS X
TBC-AED Web Visual Imperativa Própria
Visual Alg Windows Textual Imperativa Própria
Web Portugol Web Textual Imperativa Própria
Controle de
Aritméticas
Depuração
(variáveis)
Operações
Operações
Recursão
abstratos
Alocação
memória
Tipos de
passo-a-
Funções
(arrays)
Estr. de
vetorial
Lógicas
dados
passo
fluxo
CodeMonster Não SIM SIM SIM SIM SIM SIM SIM SIM Não
FutCode SIM SIM SIM SIM SIM SIM SIM SIM SIM Não
Guido VanRobot Não Não Não Não Não SIM SIM SIM Não SIM
KidsRuby Não SIM Não Não SIM SIM SIM Não Não Não
RobotProg Não SIM Não Não SIM SIM SIM SIM SIM SIM
TBC-AED Não SIM SIM SIM SIM SIM SIM SIM Não SIM
Visual Alg Não SIM SIM SIM SIM SIM SIM SIM SIM SIM
Web Portugol Não SIM SIM Não SIM SIM SIM Não Não SIM
5. Discussão
O mínimo que se espera de uma ferramenta de auxílio ao aprendizado de programação é
que ela aborde os conceitos de operações lógicas e estruturas de controle de fluxo, e
todas as ferramentas avaliadas atendem a este requisito. No entanto, nenhuma das
ferramentas avaliadas atendem à totalidade dos conceitos avaliados. Em particular, o
conceito de compilação é o menos trabalhado.
No geral, os resultados apresentados levantam as seguintes discussões:
Apenas metade das ferramentas avaliadas estão disponíveis em Português.
Embora o conhecimento da língua inglesa seja indubitavelmente necessário na
área de programação, o fim específico destas ferramentas é o aprendizado de
programação. Portanto, a língua pode apresentar-se como um empecilho a mais
na adoção de tais ferramentas por programadores iniciantes.
A maioria das ferramentas avaliadas utilizam linguagens de programação
próprias, isto é, projetadas para o fim específico do aprendizado dos conceitos
trabalhados na própria ferramenta. Isto levanta o questionamento sobre a
limitação destas ferramentas para o desenvolvimento de programadores, embora
este não seja de fato o propósito de algumas delas. Por outro lado, as ferramentas
que trabalham diretamente com alguma linguagem de programação comercial
(ex. Java ou Ruby), dada a sua complexidade inerente, podem encontrar
barreiras de programadores iniciantes.
O valor do conceito de compilação é subestimado pelas ferramentas de auxílio
ao aprendizado de programação em geral, embora não seja um conceito
complexo. Isso se dá pelo fato das ferramentas tentarem simplificar o
aprendizado diminuindo o caminho entre o código e o resultado do programa
produzido. Este conceito poderia ser trabalhado mesmo que nos níveis mais
avançados das ferramentas, podendo ajudar a desenvolver habilidades de
otimização de código nos programadores. No entanto, não é este o caso das
ferramentas avaliadas.
No que diz respeito às fases de aprendizado sugeridas por Gomes et al (2008), o
foco das ferramentas de auxílio ao aprendizado de programação é claramente na
fase 3: construção dos algoritmos, o que limita significativamente o
desenvolvimento das competências do programador.
Fundamentando-se nos resultados atingidos até o momento pelo nosso levantamento, é
possível sugerir uma categorização para as ferramentas que identifica o seu nível de
complexidade. Ferramentas nível iniciante são aquelas que focam nos conceitos mais
básicos e simples (operações aritméticas e lógicas, e estruturas de controle), utilizam
prioritariamente uma forma de interação visual, e trabalham apenas a construção de
algoritmos (ex. RobotProg e Guido VanRobot).
Ferramentas de nível intermediário seriam aquelas que trabalham mais
largamente os conceitos de programação (alocação de memória em variáveis e vetores,
tipos de dados abstratos e funções), trabalham com linguagens de programação reais, e
esclarecem a utilidade da programação (ex. CodeMonster e KidsRuby), e nível
avançado aquelas que abordam conceitos como compilação e recursão, e ainda
permitem ao programador iniciante o exercício amplo da solução de problemas em
domínios reais (ex. FutCode).
6. Conclusão
Apresentamos neste artigo, uma forma de contribuir para o aperfeiçoamento do ensino
em programação e compreendemos que ela precisa ser reavaliada. Por se tratar de
disciplinas sistemáticas, complexas e que requer um bom nível de assimilação de
conteúdos lógicos, é necessário que, tanto os alunos quanto os professores, possam
utilizar instrumentos que os ajudem na comunicação. O uso de ferramentas no início do
curso tem mostrado, na literatura, sua produtividade, pois permite que o estudante tenha
o contato com um ambiente de desenvolvimento bem próximo a que vão encontrar em
sua vida profissional. Motivar o estudante para um ambiente lúdico e estimulante que
utiliza de vários conceitos de programação numa abordagem gradual possibilita que eles
ganhem experiências em programação e possam tornar-se bons profissionais no futuro.
Dos softwares que selecionamos para análise observou-se que cada um em
particular trabalha com conceitos, porém, de forma isolada em alguns casos. A
integração de alguns conceitos em um só software aliado ao dinamismo e animação
poderia resultar numa forma de percepção mais clara e estimulante para o usuário.
Por fim, sugerimos um modelo de classificação para este tipo de software
organizado em três níveis: básico, intermediário e avançado. Este modelo pode não
somente habilitar uma comparação mais adequada entre softwares com objetivos mais
semelhantes, mas também habilitar uma adoção mais adequada a estudantes de acordo
com as suas características, interesses e metas de aprendizado.
A próxima etapa deste projeto é levantar requisitos para uma possível mudança
na forma de ensino das disciplinas de Introdução à Computação e Lógica de
Programação de uma instituição de nível superior da área de informação testando um
software e acompanhando os resultados com os alunos do primeiro período e
professores com o objetivo de diminuir as dificuldades dos estudantes iniciantes do
curso.
Referências
Almeida, E. S. ; Costa, E. B. ; Braga, J. D. H. ; Silva, K. ; Paes, R. B. ; Almeida, A.
(2002) “Ambap: Um Ambiente de Apoio ao Aprendizado de Programação”,
http://goo.gl/KSNmG, Dezembro 2012.
Barros, L.N.; Delgado, K. V.; Machion, A. C. G. (2004). “An ITS for programming to
explore practical reasoning”. http://goo.gl/z4f50, Janeiro 2013.
Goel, A. (2010). “Computer Fundamentals”. Pearson Education. ISBN 978-81-317-
3309-7.
Gomes, A., Henriques, J., Mendes, A. J. (2008). “Uma proposta para ajudar alunos com
dificuldades na aprendizagem inicial de programação de computadores”,
http://goo.gl/DGLXh, Dezembro 2012.
Hostins, H. ; Raabe, A. L. A. (2007). “Auxiliando a aprendizagem de algoritmos com a
ferramenta Webportugol”. http://goo.gl/Hwgz0, Dezembro 2012.
Lahtinnen, E.; Ala-Mutka, K.; Järvinen, H. M. (2005) “A study of the difficulties of
novice programmers”. Anais do ITiCSE '05 - 10th annual SIGCSE conference on
Innovation and technology in computer science education. p14-18. ACM New York,
NY, USA. DOI 10.1145/1067445.1067453.
ACM New York, NY, USA ©2005
Mota, M. P., Brito, S. R., Moreira, M. P. and Favero, E. L. (2009) “Ambiente Integrado
à Plataforma Moodle para Apoio ao Desenvolvimento das Habilidades Iniciais de
Programação”, http://goo.gl/dFHKS. Dezembro 2012.
Pereira, V. B. ; Diniz, P. D. B. ; França, A. C. C. (2011). “FutCode: Plataforma para
Aprendizado Interativo de Programação em Java.” http://goo.gl/KDok0. Janeiro
2013.
Physics Software (2005). “RobotProg”. Disponível em <http://goo.gl/xE0rp>. Acessado
em: Janeiro 2013.
Santos, R. P.; Costa, H. A. X. (2005). “TBC-AED: Um Software Gráfico para
Apresentação de Algoritmos e Estruturas de Dados aos Iniciantes em Computação e
Informática.” http://goo.gl/2XEuJ, Dezembro 2012.
Santos, R. P. ; Costa, H. A. X. (2006). “Análise de Metodologias e Ambientes de
Ensino para Algoritmos, Estruturas de Dados e Programação aos Iniciantes em
Computação e Informática.” http://goo.gl/RcCjk, Dezembro 2012.
SBC - Sociedade Brasileira de Computação (2003). Currículo de Referência da
Sociedade Brasileira de Computação para Cursos de Graduação em Computação e
Informática”. http://www.sbc.org.br. Dezembro 2012.
Souza, C. M. (2009). “VisuAlg - FERRAMENTA de Apoio ao Ensino de
Programação”. http://goo.gl/yIg94, Dezembro 2012.
The Hybrid Group (2011). “KidsRuby”. Disponível em <http://kidsruby.com/>.
Acessado em Janeiro 2013.