Em Direção a uma Ferramenta de Recomendação de Código para Apoiar o Aprendizado de Programação
Authors: Moura Guilherme de Ávila de , Silva Williamson , Lunardi Gabriel Machado 
Published: May 2023

Aprender programação de computadores é uma atividade desafiadora, especialmente para quem está iniciando na área. Os principais desafios enfrentados pelos estudantes novatos são abstração e compreensão da lógica de programação [8], ou seja, sistematizar problemas em algoritmos e materializá-los em código-fonte [14 , 19]. Como resultado, alguns possíveis problemas a curto e longo prazo podem emergir [10 , 11]: (i) a curto prazo, o tempo gasto para realização das atividades e fixação de novos conceitos de programação, que ocorre principalmente quando o estudante ainda está na fase inicial de aprendizado; (ii) a longo prazo, em que o estudante, já atuando no mercado de trabalho, apresenta menor produtividade em traduzir as necessidades do cliente em uma solução algorítmica, impactando no atraso do projeto e até mesmo na entrega para o cliente. Uma maneira para tentar minimizar esse problema pode ser por meio de um apoio ferramental, em que o estudante verifica a semântica e a completude do seu raciocínio em relação a um determinado problema. Além disso, tal apoio pode auxiliar o estudante na descoberta de diferentes formas sobre como solucionar um problema, tais como a escrita de uma estrutura de controle condicional na forma if-else ou, alternativamente, na forma de um teste ternário. Os sistemas de recomendação baseados em código-fonte (Source Code based Recommendation System - SCoReS) fornecem suporte para algumas tarefas, por exemplo: como usar uma determinada API (Application Programming Interface) ou uma estrutura; dicas sobre elementos que estão omissos ou ambíguos no código; sugestões sobre como como reutilizar ou corrigir um código existente; ou, ajudar programadores novatos a aprender um novo projeto, paradigma de programação, ou estilo [7]. Com isso, um SCoReS é relevante para a melhoria do desenvolvimento de software, principalmente do código-fonte, por este ser o artefato mais atualizado e, portanto, a fonte de dados mais confiável [13 , 20]. É importante destacar que o código-fonte fornece uma fonte rica e estruturada de informações, com base nas quais os sistemas de recomendação podem ser construídos para fornecer recomendações úteis a desenvolvedores de software ou iniciantes em programação. Com isso em mente, foi realizada uma pesquisa em artigos científicos, publicados em conferências e periódicos, e na loja de extensões do editor de código VSCode, tendo em vista sua popularidade [15], a fim de verificar ferramentas que pudessem ser utilizadas como auxílio aos estudantes. Dentre as identificadas, a que mais se aproximou da ideia de apoiar os estudantes durante a escrita de códigos foi a SoCeR (A New Source Code Recommendation Technique for Code Reuse) [16], uma ferramenta que recomenda código-fonte por meio da interação em linguagem natural com o usuário. Entretanto, a ferramenta não está disponível para uso e não existem detalhes sobre seu desenvolvimento. Ainda, descrevem outras ferramentas similares, como Koder [2] e Krugle [1], que também foram aqui testadas e suas funcionalidades se mostraram insuficientes para atender às necessidades de nossa metodologia [16]. Já as extensões do editor VSCode testadas foram: Clara [4], Blackbox [5], Captain Stack [6], Tabnine [3] e GitHub Copilot [9]. Após uma minuciosa avaliação de todas as ferramentas apresentadas, foi evidenciado que nenhuma delas atendia plenamente às necessidades da metodologia proposta. As únicas ferramentas que se mostraram adequadas para o propósito não estavam disponíveis para uso (SoCeR) ou eram de caráter pago (GitHub Copilot). Diante desse cenário, torna-se evidente a necessidade de proposição, desenvolvimento e avaliação experimental de uma ferramenta de código aberto que seja capaz de atender às especificações requeridas e listadas anteriormente. Portanto, este trabalho tem por objetivo desenvolver um SCoReS, para apoiar o ensino de programação, com acesso público e facilitado a todos. Para tanto, será necessário conduzir algumas etapas. (i) Identificar, construir e validar uma base de conhecimento útil em programação para desenvolvedores de software iniciantes que servirá como entrada para o sistema de recomendação. A partir dela, vislumbra-se a recomendação de código a partir da própria interação do usuário, conforme este projeta seus códigos durante o aprendizado de programação. Em outras palavras, o sistema SCoReS aprenderá como a pessoa pensa para resolver os problemas e sugerirá melhorias e correções, aumentando continuamente sua base de dados. Além disso, será necessário (ii) definir qual(is) modelo(s)/algoritmo(s) de recomendação, baseados em Inteligência Artificial, serão empregados. À primeira vista está o emprego do modelo baseado em conteúdo que emprega técnicas de mineração de textos [17], seguida de modelos pré-treinados de linguagens, tais como codeBERT [12]. Também espera-se (iii) desenvolver uma interface para acesso aos resultados da recomendação por meio de uma extensão para o editor VSCode. A escolha do editor está ligada à popularidade da ferramenta entre programadores iniciantes e experientes. Por fim, espera-se (iv) avaliar a assertividade das recomendações geradas [18] para o apoio do aprendizado de programação, assim como a experiência de aprendizagem dos estudantes (learning experience) com a ferramenta proposta. Ressalta-se que esta proposta está será pautada em uma metodologia baseada em experimentação, que utiliza estudos experimentais para avaliar e evoluir tecnologias de software [21].