Hackathons: Transformando o Ensino de Programação

Ensinar programação vai além de ensinar a escrever códigos. A prática de copiar e colar tem seu papel inicial, mas precisa dar lugar à resolução de problemas e à criação de algoritmos. Com hackathons e gamificação, é possível engajar alunos, reforçar conceitos essenciais e prepará-los para o mercado de trabalho, formando programadores mais confiantes e capazes.

Por: Professor Fernado Posser

Quando comecei a aprender programação, as opções de estudo eram limitadas. Podíamos comprar apostilas impressas, adquirir CDs com cursos vendidos em bancas ou participar de aulas presenciais. Com o passar dos anos, especialmente a partir de 2018, o cenário mudou drasticamente.

Houve uma ascensão da acessibilidade de conteúdo online sobre programar. Se você soubesse inglês, tudo o que você precisava era uma boa internet para acessar o YouTube e o Stackoverflow. Até mesmo os conteúdos em português começaram a ganhar cada vez mais espaço, o que também abriu caminho para cursos online estruturados em plataformas de aprendizagem.

Hoje, qualquer um que tiver vontade e tempo disponível pode aprender programação. O material completo para sair do zero e chegar ao nível básico é muito fácil de achar, mas a experiência inicial é a mais importante. Essa experiência eu chamo de “soltar a mão”. Os professores de música criaram este termo para resumir o processo de todo iniciante em música a explorar o instrumento e se sentir mais à vontade com ele. Na programação não é diferente.

O processo é simples: O instrutor explica a teoria; Escreve um código e mostra funcionando;  Enquanto isso o aluno copia e executa junto com ele.  Dessa forma o aluno se acostuma a escrever palavras e estruturas que até então nunca tinha visto, ele “solta a mão” com o código.

O Problema de Apenas Copiar Códigos

Até aí tudo parece em ordem, porém, algo começou a mudar mesmo em 2018 com a popularização dos cursos online: os alunos passaram os cursos/vídeos inteiros copiando código na maior parte do tempo ao invés de escrever seu próprio código.

Com o tempo, isso foi se tornando um problema tão presente e visível que o mercado até criou um termo para isso os dev fullsterco, que é um trocadilho para dev fullstack que é o profissional que (geralmente) desenvolve no frontend e no backend. Já o fullsterco “faz m… no frontend e no backend”. Mas como isso aconteceu?

A resposta é muito simples. Ao copiar o código, as pessoas têm a impressão de que estão aprendendo a desenvolver suas próprias soluções para o problema proposto, mas na verdade, estão desenvolvendo a habilidade de acompanhar uma aula enquanto copiam código.

Mas eu não falei antes que “soltar a mão” era uma coisa boa? Sim, mas como diz o velho ditado: a diferença entre o remédio e o veneno é a dose. Enquanto se está dando os primeiros passos, copiar é importante para se acostumar com escrita de código.

Se uma pessoa que está aprendendo a programar se depara com erros e stack traces complicados, ela pode desistir, nessa etapa, o “soltar a mão” ajuda muito. Mas, logo que ela se acostuma com a escrita de códigos, é importante começar a escrever seus próprios códigos e encarar problemas como: erros de lógica e sintaxe, criação de estruturas mais complicadas do que poderiam ser, entre várias outras coisas. É como cair e aprender a levantar.

Ao ficar somente na cópia, o cérebro não é estimulado a pensar na abstração e lógica necessárias para a resolução de um problema. Ao não fazer isso, o estudante não encara os desafios provindos do processo de ensino.

O resultado vai surgir de forma agressiva quando o aluno tentar entrar no mercado de trabalho e não ter um bom resultado. É como um ciclista que treina apenas utilizando rodinhas na bicicleta e tenta encarar um campeonato de 50 quilômetros de pedalada sem rodinhas, com vento, sol e temperatura a 40ªC.

Soluções Práticas para Estimular o Pensamento Computacional

Para resolver isso o aluno precisa antes ter uma forte base sobre a criação de algoritmos simples. Ele vai precisar abstrair, decompor e reconhecer padrões

