Os pilares do aprendizado em programação e porque iniciantes devem domina-los
20 December 2018 — 9 min read.
Esse artigo é uma tradução adaptada do artigo The main pillars of learning programming — and why beginners should master them. por Rainer Hahnekamp
Eu tenho programado por mais de 20 anos. Durante esse tempo eu tenho tido o prazer de trabalhar com muitas pessoas, nas quais eu aprendi muito. Eu também trabalhei com muitos estudantes, recém saídos da faculdade nos quais eu tive de assumir o papel de professor e mentor.
Ultimamente eu tenho atuado como um treinador em um programa que ensina programação para iniciantes completos.
Aprender como programar é difícil. Frequentemente encontro cursos de universidades e bootcamps deixando de lado aspectos importantes da programação e escolhendo abordagem ineficientes para iniciantes.
Eu quero compartilhar cinco pilares nos quais eu acredito que um curso de programação de sucesso deveria ser construído em cima.
O objetivo de um iniciante é dominar os fundamentos da programação e entender a importância de bibliotecas e frameworks
Tópicos avançados como ‘a nuvem’, operações no geral , ou construir ferramentas não deveriam fazer parte do currículo. Também sou cético quando o assunto é padrões de design. Eles presumem experiência que iniciantes nunca possuem.
Então vamos dar uma olhada onde novos programadores devem começar.
TDD - Test-Driven Development (Desenvolvimento guiado a testes)
TDD traz uma série de benefícios. Infelizmente é um tópico avançado no qual iniciantes não estão completamente prontos para absorver.
Iniciantes não deveriam escrever testes. Isso seria muito para suas habilidades. Entretanto eles deveriam saber como usar e trabalhar com testes.
Todo curso de programação deveria ser centrado em exercícios. Eu adiciono aos meus exercícios testes unitários e provenho aos estudantes um ambiente pronto para que os testes funcionem.
Tudo que o estudantes têm de fazer é escrever o código e observar as luzes do programa de testes mudarem de vermelho para verde. A ‘gamificação’ resultante também é um ótimo efeito colateral.
Por exemplo: Se a tecnologia selecionada foi Spring, vou prover o exercício e testes juntamente com o projeto Spring. Os estudantes não precisam saber nada sobre Spring, Tudo o que eles precisam saber é a localização do exercício e o botão para disparar os testes.
Adicionalmente estudantes precisam saber como usar o ‘debugger’. A habilidade de analisar código durante o tempo de execução e de ter um playground para pequenos experimentos é essencial em TDD
O ponto principal é certificar-se que alunos aprendam o básico do comportamento do TDD após terem adquirido habilidades fundamentais de programação. Mudar hábitos tarde na carreira de um programador será mais difícil do que aprendê-los desde o início. É por isso que iniciantes devem respirar testes unitários dês o começo.
Fundamentos primeiro
Escuto com frequência que iniciantes devem começar imediatamente com algum framework. É como ensinar pessoas como dirigir colocando-os direto em um carro e pedindo para que façam a curva perfeita. Isso simplesmente ignora o fato que eles não sabem nem qual pedal que é usado para frear o carro.
O mesmo se aplica quando introduzimos um framework como o Angular a estudantes. Iniciantes precisam entender os fundamentos da programação primeiro. Eles precisam se familiarizar com os elementos básicos e o que significa escrever código antes de recorrer ao código escrito por terceiros.
O conceito de uma função, variável, uma condicional, e um loop são completamente alienígenas para iniciantes. Esses quatro elementos constroem as fundações da programação. Tudo que um programa faz é originado deles.
Estudantes estão ouvindo esses conceitos pela primeira vez , mas é extremamente importantes que sejam aptos a empregá-los. Se estudantes não dominar esses fundamentos, tudo que vier depois vai parecer mágica e levará a confusão e frustração.
Professores deveriam gastar mais tempo com esses fundamentos. Mas infelizmente muitos avançam muito rapidamente. O problema é que alguns professores têm dificuldade de se pôr na pele de estudantes. Eles tem programado por anos e esqueceram que tipos de problemas os iniciantes têm de lidar. É similar a um corredor profissional de Fórmula 1. Ele não consegue imaginar que alguém tenha de pensar antes de frear. Ele apenas faz automaticamente.
Fundamentos são importantes. Não avance antes que estejam bem estabelecidos.
Bibliotecas e Frameworks
Após estudantes gastarem um bom tempo programando, eles precisam aprender que a maioria do códigos existem em forma de uma biblioteca ou framework. Isso é mais um ‘mindset’ do que um padrão.
Para fazer essa transição de mentalidade um sucesso, os exemplos da fase de fundamentos devem ser resolvidos usando bibliotecas bem conhecidas da linguagem escolhida.
Dessa forma , estudantes irão automaticamente entender o valor das bibliotecas. Aqueles problemas nos quais eles batiam a cabeça para resolver, agora podem ser resolvidos facilmente com o uso de uma biblioteca.
Quando se trata de frameworks, estudantes não terão problemas em entender a sua importância uma vez que eles já tenham entendido a importância de uma biblioteca.
Dependendo do tempo disponível do curso pode ser difícil dispor de tempo para frameworks. Mas como já foi apontado, o mais importante é afastar a mentalidade do estudante de programar tudo do zero para começar a explorar e usar bibliotecas.
Mestre e aprendiz.
Quando tinha 20 anos de idade eu queria aprender a tocar piano. E não queria um professor e pensava que eu conseguiria aprender tudo sozinho. Cinco anos depois eu consultei um tutor profissional. Bem, o que eu posso falar ? eu aprendi mais em um mês do que durante cinco anos anteriores.
Meu instrutor de piano apontou erros na minha técnica de piano que eu não conseguia ouvir e me fez ciente de coisas que eu nunca havia imaginado. Depois de tudo ela inseriu em mim a mentalidade certa para música e artes, ambas as quais encontravam-se fora do meu alcance, como uma pessoa da área ‘técnica’
É o mesmo com programação. Se alguém não tem experiência em programação, então aprender sozinho pode ser uma má ideia. Embora existem muitas histórias de sucesso, eu questiono a eficiência de fazer isso sozinho.
Deveria existir uma relação “Mestre e aprendiz”. No começo o mestre impõe regras que o aprendiz deve seguir - Cegamente! O mestre pode até explicar as regras, mas geralmente a razão está além do entendimento do aprendiz.
Essas regras internalizadas formam uma espécie de rede de segurança. Se alguém cair sempre haverá um local seguro para retornar.
Ensinar não deveria ser um monólogo. O mestre tem de lidar com cada estudante individualmente. Ele deve checar como o estudante trabalha , dar conselhos, e adaptar a velocidade do curso ao seu progresso.
Uma vez que o aprendiz atinge certo nível de proficiência, ele deve ser encorajado a explorar novos territórios. O mestre então vira um ‘mentor’ que compartilha ‘sabedoria’ e opera discussões.
Desafios e motivação
“Vamos criar uma cópia do Facebook!” Isso não veio de chefe de um departamento de desenvolvedores de uma empresa multi milionária. Isso veio de um exercício introdutório ao curso de programação. Tal tarefa é virtualmente impossível. Ainda pior, estudantes são levados a acreditar que aqueles programadores que desenvolvem essas plataformas, possuem habilidades que estão verdadeiramente fora do alcance.
Sem dúvidas o professor está ciente disso, mas criou esse exercício com razões motivacionais.
O principal objetivo não era entreter. Ele deveria ser criado em volta de uma técnica em particular e deveria ajudar os estudantes a entender aquela técnica.
Motivação é bom, mas não em sacrifício do conteúdo. Programacao nao e facil. Se os estudantes não tem uma motivação intrínseca, codificar pode não ser um caminho a seguir.
Iniciantes devem vivenciar o que significa ser um desenvolvedor profissional. Eles deveria saber o que lhes esperam antes de muito tempo.
Por exemplo, muitas aplicações no mercado são centradas em formas completas e ‘grids’. Criar tais elementos pode ser uma habilidade importante que esses exercícios podem focar. Construir uma aplicação similar ao facebook logo de cara pode nao ser a melhor lição para estudantes.
De forma similar uma pessoa que nao programa pode ficar surpresa com a pouca quantidade de linhas que um desenvolvedor escreve por dia. Existem ainda momentos que removemos códigos e não completamos nada.
Porque ? porque as coisas dão errado o tempo todo. Nós gastamos horas intermináveis consertando aquele bug super estranho que acaba se tornando uma coisa corriqueira. Algumas ferramentas podem não funcionar apenas porque a biblioteca recebeu algum update mínimo de versão.Ou o sistema quebra porque alguém esqueceu de adicionar algum arquivo no git. A lista pode continuar infinitamente.
Estudantes devem gostar dessas experiências. Um exercício com uma biblioteca em foco e sob pressão pode não ser a melhor coisa a se fazer.
Conselho final
Por fim, mas não menos importante: Alguém não se torna um programador em duas semanas, dois meses , ou um ano. Leva tempo e prática
Instrutores não devem se apressar ou fazer falsas promessas. Eles devem focar em como os estudantes entendem os conceitos e não apressar muito as coisas.