Saci - Ainda Outro Ambiente para o Ensino de Programacao PDF
Saci - Ainda Outro Ambiente para o Ensino de Programacao PDF
Saci - Ainda Outro Ambiente para o Ensino de Programacao PDF
Ricardo Anido
Abstract. This paper presents an integrated system for teaching and learning
computer programming. The system, named Saci, comprises a sub-system for
managing users, a sub-system for managing classes, and the main teaching en-
vironment which is implemented as a single-page Web application. The learning
environment incorporates tools for visualizing the class contents (video, suppor-
ting documents), a set of practical exercises, tools for editing the source-code,
executing and verifying the program correctness, and some simple help tools.
After a “class”, pre-built by a teacher, is loaded into a student’s Web browser,
all processing happens in the browser, with no configuration or installation nee-
ded in the student’s computer. A first course using the Saci system was deployed
mid-March by the Brazilian Olimpyad in Informatics.
1. Introdução
Uma multitude de projetos têm sido desenvolvidos para tornar linguagens e ambien-
tes de programação acessı́veis para uma audiência mais ampla, especialmente jovens
estudantes. Keheller apresenta um extenso survey de tais projetos, de 1960 até 2005
[Kelleher and Pausch 2005]. Também no Brasil o interesse se manifesta, com inúmeros
artigos nos dois principais eventos da comunidade brasileira de ensino em computação,
o Simpósio Brasileiro de Informática na Educação (SBIE) e o Workshop sobre Educação
em Computação (WEI).
Trabalho realizado com o apoio da Fundação de Amparo à Pesquisa do Estado de São Paulo (FAPESP),
processo 2014/26560-5.
A Olimpı́ada Brasileira de Informática (OBI) é uma competição promovida anu-
almente pela Sociedade Brasileira de Computação, em que alunos dos ensinos fundamen-
tal e médio devem resolver exercı́cios de programação (modalidade Programação, para
alunos com algum conhecimento em programação) ou exercı́cios de lógica (modalidade
Iniciação, para alunos sem conhecimento em programação). Atualmente, a grande mai-
oria dos participantes é da modalidade Iniciação, e a OBI tem interesse em que esses
alunos sejam incentivados a aprender programação para poderem participar da modali-
dade Programação.
Uma das abordagens possı́veis para expor uma grande quantidade de alunos à
programação de computadores é a criação de cursos programação on-line, gratuitos, que
possibilitem o ensino tanto de alunos iniciantes como de alunos interessados em tópicos
avançados. Os cursos deveriam ser de preferência no estilo de auto-aprendizagem guiada.
Para isso foi feita uma pesquisa para verificar a existência de ambientes disponı́veis que
atendessem aos requisitos da OBI.
Área de Área de
Área de Programa
Entrada Saída
Área de Trabalho
(a) (b)
A Área de Vı́deo contém o vı́deo da aula, com apresentações curtas sobre o tópico
da aula (5 a 10 min). O vı́deo é armazenado no YouTube, e o tocador embutido na
Área de Vı́deo é configurado com os controles normais da API do YouTube, podendo
ser expandido para visualização em tela cheia. Se a aula não contém recurso de vı́deo, o
painel da Área de Vı́deo não é mostrado.
A Área de Conteúdo contém “abas”, que podem ser selecionadas para mostrar o
seu conteúdo. A aba de Revisão contém textos e documentos associados ao conteúdo
da aula, como slides da apresentação do vı́deo, textos sobre o tópico, links para ou-
tras informações e trechos de programa. As abas de exercı́cios contêm um conjunto de
exercı́cios com o objetivo de fixar o conhecimento do tópico da aula. Finalmente, a aba
de Soluções contém exemplos comentados de soluções para cada um dos exercı́cios.
O componente principal do ambiente é a Área de Trabalho, que é similar à utili-
zada no Khan Academy CS, mas com a adição de uma Área de Entrada. O layout básico
da Área de Trabalho é mostrado na Figura 1(b).
Ela é composta por:
• Painel de Entrada (editável), onde são colocados os valores a serem usados como
entrada pelo programa
• Painel de programa, que contém um editor para edição do código-fonte do pro-
grama
• Painel de saı́da (não editável) onde é mostrada a saı́da do programa e outras men-
sagens do sistema.
O Editor usado no Painel de Programa é o CodeMirror [Haverbeke 2015]. Ele é
configurado para mostrar a sintaxe da linguagem usada (Javascript ou Python) com cores
e para detecção de erros de sintaxe. O módulo de mensagens de Javascript foi re-escrito
com todas as mensagens de erro traduzidas para português.
O aplicativo de página única foi implementado utilizando jQWidgets
[jQWidgets 2015], sob permissão. Um exemplo de página do ambiente SACI é mostrado
na Figura 2, com as Áreas de Vı́deo, Conteúdo e Área de Trabalho visı́veis.
• (a) Área de Vı́deo escondida, deixando visı́vel apenas a área de Conteúdo e a Área
de Trabalho.
• (b) Área de Conteúdo escondida (nesse caso esconde também a Área de Vı́deo),
deixando visı́vel apenas a Área de Trabalho.
• (c) Painel de Entrada escondido, deixando visı́vel apenas o Painel de Programa e
o Painel de Saı́da.
Na parte inferior da Área de Trabalho aparecem vários botões que ativam as fun-
cionalidades do ambiente:
(a) (b) (c)
• Salva: salva o conteúdo do Painel de Entrada no servidor, para uso posterior (fun-
cionalidade restrita a usuários registrados).
• Recupera: recupera uma entrada salva anteriormente do servidor (funcionalidade
restrita a usuários registrados).
• Limpa: remove todo o conteúdo do Painel de Entrada.
@(var\s+pontos\s*;)\s*(pontos\s*=\s*10\s*;)\s*(printf\s*\(\s*\"%d\\n\"\s*,\s*.*\))
Muito bem, está quase certo. Vejo que já declarou a variável, escreveu
o comando de atribuição e o comando printf com a
cadeia formatadora na forma correta. Mas a expressão do
comando printf parece não estar correta. Leia novamente o enunciado e
veja qual deve ser a expressão escrita pelo comando printf.
@var\s*\w+\s*;
Hmm, vejo que já declarou uma variável, mas o nome está diferente do
especificado. Leia novamente o enunciado e corrija o nome da variável.
@.*
Mais recentemente foi introduzida também uma funcionalidade para permitir que
os usuários possam avaliar cada atividade, atribuindo de uma a cinco estrelas. Como o
sistema não obriga o usuário a realizar a avaliação, o número de avaliações é relativamente
pequeno, mas ainda assim os resultados são animadores. A Tabela 2 mostra a distribuição
das avaliações até o momento:
Avaliação 1 2 3 4 5
Quantidade 41 16 38 52 331
Tabela 2: Avaliação do Curso de introdução à programação de computadores
4. Trabalhos futuros
Entre os trabalhos futuros previstos estão a continuidade do curso de Javascript, para
tópicos mais avançados, como algoritmos básicos em grafos e programação dinâmica,
além de um outro curso introdutório utilizando Python.
Também pretendemos investigar uma maneira de medir mais objetivamente o re-
sultado do aprendizado, e da utilização das ferramentas disponı́veis (Ajuda, Saı́da Espe-
rada) na construção da solução pelos alunos. Em outra dimensão, pretendemos também
investigar técnicas motivacionais e abordagens pedagógicas para inclusão em futuras au-
las.
Uma outra extensão planejada é a abertura do sistema para que qualquer profes-
sor possa criar cursos, aulas ou exercı́cios adicionais, no estilo do que já oferecem URI
OnLine Judge Academics [Tonin et al. 2013] e CodeChef for Schools [CodeChef 2015].
Alguns poucos professores já estão testando a criação de aulas extras, mas o sistema ainda
não está totalmente preparado para disponibilização para uso geral.
Referências Bibliográficas
Abelson, H. and Friedman, M. (2010). App Inventor – a view into learning about compu-
ters through building mobile applications. In Proceedings of the 2010 ACM SIGCSE
Symposium.
Begel, A. (1996). LogoBlocks: a graphical programming language for interacting with
the world. Electrical Engineering and Computer Science Department, MIT, Boston,
MA. Retrieved from http://research.microsoft.com/en-us/um/people/abegel/mit/begel-
aup.pdf.
Chaves, J. M. O., Castro, F. A., Rommel, W. L., A., L. M. V., and Ferreira, K. H. A.
(2013). Mojo: Uma ferramenta de auxı́lio à elaboração, submissão e correção de
atividades em disciplinas de programação. In Proceedings of the XXI WEI – Workshop
sobre Educação em Informática, pages 402–407.
CodeChef (2015). Codechef for schools. http://www.codechef.com/school.
CodeOrg (2015). Codeorg.com. http://code.org.
Gomes, C. C., S., L. D. H., Ribeiro, R. P., Almeida, E. S., and Brito, P. H. S. (2011). Uma
proposta para auxiliar alunos e professores no ensino de programação: O ambiente
aiip. In Proceedings of the XIX WEI – Workshop sobre Educação em Informática.
Gray, J., Abelson, H., Wolber, D., and Friend, M. (2012). Teaching cs principles with app
inventor. In Proceedings of the 50th ACM Annual Southeast Regional Conference.
Haverbeke, M. (2015). Codemirror. http://codemirror.net.
jQWidgets (2015). jqwidgets. http://jqwidgets.com.
Kelleher, C. and Pausch, R. (2005). Lowering the barriers to programming: A taxonomy
of programming environments and languages for novice programmers. ACM Compu-
ting Surveys, 37(2):83–137.
KhanAcademy (2015). Khan academy computer science.
http://www.khanacademy.org/computing/computer-programming.
Maloney, J., Peppler, K., Kafai, B., Y., Resnick, M., , and Rusk, N. (2008). Programming
by choice: urban youth learning programming with Scratch. ACM SIGCSE Bulletin,
40(1):367–371.
Noschang, L. F., Pelz, F., Jesus, E. A. J., and Raabe, A. (2014). Portugol studio: Uma
ide para iniciantes em programação. In Proceedings of the XXII WEI - Workshop sobre
Educação em Computação, pages 1287–1296.
Papert, S. (1980). Mindstorms: children, computers, and powerful ideas. Basic Books.
Resnick, M., Maloney, J., Monroy-Hernández, A., Rusk, N., Eastmond, E., Brennan, K.,
Millner, A., Rosenbaum, E., Silver, J., Silverman, B., and Kafai, Y. (2009). Scratch:
programming for all. Communications of the ACM, 52(11):60–67.
Tonin, N. A., Ferreira, C. E., and Bez, J. L. (2013). Uri online judge academic: A tool
for professors. In Proceedings of the International Conference on Advanced ICT, vo-
lume 1, pages 763–766.
Verdú, E., Reguereas, L. M., Verdú, M. J., Leal, J. P., Castro, J. P., and Queirós, R.
(2011). A distributed system for learning programming on-line. Computers & Educa-
tion, 58:1–10.