Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade de Bras´ılia Instituto de Cieˆncias Exatas Departamento de Cieˆncia da Computac¸a˜o Taxonomias de Exemplos para Aprendizagem de Programac¸a˜o Adam Victor Nazareth Brandizzi Yuri Moreira de Nun˜ez Monografia apresentada como requisito parcial para conclusa˜o do Curso de Computac¸a˜o — Licenciatura Orientador Prof. Dr. Homero Luiz P´ıccolo Bras´ılia 2009 Universidade de Bras´ılia — UnB Instituto de Cieˆncias Exatas Departamento de Cieˆncia da Computac¸a˜o Curso de Computac¸a˜o — Licenciatura Coordenador: Prof. Dr. Fla´vio Leonardo Cavalcanti de Moura Banca examinadora composta por: Prof. Dr. Homero Luiz P´ıccolo (Orientador) — CIC/UnB Prof.ª Dr.ª Maria de Fa´tima R. Branda˜o — CIC/UnB Prof.ª Dr.ª Carla Cavalcante Koike — CIC/UnB CIP — Catalogac¸a˜o Internacional na Publicac¸a˜o Brandizzi, Adam Victor Nazareth. Taxonomias de Exemplos para Aprendizagem de Programac¸a˜o / Adam Victor Nazareth Brandizzi, Yuri Moreira de Nun˜ez. Bras´ılia : UnB, 2009. 121 p. : il. ; 29,5 cm. Monografia (Graduac¸a˜o) — Universidade de Bras´ılia, Bras´ılia, 2009. 1. Exemplos, 2. Problemas, 3. Programac¸a˜o de Computador, 4. Ensino de Programac¸a˜o, 5. Sistemas Tutoriais Inteligentes, 6. Sistemas Tutorias Baseados na Web, 7. Taxonomia de Exemplos, 8. Tutorias CDU 004 Enderec¸o: Universidade de Bras´ılia Campus Universita´rio Darcy Ribeiro — Asa Norte CEP 70910-900 Bras´ılia–DF — Brasil Universidade de Bras´ılia Instituto de Cieˆncias Exatas Departamento de Cieˆncia da Computac¸a˜o Taxonomias de Exemplos para Aprendizagem de Programac¸a˜o Adam Victor Nazareth Brandizzi Yuri Moreira de Nun˜ez Monografia apresentada como requisito parcial para conclusa˜o do Curso de Computac¸a˜o — Licenciatura Prof. Dr. Homero Luiz P´ıccolo (Orientador) CIC/UnB Prof.ª Dr.ª Maria de Fa´tima R. Branda˜o Prof.ª Dr.ª Carla Cavalcante Koike CIC/UnB CIC/UnB Prof. Dr. Fla´vio Leonardo Cavalcanti de Moura Coordenador do Curso de Computac¸a˜o — Licenciatura Bras´ılia, 30 de junho de 2009 Agradecimentos Agradec¸o, acima de tudo, a meus saudosos pais, que me deram a melhor educac¸a˜o poss´ıvel; a meus tios Nataniel e Ana, que me apoiaram nos momentos dif´ıceis; a minhas irma˜s, que sempre me apoiaram, e a Juliana Vilela, que esteve ao meu lado durante grande parte do curso. Agradec¸o a` Universidade de Bras´ılia, pelo ensino de alta qualidade; aos professores do departamento, pelo conhecimento, te´cnico ou na˜o, transmitido e pela compreensa˜o e apoio. Agradec¸o especialmente ao professor Homero, pela orientac¸a˜o sa´bia, dedicada e paciente. Por fim, agradec¸o a todos os companheiros universita´rios que me apoiaram, especialmente ao amigo Pedro, que muito me ajudou no comec¸o do curso, e ao parceiro de projeto Yuri, cujo trabalho foi indispensa´vel. A todos citados, e aos que na˜o pude citar, muito obrigado. Adam Victor Nazareth Brandizzi Agradec¸o ao professor orientador, Homero, e parceiro de projeto, Adam, pela pacieˆncia e esmero. Agradec¸o especialmente a`s mulheres da minha vida - minha ma˜e, minha esposa, minha irma˜ e minha avo´ - que contribuiram a cada tempo com amor e compreensa˜o. Agradec¸o, enfim, a todos os amigos que aguardavam ansiosos por este feliz desfecho. Yuri Moreira de Nun˜ez iv Resumo Estudantes possuem diferentes ritmos de aprendizado. Para satisfazer suas diferentes necessidades, sa˜o necessa´rios materiais dida´ticos em diferentes n´ıveis de complexidade. Nesse trabalho, propomos um conjunto de exemplos de programac¸a˜o com va´rios n´ıveis de complexidade para alunos que estejam aprendendo a programar computadores. Esse conjunto de exemplos sera´ integrado ao Tutorial ICC, um sistema de aprendizagem auxi- liado por computador. Este e´ mais um passo para acrescentar adaptabilidade ao Tutorial ICC, aproximando-o dos sistemas tutoriais inteligentes. Palavras-chave: Exemplos, Problemas, Programac¸a˜o de Computador, Ensino de Pro- gramac¸a˜o, Sistemas Tutoriais Inteligentes, Sistemas Tutorias Baseados na Web, Taxono- mia de Exemplos, Tutorias v Abstract Students have different learning paces. In order to satisfy their different needs, educational materials at different complexity levels are necessary. In this work, we propose a set of programming examples with various complexity levels for students who are learning how to program computers. This set will be integrated to Tutorial ICC, a computer-assisted learning system. It is one more step to add adaptability to Tutorial ICC, approaching it to intelligent tutoring systems. Keywords: Computer Programming, Examples, Examples Taxonomy, Intelligent Tutor- ing Systems, Problems, Programming Teaching, Tutorials, Web-based Tutoring Systems vi Suma´rio 1 Introduc¸a˜o 1 1.1 Problemas e Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Resultados esperados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 O Ensino de Programac¸a˜o 4 2.1 A dificuldade de ensinar a programar . . . . . . . . . . . . . . . . . . . . . 4 2.2 Fatores cognitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Fatores pedago´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Sistemas Tutoriais Inteligentes 8 3.1 Arquitetura de um sistema tutorial inteligente . . . . . . . . . . . . . . . . 8 3.2 Categorias de sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 10 3.3 Vantagem dos sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 14 3.4 O papel do trabalho corrente . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4 Taxonomias de Exemplos 15 4.1 Taxonomia hiera´rquica de exemplos . . . . . . . . . . . . . . . . . . . . . . 15 4.2 Enunciados e soluc¸o˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.3 “Tira-teima” e roteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.4 Localizac¸a˜o na taxonomia . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5 Exemplos de Taxonomias 23 5.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 28 vii 5.2.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.3 A´rvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4 A´rvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.2Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.5 A´rvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.6 A´rvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.4 Comenta´rios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6 Concluso˜es e Trabalhos Futuros 74 Refereˆncias 75 A Taxonomias do Cap´ıtulo 2 do Tutorial ICC 78 A.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 A.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 A.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 79 A.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 79 B Taxonomias do Cap´ıtulo 4 do Tutorial ICC 81 B.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 B.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 B.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 82 B.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 82 viii B.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 B.3 A´rvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 B.4 A´rvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5 A´rvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 B.6 A´rvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 B.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 86 B.6.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 87 B.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 B.7 A´rvore 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 C Taxonomias do Cap´ıtulo 4 do Tutorial ICC 89 C.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 C.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 C.3 A´rvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 C.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 91 C.3.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 92 C.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 C.4 A´rvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 C.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 93 C.4.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 93 C.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 C.5 A´rvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 ix D Taxonomias do Cap´ıtulo 6 do Tutorial ICC 96 D.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 D.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 D.3 A´rvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 D.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 98 D.3.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 99 D.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 D.4 A´rvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 D.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 100 D.4.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 100 D.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 D.5 A´rvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 D.6 A´rvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.2Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 E Taxonomias do Cap´ıtulo 7 do Tutorial ICC 104 E.1 A´rvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 E.2 A´rvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 E.3 A´rvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 E.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 106 E.3.2 Numerac¸a˜o dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 107 E.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 x Lista de Tabelas 3.1 Categorias de STIs, segundo Murray (1999) . . . . . . . . . . . . . . . . . 13 xi Lista de Figuras 3.1 Componentes de um STI, segundo Beck et al. (1996) . . . . . . . . . . . . 10 4.1 Representac¸a˜o de taxonomia com duas caracter´ısticas remov´ıveis . . . . . . 16 4.2 Representac¸a˜o de taxonomia com treˆs caracter´ısticas remov´ıveis . . . . . . 16 4.3 Representac¸a˜o de taxonomia sem no´ sem caracter´ısticas . . . . . . . . . . . 17 4.4 Representac¸a˜o de uma taxonomia na˜o-ortogonal . . . . . . . . . . . . . . . 18 4.5 Screenshot da applet Java executando um “tira-teima” . . . . . . . . . . . 19 4.6 Exemplo de roteiro de “tira-teima” . . . . . . . . . . . . . . . . . . . . . . 20 4.7 Representac¸a˜o da localizac¸a˜o do aluno na taxonomia . . . . . . . . . . . . 21 xii Siglas e Acroˆnimos ACM Association of Computing Machinery AIS Association for Information Systems CALS computer-assisted learning1 CALS computer-assisted learning system EaD educac¸a˜o a distaˆncia2 HTML Hypertext Markup Language HTTP Hypertext Transfer Protocol IEEE Institute of Electrical and Electronics Engineers IEEE-CS IEEE Computer Society ICC Introduc¸a˜o a` Cieˆncia da Computac¸a˜o ITS intelligent tutoring system SAAC sistema de aprendizagem auxiliada por computador STBW sistema tutorial baseado em Web STI sistema tutorial inteligente UnB Universidade de Bras´ılia 1Tambe´m e´ comum a forma, para efeitos gerais equivalente nesta monografia, computer-aideld learning. 2Tambe´m e´ comum a forma, para efeitos gerais equivalente nesta monografia, ensino a distaˆncia. xiii Cap´ıtulo 1 Introduc¸a˜o A programac¸a˜o e´ comumente reconhecida como uma habilidade dif´ıcil de se aprender e, portanto, de se ensinar (Gomes e Mendes, 2007). Ale´m desse problema, a procura por formac¸a˜o em Cieˆncia da Computac¸a˜o, Engenharia de Software e outros cursos que exigem conhecimento de programac¸a˜o como base cresceu bastante a partir dos anos 90 (ACM, 2005, p. 10). Uma poss´ıvel soluc¸a˜o para o grande aumento da demanda dos cursos de programac¸a˜o e´ o uso dos chamados sistemas tutoriais baseados em Web (STBW), que teˆm mostrado bons resultados quando complementado por canais pelos quais alunos e professores podem se comunicar e esclarecer du´vidas (Brusilovsky et al., 1998, p. 2). A vantagem dos cursos baseados na Web para o problema de formac¸a˜o em maior escala e´ que esses cursos podem ser acessados de qualquer lugar por uma grande quantidade de alunos. Ale´m disso, cursos baseados em Web permitem que os estudantes aprendam os pontos ba´sicos de seus cursos sem exigir acompanhamento constante do professor, que pode se concentrar nas du´vidas mais complicadas e nos alunos com mais dificuldades, desde que o material on-line possa se adaptar aos estudantes e seus backgrounds (Brusilovsky et al., 1998, p. 2). Va´rios experimentos ja´ foram ou esta˜o sendo feitos para avaliar a viabilidade do uso de cursos baseados na Web para o ensino de programac¸a˜o, como, por exemplo, Chen (2005), Ferrandin e Stephani (2005), Carlson (2004) e dos Santos e Costa (2005). Esse presente trabalho pretende evoluir um sistema em funcionamento. Esse sistema e´ chamado Tutorial ICC e e´ utilizado no ensino de programac¸a˜o para as turmas de Introduc¸a˜o a` Cieˆncia da Computac¸a˜o da Universidade de Bras´ılia. Mais especificamente, nossa abordagem sera´ acrescentar alguma flexibilidade ao tu- torial. Nosso planejamento inicial e´ tornar Tutorial ICC na˜o exatamente um sistema tutorial inteligente (STI) no sentido estrito, mas tentar aplicar os conceitos inerentes a esse tipo de sistema de uma maneira ba´sica. Em especial, nosso foco sera´ oferecer um sistema de exemplos alternativos ao estudante. Essa e´ uma decisa˜o promissora porque ja´ foi obtido sucesso considera´vel com essa abordagem no ensino do uso de bibliotecas na pro´pria Universidade de Bras´ılia (P´ıccolo, 2006). 1 1.1 Problemas e Justificativa Embora programac¸a˜o seja uma das atividades fundamentais na Cieˆncia da Computac¸a˜o, muitos estudantes tem grandes dificuldades para aprender a programar (Jenkins, 2003; Gomes e Mendes, 2007). Por outro lado, a demanda por cursos que exigem conhecimento de programac¸a˜o teˆm crescido bastante (ACM, 2005). Desse modo, e´ de grande interesse que se consigam ferramentas educacionais que auxiliem os estudantes no processo de ensino-aprendizagem de programac¸a˜o. Tambe´m tem crescido o interesse em ferramentas que auxiliem o professor a ministrar cursos de programac¸a˜o a um nu´mero crescente de alunos; em outras palavras, e´ necessa´rio criar ferramentas que acrescentem escalabilidade aos cursos de programac¸a˜o. Tem-se tentado satisfazer a necessidade de escalabilidade no ensino de programac¸a˜o atrave´s de do uso de ferramentas tutoriais remotas, especialmente sistema tutorial baseado em Webs (STBWs). Entretanto, cursos remotos podem dificultar a aprendizagem do aluno, que na˜o contaria com o apoio constante de um professor. Uma poss´ıvel soluc¸a˜o para o problema da dificuldade de aprendizagem atrave´s de STBWs e´ permitir que tais tutoriais se adaptem ao ritmo e necessidade dos estudantes. Isso e´ poss´ıvel, atrave´s do uso de STIs. O Tutorial ICC e´, desde ja´, um STBW que evolui aos poucos para um STI. Este trabalho da´ mais um passo nessa direc¸a˜o, a saber, fornecer exemplos que possam ser utilizados em um STI. 1.2 Objetivos O objetivo geral deste trabalho e´ desenvolver um conjunto de taxonomias hiera´rquicas de exemplos para o ensino de programac¸a˜o para os alunos da disciplina Introduc¸a˜o a` Cieˆncia da Computac¸a˜o (ICC). Os objetivos espec´ıficos deste trabalho, por sua vez, sa˜o: 1. identificar conceitos e habilidades que estudantes de programac¸a˜o podem ter difi- culdade de apreender; 2. desenvolver exemplos, enunciados, programas e representac¸o˜es gra´ficas da execuc¸a˜o de programas que exercitem os conceitos e habilidades identificados. 3. desenvolver uma representac¸a˜o gra´fica das taxonomias hiera´rquicas, para auxiliar o aluno a se localizar em uma determinada taxonomia. 1.3 Metodologia Propusemos e implementamos uma se´rie de taxonomias de exemplos organizada hierarqui- camente em n´ıveis de dificuldade. Essa taxonomia foi influenciada tambe´m por pesquisas publicadas, mas em sua maior parte e´ a aplicac¸a˜o do conhecimento emp´ırico e longa 2 experieˆncia de professores de programac¸a˜o da Universidade de Bras´ılia (UnB). Ha´ uma taxonomia para cada cap´ıtulo atual do Tutorial ICC, exceto o primeiro e o u´ltimo (oitavo). Para desenvolver uma taxonomia, identificamosos conceitos e habilidades que estu- dantes de programac¸a˜o podem ter dificuldade de apreender em um determinado cap´ıtulo. Concebemos, enta˜o, problemas que exercitem cada um dos conjuntos de conceitos pro- postos. Para cada um desses problemas, desenvolvemos verso˜es simplificadas de modo a criar a´rvores de problemas em que cada problema exercita um subconjunto dos conjuntos de conceitos. Escrevemos, enta˜o, enunciados para cada um dos problemas, incluindo os problemas que exercitem todos os conceitos de um conjunto. Uma vez que tivemos um conjunto de enunciados que podiam apresentar os conceitos escolhidos, programamos soluc¸o˜es para os enunciados, em Pascal. Criamos tambe´m scripts que, aliados com uma applet em Java ja´ desenvolvida, permitem representar graficamente a execuc¸a˜o dos programas escritos. Por fim, integramos os enunciados, os programas e os scripts gerados para cada cap´ıtulo ao Tutorial ICC. Tambe´m desenvolvemos e implantamos uma representac¸a˜o gra´fica das taxonomias hiera´rquicas, para auxiliar o aluno a se localizar em uma de- terminada taxonomia. 1.4 Resultados esperados Ao final deste trabalho, temos uma taxonomia de exemplos implementada para os cap´ıtulos 2, 3, 4, 5, 6 e 7 do Tutorial ICC. Essas taxonomias sa˜o um primeiro passo para trabalhos futuros que envolvam a flexibilizac¸a˜o e automatizac¸a˜o da interface do Tutorial ICC em prol de torna´-lo cada vez mais dotado de inteligeˆncia. 3 Cap´ıtulo 2 O Ensino de Programac¸a˜o Embora programac¸a˜o seja uma das atividades fundamentais na Cieˆncia da Computac¸a˜o, muitos estudantes teˆm grande dificuldade para aprender a programar (Jenkins, 2003; Gomes e Mendes, 2007). Desse modo, e´ de grande interesse conseguir ferramentas educa- cionais que auxiliem no processo de ensino-aprendizagem de programac¸a˜o. Neste cap´ıtulo, apresentaremos algumas das questo˜es e dificuldades sobre ensinar a programar. 2.1 A dificuldade de ensinar a programar Aprender e ensinar a programar sa˜o tarefas dif´ıceis. Grande nu´mero de estudantes de Computac¸a˜o consideram muito dif´ıcil aprender programac¸a˜o, mesmo em etapas avanc¸adas do curso. Essa e´ uma situac¸a˜o preocupante para o ensino de Computac¸a˜o: programac¸a˜o e´ um componente ba´sico, ou mesmo uma ferramenta indispensa´vel para se compreender va´rias a´reas da disciplina. O ensino de programac¸a˜o e´ objeto de diversos estudos que buscam reduzir essa dificuldade, mas ha´ poucas evideˆncias de que se tenham conseguido avanc¸os significativos na aprendizagem (Jenkins, 2003). Va´rias razo˜es foram apontadas para essas dificuldades. Por vezes, afirma-se que o problema na˜o e´ que aprender a programar seja dif´ıcil em si, mas sim que certos alunos teˆm dificuldades, por na˜o terem algumas habilidades necessa´rias para programar bem desenvolvidas, como habilidades matema´ticas ou para soluc¸a˜o de problemas. Entretanto, Jenkins (2003) considera os resultados de pesquisas nesse sentido inconclusivos: enquanto alguns trabalhos de fato mostram alguma correlac¸a˜o entre o domı´nio de certas habilida- des e a maior ou menor facilidade em aprender a programar (por exemplo, Byrne e Lyons (2001)), outros estudos indicam que na˜o ha´ tal correlac¸a˜o (Jenkins e Davy, 1999). De qualquer forma, essas habilidades na˜o sa˜o necessariamente inatas, podendo ser desen- volvidas; Gomes e Mendes (2007), por exemplo, consideram como problema a falta de treinamento pre´vio do estudante em matema´tica e lo´gica, na˜o uma dificuldade inata; de fato, a escolha do estudante por um curso de Cieˆncia da Computac¸a˜o ou correlato e´ um ind´ıcio de que ele ja´ tem considera´vel interesse na a´rea de cieˆncias matema´ticas1. 1Temos constatado empiricamente que alguns estudantes escolhem o curso com uma visa˜o preliminar erroˆnea da Computac¸a˜o, e esses mesmos estudantes teˆm se´rias dificuldades em aprender a programar. 4 2.2 Fatores cognitivos Va´rios fatores cognitivos sa˜o relevantes para a maior ou menor facilidade na aprendizagem de programac¸a˜o. O primeiro fator sa˜o os estilos de aprendizagem. Estudantes aprendem de maneiras diferentes: estudando sozinho ou em grupo, estudando em detalhes ou su- perficialmente a disciplina. Va´rios componentes de uma disciplina podem exigir maneiras diferentes de se estudar. Usualmente, estudantes tendem a escolher os estilos que melhor lhes serviram previamente para aprender algo, mas esse estilo pode na˜o ser adequado para um determinado ponto do estudo de programac¸a˜o (Jenkins, 2003). Como exemplo, consideremos os estilos de aprendizagem classificados como aborda- gem aprofundada e abordagem superficial. A abordagem aprofundada e´ aquela na qual o estudante busca pela compreensa˜o do to´pico, enquanto a abordagem superficial e´ aquela na qual o estudo resume-se a pouco mais que memorizar as informac¸o˜es. Programac¸a˜o e´ uma atividade que exige o uso de ambas as abordagens: enquanto e´ necessa´rio um conhecimento mı´nimo, mesmo que vago, das regras le´xicas e sinta´ticas da linguagem de programac¸a˜o utilizada, uma compreensa˜o profunda da semaˆntica e dos conceitos abstra- tos sobre programac¸a˜o e´ exigido. No caso, na˜o so´ e´ necessa´rio que se utilize ambas as abordagens em va´rios pontos da disciplina; e´ exigido que ambas as abordagens sejam utilizadas ao mesmo tempo (Jenkins, 2003). Os estilos de aprendizagem podem tambe´m variar de acordo com os tipos psicolo´gicos. Alunos teˆm estilos de aprendizagem diferentes, que influenciam em seus me´todos e pre- fereˆncias de estudo. Alguns preferem pensar em termos mais abstratos, enquanto outros podem preferir conceitos mais concretos e aplicados; alguns alunos preferem me´todos sistema´ticos de estudos, enquanto outros “deixam-se levar” pelo tema (Keirsey, 1998). Ocorre que programac¸a˜o exige tanto racioc´ınio abstrato quanto concreto; por vezes, exige me´todo r´ıgido e, noutras, experimentac¸a˜o avulsa. Inclusive, ha´ problemas que sa˜o mais facilmente resolv´ıveis de uma forma que de outra. O estudante, pore´m, usualmente es- colhe explorar o tema da programac¸a˜o apenas atrave´s da maneira que mais lhe agrada, e tenta utilizar sua abordagem preferida sem considerar o cara´ter do problema. Uma pesquisa preliminar focando no estilo de aprendizagem do aluno, com poss´ıvel aplicac¸a˜o futura no Tutorial ICC, foi desenvolvido por Chaves Ju´nior e Bastos (2008). Outras pes- quisas podera˜o abordar as pra´ticas necessa´rias na aprendizagem de programac¸a˜o, dando um primeiro passo no trabalho sobre as diversas maneiras de estudar de cada tipo de estilo de aprendizagem. Outro fator importante — e problema´tico — no estudo de programac¸a˜o e´ a motivac¸a˜o. Enquanto va´rios alunos aprendem a programar por vontade pro´pria e interesse pessoal — em outras palavras, por motivac¸a˜o intr´ınseca —, outros estudantes o fazem em busca de uma carreira financeiramente renta´vel ou apenas para obter diploma em um curso superior qualquer — ou seja, por motivac¸a˜o extr´ınseca. Previsivelmente, alunos com mo- tivac¸o˜es intr´ınsecas apresentam um desempenho melhor em aprendizagem que alunos com motivac¸o˜es extr´ınsecas. Entretanto, a motivac¸a˜o extr´ınseca na˜o e´, de maneira alguma, Entretanto, tais estudantes sa˜o uma minoria e, afinal, va´rios dos estudantes que demonstram grande habilidade em diversas outras a´reas da Computac¸a˜o tambe´m teˆm dificuldades espec´ıficas em solucionar problemas com co´digo. 5 um empecilho para a aprendizagem, de modo que estudantes com tais interesses na˜o sa˜o “casos perdidos” (Jenkins, 2003). Ale´m disso, existem diversos “ bugs” conceituais que afetam a maneira como pro- gramadores iniciantes programam e leˆem programas. Por exemplo, e´ usual que o aluno imagine que o programa e´, em certo sentido, executado de uma vez so´ — o que e´ usu- almente chamado de “bug” de paralelismo; tambe´m ocorre de programadores iniciantes lereminstruc¸o˜es de co´digo subentendendo intenc¸o˜es e na˜o apenas seu significado (“bug” de intencionalidade) ou de escreverem co´digo que em seu racioc´ınio produza o efeito de- sejado, mas que possui menos semaˆntica que a necessa´ria (“bug” de egocentrismo) (Pea, 1986). A catalogac¸a˜o e estudo desses “bugs” ja´ vem de longo tempo e inclui artigos como Pea (1986) e Spohrer e Soloway (1986). 2.3 Fatores pedago´gicos Os professores de programac¸a˜o teˆm um grande desafio: ensinar uma disciplina extrema- mente jovem. O corpo de conhecimento sobre o processo dida´tico do ensino de Com- putac¸a˜o e´ ainda pequeno quando comparado a outras disciplinas mais bem estabelecidas, como A´lgebra e Ca´lculo. Isso e´ especialmente verdadeiro quando se trata de programac¸a˜o, uma atividade cheia de idiossincrasias e peculiaridades que a colocam no meio do caminho entre a A´lgebra e alguma engenharia. Entretanto, isso na˜o implica que na˜o temos base alguma para comec¸ar a desenvolver e propor um modelo de ensino de programac¸a˜o. Ja´ ha´ pesquisa na busca de uma metodo- logia confia´vel de ensino de programac¸a˜o, e muitas das razo˜es das dificuldades do ensino de programac¸a˜o ja´ sa˜o conhecidas, ao menos superficialmente. Por exemplo, va´rios cursos de programac¸a˜o tendem a dar eˆnfase no ensino da lingua- gem de programac¸a˜o, e na˜o na programac¸a˜o em si (Gomes e Mendes, 2007), ao ponto de va´rias instituic¸o˜es terem uma se´rie de cursos de “Programac¸a˜o”, cada um ensinando uma linguagem diferente. A escolha da linguagem de programac¸a˜o que suportara´ os exemplos de um curso comumente e´ guiada pela linguagem mais popular na indu´stria no momento, ao inve´s de considerar fatores dida´ticos (Jenkins, 2003). Isso pode ser problema´tico, dado que a linguagem de programac¸a˜o e´ uma notac¸a˜o e, portanto, pode fazer uma dra´stica dife- renc¸a na transmissa˜o de conceitos (Iverson, 1980). Por isso linguagens de programac¸a˜o de cara´ter dida´tico, como Pascal (Wirth, 1972) e Logo (Pea, 1983), e ambientes que reduzam as dificuldades do aluno sa˜o didaticamente importantes (Jenkins, 2003)(Gomes e Mendes, 2007). O contexto em que o estudante acaba de adentrar tambe´m dificulta a aprendizagem. E´ usual que o ensino de programac¸a˜o seja um dos primeiros cursos que um aluno de Computac¸a˜o (ou alguma a´rea relacionada ou dependente) tenha durante sua graduac¸a˜o. O aluno, inexperiente, ao lidar com ta˜o complexa disciplina, tem ainda mais dificuldades de aprender. Muitos autores consideram que o posicionamento de ensino de programac¸a˜o na grade curricular e´ excessivamente adiantado (Jenkins, 2003)(Gomes e Mendes, 2007)2. 2Nossa experieˆncia pessoal nos da´ uma visa˜o diversa: no´s, quando estudantes, ouvimos muitos cole- gas de turma reclamarem do quanto se demorava para aprender a programar e para chegar aos cursos 6 Por fim, podemos citar tambe´m a grande heterogeneidade de estudantes nas turmas de programac¸a˜o. Como o curso de programac¸a˜o e´ um dos primeiros a serem ministrados, ha´ em suas turmas estudantes dos mais diversos backgrounds e perfis. Como tais cursos na˜o raramente ainda seguem uma estrutura bastante tradicional de aula expositiva, seus professores na˜o dispo˜em de tempo e energias suficientes para atender pessoalmente cada um dos alunos. De fato, a falta de personalizac¸a˜o nos cursos e o desgaste do professor sa˜o apontadas por va´rios pesquisadores como causas significativas para mau desempenho de estudantes de programac¸a˜o (Jenkins, 2003)(Gomes e Mendes, 2007)(Lahtinen et al., 2005). 2.4 Proposta A ferramenta que pretendemos expandir — o Tutorial ICC — pode solucionar ou, ao menos, amenizar va´rios dos problemas que afligem os estudantes e professores de pro- gramac¸a˜o. A proposta do tutorial, a longo prazo, e´ tornar-se um sistema tutorial dotado de inteligeˆncia, objetivo para o qual esse trabalho oferece mais um pequeno passo. Para compreender como um sistema tutorial dotado de inteligeˆncia pode auxiliar o ensino de programac¸a˜o, precisamos ver, antes o que sa˜o sistemas tutoriais inteligentes. mais avanc¸ados e “pra´ticos”. Entretanto, esta e´ apenas uma evideˆncia anedo´tica: embora realmente te- nhamos conhecidos alguns estudantes que reclamassem dessa demora (especialmente em verso˜es antigas do curr´ıculo dos nossos cursos), na˜o sabemos quantos realmente reclamavam. Eis uma a´rea digna de pesquisa. 7 Cap´ıtulo 3 Sistemas Tutoriais Inteligentes Sistemas tutoriais inteligentes (do ingleˆs intelligent tutoring systems) sa˜o sistemas de aprendizagem auxiliados por computador (SAAC) que se adaptam, sem necessidade de cont´ınua intervenc¸a˜o humana, a`s necessidades e ao desempenho do aluno (Self, 1999). Esses sistemas sa˜o um caso especial dos sistemas de instruc¸a˜o auxiliada por computador (do ingleˆs computer aided instruction) que almejam utilizar tecnologias informa´ticas no processo de ensino (Freedman, 2000). Tais sistemas se popularizaram bastante nas escolas e empresas durante os anos 80 e 90, sendo utilizados para transmitir as mais variadas competeˆncias e conhecimentos (Murray, 1999). O Tutorial ICC evolui para adquirir, se na˜o o cara´ter de um sistema tutorial inteligente em todos os aspectos, ao menos algumas caracter´ısticas e func¸o˜es de sistemas tutoriais inteligentes, tornando-se um sistema tutorial dotado de inteligeˆncia. O corrente trabalho e´ mais um passo nessa direc¸a˜o. 3.1 Arquitetura de um sistema tutorial inteligente Um dos aspectos mais importantes de qualquer sistema computacional — inclusive de sis- temas tutoriais inteligentes — e´ a sua arquitetura. Va´rias arquiteturas ja´ foram propostas para sistemas tutoriais inteligentes mas, tradicionalmente, divide-se um sistema tutorial inteligente em treˆs mo´dulos: o mo´dulo especialista, o mo´dulo do estudante e o mo´dulo do tutor (Self, 1999). Ademais, a maioria das demais arquiteturas sa˜o apenas variac¸o˜es isoladas desse modelo. O mo´dulo especialista e´ responsa´vel por modelar o conhecimento a ser transmitido. Treˆs abordagens sa˜o poss´ıveis nesse caso: a criac¸a˜o de um mo´dulo “caixa preta”, um mo´dulo de “caixa de vidro” ou um mo´dulo de soluc¸a˜o de problemas. Um mo´dulo “caixa preta” na˜o codifica a inteligeˆncia humana, mas so´ o conhecimento. Desse modo, esse mo´dulo apenas pode fazer comparac¸o˜es entre o conhecimento do estudante e a repre- sentac¸a˜o do conhecimento interna ao sistema. Esse modelo e´ insuficiente para o ensino, de modo que sistemas tutoriais inteligentes que fazem uso de tais mo´dulos geralmente incrementam seu desempenho com os chamados mo´dulos de soluc¸a˜o de problemas, que decidem o comportamento do sistema para cada comportamento observado no mo´dulo 8 do estudante, com especial eˆnfase em enganos comuns. Alternativas aos mo´dulos “caixa preta”, os mo´dulos “caixa de vidro” sa˜o usualmente baseados em formalismos dos co- nhecimentos a serem apresentados. Seu desenvolvimento no geral depente do aux´ılio de engenheiros de conhecimento, que apo´s entrevistar especialistas, cria uma representac¸a˜o computacinal do conhecimento a ser transmitido (Burns e Capps, 1988). O mo´dulo do estudante tenta simular o comportamento de um estudante, de modo a poder prever qual o melhor passo a ser dado. No projeto desse mo´dulo, Burns e Capps (1988) chama a atenc¸a˜o para treˆs dimenso˜es a serem levadas em conta. Primeiro, e´ necessa´rio saber que informac¸o˜es temos sobre o comportamento do usua´rio do sistema. A maioria dos sistemas tutoriais inteligentes so´ tem acesso a`s respostas dadas pelo aluno a`s questo˜es propostas.1 Segundo, conve´m distinguir qual a categoria do conhecimento que se tenta transmitir; isto e´, e´ preciso ter em mente se queremos transmitir um conhecimento procedural (conhecimento sobre como executar uma tarefa), declarativo (conhecimento sobre fatos em geral, sem necessa´ria aplicac¸a˜o) ou mesmoqualitativo (habilidade em fazer julgamentos e tirar concluso˜es de modelos mentais). Por fim, Burns e Capps (1988) chama a atenc¸a˜o para a necessidade de se distinguir diferenc¸as entre o estudante e o mo´dulo especialista. Tradicionalmente, usa-se a representac¸a˜o do conhecimento do pro´prio mo´dulo especialista na implementac¸a˜o do mo´dulo do estudante; sistemas mais avanc¸ados, pore´m, tambe´m fornecem uma biblioteca de erros que permitem que o sistema reaja de maneira mais adequada a erros previstos (Burns e Capps, 1988). O mo´dulo do tutor e´ o mo´dulo responsa´vel pela integrac¸a˜o entre o mo´dulo espe- cialista e o mo´dulo do estudante. Ele e´ o real responsa´vel por escolher o fluxo de apresentac¸a˜o do conteu´do, assim como por dar sugesto˜es e apresentar correc¸o˜es de ma- neira ass´ıncrona. Existem diversas teorias instrucionais utilizadas na construc¸a˜o de tais mo´dulos (Burns e Capps, 1988). A esses componentes, Burns e Capps (1988) acrescenta o ambiente de instruc¸a˜o e a interface homem-ma´quina. O ambiente de instruc¸a˜o e´ o conjunto de ferramentas utilizadas no processo de transmissa˜o de conhecimento. Exemplos dessas ferramentas sa˜o jogos, gra´ficos, animac¸o˜es etc. Elas compo˜em um micromundo no qual o aluno explora as possibilidades do sistema tutorial inteligente. A interface homem-ma´quina e´ o conjunto de tecnologias utilizado para a comunicac¸a˜o entre o computador e o aluno. O Tutorial ICC, por exemplo, utiliza a interface Web atrave´s de uma interface de usua´rio gra´fica. Beck et al. (1996) propo˜em uma divisa˜o levemente diferente. O conhecimento do domı´nio estaria separado do mo´dulo especialista: enquanto o conhecimento do domı´nio se- ria uma base de dados de conhecimento a ser utilizado, o mo´dulo especialista representaria o conhecimento de uma pessoa especialmente ha´bil no tema estudado. O mo´dulo espe- cialista seria, enta˜o, responsa´vel por comparar a soluc¸a˜o dada pelo aluno com a soluc¸a˜o do especialista. Ale´m disso, Beck et al. (1996) apresentam tanto o ambiente de instruc¸a˜o 1Entretanto, va´rios sistemas tentam captar e processar informac¸o˜es sobre outros aspectos do compor- tamento do aluno como, por exemplo, seu estado emocional. Esses sistemas sa˜o denominados sistemas tutoriais inteligentes afetivos e podem tanto escolher a ordem de apresentac¸a˜o do conteu´do quanto enviar mensagens de motivac¸a˜o ou apoio ao estudante (Nkambou, 2006). Infelizmente, como Murray (1999) ressalta, sistemas baseados em hipermı´dia e Web, como o Tutorial ICC, na˜o dispo˜em de tais facilidades, ao menos na˜o de maneira trivial. 9 quanto a interface homem-ma´quina como um componente so´: o modelo de comunicac¸a˜o, que intermedeia a interac¸a˜o entre a ma´quina e o aluno. A figura 3.1 apresenta as interac¸o˜es entre os mo´dulos da arquitetura proposta por Beck et al. (1996). Modelo de estudante Mo´dulo Pedago´gico Modelo de Comunicac¸a˜o Conhecimento de Domı´nio Modelo de Especialista 6 6 � � � �> Z Z Z Z} - ff - Figura 3.1: Componentes de um STI, segundo Beck et al. (1996) Uma alternativa com alterac¸o˜es mais significativas e´ a de Gugerty (1997). Gugerty (1997) propo˜e a criac¸a˜o de sistemas tutoriais inteligentes sem mo´dulos de estudante. Tais sistemas seriam, enta˜o, ferramentas computacionais de aux´ılio a professores. Esses sistemas sa˜o chamados sistemas tutoriais inteligentes na˜o-diagno´sticos, em oposic¸a˜o aos sistemas tutoriais inteligentes tradicionais que fazem um diagno´stico do estado afetivo e/ou cognitivo do estudante. De fato, a experieˆncia tem mostrado que sistemas tutoriais inteligentes sa˜o caros e dif´ıceis de se desenvolver, embora bastante efetivos (Murray, 1999), e o mo´dulo de estudante e´ a parte mais dif´ıcil de se desenvolver (Burns e Capps, 1988). Ademais, o estado atual da tecnologia informa´tica ainda na˜o oferece uma largura de banda de informac¸o˜es sobre o usua´rio suficiente para uma avaliac¸a˜o significativa do estado cognitivo e afetivo do aluno e, no final das contas, os ganhos pedago´gicos do uso de sistemas tutoriais inteligentes na˜o-diagno´sticos sa˜o considera´veis (Gugerty, 1997). Embora esse tipo de sistema tutorial fuja do modelo tradicional, ele e´ bastante promissor e pode servir como refereˆncia em va´rios aspectos para o nosso sistema. Como se percebe, ha´ va´rias divergeˆncias sobre como organizar a arquitetura de um sistema tutorial inteligente. Entretanto, essas sa˜o, quase sempre, divergeˆncias superficiais: todos os modelos de sistemas tutoriais inteligentes, de certo modo, derivam da arquitetura seminal apresentada por Self (1974). 3.2 Categorias de sistemas tutoriais inteligentes Nosso primeiro passo sera´ tentar situar o Tutorial ICC no estado da arte dos sistemas tutoriais inteligentes. O que e´ interessante que o Tutorial ICC tenha? O que outros sistemas nos ensinam? Uma primeira diferenciac¸a˜o a ser feita e´ entre os sistemas tutoriais inteligentes shell e tool. Um shell e´ um framework para desenvolvimento de sistemas tutoriais inteligentes; ge- ralmente, e´ mais voltado para programadores de computadores, que podem customiza´-los, e sa˜o mais gene´ricos. Ja´ tools sa˜o mais voltados para o pu´blico em geral, fornecendo inter- faces que permitem na˜o programadores registrarem o conhecimento no sistema (Murray, 1999). Nessa categorizac¸a˜o, Tutorial ICC e´ claramente um tool. 10 Murray (1999) divide os sistemas tutoriais inteligentes em sete categorias na˜o ortogo- nais em func¸a˜o dos seus domı´nios de atuac¸a˜o e a´reas em que seu uso e´ mais adequado. As categorias, sumarizadas na tabela 3.1, sa˜o as seguintes: 1. Planejamento e sequenciamento de curr´ıculos Os sistemas tutoriais inteligentes de planejamento e sequenciamento de curr´ıculos definem unidades de instruc¸a˜o cujo fluxo de apresentac¸a˜o e´ decidido pelo sistema de acordo com as necessidades do aluno. Para o estudante, esses sistemas sa˜o muito semelhantes a sistemas de gerenciamento de cursos (como o Moodle); entretanto, os sistemas de planejamento e sequenciamento de curr´ıculos podem seguir quaisquer ordens mais adequadas de apresentac¸a˜o de conteu´dos. A ordem de apresentac¸a˜o de conteu´dos deve, pore´m, ser escolhida pelo sistema de forma automatizada, sem interfereˆncia humana, assim como deve se adequar especificamente ao desempenho de cada aluno. 2. Estrate´gias tutoriais Diz-se que um sistema tutorial inteligente tem foco em estrate´gias tutoriais (ou estrate´gias de ensino) quando tem a capacidade de decidir quais as melhores es- trate´gias de apresentac¸a˜o de conteu´do para o aluno. Esses sistemas sa˜o semelhantes aos sistemas de planejamento e sequenciamento de curr´ıculos, mas agem em um n´ıvel de abstrac¸a˜o mais baixo. Enquanto os sistemas de planejamento e sequencia- mento de curr´ıculos tomam deciso˜es sobre quais componentes do fluxo da mate´ria va˜o apresentar; sistemas de estrate´gias tutoriais escolhem o melhor momento para apresentar ferramentas de ensino, e na˜o so´ conteu´do. Por exemplo, um sistema que decida explicar mais detalhadamente um determinado to´pico do ensino e escolha quando apresentar uma determinada explicac¸a˜o ou um exemplo sa˜o sistemas de estrate´gias tutoriais. 3. Simulac¸a˜o de dispositivos e treinamento em equipamentos Va´rios sistemas tutoriais inteligentes buscam simular certos dispositivos para o estu- dante. A interac¸a˜o entre o estudante e o sistema mimetiza o uso de um determinado dispositivo ou equipamento. Desse modo, esses sistemas, categorizados como siste- mas de simulac¸a˜o de dispositivos ou sistemas de treinamento em equipamentos, per- mitem que o estudante possa compreender o funcionamento do dispositivo simulado sem ter de lidar com o dispositivo em si. Isso e´ especialmente u´til quando se quer ensinar o uso de equipamentos caros, fra´geis, perigosos ou inacess´ıveis. Tais sistemas tambe´m sa˜ointeressantes pois permitem que se deˆ uma resposta mais dida´tica ao estudante, ao inve´s do erro real gerado pelo dispositivo. 4. Sistemas especialistas e tutores cognitivos E´ bastante comum o uso de simulac¸o˜es cognitivas em sistemas tutoriais inteligentes. Sistemas tutoriais inteligentes que usam esse me´todo possuem um mecanismo de simulac¸a˜o de cognic¸a˜o que, baseado em regras, tentam criar um modelo de cognic¸a˜o do atual esta´gio de conhecimento do aluno. Esse modelo e´ utilizado pelo mo´dulo 11 especialista para definir o melhor fluxo de ensino. Esses sistemas sa˜o chamados de sistemas tutores cognitivos, ou sistemas de modelagem de cognic¸a˜o. Murray (1999) po˜e na mesma categoria tanto esses sistemas quanto os sistemas que fazem uso de sistemas especialistas para a resoluc¸a˜o de problemas. A diferenc¸a e´ que sistemas especialistas sa˜o utilizados no mo´dulo especialista para encontrar a soluc¸a˜o de problemas dida´ticos e na˜o para modelar o estado cognitivo do estudante. 5. Mu´ltiplos tipos de conhecimento Quanto um sistema tutorial inteligente baseia-se em uma determinada teoria do conhecimento para escolher a maneira mais adequada de apresentar uma parte do conteu´do, diz-se que o sistema possui mu´ltiplos tipos de conhecimentos. Por exem- plo, um sistema com mu´ltiplos tipos de conhecimento pode dividir o conhecimento a ser transmitido em treˆs categorias: fatos, conceitos e procedimentos. Cada com- ponente da habilidade maior a ser ensinada contaria com um me´todo espec´ıfico de ensino, dependendo de qual das treˆs categorias acima melhor modela o componente. Esses sistemas tendem a ser mais fa´ceis de configurar, mas sa˜o menos flex´ıveis. 6. Sistemas de propo´sito espec´ıfico Embora sistemas tutoriais inteligentes gene´ricos tenham atra´ıdo bastante interesse, tambe´m pode ser interessante projetar sistemas tutoriais inteligentes para a´reas es- pec´ıficas. Na˜o raramente, sistemas gene´ricos surgem do desenvolvimento de um sistema espec´ıfico que vai gradativamente se tornando parametriza´vel e reutiliza´vel. Por um lado, esses sistemas de propo´sito espec´ıfico atingem um pu´blico-alvo bem restrito; por outro lado, podem utilizar ferramentas dida´ticas espec´ıficas mais po- derosas. 7. Hipermı´dia adaptativa/inteligente Com a crescente sofisticac¸a˜o de sistemas de hipermı´dia (notadamente, a Web), um passo natural seria o desenvolvimento de sistemas tutoriais inteligentes baseados em hipermı´dia adaptativa (ou hipermı´dia inteligente). De fato, sistemas tutoriais inteligentes baseados na Web teˆm se tornado predominantes nessa a´rea de pesquisa. Esses sistemas permitem a apresentac¸a˜o, ordenac¸a˜o, filtragem etc. de links em func¸a˜o de va´rios aspectos da disciplina ou do desempenho do aluno, como fluxo de apresentac¸a˜o, dificuldade, adequac¸a˜o de pre´-requisitos etc. Comumente, tais sistemas sa˜o sistemas de planejamento e sequenciamento de curr´ıculo, ou sistemas de estrate´gias tutoriais com uma interface baseada em hipermı´dia. Embora essa classificac¸a˜o mais parec¸a a “enciclope´dia chinesa” de Jorge Luis Bor- ges (Foucault, 2002) que uma taxonomia tradicional, ela e´ muito u´til. O pro´prio Murray a descreve mais como um “saco de dicas” que uma “caixa de ferramentas”. De qual- quer forma, Tutorial ICC pode se encaixar mais ou menos bem em va´rias dessas ca- tegorias. Nosso objetivo inicial e´, a princ´ıpio, torna´-lo um sistema de planejamento e sequenciamento de curr´ıculos, ou, mais provavelmente, um sistema de estrate´gias tuto- riais; naturalmente, podemos torna´-lo ambos. Do mesmo modo, ja´ hoje o Tutorial ICC 12 Categoria Vantagens Desvantagens Variac¸o˜es Planejamento e sequenci- amento de curr´ıculos Executar regras para sequenciamento de mo´dulos e programas Pouca fidelidade ao modelo de estudante; representac¸a˜o superfi- cial de habilidades As regras podem ser fixas ou altera´veis pelo autor Estrate´gias tutoriais Estrate´gias tutoriais varia´veis dentro do mo´dulo; conjunto so- fisticado de primitivas e mu´ltiplas estrate´gias tutoriais Pouca fidelidade ao modelo de estudante; representac¸a˜o superfi- cial de habilidades Me´todo de estrate´gia de representac¸a˜o, fonte de expertise instrucional Simulac¸a˜o de dispositivos e treina- mento em equipamentos Tutoramento de iden- tificac¸a˜o de compo- nentes, operac¸a˜o e re- soluc¸a˜o de problemas; habilidades procedu- rais Estrate´gias instrutivas limitadas; modelagem de estudante limitada Fidelidade da si- tuac¸a˜o, facilidade de composic¸a˜o de tutorial Sistemas especialistas e tutores cognitivos Modelo do domı´nio de especializac¸a˜o mais profundo e executa´vel; facilidade de inclusa˜o de erros e comporta- mento de novato Dificuldade de cons- truc¸a˜o; limitac¸a˜o a ha- bilidades procedurais ou de soluc¸a˜o de pro- blemas; estrate´gias de instruc¸a˜o limitadas Modelos de habilidade baseados em cognic¸a˜o ou desempenho Mu´ltiplos tipos de conhecimento Representac¸a˜o clara e me´todo instrutivos pre´-definidos para fatos, conceitos e procedimentos Limitado a fatos, con- ceitos e procedimentos simples; estrate´gias tutoriais pre´-definidas Inclusa˜o de sequenci- amento curricular in- teligente; variac¸a˜o dos tipos de conhecimento e tarefas suportados Sistemas de propo´sito espec´ıfico Modelos de sistemas proveˆem uma grande ajuda na composic¸a˜o do conteu´do; um projeto ou princ´ıpio pedago´gico espec´ıfico pode ser enfatizado Ferramentas limitadas ao tipo de tutor que suportam; inflexibili- dade na representac¸a˜o e pedagogia Grau de inflexibili- dade Hipermı´dia adaptati- va/inteligente Acess´ıvel pela Web; uniformidade de in- terface de usua´rio; selec¸a˜o adaptativa e anotac¸a˜o de hiper- ligac¸a˜o Interac¸a˜o limitada; largura de banda de resposta de modelo de estudante limitada Foco em micro ou ma- crovisa˜o; grau de inte- ratividade. Tabela 3.1: Categorias de STIs, segundo Murray (1999) 13 fornece simulac¸o˜es de um computador, tornando-o um potencial sistema de simulac¸a˜o de dispositivos. Como programac¸a˜o exige o conhecimento de uma se´rie de fatos, concei- tos e habilidades, e´ tambe´m bem prova´vel que o Tutorial ICC se torne um sistema de mu´ltiplos conhecimentos. Como, afinal, o Tutorial ICC e´ um sistema Web, ele e´, desde ja´, um sistema de hipermı´dia, e o transformaremos em um sistema de hipermı´dia adapta- tiva. Estudando cada um dos cases apresentados em Murray (1999), podemos encontrar diversas ide´ias para nos auxiliar no nosso projeto. 3.3 Vantagem dos sistemas tutoriais inteligentes Os sistemas de aprendizagem auxiliada por computador (SAAC) fornecem uma se´rie de vantagens aos professores e estudantes de programac¸a˜o. Por exemplo, dado o aumento na demanda por cursos focados em Tecnologia da Informac¸a˜o, o nu´mero de aluno nas turmas de disciplinas de programac¸a˜o tende a crescer bastante, como comentamos no cap´ıtulo 1; SAACs permitem que as partes mais fa´ceis de assimilar do conteu´do dessas disciplinas sejam ministradas em massa para os alunos, permitindo que o professor se desgaste menos e foque mais em ajudar os alunos com mais dificuldades. De modo ana´logo, estes sistemas viabilizam cursos de educac¸a˜o a distaˆncia (EaD). Tais sistemas tambe´m permitem que o aluno possa estudar em seu pro´prio ritmo, algo que pode ser bastante positivo para a aprendizagem, conforme comentado na sec¸a˜o 2.3. O Tutorial ICC, sobre o qual trabalhamos, e´ um exemplo sistema de aprendizagem auxiliada por computador (SAAC). Entretanto, SAACs teˆm desvantagens. Uma destas desvantagens e´ a despersonalizac¸a˜o do ensino. Mesmo cursos tradicionais de programac¸a˜o na˜o alcanc¸am o ideal de cursos personalizados, com foco nas dificuldades dos alunos; SAACs tradicionais tendem a ser ainda mais problema´ticos.De modo ana´logo, estes sistemas na˜o se adaptam ao ritmo de aprendizagem e estilo de estudo dos estudantes. Te´cnicas de desenvolvimento de STIs podem ser utilizadas em SAACs para tentar su- perar essas desvantagens. De fato, va´rios STIs se adaptam ao ritmo, estilo e personalidade do aluno. A me´dio prazo, espera-se que o Tutorial ICC torne-se adapta´vel aos diversos n´ıveis de dificuldade dos alunos. 3.4 O papel do trabalho corrente Neste trabalho, nosso objetivo e´ prover ao Tutorial ICC uma se´rie de exemplos, orga- nizados em taxonomias de exemplos hiera´rquicas, que permitam que alunos em diversos esta´gios e ritmos de aprendizagem analisar cena´rios simples e complexos de acordo com sua pro´pria capacidade. Esses cena´rios devem conter um enunciado, uma soluc¸a˜o em co´digo-fonte Pascal e um script de execuc¸a˜o de “tira-teima”, que representa graficamente a execuc¸a˜o do programa, atrave´s de uma applet Java. Tambe´m faz parte do trabalho uma representac¸a˜o da posic¸a˜o do aluno na taxonomia. A maneira como essas tarefas foram desenvolvidas e´ apresentadas no cap´ıtulo 4. 14 Cap´ıtulo 4 Taxonomias de Exemplos Afora os exemplos desenvolvidos e integrados ao Tutorial ICC, um dos principais resulta- dos deste trabalho e´ o me´todo de desenvolvimento de uma forma de estruturar problemas que denominamos taxonomias hiera´rquicas de exemplos. O me´todo envolve uma se´rie de passos, seus pro´prios termos e algumas recomendac¸o˜es. Abaixo, seguem estes resultados. 4.1 Taxonomia hiera´rquica de exemplos Uma taxonomia e´, literalmente, a cieˆncia ou te´cnica de classificac¸a˜o (Houaiss et al., 2001, pp. 2680—2681). No nosso trabalho, uma taxonomia de exemplos e´ uma classificac¸a˜o de um conjunto de exemplos; por extensa˜o, uma taxonomia de exemplos e´ tambe´m um conjunto de exemplos organizados segundo uma determinada classificac¸a˜o. Por sua vez, uma taxonomia hiera´rquica de exemplos e´ uma taxonomia na qual os exemplos sa˜o orga- nizados de forma estruturada, como a´rvores. Tambe´m dizemos, neste trabalho, que uma taxonomia hiera´rquica e´ uma a´rvore de exemplos, de modo que e´ poss´ıvel que nos refi- ramos a alguma propriedade de a´rvores, mas se referindo a uma taxonomia hiera´rquica. Como trataremos apenas de taxonomias hiera´rquicas de exemplos, toda vez que usarmos o termo “taxonomia” o significado sera´ “taxonomia de exemplos hiera´rquica”. Cada taxonomia exemplifica o uso de um conjunto de caracter´ısticas remov´ıveis. Uma caracter´ıstica remov´ıvel e´ um conceito, te´cnica ou padra˜o que o estudante deve aprender. A raiz da a´rvore da taxonomia deve utilizar todas as caracter´ısticas remov´ıveis; seus no´s diretamente subordinados devem explorar subconjuntos diferentes das taxonomias da raiz, e os filhos desses no´s apresentara˜o subconjuntos dos subconjuntos que seus pais apresentam. Na pra´tica, no´s utilizamos taxonomias com duas ou treˆs caracter´ısticas remov´ıveis. Se a taxonomia tiver duas caracter´ısticas remov´ıveis, os no´s filhos da raiz devera˜o ter, cada um, uma caracter´ıstica. Parece natural que cada um desses no´s tenha ele mesmo um no´ filho sem nenhuma caracter´ıstica; entretanto, na˜o seria muito dida´tico fazer o estudante descer mais um n´ıvel nos exemplos para observar um exemplo que sequer apre- senta uma das caracter´ısticas da a´rvore. Deste modo, o no´ que na˜o conte´m nenhuma 15 das caracter´ısticas remov´ıveis torna-se filho do no´ principal. A figura 4.1 apresenta uma representac¸a˜o gra´fica dessa a´rvore. O travessa˜o e´ o ro´tulo do no´ sem caracter´ısticas. �� �� C1, C2 �� �� — � � � � � � � � � �� �� �� C1 �� �� C2 Z Z Z Z Z Z Z Z Z ZZ Figura 4.1: Representac¸a˜o de taxonomia com duas caracter´ısticas remov´ıveis Se a taxonomia tiver treˆs caracter´ısticas remov´ıveis, o exemplo raiz deve usar as treˆs. A raiz teria, usualmente, treˆs no´s filhos, cada um apresentando duas das treˆs caracter´ısticas remov´ıveis. Esse no´ filho e´, por sua vez, raiz de uma suba´rvore que tem a estrutura de uma taxonomia de duas caracter´ısticas remov´ıveis. A figura 4.2 apresenta uma representac¸a˜o gra´fica dessa a´rvore. O travessa˜o e´ o ro´tulo do no´ sem caracter´ısticas. �� �� C1, C2, C3 �� �� C1, C2 , , , , , , , , , �� �� C1, C3 �� �� C2, C3 l l l l l l l l l �� �� — � � � � � �� �� �� C1 �� �� C2 L L L L L LL �� �� — � � � � � �� �� �� C1 �� �� C3 L L L L L LL �� �� — � � � � � �� �� �� C2 �� �� C3 L L L L L LL Figura 4.2: Representac¸a˜o de taxonomia com treˆs caracter´ısticas remov´ıveis Se uma taxonomia tem uma das estruturas apresentadas acima, dizemos que e´ uma taxonomia totalmente preenchida. Embora tenhamos focado em gerar taxonomias total- mente preenchidas, nem sempre e´ poss´ıvel ou interessante “forc¸ar” o total preenchimento 16 de uma taxonomia. Por exemplo, muitas vezes o exemplo sem caracter´ısticas remov´ıveis em uma taxonomia pode ser simples demais e na˜o precisa ser apresentado. Isto ocorre co- mumente com taxonomias de treˆs caracter´ısticas, e a a´rvore resultante possui a estrutura representada na figura 4.3. A sec¸a˜o 5.2 apresenta uma taxonomia com esta estrutura. �� �� C1, C2, C3 �� �� C1, C2 , , , , , , , , , �� �� C1, C3 �� �� C2, C3 l l l l l l l l l �� �� C1 � � � � � �� �� �� C2 B B B B B BB �� �� C1 � � � � � �� �� �� C3 B B B B B BB �� �� C2 � � � � � �� �� �� C3 B B B B B BB Figura 4.3: Representac¸a˜o de taxonomia sem no´ sem caracter´ısticas Outro caso de a´rvore na˜o totalmente preenchida ocorrem quando ao menos uma ca- racter´ıstica remov´ıvel so´ pode ser apresentada se uma outra qualquer estiver presente. Por exemplo, considere uma a´rvore de treˆs caracter´ısticas remov´ıveis C1, C2 e C3 tal que, para C3 estar presente em um exemplo, e´ necessa´rio que ou C1 ou C2 tambe´m estejam presentes. Na˜o ha´ exemplos que exercitem apenas C3. A estrutura da taxonomia e´ a apre- sentada na figura 4.4, e a sec¸a˜o 5.4 apresenta uma taxonomia na qual esta configurac¸a˜o ocorre. Dizemos que essas caracter´ısticas remov´ıveis sa˜o caracter´ısticas na˜o-ortogonais entre si pois elas se influenciam; em contraposic¸a˜o, caracter´ısticas remov´ıveis que podem estar presentes em um exemplo independente das outras sa˜o chamadas de caracter´ısticas ortogo- nais entre si. Se uma taxonomia e´ constru´ıda apenas a partir de caracter´ısticas ortogonais — isto e´, todas as caracter´ısticas que geram a taxonomia sa˜o ortogonais entre si —, ela e´ dita uma taxonomia ortogonal ; caso contra´rio, e´ chamada de taxonomia na˜o-ortogonal. Em geral, nossa experieˆncia indicou que taxonomias na˜o-ortogonais sa˜o mais complexas de criar e, ao que tudo indica, menos claras, didaticamente falando. Enquanto e´ perfeita- mente razoa´vel construir taxonomias na˜o totalmente preenchidas, construir taxonomias na˜o-ortogonais na˜o e´ o ideal. 17 �� �� C1, C2, C3 �� �� C1, C2 , , , , , , , , , �� �� C1, C3 �� �� C2, C3 l l l l l l l l l �� �� C1 � � � � � �� �� �� C2 B B B B B BB �� �� C1 �� �� C2 Figura 4.4: Representac¸a˜o de uma taxonomia na˜o-ortogonal 4.2 Enunciados e soluc¸o˜es Dados os conceitos apresentados na sec¸a˜o 4.1, o processo para o desenvolvimento de ta- xonomias de problemas poˆde ser facilmente definido. Primeiro, defin´ıamos conjuntos de duas ou treˆs caracter´ısticas remov´ıveis — idealmente, conjunto de caracter´ısticas que usualmente aparecem de fato pro´ximas em problemas reais e que fossem caracter´ısticas ortogonais entre si. Para cada um desses conjuntos, elaboramosum enunciado que possi- bilite apresentar todas as caracter´ısticas, assim como enunciados que permitam apresentar apenas subconjuntos das caracter´ısticas, formando uma taxonomia hiera´rquica. Para cada um dos enunciados, elaboramos um pequeno programa que resolva o problema. A elaborac¸a˜o de enunciados apresenta uma se´rie de questo˜es. Por exemplo, qual e´ o melhor estilo: enunciados que apresentem problemas da vida real, ou enunciados abs- tratos? Conforme comentamos na sec¸a˜o 2.2, ha´ estudantes que lidariam melhor com um estilo, enquanto outros apreciariam mais o outro — e nem consideramos outros paraˆmetros que variam em func¸a˜o do tipo de personalidade! Nossa abordagem foi experimentar enun- ciados de ambos os estilos. Em breve, poderemos avaliar os resultados1. Outra questa˜o foi: como exercitar bugs conceituais dos estudantes? Na sec¸a˜o 2.2 comentamos que ha´ va´rios enganos que estudantes cometem recorrentemente. Esses en- ganos podem servir de guia para os exemplos, mas ainda ha´ o desafio de inseri-los em enunciados. Do mesmo modo, ha´ padro˜es de programac¸a˜o importantes e u´teis que os 1Um estilo que pode ser promissor sa˜o os enunciados baseados em abstrac¸o˜es com estado, especialmente jogos, como o Jogo da Vida, Snake ou Tetris. De fato, em conversas e observac¸o˜es anedo´ticas com calouros, notamos que esses problemas sa˜o especialmente apreciados. 18 estudantes devem conhecer, e deve haver enunciados que os apresentem. Em verdade, bugs conceituais e padro˜es importantes sa˜o boas caracter´ısticas remov´ıveis. Tambe´m se questionou qual deve ser a relac¸a˜o entre os enunciados de uma taxono- mia. Os enunciados devem ser independentes ou relacionados? Nossa hipo´tese e´ que os enunciados devem ser relacionados, e os mais simples devem ser verso˜es ou “passos” dos enunciados mais completos. Isto, supomos, mante´m o estudante no contexto mental do problema, facilitando sua compreensa˜o. Uma vez definidos os enunciados, devemos desenvolver os programas que os soluci- onam. A linguagem de programac¸a˜o em que foram solucionados foi aquela ja´ utilizada no Tutorial ICC: Pascal. Pascal e´ uma boa escolha tambe´m porque e´ uma linguagem dida´tica, como explicado na sec¸a˜o 2.3. Um desafio na criac¸a˜o dos enunciados e´: como criar um enunciado que “force” — isto e´, torne mais natural — o aluno a utilizar as caracter´ısticas que queremos? Depois de criarmos algumas taxonomias, notamos que esta e´ uma questa˜o secunda´ria: embora seja realmente interessante criar enunciados que levem intuitivamente a`s caracter´ısticas remov´ıveis escolhidas, sa˜o os desenvolvedores das taxonomias que escolhem como soluci- onara˜o os enunciados. Isto e´ interessante de se ter em mente porque, por vezes, alguns enunciados tornam-se pouco intuitivos para forc¸ar a soluc¸a˜o de um problema em uma determinada direc¸a˜o. Este esforc¸o, pore´m, na˜o e´ necessa´rio. A taxonomia apresentada na sec¸a˜o 5.2 e´ um bom exemplo pra´tico disso. Figura 4.5: Screenshot da applet Java executando um “tira-teima” 19 4.3 “Tira-teima” e roteiros Um dos recursos mais nota´veis do Tutorial ICC sa˜o os “tira-teimas”: representac¸o˜es gra´ficas da execuc¸a˜o de um programa. Esses “tira-teimas” sa˜o apresentados atrave´s de uma applet Java, apresentada na figura 4.5. Os “tira-teimas” sa˜o compostos de duas partes: um programa cuja execuc¸a˜o sera´ simulada e um script espec´ıfico que simulara´ a execuc¸a˜o. Denominamos tais scripts de roteiros. Cada linha de um roteiro inicia com um nu´mero inteiro; este nu´mero e´ o ı´ndice da linha do programa simulado que sera´ realc¸ada no programa quando a linha do roteiro for executada. Apo´s este ı´ndice, podem vir zero ou mais comandos separados por ponto- e-v´ırgula. Se na˜o houver nenhum comando a ser executado na linha, apenas o ponto-e- v´ırgula segue o nu´mero; se houver mais de um, os comandos devem vir entre chaves. Ha´, basicamente, comandos de declarac¸a˜o de varia´veis (que aparecem como caixas coloridas na applet de tira-teima, comandos de escrita (que imprimem um valor no console da applet e alterac¸a˜o de valores de varia´veis. A figura 4.6 apresenta o exemplo do roteiro utilizado para o exemplo apresentado na sec¸a˜o 5.4.3.1. 1; 3; 4 real a, b; 6; 7 writeln ("Digite a parte real:"); 8 {writeln ("3.0"); a = 3.0;} 9 writeln ("Digite a parte imaginaria:"); 10 {writeln ("0.0"); b = 0.0;} 11; 18; 19; 22; 23 writeln ("3.0 + 0.0i e um real nao -negativo."); 24; Figura 4.6: Exemplo de roteiro de “tira-teima” Um roteiro pode percorrer apenas um caminho dentro de um programa. Por exemplo, se ha´ um comando if com uma cla´usula else no programa, um roteiro pode passar apenas pela cla´usula then ou pela cla´usula else. Isto levanta uma questa˜o importante: como escolher o caminho que um roteiro deve percorrer em um programa? No´s utilizamos alguns crite´rios bem simples para escolher os caminhos. Um, bastante natural, foi: Se o programa apresenta apenas uma caracter´ıstica remov´ıvel, o caminho escolhido deve executar a caracter´ıstica. 20 O programa apresentado na sec¸a˜o 5.1.3.4 por exemplo, possui como caracter´ıstica remov´ıvel a presenc¸a da cla´usula else no comando if. O roteiro deste programa iria, enta˜o, passar pelo comando da cla´usula else, ao inve´s de passar pela cla´usula then. Outro crite´rio adotado foi: Dentre dois caminhos poss´ıveis, o roteiro deve passar pelo caminho mais complexo ou que gere mais sa´ıda para o console da applet. Este crite´rio foi adotado porque acreditamos que, quanto mais linhas de co´digo o estudante observar serem executadas, mais oportunidades havera´ para fixar conceitos. Ale´m disso, execuc¸o˜es sem sa´ıda podem ser bastante confusas: para o iniciante, e´ bem poss´ıvel que um programa que na˜o imprima nada parec¸a um programa que na˜o fac¸a nada. 4.4 Localizac¸a˜o na taxonomia Os va´rios exemplos sa˜o apresentados em pa´ginas HTML separadas, mas sentimos a ne- cessidade de prover ao estudante uma maneira de ele se localizar em uma determinada taxonomia. A soluc¸a˜o foi criar imagens de a´rvores, nas quais o exemplo em que o estu- dante se encontra e´ destacado atrave´s de cores. A figura 4.7 apresenta a representac¸a˜o de uma a´rvore. Figura 4.7: Representac¸a˜o da localizac¸a˜o do aluno na taxonomia 21 4.5 Resumo Dados os conceitos acima, o processo de criac¸a˜o de taxonomias para um cap´ıtulo pode ser resumido da seguinte maneira: 1. selecionar conceitos e estruturas relevantes — isto e´, caracter´ısticas remov´ıveis — a partir do tema do cap´ıtulo; 2. agrupar as caracter´ısticas remov´ıveis em conjuntos de duas ou treˆs caracter´ısticas. Idealmente, as caracter´ısticas sa˜o conceitualmente pro´ximas e ortogonais entre si; 3. criar, para cada conjunto agrupado, enunciados que levem a programas que apresen- tem subconjuntos das caracter´ısticas. Pode-se, eventualmente, na˜o criar enunciados para alguns subconjuntos que sejam triviais ou invia´veis. Os enunciados de uma taxonomia devem, idealmente, ser verso˜es mais simples ou mais completas de um problema; 4. para cada enunciado, desenvolver uma soluc¸a˜o, em linguagem Pascal; 5. para cada soluc¸a˜o, desenvolver um roteiro de “tira-teima”; 6. inserir os programas e roteiros em pa´ginas HTML do Tutorial ICC; 7. para cada pa´gina, criar uma representac¸a˜o gra´fica da taxonomia da qual a pa´gina faz parte, e inserir essa representac¸a˜o na pa´gina. Naturalmente, os passos na˜o precisam seguir forc¸osamente esta ordem, mas e´ usual que sejam seguidos assim. O cap´ıtulo 5 apresenta a aplicac¸a˜o deste processo em um cap´ıtulo do Tutorial ICC. 22 Cap´ıtulo 5 Exemplos de Taxonomias No tutorial ICC, implementamos sete conjuntos de taxonomias, um para cada um dos cap´ıtulos do tutorial, a partir do segundo1. O primeiro conjunto implementadoforam as taxonomias do cap´ıtulo 3. Este cap´ıtulo trata de estruturas de decisa˜o if-then-else e case-of. Julgamos os conceitos por tra´s destes comandos sofisticados o suficiente para antevermos alguns desafios da criac¸a˜o de taxonomias, mas simples o suficiente para que na˜o nos perdeˆssemos no seu desenvolvi- mento; por isso, cap´ıtulo 3 do tutorial foi escolhido para o desenvolvimento da primeira taxonomia. Chegamos a va´rias concluso˜es e questionamentos durante a criac¸a˜o desta taxonomia e, portanto, elegemos a taxonomia deste cap´ıtulo como um bom exemplo para ser analisado. 5.1 A´rvore 1 Na primeira a´rvore do cap´ıtulo 3, propomos ao aluno um problema que possa ser resol- vido com o comando if-then — assim sendo, todos os problemas da a´rvore devem ser solucionados utilizando a estrutura condicional. As caracter´ısticas remov´ıveis, nesta pri- meira a´rvore, sa˜o o uso do comando else e a presenc¸a de um comando composto, formado por va´rios outros comandos agrupados pelos delimitadores de blocos begin-end. Como ha´ duas caracter´ısticas remov´ıveis, essa a´rvore possui dois n´ıveis de hierarquia e quatro exemplos. 5.1.1 Caracter´ısticas remov´ıveis C1. uso de blocos begin-end C2. uso de else 1O primeiro cap´ıtulo e´, basicamente, para apresentac¸a˜o de conceitos sobre computadores. Nesse sentido, na˜o ha´ como criar uma taxonomia de exemplos de programac¸a˜o para o cap´ıtulo. 23 5.1.2 Numerac¸a˜o dos exemplos C1 C2 Exemplo • • 1 (subsec¸a˜o 5.1.3.1) – – 1.1 (subsec¸a˜o 5.1.3.2) • – 1.2 (subsec¸a˜o 5.1.3.3) – • 1.3 (subsec¸a˜o 5.1.3.4) 5.1.3 Enunciados e programas 5.1.3.1 Exemplo 1 Enunciado Uma companhia de seguros vende seguros de carros. O prec¸o de um seguro anual e´ 5%, ou 1/20 do prec¸o do carro. Entretanto, a companhia so´ vende seguros para pessoas com mais de 25 anos. Fac¸a um programa que leia o prec¸o do carro a ser segurado e a idade do motorista. Se o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor do seguro. Se o carro valer, por exemplo, R$ 20 mil, a mensagem sera´: ’Valor do seguro: R$ 1000.00. ’ Se o motorista na˜o tiver idade para contratar o seguro, imprima duas linhas. A primeira linha sera´: ’Voce nao pode contratar o seguro.’ Supondo que o motorista tenha 22 anos, a segunda linha sera´: ’podera contaratar em 3 anos.’ Soluc¸a˜o A soluc¸a˜o usada foi a seguinte program exemplo1; var idade : integer; preco : real; begin writeln(’Qual e a sua idade?’); readln(idade); writeln(’Qual e o preco de seu carro?’); readln(preco); 24 if idade >= 25 then writeln(’Valor do seguro: R$ ’, preco /20:2:2 , ’.’) else begin writeln(’Voce nao pode contratar o seguro.’); writeln(’Podera contratar em ’, 25 - idade , ’ anos.’); end; end. 5.1.3.2 Exemplo 1.1 Enunciado Uma companhia de seguros vende seguros de carros. O prec¸o de um seguro anual e´ 5%, ou 1/20 do prec¸o do carro. Entretanto, a companhia so´ vende seguros para pessoas com mais de 25 anos. Fac¸a um programa que diga se um potencial cliente dessa seguradora pode contratar um seguro. O programa deve ler a idade do cliente e, caso ele tenha idade para contratar o seguro, deve imprimir a mensagem: ’Voce pode contratar o seguro.’ Soluc¸a˜o A soluc¸a˜o usada foi a seguinte program exemplo1_1; var idade : integer; begin writeln(’Qual e a sua idade?’); readln(idade); if idade >= 25 then writeln(’Voce pode contratar o seguro.’); end. 5.1.3.3 Exemplo 1.2 Enunciado Uma companhia de seguros vende seguros de carros. O prec¸o de um seguro anual e´ 5%, ou 1/20 do prec¸o do carro. Entretanto, a companhia so´ vende seguros para pessoas com mais de 25 anos. Fac¸a um programa que diga se um potencial cliente dessa seguradora pode contratar um seguro. O programa deve ler a idade do cliente e, caso ele na˜o tenha idade para contratar o seguro, deve imprimir a mensagem: 25 ’Voce nao pode contratar o seguro.’ Ale´m disso, deve tambe´m informar quando o cliente tera´ idade para contratar o seguro. Supondo que o cliente tenha 22 anos, a mensagem sera´: ’Podera contratar em 3 anos.’ Soluc¸a˜o A soluc¸a˜o usada foi a seguinte program exemplo1_2; var idade : integer; begin writeln(’Qual e a sua idade?’); readln(idade); if idade < 25 then begin writeln(’Voce nao pode contratar o seguro.’); writeln(’Podera contratar em ’, 25-idade ,’ anos.’); end; end. 5.1.3.4 Exemplo 1.3 Enunciado Uma companhia de seguros vende seguros de carros. O prec¸o de um seguro anual e´ 5%, ou 1/20 do prec¸o do carro. Entretanto, a companhia so´ vende seguros para pessoas com mais de 25 anos. Fac¸a um programa que leia o prec¸o do carro a ser segurado e a idade do motorista. Se o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor do seguro. Se o carro valer, por exemplo, R$ 20 mil, a mensagem sera´: ’Valor do seguro: R$ 1000.00. ’ Se o motorista na˜o tiver idade para contratar o seguro, imprima a mensagem: ’Voce nao pode contratar o seguro.’ 26 Soluc¸a˜o A soluc¸a˜o usada foi a seguinte program exemplo1_3; var idade : integer; preco : real; begin writeln(’Qual e a sua idade?’); readln(idade); writeln(’Qual e o preco de seu carro?’); readln(preco); if idade >= 25 then writeln(’Valor do seguro: R$ ’, preco /20:2:2 , ’.’) else writeln(’Voce nao pode contratar o seguro.’); end. 5.1.4 Comenta´rios No exemplo 1, t´ınhamos de apresentar ambas as caracter´ısticas remov´ıveis. Na a´rvore ori- ginal, acrescentamos a caracter´ıstica C2 colocando blocos de comando tanto na cla´usula then quanto na cla´usula else. Entretanto, decidimos posteriormente que seria mais inte- ressante colocar o comando composto em apenas uma das cla´usulas: deste modo, espera-se que o aluno compreenda que e´ poss´ıvel ter um comando composto em uma das cla´usulas tendo um comando simples na outra cla´usula. Julgamos relevante inserir, sempre que poss´ıvel, esse tipo de assimetria nos problemas. Ale´m disso, decidimos colocar o comando composto na cla´usula else porque, no exemplo 1.2, o comando composto ja´ fora colocado em uma cla´usula then. 5.2 A´rvore 2 Nosso objetivo na segunda a´rvore do cap´ıtulo 3 e´ apresentar exemplos de aplicac¸a˜o, ao aluno, do uso dos operadores booleanos and, or e not. A a´rvore tem treˆs caracter´ısticas remov´ıveis, que sa˜o o uso do operador and, o uso do operador or e o uso do operador not. O exemplo maior utiliza as treˆs caracter´ısticas remov´ıveis e possui treˆs exemplos diretamente subordinados; cada um desses exemplos possui duas das caracter´ısticas remov´ıveis, e possuem dois exemplos subordinados, cada um exercendo uma caracter´ıstica remov´ıvel do exemplo superior. 27 5.2.1 Caracter´ısticas remov´ıveis C1. uso do operador and C2. uso do operador or C3. uso do operador not 5.2.2 Numerac¸a˜o dos exemplos c1 c2 c3 Exemplo • • • 2 (subsec¸a˜o 5.2.3.1) • • – 2.1 (subsec¸a˜o 5.2.3.2) • – • 2.2 (subsec¸a˜o 5.2.3.3) – • • 2.3 (subsec¸a˜o 5.2.3.4) • – – 2.1.1, 2.2.1 (subsec¸a˜o 5.2.3.5) – • – 2.1.2, 2.3.1 (subsec¸a˜o 5.2.3.6) – – • 2.2.2, 2.3.2 (subsec¸a˜o 5.2.3.7) – – – — (ver comenta´rios na subsec¸a˜o 5.2.4) 5.2.3 Enunciados e programas 5.2.3.1 Exemplo 2 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que va´ trabalhar em seu territo´rio satisfac¸a duas condic¸o˜es. A primeira condic¸a˜o e´ que o contratador do estrangeiro envie uma carta a` embaixada. Ale´m disso, o estrangeiro deve ter US$ 10 mil em uma conta do pa´ıs de origem ou ter um imo´vel no pa´ıs de origem. Fac¸a um programa que pergunte ao usua´rio se ele tem a carta do empregador, pergunte se ele tem US$ 10 mil reais em uma conta no pa´ıs de origem e pergunte se ele tem um imo´vel. Se o usua´rio na˜o tiver a carta ou alguma das
Compartilhar