• Nenhum resultado encontrado

SimProgramming: uma abordagem pedagógica motivacional para a aprendizagem de programação em turmas intermédias do Ensino Superior

N/A
N/A
Protected

Academic year: 2021

Share "SimProgramming: uma abordagem pedagógica motivacional para a aprendizagem de programação em turmas intermédias do Ensino Superior"

Copied!
256
0
0

Texto

(1)

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

(2)
(3)

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.

(4)

ii                                                                                       *    *    *  

(5)

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.

(6)

iv                                                                                       *    *    *    

(7)

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

(8)

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.

(9)

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

(10)

viii other educational contexts as well.

Keywords: Motivation to Learn; Pedagogical Approache; SimProgramming Approache; Computer Programming; Computer Science; Informatics.

(11)

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  

(12)

x

  *    *    *

(13)

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).  

(14)

xii                                                        *    *    *  

(15)

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).  

(16)

xiv *    *    *

(17)

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  

(18)

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  

(19)

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  

(20)

xviii

(21)

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  

(22)

xx

(23)

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  

(24)

xxii      *    *    *

(25)

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  

(26)

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  

(27)

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.  

(28)

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  

(29)

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;;  

(30)

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  

(31)

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  

(32)

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  

(33)

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.  

(34)

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.  

(35)

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.  

(36)

12      *    *    *

(37)

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  

(38)

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  

(39)

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,  

(40)

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  

(41)

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);;  

(42)

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  

(43)

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  

(44)

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  

(45)

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  

(46)

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  

(47)

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  

(48)

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  

(49)

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  

(50)

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  

(51)

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  

(52)

28    *    *    *

(53)

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  

Imagem

Tabela 1: Conhecimentos e disciplinas relacionadas a MPIII
Figura 1: Componentes do constructo expectativa-valor baseado em Bzuneck et al. (2014) e Eccles e  Wigfield (2002)
Tabela 2: Resumo dos principais aspetos das teorias da motivação para aprendizagem
Tabela 4: Guia estrutural do processo fornecido pela equipa docente no primeiro ciclo
+6

Referências

Documentos relacionados

O Comitê Técnico Setorial é composto por profissionais internos e externos ao SENAI, que possam contribuir com suas experiências profissionais, formação e visão de futuro, sendo

Para Habermas, então, pelo menos na primeira fase do desenvolvimento de seu pensamento, a dimensão ‘eclipsada’, ou perdida, da razão somente pode ser articulada

Portanto, mesmo percebendo a presença da música em diferentes situações no ambiente de educação infantil, percebe-se que as atividades relacionadas ao fazer musical ainda são

Em [10] e [11] s˜ao mostradas t´ecnicas que buscam contornar a dificuldade da ISA padr˜ao quanto ao n´umero de componentes que devem ser retidas pela PCA de forma a resultar em

Mesmo um dos árduos defensores da tese de que o direito do trabalho brasileiro teria sido axio-orientado pelo fascismo, Arion Sayão Romita, sustenta que

There a case in Brazil, in an appeal judged by the 36ª Câmara Cível do Tribunal de Justiça do Estado de São Paulo (São Paulo’s Civil Tribunal, 36th Chamber), recognized

libras ou pedagogia com especialização e proficiência em libras 40h 3 Imediato 0821FLET03 FLET Curso de Letras - Língua e Literatura Portuguesa. Estudos literários

A formulação de pigmentos inorgânicos azuis com base na estrutura da hibonite, contendo cobalto como agente cromóforo em concentração inferior à de pigmentos