An Experiment about Algorithms Teaching for
Competitive Programming Contests: Challenges and
Lessons Learned
Marcelo Gonc¸alves, Washington Santos and Talles Brito
LaIS - Laboratory of Information SystemsInstituto Federal de Educac¸˜ao, Ciˆencia e Tecnologia do Cear´a Crato - CE, Brasil
Abstract— In this paper is presented some of the difficulties found by students in learning algorithms for competitive pro-gramming contests such as the Brazilian Computer Society’s Programming Marathon. To understand such difficulties, an experiment with graduation students of Computer Science field was executed in order to investigate their capacity to solve the competitions’ problems in a scenario in which they already have previous knowledge on algorithms related topics. By analyzing the obtained data, it is found that although they comprehend the required algorithms to solve competitions problems, most of the participants have not succeeded in solving such problems. Thus, it is concluded that beyond knowledge on algorithms also it is necessary to have the ability to understand the problems and experience on the use of algorithms language specific implementations to achieve success in solving them.
Index Terms—Programming, Computer science education, E-ducational activities, Algorithms
I. INTRODUC¸ ˜AO
O estudo do projeto bem como a aplicac¸˜ao de algoritmos em problemas do mundo real s˜ao t´opicos recorrentes em cursos da ´area de Ciˆencia da Computac¸˜ao. No entanto, nem sempre os alunos conseguem compreender o projeto e implementac¸˜ao de algoritmos, e at´e mesmo reconhecer as situac¸˜oes nas quais algoritmos pr´e-existentes devem ser aplicados. Um m´etodo que se mostra potencialmente eficaz para aprimorar o ensino e aprendizagem de algoritmos ´e a utilizac¸˜ao de competic¸˜oes acadˆemicas de programac¸˜ao como recurso did´atico para a incentivar a pr´atica de programac¸˜ao [1].
No Brasil, um exemplo de competic¸˜ao nesta ´area ´e a Maratona de Programac¸˜ao1 da SBC (Sociedade Brasileira de Computac¸˜ao), criada em 1996, tem como objetivo selecionar integrantes para o concurso mundial de programac¸˜ao da ACM (Association for Computing Machinery). Na competic¸˜ao um conjunto de problemas s˜ao dispostos `as equipes e estas tˆem um tempo limitado para resolver a maior quantidade de problemas. Contando com uma participac¸˜ao de 785 times em 2016, o evento procede n˜ao apenas com o prop´osito de selecionar times, mas possui fundamental importˆancia na instruc¸˜ao do conhecimento competitivo e colaborativo dos participantes. A julgar pela vasta necessidade do mercado por profissionais
1http://maratona.ime.usp.br/
que atendam a esses quesitos, compreende-se a relevˆancia da programac¸˜ao competitiva no ambiente acadˆemico. Segundo [1], essas s˜ao competic¸˜oes escolares que podem potencializar o desenvolvimento de autonomia e a habilidade de trabalho em equipe.
Admitindo a atual importˆancia dos campeonatos de programac¸˜ao, este trabalho ´e motivado por uma inquietac¸˜ao com o baixo ´ındice de participac¸˜ao dos alunos de um curso de bacharelado na ´area de Ciˆencia da Computac¸˜ao, o qual corres-ponde a apenas 11,4% dos alunos do curso em quest˜ao, e, al´em disso, a instituic¸˜ao recorrentemente apresenta uma pequena quantidade de times participantes que conseguem resolver uma quantidade de problemas acima da m´edia nacional.
O objetivo deste trabalho ´e entender as causas que levam aos alunos de um curso de graduac¸˜ao na ´area de Ciˆencia da Computac¸˜ao a ter uma escassa participac¸˜ao e baixo interesse nas competic¸˜oes de programac¸˜ao, e al´em disso, o porquˆe do baixo rendimento das equipes quando a participac¸˜ao em competic¸˜oes ocorre. Para esse fim, foi realizada uma ativi-dade pr´atica de ensino de algoritmos e programac¸˜ao como experimento. No decorrer do experimento os participantes agrupados em times deveriam resolver problemas da Maratona de Programac¸˜ao da SBC. A resoluc¸˜ao dos problemas envolve quest˜oes sobre projeto de algoritmos e estruturas de dados al´em da construc¸˜ao de programas atrav´es de linguagens de programac¸˜ao. Com o objetivo de mensurar o desempenho e as dificuldades enfrentadas pelos alunos um conjunto de question´arios foram aplicados no decorrer do experimento. A partir dos resultados obtidos no experimento o objetivo ´e identificar lic¸˜oes aprendidas e com isso entender os desafios existentes para aprimorar o resultado de times em campeonatos de programac¸˜ao.
Este trabalho est´a organizado da seguinte forma: Na sec¸˜ao II alguns trabalhos relacionados s˜ao discutidos. Na Sec¸˜ao III problemas de competic¸˜oes anteriores da Maratona de Programac¸˜ao foram revisados com o objetivo de entender o perfil de conte´udo t´ecnico exigido pela competic¸˜ao. Al´em disso, na Sec¸˜ao IV, o desempenho de times competidores ´e analisado a fim de entender qual ´e o desempenho usual dos times competidores em todo o pa´ıs e na instituic¸˜ao em que o experimento foi executado. J´a na Sec¸˜ao V o experimento 978-1-5386-3057-0/17/$31.00 c⃝2017 IEEE
executado ´e delineado e discutido. Os resultados obtidos a partir do experimento s˜ao detalhados e discutidos na Sec¸˜ao VI. E, por fim, considerac¸˜oes finais s˜ao apresentadas na Sec¸˜ao VII.
II. TRABALHOS RELACIONADOS
Existem diversos desafios relacionados com o ensino e aprendizagem em cursos de graduac¸˜ao, tais desafios est˜ao relacionados com a efic´acia sobre o entendimento pr´atico e fixac¸˜ao dos conte´udos discutidos em sala de aula. Na ´area de Ciˆencia da Computac¸˜ao n˜ao ´e diferente, o que resultou no desenvolvimento de diversos trabalhos que discutem soluc¸˜oes para minimizar dificuldades atrav´es do uso de ferramentas que exploram a competitividade como pr´atica decisiva para aprimorar o processo de ensino e aprendizagem.
Alguns trabalhos [2][3] tˆem como foco a alternˆancia entre competic¸˜ao e colaborac¸˜ao. Nesses trabalhos temos que a competitividade por si s´o ´e nociva para a educac¸˜ao dos alunos, pois pode desmotiv´a-los, fazendo-se assim necess´ario o uso da colaborac¸˜ao entre alunos para minimizar esse problema. Neste sentido, o trabalho [4] define uma ferramenta de simulac¸˜ao de um ambiente competitivo de atuac¸˜ao profissional, que al´em de estimular a aprendizagem cria um v´ınculo entre instituic¸˜oes de ensino e empresas que possam cooperar no desenvolvimento de profissionais mais aptos a trabalhar no mercado. Al´em disso, em [5] ´e defendido que existem benef´ıcios ao estimular o trabalho competitivo em laborat´orios das disciplinas de cursos de engenharia, j´a que a competitividade pode tornar o aprendizado uma ac¸˜ao divertida, e assim despertar o interesse dos alunos.
Sendo assim, considerando que ´e poss´ıvel fomentar a aprendizagem dos alunos (ou equipes de alunos) atrav´es da colaborac¸˜ao e competitividade, alguns trabalhos tratam sobre a an´alise do desempenho das esquipes em competic¸˜oes. Em [6] ´e estudada a frequˆencia de submiss˜oes, taxas de erro e linguagens utilizadas de equipes em competic¸˜oes a fim de analisar quais os maiores desafios no cen´ario competitivo. Baseado nos resultados deste estudo, ´e conclu´ıdo que quanto mais uma equipe tenta (com a possibilidade de tentar e errar) resolver problemas melhor ´e o desempenho geral da equipe nas competic¸˜oes. Baseado nessa linha de pensamento, ferramentas (tal como [7]) de treinamento tˆem sido propostas com o obje-tivo de auxiliar os alunos em treinamentos para competic¸˜oes. A ferramenta proposta em [7] trata-se de um selecionador de problemas de competic¸˜oes de programac¸˜ao que estuda o perfil do usu´ario a fim de identificar qual o conjunto de problemas que aluno gradualmente deveria resolver para obter sucesso nas competic¸˜oes.
III. T ´OPICOSRECORRENTES NAMARATONA DE PROGRAMAC¸ ˜AO
Inicialmente, com o objetivo de delinear a execuc¸˜ao deste trabalho, problemas de competic¸˜oes anteriores da Maratona de Programac¸˜ao foram primeiramente revisados e discutidos a fim de se extrair quais eram os conhecimentos de t´opicos
de Ciˆencia da Computac¸˜ao que s˜ao recorrentemente exigi-dos como conhecimento t´ecnico b´asico aos competidores das competic¸˜oes. Especificamente, foi executada uma investigac¸˜ao para delinear qual ´e o perfil de conhecimento t´ecnico b´asico exigido para que um competidor possa, ao menos, resolver os problemas triviais bem como os problemas de dificuldade moderada da competic¸˜ao.
Como resultado da an´alise de problemas de competic¸˜oes anteriores da Maratona de Programac¸˜ao foi percebido que sempre existe 1 (um) problema trivial que pode ser resolvido somente com conhecimento b´asico de programac¸˜ao estrutu-rada. Al´em disso, o conhecimento de temas relacionados a estruturas de dados, ordenac¸˜ao, algoritmos de grafos, para-digmas de programac¸˜ao e matem´atica aplicada s˜ao t´opicos recorrentemente necess´arios e exigidos para que o competidor consiga projetar soluc¸˜oes para os problemas de dificuldade moderada da competic¸˜ao. Sendo assim, dentre tais temas enumerados, dois foram selecionados para a aplicac¸˜ao em um experimento pr´atico (o qual ´e posteriormente detalhado na Sec¸˜ao V): o problema de obtenc¸˜ao de Caminhos mais
Curtos e de Ordenac¸˜ao de Dados. ´E importante ressaltar que dois fatores foram essenciais para implicar na selec¸˜ao destes dois t´opicos: a recorrˆencia da aplicac¸˜ao dos t´opicos para resolver uma vasta quantidade de problemas de competic¸˜oes de programac¸˜ao bem como a facilidade pr´atica da aplicac¸˜ao dos algoritmos na resoluc¸˜ao de problemas.
Desta forma, de maneira a contextualizar o leitor em relac¸˜ao `a fundamentac¸˜ao te´orica necess´aria para o melhor entendimento deste trabalho, os problemas de Caminhos mais Curtos e Ordenac¸˜ao de Dados s˜ao brevemente apresentados nas seguintes subsec¸˜oes.
A. Caminhos mais Curtos
O problema de Caminhos mais Curtos [8] consiste em encontrar um caminho (trajeto) entre dois v´ertices em um grafo, tal que a soma dos pesos das arestas deste caminho seja a menor poss´ıvel entre todas as possibilidades de caminhos existentes entre os v´ertices em quest˜ao. Na literatura ´e poss´ıvel encontrar diversos algoritmos para resolver esse problema, os quais diferem em termos de tempo de processamento, aplicac¸˜ao e diversidade em relac¸˜ao aos valores poss´ıveis para os pesos das arestas. Neste trabalho ´e empregado o algoritmo de Caminhos mais Curtos de Dijkstra [9] para resolver um problema de competic¸˜ao de programac¸˜ao. Este ´e um algoritmo cl´assico da literatura de Ciˆencia da Computac¸˜ao e emprega estruturas de dados do tipo fila na implementac¸˜ao, al´em disso, o algoritmo permite processar um grafo em tempo sub-quadr´atico em relac¸˜ao ao tamanho do mesmo.
B. Ordenac¸˜ao de Dados
O procedimento de re-arranjar a posic¸˜ao de um elemento dentro de uma sequˆencia de elementos a fim de que os mesmos obedec¸am a uma determinada especificac¸˜ao de ordem ´e conhecida como Ordenac¸˜ao. Para realizar este procedimento com dados em um computador se faz necess´ario o emprego de um algoritmo de ordenac¸˜ao. Na literatura s˜ao propostos
Tabela I
HISTORICO DE´ DESEMPENHO NAFASEREGIONAL DAMARATONA DEPROGRAMAC¸ ˜AO
Ano Times Total de Problemas Menor Pontuac¸˜ao Maior Pontuac¸˜ao M´edia de Pontuac¸˜ao Mediana Desvio Padr˜ao
2013 550 10 0 10 2.4 2.0 1.55
2014 628 11 0 11 2.5 2.0 1.50
2015 614 12 0 11 3.1 3.0 1.61
2016 785 12 0 12 2.8 2.0 1.81
diversos algoritmos para resolver o problema de Ordenac¸˜ao de Dados, os quais possuem variadas caracter´ısticas relacionadas com a forma de implementac¸˜ao, custo de mem´oria e tempo de execuc¸˜ao [8]. Neste trabalho ´e empregado um algoritmo de ordenac¸˜ao denominado Ordenac¸˜ao por Inserc¸˜ao [10] para resolver um problema de competic¸˜ao de programac¸˜ao. Este algoritmo n˜ao necessita de mem´oria adicional para executar a ordenac¸˜ao, j´a o tempo de processamento pode variar em relac¸˜ao ao tamanho da entrada de forma linear no melhor caso e de forma quadr´atica no pior caso.
IV. DESEMPENHO DECOMPETIDORES DAMARATONA DE PROGRAMAC¸ ˜AO
Al´em do levantamento sobre o conte´udo t´ecnico que est´a en-volvido nos problemas da Maratona de Programac¸˜ao, neste tra-balho tamb´em foi executado um levantamento sobre o desem-penho dos competidores em edic¸˜oes anteriores da competic¸˜ao. A Maratona de Programac¸˜ao ´e executada em duas fases: uma primeira Fase Regional e uma segunda Final Nacional. Na fase regional, a competic¸˜ao ´e realizada simultaneamente em diversas localidades (sedes) espalhadas por todo territ´orio do Brasil. J´a a final nacional ´e realizada em uma ´unica cidade do Brasil com todos os times que foram classificados para esta segunda fase.
Na Tabela I ´e poss´ıvel verificar um hist´orico resumido sobre o desempenho de times na fase regional das ´ultimas quatro edic¸˜oes da Maratona de Programac¸˜ao. Para cada problema resolvido na competic¸˜ao as equipes competidoras recebem um (1) ponto. Conforme indicado na Tabela I, em geral embora existam equipes competidoras que conseguem resolver quase todos os problemas da competic¸˜ao, em sua maioria as equipes competidoras n˜ao est˜ao aptas a solucionar a maior parte dos problemas da competic¸˜ao j´a que a m´edia de problemas resolvidos ´e menor que a metade da quantidade de problemas propostos. Sendo assim, levando em conta o desempenho de todas as equipes competidoras no pa´ıs, considera-se que mesmo existindo algumas equipes que conseguem resolver quase todas as quest˜oes da competic¸˜ao, essas s˜ao equipes infrequentes dentro do total de equipes competidoras.
Na fase regional, para cada sede ´e delimitado um quan-tidade de vagas na final nacional que ´e calculada baseada no quantitativo de times competidores na sede. Desta forma, na final nacional s˜ao classificados n˜ao somente os melhores times do Brasil em termos de pontuac¸˜ao mas tamb´em os melhores times de cada uma das sedes. Ou seja, o perfil dos times classificados para a final nacional depende n˜ao somente do desempenho dos times na competic¸˜ao (em termos de pontuac¸˜ao) mas tamb´em depende da distribuic¸˜ao de vagas
pelas sedes. Neste contexto, na Tabela II ´e listada a m´edia de pontuac¸˜ao m´ınima (a pontuac¸˜ao que um time teve que fazer para conseguir classificar-se para a final nacional) por sede dos times classificados para a final nacional nas ´ultimas quatro edic¸˜oes da Maratona de Programac¸˜ao.
Tabela II
PONTUAC¸ ˜AOM´INIMA DETIMESCLASSIFICADOS PARA AFINAL
NACIONAL Ano Total de Sedes M´edia da Pontuac¸˜ao M´ınima Mediana Desvio Padr˜ao 2013 31 3.96 4.0 1.46 2014 32 4.00 4.0 1.25 2015 28 4.50 4.0 1.32 2016 32 5.37 5.0 1.53
Comparando os dados de pontuac¸˜ao m´ınima de times clas-sificados para a final nacional (listados na Tabela II) com os dados de pontuac¸˜ao m´edia de todos os times competidores da fase regional (listados na Tabela I), ´e poss´ıvel concluir que: para que uma equipe tenha uma maior probabilidade de ser classificada para a final nacional da competic¸˜ao esta deveria resolver aproximadamente metade dos problemas da competic¸˜ao, isto ´e, deveria ter um desempenho de pontuac¸˜ao um pouco acima (de dois (2) a trˆes (3) pontos a mais) em relac¸˜ao `a m´edia nacional.
Dado o recorrente baixo desempenho m´edio de equipes competidoras, a principal motivac¸˜ao deste trabalho ´e deter-minar as causas que geram este desempenho. Desta forma, um experimento pr´atico (a ser posteriormente detalhado na Sec¸˜ao V) com objetivo de diagnosticar tais causas ´e discu-tido neste trabalho. O experimento foi executado dentro de uma instituic¸˜ao de ensino superior (no Instituto Federal de Educac¸˜ao, Ciˆencia e Tecnologia do Cear´a - campus Crato) com alunos de um curso de graduac¸˜ao na ´area de Ciˆencia da Computac¸˜ao (bacharelado em Sistemas de Informac¸˜ao). Logo, ´e primeiramente necess´ario entender o desempenho geral das equipes competidoras da instituic¸˜ao tal que o experimento foi executado. Na tabela III ´e mostrado o resultado de desempenho da instituic¸˜ao de ensino superior em quest˜ao nas ´ultimas quatro edic¸˜oes da Maratona de Programac¸˜ao.
De acordo com os resultados listados na Tabela III, em relac¸˜ao ao desempenho da instituic¸˜ao em competic¸˜oes ante-riores da Maratona de Programac¸˜ao ´e poss´ıvel perceber que:
i) as equipes da instituic¸˜ao com menor pontuac¸˜ao conseguiram
resolver pelo menos um problema. ii) As equipes competidoras da instituic¸˜ao com melhor pontuac¸˜ao conseguiram obter alguns resultados relevantes dado que obtiveram pontuac¸˜ao levemente
Tabela III
HISTORICO DE´ DESEMPENHO DOIFCE-CAMPUSCRATO NAMARATONA DEPROGRAMAC¸ ˜AO
Ano Times Total de Problemas Menor Pontuac¸˜ao Maior Pontuac¸˜ao M´edia de Pontuac¸˜ao Mediana Desvio Padr˜ao
2013 5 10 1 3 1.8 2.0 0.83
2014 4 11 2 3 2.5 2.5 0.57
2015 4 12 2 3 2.7 3.0 0.50
2016 4 12 1 4 2.2 2.0 1.25
Tabela IV
PERFIL DA AMOSTRA SUBMETIDA AO EXPERIMENTO
Disciplina em Curso Total Turma I: Ordenac¸˜ao por Inserc¸˜ao Turma II: Caminhos mais Curtos
Quantidade % Quantidade % Quantidade %
Estruturas de Dados 21 54% 10 50% 11 58%
Complexidade Computacional e Grafos 8 20% 4 20% 4 21%
Pesquisa e Ordenac¸˜ao de Dados 10 26% 6 30% 4 21%
superior `a m´edia de todos os times da competic¸˜ao. iii) Apesar disso, os times da instituic¸˜ao n˜ao conseguiram atingir uma pontuac¸˜ao que fosse ao menos pr´oxima `a metade de todos os problemas da competic¸˜ao.
Dados os resultados anteriormente discutidos, neste trabalho o principal objeto de pesquisa ´e entender o porquˆe que na m´edia, a maioria dos times n˜ao consegue sequer ter um resultado de pontuac¸˜ao pr´oximo `a metade da quantidade de problemas da competic¸˜ao. Para isto, tomamos como amostra para um experimento um conjunto de alunos de curso de graduac¸˜ao na ´area de Ciˆencia da Computac¸˜ao (bacharelado em Sistemas de Informac¸˜ao) do Instituto Federal de Educac¸˜ao, Ciˆencia e Tecnologia do Cear´a - campus Crato. O objetivo ´e analisar as dificuldades sofridas por esta amostra de alunos e com isso entender os desafios e obter lic¸˜oes aprendidas para assim encontrar um indicativo de como conduzir uma melhor forma de ensino e aprendizagem para programac¸˜ao competitiva.
V. O EXPERIMENTO
Dada a problem´atica anteriormente discutida, uma amostra de alunos de um curso de graduac¸˜ao na ´area de Ciˆencia da Computac¸˜ao (bacharelado em Sistemas de Informac¸˜ao) do Instituto Federal de Educac¸˜ao, Ciˆencia e Tecnologia do Cear´a - campus Crato foi selecionada para participar de um experi-mento. Especificamente, o objetivo principal do experimento ´e entender as poss´ıveis causas do baixo engajamento dos alunos e tamb´em o baixo rendimento dos discentes em competic¸˜oes de programac¸˜ao.
No curso em quest˜ao existem algumas disciplinas de lin-guagens e paradigmas de programac¸˜ao bem como disciplinas de algoritmos e estruturas de dados. Especificamente, no curso existe uma disciplina de Programac¸˜ao Estruturada bem como 3 (trˆes) disciplinas com ˆenfase em algum tema de algoritmos de estruturas de dados: Estruturas de Dados (vetores, matrizes, pilhas, listas, filas); Complexidade Computacional e Grafos; e Pesquisa e Ordenac¸˜ao de Dados. Supondo que 𝐴 → 𝐵 significa que a disciplina 𝐴 ´e pr´e-requisito para cursar a disciplina 𝐵, temos que os alunos devem respeitar a seguinte ordem ao cursar as disciplinas no decorrer da graduac¸˜ao:
Programac¸˜ao Estruturada → Estruturas de Dados → Com-plexidade Computacional e Grafos→ Pesquisa e Ordenac¸˜ao de Dados.
A amostra total do experimento ´e composta por 39 alunos que cursam entre o segundo e s´etimo per´ıodo (especificamente 34.7% j´a passaram da metade do curso, que ocorre no quarto per´ıodo). Todos os alunos da amostra j´a cursaram a disci-plina de Programac¸˜ao Estruturada e tˆem conhecimento das principais rotinas e do emprego de estruturas de repetic¸˜ao e decis˜ao com a linguagem de programac¸˜ao C. A amostra total foi dividida em duas turmas diferentes que foram submetidas a atividades diferentes (as atividades s˜ao detalhadas a seguir nesta mesma sec¸˜ao) mas respeitando uma uniformidade de distribuic¸˜ao dos alunos nas turmas em relac¸˜ao a qual disciplina de algoritmos os alunos estavam cursando na graduac¸˜ao. Isto ´e, a amostra total foi dividida em duas turmas de maneira que a porcentagem de alunos que estavam cursando a mesma disciplina de algoritmos nas duas turmas fosse aproximada. Apesar disso, vale ressaltar que a escolha dos alunos de uma determinada disciplina foi feita de maneira aleat´oria. O perfil das turmas submetidas ao experimento ´e detalhado na Tabela IV.
O experimento realizado foi executado em uma tarde com cerca de 10 minutos de intervalo entre cada uma das cinco etapas enumeradas a seguir:
1) Aplicac¸˜ao do Question´ario I;
2) Apresentac¸˜ao e discuss˜ao de um conte´udo na ´area de algoritmos;
3) Aplicac¸˜ao do Question´ario II;
4) Aplicac¸˜ao e resoluc¸˜ao de um problema de competic¸˜ao de programac¸˜ao;
5) Aplicac¸˜ao do Question´ario III;
No primeiro passo de execuc¸˜ao do experimento foi solici-tado aos alunos que formassem equipes (times), uma vez que em geral as competic¸˜oes de programac¸˜ao s˜ao compostas por times. Al´em disso, ap´os a criac¸˜ao dos times, foi aplicado o Question´ario I para cada aluno participante. O Question´ario I tem como objetivo coletar informac¸˜oes sobre o conte´udo t´ecnico na ´area de algoritmos que cada participante j´a co-nhecia previamente, a experiˆencia do aluno na participac¸˜ao de
competic¸˜oes de programac¸˜ao e quais disciplinas de algoritmos j´a haviam sido cursadas pelo aluno.
O segundo passo consistiu em dividir de forma equilibrada (conforme detalhado na Tabela IV) os times em duas turmas diferentes. Na primeira turma foi executada uma discuss˜ao sobre o algoritmo de Caminhos mais Curtos de Dijkstra e na segunda turma foi executada uma discuss˜ao sobre o algoritmo de Ordenac¸˜ao por Inserc¸˜ao. Em ambas as turmas a discuss˜ao consistiu em uma aula em que os participantes interagiam com o instrutor a fim de entender o algoritmo discutido, bem como foram discutidos exemplos de aplicac¸˜ao do algoritmo a fim de fixar o conte´udo e eliminar d´uvidas. Vale ressaltar que al´em de discutir um t´opico pr´e-selecionado do tema de algoritmos sob um ponto vista te´orico o instrutor teve como tarefa instruir os participantes na aplicac¸˜ao do algoritmo em um problema pr´atico. Isto foi feito atrav´es da resoluc¸˜ao guiada de um problema pr´atico relacionado ao t´opico discutido. O objetivo do instrutor foi auxiliar os participantes a projetar soluc¸˜oes para o problema proposto empregando o algoritmo discutido. Para codificar as soluc¸˜oes foi utilizada a linguagem de programac¸˜ao C, uma vez que esta era a linguagem de programac¸˜ao conhecida por todos os participantes.
Ap´os a apresentac¸˜ao e discuss˜ao do conte´udo na ´area de al-goritmos, como um terceiro passo foi aplicado o Question´ario II. O objetivo deste question´ario ´e quantificar a clareza da aula, o qu˜ao did´atica foi a discuss˜ao executada pelo instrutor, o grau de compreens˜ao e a complexidade do t´opico abordado. Com as informac¸˜oes coletadas pelo Question´ario II ´e poss´ıvel verificar se dificuldades e baixo desempenho ao resolver problemas de competic¸˜ao relacionados ao t´opico discutido seriam decorrentes de alguma falha na metodologia de ensino e aprendizagem.
O quarto passo teve por objetivo a simulac¸˜ao do ambiente de uma competic¸˜ao, em que os times tiveram tempo limitado para projetar uma soluc¸˜ao e resolver um problema de edic¸˜oes anteriores da Maratona de Programac¸˜ao. Para a simulac¸˜ao o time deveria submeter uma soluc¸˜ao projetada e a mesma deveria ser aceita pelo sistema de julgamentos de soluc¸˜oes denominado URI Online Judge2. Para cada t´opico discutido
em cada turma foi selecionado um respectivo problema rela-cionado ao mesmo. Vale ressaltar que para cada uma das duas turmas foi aplicado o mesmo problema para todos os times da turma, e que o problema exigia a aplicac¸˜ao dos algoritmos previamente discutidos na aula para serem resolvidos.
O problema Pa´ıses em Guerra3 ´e um problema de edic¸˜ao anterior da Maratona de Programac¸˜ao o qual necessita de um algoritmo de Caminhos mais Curtos para resolvˆe-lo. Neste caso, o algoritmo de Dijkstra pode ser aplicado para o resolver o problema. J´a o problema Grid de Largada4 ´e um problema
que envolve ordenac¸˜ao de dados e pode ser resolvido atrav´es da aplicac¸˜ao do algoritmo de Ordenac¸˜ao por Inserc¸˜ao. Em am-bos os problemas n˜ao ´e necess´ario implementar modificac¸˜oes
2http://www.urionlinejudge.com.br
3http://www.urionlinejudge.com.br/repository/UOJ 1148.html 4http://www.urionlinejudge.com.br/repository/UOJ 1228.html
dr´asticas sob os algoritmos pr´e-existentes mas simplesmente aplic´a-los com ligeiras modificac¸˜oes para resolver o pro-blema proposto. Todo time recebeu uma vers˜ao impressa em papel do algoritmo (implementado na linguagem C) a ser empregado. Al´em disso, os problemas a serem resolvidos eram semelhantes aos empregados durante a discuss˜ao do algoritmo no segundo passo (aula) do experimento, de forma que os participantes j´a estariam familiarizados com a utilizac¸˜ao pr´atica do algoritmo implementado em linguagem C, inclusive da ciˆencia de tempo limitado para projetar a soluc¸˜ao e de como fazer leitura dos dados de entrada do problema e repass´a-los para serem processados pelo algoritmo.
Para finalizar o experimento, no quinto passo do mesmo foi aplicado o Question´ario III que tem como objetivo analisar os motivos de sucesso ou insucesso dos times no experimento. Este question´ario reporta um balanc¸o do experimento como um todo: a auto-avaliac¸˜ao dos participantes, a avaliac¸˜ao sobre o entendimento do problema, os motivos do alto ou baixo rendimento, o grau de interesse dos times em iniciar estu-dos na ´area de algoritmos e participar de competic¸˜oes de programac¸˜ao.
VI. AVALIAC¸ ˜AO DOSRESULTADOS DOEXPERIMENTO De acordo com a an´alise dos resultados obtidos pelo Ques-tion´ario I ´e poss´ıvel quantificar o perfil dos participantes do experimento em relac¸˜ao ao conhecimento pr´evio dos mes-mos em relac¸˜ao aos algoritmes-mos (de Caminhos mais Curtos e Ordenac¸˜ao por Inserc¸˜ao) que seriam discutidos em etapa seguinte do experimento. Desta forma ´e observado que a maioria de 66.4% (Figura 1(a)) da amostra de participantes n˜ao tinha conhecimento pr´evio do algoritmo a ser discutido na aula executada no experimento, fazendo deste o primeiro contato dos participantes com os temas discutidos.
J´a a partir da an´alise dos resultados obtidos atrav´es da aplicac¸˜ao do Question´ario II, pode-se verificar que 71,7% dos participantes (Figura 1(b)) classificaram positivamente (entre boa e excelente) a did´atica do instrutor da aula exe-cutada no experimento. No entanto, vale ressaltar que 35.25% (Figura 1(c)) dos participantes afirmaram n˜ao ter conhe-cimento de todos recursos avanc¸ados (tais como matrizes, vetores e filas) da linguagem de programac¸˜ao que foram empregados na implementac¸˜ao do algoritmo e desta forma atribu´ıram uma dificuldade moderada (Figura 1(d)) para en-tender a implementac¸˜ao dos algoritmos numa linguagem de programac¸˜ao espec´ıfica tal como a linguagem C.
Al´em disso, analisando os resultados do experimento coleta-dos atrav´es do Question´ario II ´e poss´ıvel verificar que embora a maioria dos participantes tenham compreendido a discuss˜ao dos algoritmos abordados (Figura 1(e)), apenas isso n˜ao ´e suficiente para obter sucesso na resoluc¸˜ao de um problema da competic¸˜ao. V´arios pontos que contribuem para o baixo rendimento dos participantes foram reportados atrav´es do Question´ario III: limitac¸˜ao de tempo, dificuldade em entender o problema, dificuldades na aplicac¸˜ao e implementac¸˜ao do algoritmo (Figura 1(f)).
33.6% Sim 66.4% N˜ao 0% 20% 40% 60% 80% (a) 9.65% Ruim 18.65% M´edia 51.3% Boa 20.4% Excelente 0% 10% 20% 30% 40% 50% 60% (b) 64.75% Sim 35.25% N˜ao 0% 15% 30% 45% 60% 75% (c) 18% F´acil 48.95% M´edio 33.05% Dif´ıcil 0% 15% 30% 45% 60% (d) 89.6% Sim 10.4% N˜ao 0% 15% 30% 45% 60% 75% 90% (e) 38.7% Implementar o algoritmo 23.3% Tempo 7.8% Aplicar algoritmo 30.2% Entender o problema 0% 10% 20% 30% 40% (f) 61.6% Sim 7.6% N˜ao 30.8% Talvez 0% 15% 30% 45% 60% (g) 20.55% Sim 25.8% N˜ao 53.7% Talvez 0% 15% 30% 45% 60% 75% 90% (h)
Figura 1. Resultados do Experimento: (a): Conhecimento pr´evio do algoritmo discutido no experimento; (b): Did´atica da apresentac¸˜ao; (c): Conhecimento de recursos avanc¸ados de linguagens de programac¸˜ao; (d): Classificac¸˜ao da dificuldade do algoritmo; (e): Compreens˜ao do algoritmo; (f) Causa do baixo rendimento; (g): Motivac¸˜ao para estudo na ´area; (h): Motivac¸˜ao para participar da pr´oxima edic¸˜ao da Maratona de Programac¸˜ao
A partir da an´alise do Question´ario III, constata-se que a maior dificuldade dos participantes est´a relacionada com o entendimento do problema e a implementac¸˜ao (numa lingua-gem de programac¸˜ao espec´ıfica) do algoritmo, assim como o tempo limitado para realizar tais feitos. Apesar disso, o fator com menor ´ındice para indicac¸˜ao do insucesso ´e a aplicac¸˜ao do algoritmo, reforc¸ando a premissa de que os algoritmos previamente discutidos haviam sido entendidos pelos times, mas apesar disso, os times sentiram dificuldade em modificar e adaptar o algoritmo original para obter a soluc¸˜ao do problema proposto.
Diante dessa circunstˆancia, conclui-se que ter somente o conhecimento pr´evio dos algoritmos n˜ao ´e suficiente para a resoluc¸˜ao dos problemas, j´a que mesmo compreendendo o funcionamento dos mesmos nenhum time conseguiu atingir 100% de aprovac¸˜ao da soluc¸˜ao submetida na plataforma URI Online Judge, isto ´e, a soluc¸˜ao n˜ao gera respostas corretas para o conjunto total de casos de testes que s˜ao executados pela plataforma de julgamento mas somente para uma parte dos casos de testes. A dificuldade de programar (isto ´e, manusear a linguagem de programac¸˜ao) para obter uma leve modificac¸˜ao do algoritmo original que resolve o problema proposto mostrou ser a maior causa do baixo rendimento, o que exp˜oe a dificuldade da maioria dos participantes em codificar a soluc¸˜ao desenvolvida.
Ainda pela an´alise do Question´ario III, ap´os o experimento pr´atico onde os times tiveram um contato com aplicac¸˜oes reais dos algoritmos, a maior parcela (Figura 1(g)) destes sentem-se mais motivados a iniciar estudos na ´area de projeto de algoritmos, por´em a experiˆencia n˜ao desperta o interesse dos mesmos em participar de edic¸˜oes futuras da Maratona de Programac¸˜ao (Figura 1(h)), considerando que a maior parte n˜ao possui certeza sobre ter ou n˜ao ambic¸˜ao quanto a isso.
VII. CONSIDERAC¸ ˜OESFINAIS
Pela observac¸˜ao dos aspectos analisados no experimento entende-se que para aprimorar o desempenho de times em competic¸˜oes de programac¸˜ao se faz necess´ario conhecer n˜ao apenas o conte´udo te´orico, forma de aplicac¸˜ao e funcio-namento de algoritmos existentes, mas tamb´em ´e essen-cial treinar a capacidade de interpretac¸˜ao das quest˜oes e a implementac¸˜ao dos algoritmos em alguma linguagem de programac¸˜ao espec´ıfica.
Al´em disso, uma segunda lic¸˜ao aprendida com o experi-mento executado neste trabalho diz respeito ao fato que a apresentac¸˜ao em sala de aula de algum algoritmo existente discutido do ponto de vista te´orico bem como pr´atico n˜ao ´e suficiente para garantir o sucesso de times competidores na Maratona de Programac¸˜ao. Isto ´e, simplesmente discutir em sala de aula um t´opico da ´area de algoritmos n˜ao ´e suficiente para produzir habilidade que implique diretamente que o competidor consiga resolver um problema de competic¸˜ao que envolve o mesmo t´opico previamente discutido.
Tamb´em pela an´alise dos resultados do experimento, percebe-se que uma parcela significativa n˜ao se sente motivada a participar das competic¸˜oes. J´a em relac¸˜ao aos participantes
que demonstraram interesse pelas competic¸˜oes e obtiveram maus resultados, acreditamos que a pr´atica e uso constante dos algoritmos e o estudo das linguagens de programac¸˜ao s˜ao uma forma eficaz para que os mesmos obtenham mais ˆexito nas competic¸˜oes. Esta vis˜ao de aprendizagem associada com treinamento tamb´em ´e defendida por [11] e evidenciada nos estudos apresentados em [6].
Logo, acreditamos que o treinamento para competic¸˜oes de programac¸˜ao se assemelha ao treinamento geral de competic¸˜oes esportivas em que o competidor deve treinar e aprimorar sua habilidade atrav´es da repetic¸˜ao. Ou seja, quanto mais diferentes problemas envolvendo diferentes t´opicos da ´area de algoritmos um time tiver resolvido antes de uma competic¸˜ao, maior ´e a probabilidade que o mesmo tenha sucesso na competic¸˜ao.
Neste sentido, o grande desafio envolvido ´e como propor uma maneira sistem´atica de treinamento que permita que um competidor evolua gradualmente e obtenha conhecimento te´orico e pr´atico sobre uma diversa quantidade de t´opicos da ´area de algoritmos e tamb´em desenvolva sua habilidade em alguma linguagem de programac¸˜ao. Al´em disso, o com-petidor deveria obter experiˆencia e habilidade para resolver os problemas da competic¸˜ao com rapidez. Apesar de que ferramentas tˆem sido propostas (tal como [7]) para automatizar e facilitar o processo de treinamento, a validac¸˜ao emp´ırica do aprimoramento da eficiˆencia do treinamento ao empregar tais ferramentas ainda ´e um ponto de pesquisa em aberto.
Na instituic¸˜ao em que o experimento foi executado ´e comum serem executados treinamentos de forma ad hoc (sem qualquer planejamento sistem´atico). Al´em disso, na instituic¸˜ao ´e vis´ıvel que os alunos com melhor desempenho na competic¸˜ao tˆem um autodidatismo hiperdesenvolvido o que faz com que os mesmos consigam aprender diversos t´opicos de algoritmos e desenvolver experiˆencia e habilidade de maneira autodata. Acreditamos que isto ocorre recorrentemente em di-versas instituic¸˜oes de ensino superior no pa´ıs, ou seja, o desafio ´e propor um novo m´etodo de treinamento que n˜ao se apoie no autodidatismo de maneira a potencializar uma maior participac¸˜ao de alunos ao prover um aumento gradual do interesse e experiˆencia dos mesmos, e assim, melhorar o desempenho geral de instituic¸˜oes competidoras.
Como trabalhos futuros almejamos realizar uma an´alise detalhada dos passos de compreens˜ao dos problemas dispostos nas competic¸˜oes e da codificac¸˜ao das soluc¸˜oes, os quais s˜ao os maiores desafios enfrentados pelos participantes como indicado pelo experimento executado neste trabalho. A partir desta an´alise mais trabalho futuro ´e requerido para propor um novo m´etodo sistem´atico de treinamento para competic¸˜oes de programac¸˜ao.
REFERENCIASˆ
[1] C. Irion, A. H. Pelegrino, and M. P. S. Botelho, “A motivac¸˜ao atrav´es da competitividade - A busca pela qualidade da educac¸˜ao no estudo da computac¸˜ao,” 2016.
[2] L. M. Regueras, E. Verdu, M. J. Verdu, and J. P. de Castro, “Design of a competitive and collaborative learning strategy in a communication networks course,” IEEE Transactions on Education, vol. 54, no. 2, pp. 302–307, May 2011.
[3] B. Silva and R. N. Madeira, “A study and a proposal of a collabora-tive and competicollabora-tive learning methodology,” in IEEE EDUCON 2010
Conference, April 2010, pp. 1011–1018.
[4] A. Nikov, I. Kulev, P. Cavkovski, A. Misev, V. Trajkovik, and D. Trajanov, “Codefu: Coding competition as a tool for industry university collaboration,” in Proceedings of the 2014 International
Workshop on Long-term Industrial Collaboration on Software Engineering, ser. WISE ’14. New York, NY, USA: ACM, 2014, pp. 63–
68. [Online]. Available: http://doi.acm.org/10.1145/2647648.2647657 [5] X. G. Paneda, D. Melendi, S. Cabrero, R. Blanco, R. Garcia, and A. R.
Rodriguez, “Three techniques for competitive lab activities based on project-oriented learning in information and communication technolo-gies,” IEEE Revista Iberoamericana de Tecnologias del Aprendizaje, vol. 8, no. 1, pp. 39–46, Feb 2013.
[6] S. Jackson, H. J. Ellis, and R. Crouse, “An analysis of team performance in high school programming contests,” in Proceedings of
the 15th Annual Conference on Information Technology Education, ser.
SIGITE ’14. New York, NY, USA: ACM, 2014, pp. 27–32. [Online]. Available: http://doi.acm.org/10.1145/2656450.2656469
[7] L. C. de Paula, A. G. de Oliveira Fassbinder, and E. F. Barbosa, “A recommendation system to support the students performance in programming contests,” in 2014 IEEE Frontiers in Education Conference
(FIE) Proceedings, Oct 2014, pp. 1–8.
[8] T. H. Cormen, C. Stein, R. L. Rivest, and C. E. Leiserson, Introduction
to Algorithms, 2nd ed. McGraw-Hill Higher Education, 2001. [9] E. W. Dijkstra, “A note on two problems in connexion with graphs,”
Numer. Math., vol. 1, no. 1, pp. 269–271, Dec. 1959. [Online].
Available: http://dx.doi.org/10.1007/BF01386390
[10] D. E. Knuth, The Art of Computer Programming, Volume 3: (2Nd Ed.)
Sorting and Searching. Redwood City, CA, USA: Addison Wesley Longman Publishing Co., Inc., 1998.
[11] H. Steven and H. Felix, Competitive Programming 3 : The New Lower