SimProgramming:
uma abordagem pedagógica motivacional para a aprendizagem de
programação em turmas intermédias do ensino superior
Tese de Doutoramento em Informática
Ricardo Rodrigues Nunes
Sob orientação do Professor Doutor Hugo Paredes, do Professor Doutor Paulo Martins e do Professor Doutor Leonel Morgado
Departamento de Engenharias Escola de Ciências e Tecnologias Universidade de Trás-os-Montes e Alto Douro
i
Tese de Doutoramento em Informática
SimProgramming:
uma abordagem pedagógica motivacional para a aprendizagem de
programação em turmas intermédias do ensino superior
por
Ricardo Rodrigues Nunes
Orientadores
Professor Doutor Hugo Paredes Professor Doutor Paulo Martins Professor Doutor Leonel Morgado
Composição do Júri Presidente
Doutor José Boaventura-Cunha
Professor Associado com Agregação da Escola de Ciências e Tecnologia da Universidade de Trás-os-Montes e Alto Douro;
Vogais
Doutor António Fernando Vasconcelos Cunha Castro Coelho
Professor Associado com Agregação da Faculdade de Engenharia da Universidade do Porto;
Doutor João Manuel Pereira Barroso
Professor Associado com Agregação da Escola de Ciências e Tecnologia da Universidade de Trás-os-Montes e Alto Douro;
Doutor Leonel Caseiro Morgado
Professor Auxiliar com Agregação do Departamento de Ciências e Tecnologia da Universidade Aberta;
Doutora Ângela Margarida de Sousa Pereira
Professora Adjunta da Escola Superior de Turismo e Tecnologia do Mar do Instituto Politécnico de Leiria;
Doutor Arsénio Monteiro Reis
Professor Auxiliar Convidado da Escola de Ciências e Tecnologia da Universidade de Trás-os-Montes e Alto Douro;
Doutora Daniela Cristina Carneiro Pedrosa
Investigadora do Centro de Investigação em Didática e Tecnologia na Formação de Formadores da Universidade de Aveiro.
ii * * *
iii
Tese apresentada por Ricardo Rodrigues Nunes à Universidade de Trás-os-Montes e Alto Douro para cumprimento dos requisitos necessários à obtenção do grau de Doutor em Informática, sob a orientação do Prof. Doutor Hugo Paredes, Professor Auxiliar com Agregação na Universidade de Trás-os-Montes e Alto Douro, do Prof. Paulo Martins Doutor, Professor Auxiliar com Agregação na Universidade de Trás-os-Montes e Alto Douro, e do Prof. Doutor Leonel Morgado, Professor Auxiliar com Agregação na Universidade Aberta.
iv * * *
v
RESUMO
Os aprendizes de programação parecem não entender claramente a importância de escrever códigos bem estruturados a partir de estruturas pré-existentes, como frameworks, bibliotecas e interfaces de programação de Aplicações (API do inglês Application
Programming Interface). Este comportamento pode ocorrer devido ao fato de que em
situações de programação mais avançadas os estudantes precisam desenvolver outro conjunto de conhecimentos, técnicas e competências complexas. No âmbito da unidade curricular “Metodologias de Programação III” do segundo ano curricular dos programas de estudos da Engenharia em Informática e Tecnologias da Informação e Comunicação da Universidade de Trás-os-Montes e Alto Douro (Portugal), algumas das razões das dificuldades que os estudantes sentem na transição de nível de programação básico para o avançado são relacionadas ao tipo de abordagem pedagógica adotada e às suas estratégias e atitudes em relação à aprendizagem da programação. Na literatura, é reportado que as abordagens pedagógicas nem sempre são adequadas às necessidades dos estudantes para o desenvolvimento das competências e habilidades exigidas no mercado de trabalho. Por outro lado, os estudantes denotam dificuldades para conseguirem se dedicar, particularmente, por sentirem-se pouco motivados. Com o objetivo de desenvolver maior compreensão sobre este fenómeno e propor soluções para alguns dos problemas identificados durante o processo, foi desenvolvida uma abordagem pedagógica debruçada em questões sobre o incentivo a motivação dos estudantes durante o processo de aprendizagem de programação. A abordagem, denominada SimProgramming, foi desenvolvida através de três ciclos iterativos de uma investigação-ação sobre a transportação de teorias da motivação proeminentes para aprendizagem de programação de computadores no ensino superior, particularmente na transição da programação de nível iniciante para a programação avançada. A abordagem SimProgramming é baseada em quatro fundamentos conceituais: simulação de um ambiente empresarial para aprendizagem, aprendizagem ativa, aprendizagem situada e avaliação formativa. Estes fundamentos são basilares num processo dividido em quatro fases, onde os estudantes são
vi
analisados dados de múltiplas fontes, tais como questionários online, relatórios e entrevistas, e os resultados revelaram evidências promissoras sobre a aplicação da abordagem na transposição das teorias da motivação para o contexto desta investigação. As notas finais melhoraram e o número dos estudantes que submeteram regularmente suas tarefas aumentou. Inclusive, as perceções dos alunos sobre a abordagem SimProgramming foram muito positivas. A partir das reflexões sobre o processo desta investigação, conclui-se que a abordagem SimProgramming em sua aplicação ao ensino de programação de computadores em turmas intermédias é promissora e ainda apresenta potencial para ser usado em outros contextos educacionais.
Palavras-chave: Motivação para Aprendizagem; Abordagem Pedagógica; Abordagem SimProgramming; Programação de computadores; Ciências da Computação; Informática.
vii
ABSTRACT
Programming learners seem to underestimate the importance of writing well-structured code based on pre-existing frameworks, libraries, and Application Programming Interface (API), possibly because students in more advanced programming situations need to develop another set of complex knowledge, techniques, and skills. In the curricular unit titled “Methodologies of Programming III” during the second year of programs for Informatics Engineering and Information and Communications Technology at Portugal’s University of Trás-os-Montes and Alto Douro, some reasons for students’ difficulties with transitioning from basic to advanced programming relate to the type of pedagogical approach adopted as well as to their strategies for and attitudes toward learning programming. Literature on the topic has revealed that pedagogical approaches do not always meet students’ needs in their development of skills and abilities required by the labor market. Students also struggle to get involved, particularly due to lack of motivation. To elucidate those phenomena and propose solutions to some problems identified in the process, a pedagogical approach, called SimProgramming, was developed to encourage students’ motivation while learning programming. Developed during three iterative cycles of action research on translating prominent theories of motivation for the study of computer programming in higher education, particularly in transitions from beginner to advanced programming, SimProgramming has four conceptual foundations - the simulation of a business environment for learning, active learning, situated learning, and formative evaluation - integrated into a process of four phases in each of which students are challenged by specific activities. Data from multiple sources, including online questionnaires, reports, and interviews, were collected and analyzed, and results regarding the approach’s applicability in translating theories of motivation for the study of computer programming in higher education, were promising. Not only did students’ final grades improve, but the number of students who regularly submitted assignments increased as well, and students' perceptions of SimProgramming were highly positive. Reflections on the process of the investigation suggest that SimProgramming is clearly applicable for
viii other educational contexts as well.
Keywords: Motivation to Learn; Pedagogical Approache; SimProgramming Approache; Computer Programming; Computer Science; Informatics.
ix
DEDICATÓRIA
“Temos de nos tornar na
mudança que queremos ver.”
Mahatma Gandhi
Ao amor da minha vida, Alessandra Moreira Nunes, pelo
amor, incentivo e apoio incondicional em todos os momentos
deste projeto.
Aos meus filhos, Ricardo Rodrigues Nunes Junior e Pedro
Augusto Breda Moreira Nunes, que amorosamente me
ensinam a ser pai.
À minha mãe, Eloisa Rodrigues Nunes, que dignamente me
apresentou o caminho da persistência e honestidade.
Sem vocês nenhuma conquista valeria a pena.
DED
x
* * *
xi
AGRADECIMENTOS
Aos meus Orientadores Hugo Paredes, Pedro Martins e Leonel Morgado. Ao Professor Benjamim Fonseca. Aos Colegas Ana Margarida Maia, Daniela Pedrosa e Gonçalo Matos. A Todos os Alunos e Professores que participaram deste projeto. A Universidade de Trás-os-Montes e Alto Douro (UTAD). Ao Centro de Sistemas de Informação e de Computação Gráfica (CSIG) do Instituto de Engenharia de Sistemas e Computadores, Tecnologia e Ciência (INESC TEC). A Fundação para a Ciência e Tecnologia (FCT).
xii * * *
xiii
Este projeto foi financiado pela Fundação para a Ciência e Tecnologia (FCT), através da atribuição da Bolsa de Doutoramento com a referência SFRH/BD/91309/2012. E, teve o apoio do Centro de Sistemas de Informação e de Computação Gráfica (CSIG) do Instituto de Engenharia de Sistemas e Computadores, Tecnologia e Ciência (INESC TEC).
xiv * * *
xv
1INTRODUÇÃO ...1
1.1 Problema e questão da investigação ...4
1.2 Objetivos da investigação ...5
1.3 Contexto da investigação ...6
1.4 Estrutura de apresentação da tese ...10
2 APRENDIZAGEM DE PROGRAMAÇÃO DE ALUNOS INTERMÉDIOS ...13
2.1 Do aluno iniciante a programador especialista ...13
2.2 Transição do aluno de programação básica para avançada ...21
3 MOTIVAÇÃO PARA APRENDIZAGEM ...29
3.1 A motivação e seus motivos ...29
3.2 Teorias da motivação para aprendizagem ...31
3.2.1 Objetivos de realização ...31 3.2.2 Interesse ...34 3.2.3 Expectativa-Valor ...35 3.2.4 Atribuições causais ...38 3.2.5 Autoeficácia ...40 3.2.6 Autodeterminação ...44
3.3 Motivação para aprendizagem das engenharias ...46
4 METODOLOGIA ...55
4.1 Apresentação metodológica ...55
4.2 Paradigmas de investigação na educação em engenharias ...56
4.2.1 Positivismo ...58
4.2.2 Pós-positivismo ...58
4.2.3 Interpretativismo ...60
4.2.4 Sociocrítico ...61
4.2.5 Pós-modernismo ...63
4.3 Múltiplas fontes e triangulação de dados ...64
4.4 Investigação-ação como método de investigação ...65
4.5 Estrutura desta investigação-ação ...68
4.6 Métodos de recolha e análise de dados ...70
4.7 Método de Explicitação do Discurso Subjacente (MEDS) ...72
4.8 Suporte computacional ...75
4.8.1 SIDE da UTAD ...76
xvi
5 CICLOS DESTA INVESTIGAÇÃO-AÇÃO ...83
5.1 Primeiro ciclo de investigação-ação (2010 – 2011) ...83
5.1.1 Abordagem pedagógica ...84
5.1.2 Primeiro ciclo: etapa planear ...89
5.1.3 Primeiro ciclo: etapa agir ...98
5.1.4 Primeiro ciclo: etapa observar ...102
5.1.5 Primeiro ciclo: etapa refletir ...107
5.2 Segundo ciclo de investigação-ação (2011 – 2012) ...110
5.2.1 Segundo ciclo: etapa planear ...111
5.2.2 Segundo ciclo: etapa agir ...116
5.2.3 Segundo ciclo: etapa observar ...128
5.2.4 Segundo ciclo: etapa refletir ...133
5.3 Terceiro ciclo de investigação-ação (2012 – 2013) ...136
5.3.1 Terceiro ciclo: etapa planear ...136
5.3.2 Terceiro ciclo: etapa agir ...142
5.3.3 Terceiro ciclo: etapa observar ...150
5.3.4 Terceiro ciclo: etapa refletir ...162
6 CONCLUSÕES ...165
6.1 Contributos desta investigação ...165
6.2 Abordagem do SimProgramming ...166
6.2.1 Fundamentos conceituais ...166
6.2.2 SimProgramming em ação ...175
7 REFLEXÕES FINAIS ...179
7.1 Limitações desta investigação ...179
7.2 Trabalhos futuros ...181 REFERÊNCIAS ...183 206 ANEXOS ...207 Anexo 1 ...207 Anexo 2 ...217 Anexo 3 ...218 Anexo 5 ...220
xvii Anexo 8 ...223 Anexo 9 ...224 Anexo 10 ...225 Anexo 11 ...227 Anexo 12 ...229 Anexo 13 ...230 Anexo 14 ...231 Anexo 15 ...232
xviii
xix
Tabela 1: Conhecimento e disciplinas relacionadas a MPIII ...8
Tabela 2: Resumo dos principais aspetos das teorias da motivação para aprendizagem ...49
Tabela 3: Lista dos problemas atribuídos às equipas de alunos ...92
Tabela 4: Guia estrutural do processo fornecido pela equipa docente no primeiro ciclo ...95
Tabela 5: Grupos com atividades em todas as fases do projeto no primeiro ciclo ...103
Tabela 6: Resumo do trabalho desenvolvido por cada grupo no primeiro ciclo ...105
Tabela 7: Guia estrutural do processo fornecido pela equipa docente no segundo ciclo ...112
Tabela 8: Resumo do trabalho desenvolvido por cada grupo no segundo ciclo ...131
Tabela 9: Resumo do trabalho desenvolvido por cada grupo no terceiro ciclo ...155
xx
xxi
Figura 1: Componentes do constructo expectativa-valor baseado em Bzuneck et al. (2014) e Eccles e Wigfield (2002) ...37 Figura 2: Expressão atualizada para avaliação da UC do primeiro ciclo de investigação ...97 Figura 3: Locais usados pelos estudantes para se comunicarem com a comunidade ...106 Figura 4: Expressão atualizada para avaliação da UC do segundo ciclo de investigação ...140 Figura 5: Organograma do SimProgramming ...141
xxii * * *
1
INTRODUÇÃO
A motivação é um tema de grande importância para a aprendizagem de programação de computadores. É muito comum ouvir professores em
universidades fazerem questões do tipo: “como posso motivar os estudantes para aprenderem programação?”, “o que posso fazer para os estudantes participarem mais das minhas aulas de programação?”, “o que fazer para incentivar os estudantes a envolverem-se com programação?” etc. Estas e outras questões são de interesse de muitos investigadores da comunidade científica da educação em engenharias (Ibrahim et al., 2017;; Lucke et al., 2017;; Silva et al., 2017;; Borras-Gene et al., 2016) e em cursos da área da Informática, como, por exemplo, em Ciência da Computação (Dicheva et al., 2015;; Hao et al., 2017, Jaipal-Jamani & Angeli, 2017;; Alario-Hoyos et al., 2017).
Em paralelo, o processo de ensino e aprendizagem em programação é considerado, pelas principais associações da área, Association for Computer Machinery (ACM) e IEEE Computer Society (IEEE CS), uma questão relevante e desafiadora em Ciências da Computação e áreas afins. Especificamente, já referiram no seu relatório de 2008, sobre revisão dos currículos de Ciência da Computação, que “there is wide recognition that a considerable amount of work
is needed to discover better and more effective ways of presenting the discipline of computing” (Cassel et al., 2008), enfatizando a necessidade de adequar os
currículos de informática não só às alterações tecnológicas, mas também aos
2
novos desenvolvimentos pedagógicos: “Institutions (...), must recognize the
importance of remaining abreast of progress in both technology and pedagogy”
(Cassel et al., 2008). Tal questão continuou relevante no seu relatório de 2013, inclusive com a identificação de que “there are many novel, interesting, and
effective ways to combine topics from the Body of Knowledge into courses”
(ACM/IEEE-CS, 2013).
Tradicionalmente, as preocupações de investigação no campo da
aprendizagem de programação de computadores centraram-se nas dificuldades dos estudantes iniciantes e na compreensão sobre os programas por parte dos especialistas: pouca atenção tem sido dada para auxiliar os alunos a
progredirem da programação básica para programação avançada (Peng et al., 2017;; Wang & Hwang, 2017;; Robins et al., 2003). Durante os cursos de
introdução a programação, normalmente os alunos tornam-se capazes de desenvolver pequenos programas, bem como adaptar e combinar pedaços de código existente, mas eles não entendem claramente a importância de escrever código bem estruturado a partir de estruturas pré-existentes, como frameworks, bibliotecas e Interfaces de Programação de Aplicações (API do inglês
Applications Programming Interfaces) (Jenkins, 2002). Em situações de
programação mais avançadas - por exemplo, envolvendo o uso de estilos arquitetónicos como o Model-View-Controller (MVC) (Curry & Grace, 2008;; Krasner & Pope, 1988) - os alunos precisam desenvolver um conjunto de habilidades complexas (Jenkins, 2002). Ademais, além das habilidades de programação necessárias para aplicar tais melhores práticas, durante o
3
desenvolvimento de sistemas, os alunos também precisam desenvolver
habilidades sociais para colaborar com outros desenvolvedores como parte do processo de trabalho em equipa para o desenvolvimento de sistemas de
software grandes e complexos.
Nas unidades curriculares relacionadas à programação de nível intermédio, nomeadamente Licenciatura em Engenharia Informática e
Tecnologias da Informação e Comunicação da Universidade de Trás-os-Montes e Alto Douro (UTAD), encontram-se regularmente estudantes que conseguem criar pequenos programas a partir do zero ou adaptam e combinam partes de códigos pré-existentes. Porém, quando desafiados a implementar em situações mais avançadas de programação, tais estudantes parecem não encontrar motivação e não percebem os benefícios a longo prazo da organização do código em formas mais estruturadas e geríveis. Quando os estudantes chegam a este nível médio de programação, não estão inteiramente motivados a dispor dos benefícios a longo prazo de um código mais organizado. Esta realidade, se não for atacada até o final da graduação, os deixará despreparados para o mercado de trabalho. Assim, o principal objetivo de investigação aqui
apresentado é atingir a este problema. Dessa forma, é levantada a hipótese de que os alunos não são motivados e não reconhecem a importância de uma melhor organização do código devido à sua inexperiência com abordagens de trabalho baseados em equipas envolvendo o desenvolvimento de software a longo prazo.
4
Nesta tese, é postulado que os ambientes de aprendizagem baseados em comunidades de prática podem permitir que os alunos se tornem motivados e aproveitem a experiência de programadores experientes (profissionais) para reconhecer o valor de uma melhor organização de código. Nesta perspetiva, os fatores pessoais, comportamentais e ambientais estão relacionados de forma dinâmica e influenciam os sentimentos dos alunos em relação às habilidades necessárias para superar os desafios que surgem durante a aprendizagem (Slavich & Zimbardo, 2012;; Pritchard & Woollard, 2010). Durante esta
investigação, os fatores sociais e cognitivos dos estudantes são levados em consideração.
Embora esta investigação tenha características que poderiam enquadrá-la em ciências da educação, geralmente cada área do conhecimento é responsável pela sua própria didática. Inclusivamente, as duas principais associações de Ciência da Computação e áreas afins, ACM e IEEE CS, consideram o processo de ensino e aprendizagem de programação uma questão relevante e
desafiadora na área da informática (ACM/IEEE-CS, 2013;; Cassel et al., 2008).
1.1 Problema e questão da investigação
O problema geral abordado na investigação apresentada nesta tese de doutoramento é a dificuldade que os alunos têm na transição da programação de computadores básica para avançada. Durante esta transição os alunos
parecem não valorizar os benefícios que um código bem estruturado pode trazer a longo prazo. É difícil para os alunos verem o valor em fazer um código
5
pensando em sua arquitetura, principalmente por poderem fazer seus programas sem este esforço extra.
A motivação tem sido investigada como fator importante na
aprendizagem. Há conhecimento acumulado sobre isto e recomendações de práticas. Como trazer esse conhecimento sobre motivação para a aprendizagem de programação de computadores na transição do básico para o avançado?
1.2 Objetivos da investigação
O objetivo principal da investigação aqui apresentada foi este, o de identificar meios de transpor os conceitos das teorias sobre motivação mais proeminentes para aprendizagem de programação na transição básico- avançado. Pretendeu-se analisar as características das principais teorias da motivação para aprendizagem, estudando o comportamento através dos fatores pessoais e cognitivos dos alunos no desenvolvimento do processo de
especialização em programação de computadores. Também foram analisados os próprios processos, a partir das estratégias utilizadas e do suporte
tecnológico, verificando as vantagens e desvantagens apresentadas, sempre com o objetivo de promover uma aprendizagem mais efetiva. Para alcançar este objetivo principal foram definidos um conjunto de objetivos complementares:
• fazer o levantamento do estado da arte sobre a aprendizagem na transição da programação de nível básico para o nível avançado;; • identificar e caracterizar as principais teorias da motivação para
aprendizagem no ensino superior e para a programação de computadores em particular;;
6
• definir o método de conceção para dar suporte ao desenvolvimento da investigação;;
• desenvolver o trabalho de campo recolhendo e analisando os resultados a partir do enquadramento metodológico à luz dos conceitos apresentados no estado da arte.
As conclusões desta investigação foram apresentadas sob a forma de uma proposta de abordagem pedagógica com foco na motivação dos estudantes denominada SimProgramming. A abordagem SimProgramming surge a partir da reflexão final onde são definidos quatro fundamentos conceituais,
nomeadamente simulação de um ambiente empresarial para aprendizagem,
aprendizagem ativa, aprendizagem situada e avaliação formativa.
1.3 Contexto da investigação
Vila Real é a cidade capital do distrito homônimo localizada na sub-região do Douro na Região Norte de Portugal. A “bila”, assim, carinhosamente
conhecida, tem seu terreno assentado num planalto, a cerca de 450 metros de altitude, rodeado por montanhas onde destacam-se as serras do Marão e do Alvão. Um dos afluentes do rio Douro, o rio Corgo, atravessa a “bila” e nas suas margens foi construído o Complexo do Codessais. O Complexo é ponto de encontro com vários eventos no verão e ainda possui uma praia fluvial, piscinas e bares.
Além do Complexo do Codessais, a cidade possui outros pontos turísticos, tais como, os Museu de Arqueologia e Numismática, o Museu Etnográfico, o Museu Municipal e o Museu Casa de Mateus (localizada num
7
Palácio erguido na primeira metade do século XVIII). Ainda há outros pontos de interesse como a Capela da Misericórdia, a Capela do Espírito Santo, a Capela de São Brás, a Igreja de São Domingos, a Igreja de São Pedro e a Igreja do Bom Jesus do Calvário. Vale a pena destacar, o Jardim Botânico da UTAD reconhecido como um dos maiores jardins botânicos da Europa.
Oriunda historicamente do Instituto Politécnico de Vila Real, criado em 1973, e posteriormente, do Instituto Universitário de Trás-os-Montes e Alto Douro, fundado em 1979, a Universidade de Trás-os-Montes e Alto Douro (UTAD), que recebeu tal estatuto em 1986, é uma instituição integrada à rede pública de instituições do ensino superior em Portugal, integrando o consórcio UNorte.pt, formado pelas três principais universidades do Norte de Portugal: Universidade do Porto, Universidade do Minho e UTAD. A UTAD possui 4
Escolas de natureza universitária, nomeadamente a Escola de Ciências Agrárias e Veterinárias (ECAV), a Escola de Ciências Humanas e Sociais (ECHS), a Escola de Ciências e Tecnologia (ECT), e a Escola de Ciências da Vida e do Ambiente (ECVA). E uma escola de natureza politécnica, denominada Escola Superior de Enfermagem de Vila Real (ESEnfVR).
Particularmente, na Escola de Ciências e Tecnologia (ECT) são ofertados cursos de 1.º Ciclo (Licenciatura), 2.º Ciclo (Mestrado) e 3.º Ciclo
(Doutoramento). No que diz respeito aos cursos de licenciaturas (no Brasil, denominadas “bacharelados”), os cursos de Engenharia Informática (EI) e de Tecnologias da Informação e Comunicação (TIC) servem de cenário para a investigação apresentada nesta tese de doutoramento. Esta investigação
8
decorreu numa unidade curricular denominada Metodologias de Programação III (MPIII), que faz parte do 4º semestre, num programa de seis semestres, destes dois programas de licenciaturas.
Ao alcançarem esta etapa do programa de graduação, os estudantes cursaram outras unidades curriculares onde foram abordados conceitos e técnicas de programação, incluindo algoritmia, programação
imperativa/procedimental, programação orientada a objeto, programação- máquina em código assembly e programação concorrente. Eles também participaram em dois projetos semestrais em laboratório, um baseado em programação estruturada e o outro em técnicas de programação orientada a objetos (Tabela 1). Durante os semestres paralelos a MPIII, os estudantes cursam uma unidade curricular sobre algoritmos e desenvolvem um projeto em laboratório onde aplicam os conhecimentos aprendidos em MPIII.
Conceitos/Técnicas Disciplina
Algoritmia Algoritmia e Lógica Computacional Programação Imperativa/
Procedimental Metodologias de Programação I e Laboratório de Informática I Programação Orientada a
Objeto Metodologias de Programação II e Laboratório de Informática II Código Assembly Arquitectura de Computadores
Programação Concorrente Sistemas Operativos
Model-‐‑View-‐‑Controller
(MVC) e linguagem C# Laboratório de Informática III
Tabela 1: Conhecimentos e disciplinas relacionadas a MPIII
O objetivo de MPIII é introduzir conceitos de programação em larga escala, que é sugerido pela ACM e IEEE CSC (ACM/IEEE-CS, 2013). Em MPIII, os estudantes desenvolvem suas aprendizagens em direção ao trabalho com o estilo arquitetónico MVC, que propõe essencialmente uma divisão estrutural do
9
programa entre 3 blocos: o Model (e.g. estado do programa), a View (e.g.
output) e o Controller (e.g. fluxo do programa). Nesta unidade curricular, a
proposta original do MVC (Krasner & Pope, 1988), onde os dados de entrada são manipulados no Controller, é contrastada com uma proposta mais recente (Curry & Grace, 2008), onde os dados de entrada são manipulados na View. Para além destas competências essenciais e específicas da área de formação, em MPIII é desenvolvido um modelo de formação mais amplo, onde há um foco no desenvolvimento de competências genéricas, nomeadamente competências instrumentais, interpessoais e sistémicas.
As aulas são divididas em duas componentes: aulas teóricas e aulas práticas. Nas aulas teóricas são indicados previamente quais as fontes de estudo para aquisição dos conceitos que serão trabalhados durante a aula da semana, enquanto nas aulas práticas, os conceitos estudados na teórica são praticados em laboratório, através de uma breve apresentação de um problema e de qual a técnica proposta para resolução do mesmo. As avaliações são sobre ambas as componentes (teórica e prática). Os estudantes são avaliados em três provas periódicas com consulta a fontes impressas e online, porém com uma restrição de comunicação entre os alunos, pois as provas são realizadas
individualmente. Este método de avaliação necessita de compreensão e domínio das competências por parte dos alunos para que a consulta às fontes de
informação e o emprego de ferramentas de software durante estes momentos sejam bem aplicados.
10
1.4 Estrutura de apresentação da tese
Esta tese de doutoramento está dividida em sete capítulos. Neste primeiro capítulo, além desta estrutura de apresentação da tese, é feita uma breve
introdução sobre a investigação em si. Também são apresentados o problema e a questão de investigação, sendo especificados os objetivos que foram seguidos durante o processo. Ainda é exposto o contexto da investigação.
No segundo capítulo, são apresentadas as etapas de desenvolvimento do aluno iniciante de programação ao programador profissional especialista. Além disto, é detalhado como dá-se a transição do aluno entre a programação básica e avançada.
No terceiro capítulo, as teorias da motivação para aprendizagem
proeminentes são descritas em detalhes. Também é feito uma contextualização sobre a motivação para a aprendizagem nos cursos das engenharias.
No quarto capítulo, é feito um histórico sobre os principais paradigmas de investigação na educação em engenharias. À luz desta evolução histórica, são apresentadas a investigação-ação como método, as formas de recolha e análise dos dados, bem como o suporte computacional utilizado nesta investigação.
No quinto capítulo, a aplicação da investigação-ação ao longo de três semestres em MPIII é detalhada. A reflexão evolutiva sobre a abordagem desenvolvida a partir da prática educativa também é apresentada.
No sexto capítulo, encontram-se as conclusões desta investigação. Nele, estão listados seus contributos e a Abordagem SimProgramming é proposta à luz dos conceitos levantados no estado da arte.
11
O sétimo capítulo é dedicado às reflexões finais. Neste capítulo, estão listadas as limitações da investigação e são propostos trabalhos futuros.
12 * * *
13
APRENDIZAGEM DE PROGRAMAÇÃO DE ALUNOS INTERMÉDIOS
2.1 Do aluno iniciante a programador especialista
São muitas as diferenças entre os alunos iniciantes de programação em relação aos alunos mais avançados ou programadores mais experientes. Geralmente, os programadores iniciantes têm um conhecimento superficial sobre os programas que escrevem e gastam pouco tempo se preocupando com o planeamento e os testes, aspeto já relatado na década de 1980 (Linn &
Dalbey, 1985) e que se mantém nos ambientes de programação e contextos de aprendizagem atuais (Mei-Wen et al., 2013;; VanDeGrift et al., 2011;; Lister, 2011). Por outro lado, os programadores mais avançados desenvolvem melhor suas estratégias de resolução de problemas, tais como a decomposição do problema em módulos, o pensamento por analogias e a visão sistêmica, além de darem maior atenção à estrutura do código e aos testes de seus programas. Estas características não são novas: foram já relatadas por (Kurland et al., 1986) em 1986 e constatadas novamente nos relatos mais atuais (Begel, 2015;; Shaffer & Rosson, 2013;; Hunt, 2008).
A especialização não tem a ver apenas com capacidades gerais, tais como memória e inteligência ou o uso de estratégias genéricas para a resolução de problemas. Em vez disso, o conhecimento adquirido por um especialista influencia completamente a sua forma de se organizar, representar, interpretar e
14
modificar a informação no ambiente relacionado com a sua especialidade (Bransford et al., 1999). Por exemplo, os programadores especialistas são bons a reconhecer, usar e adaptar padrões através dos esquemas mentais que desenvolveram a partir de suas experiências anteriores (Mead et al., 2006). Em outras palavras, são capazes de recorrer a uma vasta gama de exemplos, fontes de conhecimento e estratégias (Robins et al., 2003). Os especialistas em
programação são mais propícios a adaptarem suas estratégias às
características funcionais do domínio de sua especialização, em vez de se aterem a detalhes geralmente superficiais, como a sintaxe da linguagem de programação usada. São também mais flexíveis em suas abordagens para a compreensão do problema, bem como nas hipóteses que desenvolvem para tentar resolvê-los. Os programadores especialistas tendem a partir de uma visão global dos sistemas para em seguida irem refinando suas hipóteses através das informações disponíveis (von Mayrhauser & Vans, 1994). A intuição é
considerada uma das características mais marcantes de um especialista e é necessária uma grande quantidade de prática para que um aluno iniciante passe a apresentar tal comportamento intuitivo (Gobet & Chassy, 2009). É reportado na literatura científica que a intuição pode surgir do treino extenso e deliberado, através da reflexão, feedback e análise (Akinci & Sadler-‐‑Smith, 2012;; Ericsson et
al., 2007;; Vergara, 1993). Os programadores especialistas representam os
programas através de múltiplos níveis de abstração baseados em padrões adquiridos ao longo de anos de prática (Mead et al., 2006). As convenções, o reconhecimento das informações sobre o fluxo de dados e as relações entre
15
partes do código permitem que eles possam inferir rapidamente sobre suas hipóteses evitando informações desnecessárias. Assim, lançam mão de
estratégias baseados em fatores como a familiaridade, domínio do problema e características das tecnologias usadas (Hansen et al., 2012). Geralmente, um programador especialista desenvolve um esqueleto do programa para refiná-lo posteriormente através de sucessivas iterações (Shaffer & Rosson, 2013).
Por outro lado, a falta de prática dos alunos iniciantes reflete-se na falta de conhecimento e técnicas importantes para a programação. Os alunos iniciantes, geralmente, usam estratégias genéricas para a resolução de problemas através da cópia de soluções ou trabalhos que consideram
semelhantes aos seus, ao invés de desenvolverem estratégias específicas ao domínio do problema particular em que estão envolvidos (Kranch, 2012;;
Winslow, 1996). Os iniciantes tendem a escrever um programa sequencialmente lançando mão da abordagem de programação “linha a linha” e preocupam-se muito mais com as regras da sintaxe da linguagem que estão usando, em vez das relações entre as partes dos programas ou sua estrutura (Shaffer & Rosson, 2013;; Robins et al., 2003;; Winslow, 1996). Os iniciantes despendem pouco tempo no planeamento e nos testes do código que desenvolvem e ao
identificarem erros acabam por tentar fazer pequenas correções locais sem se preocuparem com reformulações mais significativas no código (Ala-Mutka, 2004). Os alunos programadores iniciantes não desenvolveram ainda esquemas mentais úteis o suficiente, têm o conhecimento fragmentado e, geralmente,
16
recorrem a uma abordagem de tentativa e erro casuística e irrefletida, como método para a resolução de problemas (Mead et al., 2006).
Na literatura é reportado que pode levar cerca de 10 anos de experiência para tornar um aluno iniciante num programador especialista (Winslow, 1996). Durante esse tempo, os alunos passam por uma transformação contínua, descrita na literatura através de 5 níveis de desenvolvimento, onde se agrupam diferentes características: iniciante, iniciante avançado, competente, proficiente e especialista (Mead et al., 2006;; Dreyfus & Dreyfus, 2005;; Dreyfus, 2004;; Dreyfus & Dreyfus, 1980). Em (Hunt, 2008) foram apresentados um conjunto de
características dos programadores em cada um dos níveis de desenvolvimento. A seguir, são apresentadas tais características com a inclusão de algumas considerações de outros autores:
• Ao se iniciarem na programação, geralmente, os alunos aprendem via instrução formal para lidarem com os conteúdos e seus recursos (Gobet & Chassy, 2009;; Robins et al., 2003). Os alunos iniciantes, geralmente, não apresentam muito interesse pela programação: optam por fazerem as tarefas que lhes foram atribuídas, sem se preocuparem com sua
aprendizagem. Dependendo da complexidade das tarefas, não sabem se têm as competências necessárias e apresentam uma certa insegurança em relação às suas capacidades para realizá-las. Assim, torna-se mais fácil quando as tarefas lhes são apresentadas de forma bem descrita, com preferência da disponibilidade de instruções passo-a-passo
17
novatos na resolução das suas atividades, mas quando enfrentam uma determinada situação que foge à regra, ou seja, algo inesperado surge, podem apresentar muitas dificuldades para lidarem com tal adversidade. Ao desenvolverem suas abordagens para a resolução de problemas, geralmente ignoram as características do domínio dos problemas e optam por procurar soluções independentes do contexto ao qual estão inseridos (Hunt, 2008;; Winslow, 1996);;
• Ao se tornarem iniciantes avançados, os alunos de programação começam a não precisar de regras muito fixas para seguirem. Porém, ainda estão preocupados em buscar informação rápida, por exemplo, ao estarem debruçados em algum problema de programação – e precisam reutilizar uma biblioteca ou um framework – irão procurar a documentação de forma superficial sem se aterem ao seu entendimento mais profundo. Em relação aos textos de apoio para a sua aprendizagem, provavelmente farão leituras diagonais para verificar exatamente o que precisam, sem se preocuparem tanto pelo domínio do problema. Os alunos iniciantes
avançados já conseguem aplicar seus conhecimentos levando em conta o domínio do problema devido às situações semelhantes anteriores que experienciaram, porém ainda apresentam dificuldades em lidar com tais problemas (Mead et al., 2006;; Winslow, 1996). Geralmente, ao se
depararem com um contexto mais amplo e complexo, provavelmente irão rejeitá-lo por o considerarem irrelevante ou muito difícil (Hunt, 2008);;
18
• Os alunos de programação que se tornaram competentes desenvolveram uma série de modelos conceituais e trabalham com esses modelos de formas mais eficazes (Gobet & Chassy, 2009;; Mead et al., 2006;; Winslow, 1996). Podem resolver problemas por conta própria e começam a
elaborar melhores estratégias de resolução para uma série de problemas diferentes que não enfrentariam antes. Os alunos que são programadores competentes são bons integrantes de equipas, pois podem ajudar os iniciantes e não necessitam de tantas orientações por parte de programadores mais experientes. Os alunos neste nível de
especialização tendem a ter um papel de liderança, formal ou informal, em equipas. Geralmente são descritos como tendo iniciativa e
criatividade, porém ainda não desenvolveram capacidades suficientes para maiores reflexões e autocorreção (Hunt, 2008);;
• Quando os alunos programadores chegam ao nível proficiente passam a ter uma visão bem mais ampla sobre a área. Os proficientes se
preocupam mais com sua aprendizagem e desenvolveram a capacidade de refletir melhor sobre as tarefas: não apresentam tanta resistência para reverem suas abordagens para tentarem executar melhor suas
estratégias em atividades futuras. Os programadores que não alcançaram a proficiência não se preocupam muito com os testes dos seus programas e (ao terem que fazê-lo) apresentam dificuldades por não saberem bem o que testar. Já os programadores proficientes sabem bem que testes devem ser aplicados e o que deve realmente ser testado, têm experiência
19
suficiente para saber o que é provável acontecer a seguir. Se algo inesperado ocorrer, sabem o que deve ser feito para contornar tal situação (Gobet & Chassy, 2009;; Mead et al., 2006). Também interiorizaram a importância dos padrões de projetos de software e preocupam-se mais em tirar proveitos das reflexões e dos feedbacks dados sobre os projetos. A proficiência talvez seja o principal salto a partir dos níveis de desenvolvimento apresentados anteriormente. O
programador proficiente já pode ser considerado um especialista júnior (Hunt, 2008);;
• Finalmente, os programadores especialistas apresentam grande experiência na área de conhecimento de sua especialização e sabem aplicá-la em diferentes contextos. Têm a capacidade de identificar as diferenças entre os detalhes relevantes e irrelevantes do domínio do problema. Assim, são capazes de se concentrar no que é mais importante e ignorar o que não é (Robins et al., 2003;; Winslow, 1996). Os
especialistas percebem características e padrões significativos de
informações devido aos esquemas de conhecimento que desenvolveram a partir da sua experiência adquirida ao longo dos anos. Nesta fase, a compreensão sobre as tarefas e as tomadas de decisão sobre o que fazer apresentam-se de forma intuitiva e fluida (Gobet & Chassy, 2009).
Durante os 10 anos de experiência que são tidos como necessários para se alcançar a mestria de um especialista, o aluno necessita de uma enorme quantidade de prática para o seu desenvolvimento. É reportado na literatura que
20
é preciso, independente da área do conhecimento, praticar durante 10 mil horas (Weiss & Shanteau, 2014;; Gladwell, 2008), o que pode ser equivalente a 3 horas por dia, ou 20 horas por semana, ao longo destes 10 anos (Yates & Hattie, 2013;; Levitin, 2006). Uma expectativa otimista é que ao fim de uma graduação, o aluno de programação consiga se tornar competente ou proficiente (Robins et al., 2003;; Winslow, 1996).
Ao se iniciarem num determinado domínio, os alunos iniciantes e os iniciantes avançados passam por um período de aclimatação, onde necessitam de orientações para determinarem os conteúdos que são centrais ou periféricos para não desenvolverem um conhecimento fragmentado devido ao pouco investimento pessoal despendido sobre o domínio. Estes alunos também precisam de auxílio para definirem estratégias para resolução de problemas, pelo fato de as suas estratégias serem muitas vezes ineficazes quando deixados por conta própria (Alexander, 2003).
Geralmente, depois de completarem sua educação formal e a sua formação básica, os alunos tornam-se profissionais e trabalham como
aprendizes (por vezes até formalmente, com a designação “estagiários”) e são supervisionados por profissionais mais experientes. Pouco tempo depois, podem alcançar um nível aceitável de competência. Muitos destes profissionais mantêm esse patamar de desempenho ao longo da carreira, porém alguns continuam a melhorar até se tornarem especialistas (Ericsson, 2006). É importante destacar que as limitações físicas ou cognitivas podem influenciar negativamente o desenvolvimento da especialização. Por outro lado, um estado afetivo
21
equilibrado e o interesse individual ou situacional (ver Seção 3.2.2), refletido na motivação, contribuem significativamente para o seu desenvolvimento
(Alexander, 2003). Outros fatores de suma importância são a prática deliberada e o coaching (Ericsson et al., 2007). Ou seja, a realização de atividades
especificamente projetadas para a melhoria e o acompanhamento do desempenho por parte de um professor ou mentor são muito úteis para o desenvolvimento da especialização (Ericsson, 2006).
2.2 Transição do aluno de programação básica para avançada
As ciências informáticas vêm-se desenvolvendo e diversificando. Surgiram várias disciplinas interrelacionadas, tais como as Ciências da
Computação, a Engenharia dos Computadores, os Sistemas de Informação, as Tecnologias da Informação e a Engenharia de Software (ACM/IEEE-CS, 2013). Em paralelo, os cursos introdutórios destas disciplinas da área técnico-científica da informática têm recebido, cada vez mais, alunos com diferentes backgrounds de conhecimento. Desde alunos com alguma experiência, ao ponto de
conseguirem criar pequenos programas, até alunos sem nenhum conhecimento anterior em programação (Pedroni & Meyer, 2006).
Grande parte destes cursos introdutórios é focada em programação, onde são ensinados conceitos das Ciências da Computação, tais como abstração e decomposição, com tarefas específicas para a aprendizagem de uma
determinada linguagem de programação, bem como a construção de pequenos artefactos de software (ACM/IEEE-CS, 2013). Tradicionalmente, com raras exceções, nestes cursos começa-se por ensinar a programação através de
22
paradigmas procedimentais ou funcionais. Independentemente da adoção inicial ou não adoção do subparadigma da orientação a objetos, parte-se da
construção de pequenos blocos de programas, com a declaração de variáveis, suas inicializações e operações matemáticas. Posteriormente, passam pelo controle do fluxo e estrutura de dados. E, finalmente, caso o tempo permita, princípios de design modular e técnicas para estruturar programas de larga escala (Pedroni & Meyer, 2006;; Meyer, 2003). Esta abordagem, embora seja útil para permitir que o aluno entenda como se constrói um programa, não os
capacita para desenvolverem as competências necessárias para tornarem-se engenheiros bem-sucedidos no mercado de trabalho (Meyer, 2003).
O grupo de trabalho conjunto da Association for Computing Machinery (ACM) e IEEE Computer Society para a revisão do Computer Science Curricula (ACM/IEEE-CS, 2013) chama atenção sobre os cuidados que as instituições de ensino superior precisam ter para não darem uma visão estreita ou enganosa sobre a programação e listam uma série de características que os futuros informáticos precisam de desenvolver para alcançarem o sucesso profissional. Por exemplo, os recém-formados precisam de: entender a interrelação entre a teoria e a prática da computação;; refletir em múltiplos níveis de abstração para irem além dos detalhes de implementação e perceberem as estruturas dos sistemas computacionais, bem como os processos envolvidos para sua análise e construção;; reconhecer o contexto em que um sistema funciona, incluindo as suas interações com os usuários e outros sistemas digitais ou físicos;; saber aplicar seus conhecimentos para a resolução de problemas reais, com a
23
consciência que existem várias soluções para um determinado problema e que a seleção entre elas não é uma atividade puramente técnica;; conhecer as
questões sociais, legais, éticas e culturais inerentes à computação e saber que as mesmas variam internacionalmente;; compreender a ampla aplicabilidade, a interação com diferentes domínios e a gama de oportunidades disponíveis na computação;; ter participado em pelo menos um projeto substancial que seja integrativo, que permita a avaliação de possíveis soluções e que possibilite a oportunidade de trabalhar em uma escala maior do que os projetos típicos do curso;; saber trabalhar de forma eficiente, comunicar-se no meio físico e digital, por escrito ou através de apresentações orais para discutir sobre problemas técnicos e suas possíveis soluções com membros de suas equipas e/ou uma variedade de outras audiências. Neste relatório, ainda é destacado que os alunos devem perceber que as tecnologias evoluem rapidamente e que é necessário que desenvolvam autonomia para continuarem a aprender e
adaptarem suas competências ao longo de suas carreiras. Para prepará-los para esta realidade, é sugerido que as instituições de ensino superior envolvam os alunos com várias linguagens de programação, ferramentas de
desenvolvimento, paradigmas e tecnologias, bem como outros conceitos relacionados com sua aprendizagem ao longo da vida (ACM/IEEE-CS, 2013).
Em situações de programação mais avançadas - por exemplo,
envolvendo o uso de estilos arquitetónicos, como o MVC (Curry & Grace, 2008;; Krasner & Pope, 1988) - os alunos precisam de desenvolver um conjunto de conhecimentos, técnicas e competências complexas (Robins et al., 2003). Além
24
das competências de programação necessárias para aplicar essas boas práticas durante o desenvolvimento de um sistema, os alunos também precisam de desenvolver competências sociais, a fim de colaborar com outros
programadores, como parte do processo baseado em trabalho de equipa para o desenvolvimento de sistemas complexos e de larga escala (Zschaler et al., 2014;; Allen et al., 2003;; Jenkins, 2002).
O paradigma de desenvolvimento orientado a objetos e/ou do desenvolvimento de sistemas complexos com ênfase em código bem
estruturado, é um desafio para a aprendizagem dos alunos intermédios (Tappan, 2014;; Zschaler et al., 2014). Após os cursos introdutórios de programação, normalmente os alunos tornam-se capazes de desenvolver pequenos
programas, bem como de adaptar e combinar peças de códigos existentes, mas eles não entendem claramente a importância de escrever código bem
estruturado a partir de estruturas pré-existentes, tais como frameworks,
bibliotecas e interfaces de programação de aplicações (API do inglês Application
Programming Interface) (Allen et al., 2003;; Jenkins, 2002).
Tradicionalmente, as preocupações de investigação no domínio da
aprendizagem de programação têm-se centrado sobre as dificuldades de alunos iniciantes ou sobre a compreensão dos programas por especialistas e pouca atenção tem sido dada para ajudar os estudantes a progredirem da
programação básica para a programação avançada (Berland et al., 2013;; Robins
et al., 2003). A literatura que aborda o ensino de engenharia reporta que as
25
mercado de trabalho (Duderstadt, 2010;; Sheppard et al., 2008). Estas
abordagens são estritamente focadas na aquisição de conhecimentos técnicos, apoiando-se em cargas de trabalho pesadas e promovem a meritocracia do sistema de crenças baseado em dificuldade, em vez de priorizarem a
aprendizagem ativa, a integração de conhecimentos e competências mais
alinhadas com a realidade profissional (Adams et al., 2011;; Litzinger et al., 2011;; Stevens et al., 2008;; Stevens et al., 2007).
O contexto pedagógico em que os alunos aprendem influencia o seu envolvimento e determinação para alcançar resultados de aprendizagem (Johri & Olds, 2011;; Patterson et al., 2011). Muitas investigações examinaram
abordagens para os problemas acima descritos, empregando ambientes de aprendizagem baseada em problemas (PBL do inglês Problem-based Learning) e o trabalho em equipa (Schaffer et al., 2012;; Esteves et al., 2011;; Sancho- Thomas et al., 2009). Embora os problemas de engenharia sejam projetados de modo que diversas soluções matemáticas e sofisticações científicas sejam possíveis, o trabalho em equipa e as competências de comunicação oral e escrita que servem para modelar esses problemas são essenciais para o sucesso de futuros informáticos (Adams et al., 2011).
Estes aspetos estão, em parte, relacionados com fatores sociais na prática de programação. A investigação nesta área, enquanto nova ao nível intermédio, tem vindo a ser fonte de interesse ao nível de iniciantes e
avançados. As diferenças de gênero em particular, mas não só, têm atraído algumas questões sobre a necessidade de encontrar maneiras de apoiar a
26
aprendizagem de programação em grupos e comunidades, onde programadores mais avançados possam dar apoio aos alunos e ajudá-los em sua aprendizagem (Sancho-Thomas et al., 2009;; Sim et al., 2009;; Harrell et al., 2008).
As investigações sobre a aprendizagem vêm passando por uma mudança de foco, partindo de uma perspetiva de aquisição de conhecimento para uma perspetiva de participação em comunidades de prática (Barab & Duffy, 2000). Por esta ótica, conhecida por aprendizagem situada (Johri & Olds, 2011;; Lave & Wenger, 1991), o conhecimento é situado na própria atividade, no contexto e na cultura no qual o aluno está inserido, em vez de ser visto como um processo de aquisição e manipulação de representações mentais simbólicas. Ou seja, a aprendizagem se desenvolve a partir da participação periférica legítima até uma participação plena na comunidade de prática (Chen et al., 2012).
Uma comunidade de prática é uma rede de relacionamento entre profissionais e/ou estudantes que compartilham um domínio de interesse. Os participantes partilham experiências, ferramentas, métodos, problemas e
soluções. Tais comunidades, geralmente, publicam seus recursos na Internet e esta comunicação serve para o desenvolvimento, tanto do conhecimento de cada participante, quanto da própria comunidade em si (Gannon-Leary & Fontainha, 2007).
Após a iniciação numa comunidade de prática, através de sua participação periférica, o indivíduo tem a oportunidade de observar o
comportamento dos participantes mais antigos e respeitados. Assim, ele pode desenvolver a motivação necessária para interagir, cada vez mais, nas
27
atividades dentro da comunidade. No início, tem ideias gerais sobre a área de interesse e ao agregar novas responsabilidades, realizando tarefas mais
complexas, vai desenvolvendo uma identidade perante aos outros participantes e passa a ter a oportunidade de maior interação com os demais. Aumentando, assim, suas oportunidades para aprender e contribuir. Conforme vão se
tornando mais experientes, também podem alcançar o status de veterano (Chen
28 * * *
29
MOTIVAÇÃO PARA APRENDIZAGEM
3.1 A motivação e seus motivos
A motivação é um constructo teórico usado para tentar explicar o
envolvimento das pessoas em atividades do cotidiano. As teorias geradas sobre a motivação buscam perceber a direção (escolhas), a intensidade (níveis de atividades), a persistência (tempo despendido) e a qualidade (estratégias cognitivas) do comportamento humano, principalmente o comportamento orientado a objetivos (Brophy, 2010;; Maehr & Meyer, 1997). O que move as pessoas a fazerem certas escolhas, a se envolverem, se esforçarem e
persistirem numa ação são questões que as investigações e as teorias sobre motivação procuram responder (Dörnyei & Ushioda, 2013). Tais investigações são conduzidas através de várias abordagens que se focam no comportamento e na cognição humana, bem como em aspetos não-cognitivos, tais como as perceções, as crenças, as atitudes etc. (Lai, 2011).
A motivação é resultante da interação do indivíduo com uma situação e seu nível de envolvimento varia tanto de pessoa para pessoa, quanto em uma mesma pessoa em diferentes situações (Robbins & Judge, 2012). Esta variação ocorre devido às suas preferências individuais, ou seja, diferentes pessoas podem ter objetivos semelhantes por diferentes razões, por exemplo o desejo de mostrar competência, ter influência sobre outras pessoas (poder), ter