A abstração é a forma como o aluno entende o problema e os recursos (lógica) que serão necessários para resolvê-lo. A decomposição é o processo de dividir esse grande problema em problemas menores e resolvê-los pouco a pouco para chegar a um resultado. Por fim, o reconhecimento de padrões auxilia o aluno a encontrar padrões não só na similaridade desse problema com outras coisas parecidas que ele já conheceu, mas também a encontrar padrões no próprio problema para reduzir a complexidade do código e deixar tudo mais simples.

Essas 3 habilidades são elementos básicos que todo estudante e profissional de tecnologia/programação precisa desenvolver antes de se aventurar em problemas mais complexos e uso de ferramentas mais abstratas como bibliotecas e frameworks.

Nova Geração e a Resistência em Escrever Códigos do Zero

Essa nova geração, por mais que você incentive a criar seus próprios códigos e usar métodos de estudo que os faça escrever do zero, eles não fazem.

É nítido que eles vêm ficando cada vez mais imediatistas. Não é incomum ver nos dias de hoje os estudantes iniciarem seu aprendizado na área com vídeos sobre React, Angular, HTML e CSS, VUE JS, Next e outras bibliotecas e frameworks frontend. E qual a consequência disso?! Jovens sem base alguma, mais bibliotecas que implementam e abstraem conceitos de lógica de programação, algoritmos, estrutura de dados, orientação a objetos e design patterns e a criação de interfaces complexas.

Que resultado isso vai trazer? O infinito ciclo de copiar e colar código. E infelizmente, isso não vem sendo resolvido nem mesmo em cursos presenciais, pois os estudantes usam cursos online e vídeos no YouTube como material de apoio e mantêm esse comportamento de copiar e colar.

E se o problema é o comportamento, como enfrentá-lo?

Uso de Plataforma para Incentivar a Escrita de Código

Entre 2014 e 2023 encontramos na, Edtech Enter Tech Edu, startup de tecnologia, uma maneira de impactar dezenas de milhares de estudantes, com o uso de gamificação por meio de hackathons. Assim que os estudantes “soltavam a mão” com o código, eram realizados os primeiros hackathons com 3 conjuntos de problemas: fáceis, médios e difíceis, todos levando em consideração o nível dos estudantes de forma a manter um flow de trabalho.

Ao final de cada hackathon era realizada uma conversa em grupo para analisar os desafios encontrados ao mesmo tempo que resolvíamos alguns deles juntos com os alunos, demonstrando a importância de habilidades de abstração, decomposição e reconhecimento de padrões.

Essas atividades mostravam o quanto os conhecimentos básicos são importantes e estimulam eles a desenvolver os conhecimentos base antes de dar grandes passos.

Mas como fazer um hackathon? Existem várias formas, mas, depois de muita procura e pesquisa, a melhor que encontramos foi na da plataforma da beecrowd.  

Na beecrowd encontramos problemas dos mais variados tipos que vão de percorrer strings até cálculos complexos, passando por grafos, árvores e estruturas de dado. Além disso, implementa um ambiente onde podemos criar e configurar hackathons que nossos alunos podem acessar e podemos monitorar em tempo real, além de avaliar seus resultados.

Isso nos deu um controle muito grande sobre a principal ferramenta que utilizamos durante as formações para desenvolver nos alunos as habilidades mais essenciais para aprender lógica de programação e pensamento computacional. 

Além do hackathon inicial, com o passar do tempo eles enfrentam cada vez mais hackathons que aumentam o nível do desafio, porém, agora mais bem preparados para essa atividade já que os conhecimentos essenciais para resolver qualquer problema foram desenvolvidos.

Benefícios Para os Alunos

Utilizando essa abordagem que instiga a compreensão dos conhecimentos básicos e essenciais, o aluno passa a desenvolver uma série de habilidades que o tornam mais preparado para enfrentar os desafios do mercado de trabalho.

Primeiramente, ao participar dos hackathons e resolver problemas por conta própria e em grupo, ele melhora suas habilidades de independência e trabalho em equipe. Isso é fundamental para que ele tenha mais confiança ao encarar tarefas de programação e aumente sua resiliência frente a dificuldades.

Além disso, a prática de resolver problemas e construir seus próprios algoritmos o ajuda a internalizar conceitos como abstração, decomposição e reconhecimento de padrões. Essas habilidades não só o tornam um programador mais eficiente, mas também formam uma base sólida para que ele possa aprender outras linguagens e tecnologias com mais facilidade.

Ao se ver obrigado a pensar nos detalhes de um problema e encontrar uma solução, ele desenvolve uma compreensão mais profunda dos conceitos, que vai muito além da simples memorização ou da prática de copiar e colar códigos.

Esse método também contribui para o desenvolvimento de uma mentalidade de aprendizado contínuo, essencial para a área de tecnologia, onde novidades surgem a todo momento.

Mas o mais importante certamente é a concretização dos conhecimentos básicos, pois com eles o aluno pode navegar entre tecnologias e frameworks com mais naturalidade e no seu próprio tempo.

Benefícios para o Curso

A evasão sempre foi o maior medo dos professores e coordenadores de cursos de tecnologia.

Com a minha experiência, digo que a desistência, na maior parte das vezes, está atrelada a três coisas:  Economia; Dificuldade; Conhecimento sobre o curso escolhido.

Sobre economia, não há o que fazer, afinal, ninguém irá se intrometer nas finanças da família do estudante. O conhecimento sobre o curso, nos dias de hoje, já é algo que não é tão grave, afinal, as pessoas estão mais imersas em tecnologia e sabem que gostar de redes sociais e navegar pela internet não é razão para fazer um curso de programação. Mas a dificuldade que o estudante enfrenta é algo totalmente controlável.

A resposta não está em facilitar o conteúdo. Seguindo por este caminho, formaremos profissionais com baixa capacitação. Controlar os estímulos e metodologias aplicadas no decorrer do curso é algo mais eficaz e que pode atingir diretamente as razões da dificuldade que o aluno tem ao resolver os desafios que lhe são impostos.

Com essa metodologia que aplicamos, a taxa de evasão e de frustração dos estudantes diminuiu, pois os desafios propostos são adequados ao nível de conhecimento deles, e o uso da gamificação com hackathons torna o aprendizado mais dinâmico e motivador. Os alunos permanecem engajados e têm um desenvolvimento mais linear, o que aumenta as taxas de retenção e conclusão do curso.

O curso passou a formar alunos com uma base mais sólida e uma visão mais ampla da programação. Além disso, com a prática de avaliação constante durante os hackathons, o curso conseguiu monitorar o progresso dos alunos de maneira mais eficaz, identificando dificuldades específicas e ajustando o conteúdo conforme necessário.

Essa abordagem permitiu uma evolução constante não só do aluno, mas também do próprio curso.

Se há algo que aprendi em mais de uma década de programação e com os milhares alunos que tive no ensino técnico e no bacharelado, é que aprender programação não se trata apenas de escrever código. Programar significa pensar de forma lógica e ao mesmo tempo encarar os problemas com criatividade

Copiar e colar código tem seu papel no processo de aprendizagem. Sem essa etapa, nossos alunos não “soltam a mão” e se familiarizam com os fundamentos da programação. Porém, prolongar essa metodologia não trará bons resultados, pois os estudantes não serão capazes de encarar desafios reais e desenvolver as competências essenciais para competir no mercado de trabalho.

Garanto que usar hackathons e gamificação com um público novo na área da programação se mostrará muito eficaz para combater o comportamento de copiar e colar. As habilidades que isso desenvolve, com o tempo, trarão benefícios não apenas para o aluno, mas também para o curso. 

Assim como fizemos na Enter Tech Edu, conte com a plataforma da beecrowd para te ajudar nessa tarefa. Afinal, formar programadores competentes é formar pessoas capazes de pensar, criar e transformar – e esse é o verdadeiro valor da educação em tecnologia.

Prof. Fernado Posser ingressou na área de tecnologia em 2008. Se tornou mestre em computação aplicada, dando aulas a partir de 2015. Atualmente tem seu estúdio de desenvolvimento de jogos (POPI Games Studio) e é professor na Atitus Educação.

Conteúdo

Nossos artigos mais recentes
Leia sobre as últimas tendências na área de tecnologia

Extra, extra!

Assine nossa newsletter

Fique sempre atualizado com as novidades em tecnologia, transformação digital, mercado de trabalho e oportunidades de carreira

Gostaria de falar com um Representante de Vendas?

Interessado em: