Por Preethi Kasireddy. Originalmente publicado em freeCodeCamp.
Ser um/a aprendiz eficiente é tão importante quanto ser uma pessoa programadora eficiente. Quando você é uma pessoa desenvolvedora, seu trabalho requer que você aprenda todos os dias – apesar das constantes distrações do mundo hacker, do Twitter, do Reddit e do Facebook.
No trabalho, você constantemente se depara com novas bases de códigos e novos desafios técnicos. E em casa não é diferente, já que, por lá, você enfrenta repositórios de código aberto e projetos pessoais, cada um com seus próprios processos e desafios a serem resolvidos. O mundo tech muda rápido, e pode parecer um trabalho de tempo integral apenas se manter atualizado sobre as últimas ferramentas, linguagens e frameworks.
Resumo da história: aprender é um trabalho árduo. Entretanto, nós precisamos ser capazes de aprender rapidamente e de maneira eficiente, se quisermos prosperar.
No ano passado, eu passei de alguém que não sabia como usar o depurador do Chrome à engenheira de software de uma empresa líder no mercado de criptomoeda. No processo, eu rapidamente aprendi uma nova habilidade: programar.
Dito isso, aprender não foi algo fácil para mim. Honestamente, cada novo conceito era uma luta. Havia muitas incógnitas e muitas incertezas. “Como é possível que isso possa se sustentar?”, eu pensava comigo mesma. “Se é esse o sentimento que se tem todos os dias ao aprender a programar, eu serei infeliz. Essa é realmente a minha paixão?”
“Isso não deveria ser fácil para mim, já que essa é a minha paixão? Artistas lutam tanto assim para produzir arte? Escritores lutam tanto assim para escrever um grande livro? Atletas lutam assim para terem êxito numa corrida? Nós deveríamos ter que lutar tanto quando estamos perseguindo nossos sonhos?”
“Eu não deveria sentir prazer com isso?”
Fica fácil algum dia?
Sim, fica. Um ano depois, lidar com novos conceitos de programação ainda é “difícil”, já que requer disciplina e trabalho duro. Mas acabou se tornando um processo prazeroso, em vez de um processo opressivo. O que aconteceu no último ano que fez essa mudança possível? Simples: eu mudei minha perspectiva em relação à aprendizagem. O que antes me atingia como algo “difícil”, agora se tornou “engajador”. No resto do post, vou explicar como essa transformação aconteceu.
Começando
Aprender a programar é mais difícil no início. Por exemplo, pense na primeira linguagem de programação que você teve que aprender. Você quer lidar com coisas pequenas como sintaxe e estilo. Mas, primeiro, você terá que compreender conceitos fundamentais como valores, types, operadores, controladores de fluxo, funções, funções de ordem superior (higher order functions), scopes, closures, recursão e muito mais. É como aprender a fazer malabarismo – mas começando com 18 pinos em vez de dois.
Quando eu comecei a aprender sobre closures, levei algumas semanas para realmente compreender o conceito. Achei que tivesse entendido quando li a respeito. Mas quando tentei identificar e usar os closures na prática, eu fiquei desnorteada.
E isso não era incomum. Eu também observei esse processo como professora: novos conceitos geralmente não são compreendidos logo da primeira vez. Ou da segunda. Ou mesmo da décima.
Mas para aqueles que persistirem o suficiente, haverá um “ponto de virada” em que as coisas vão, de repente, começar a fazer sentido. No meu caso, eu li literalmente todos os posts de blogs do Stack Overflow e especificações sobre closures da internet.
Todas as coisas que li e testei me deram uma nova perspectiva, até que, finalmente, tive a imagem completa de como os closures funcionam. Eu entendi os closures .
Chegar a um ponto em que senti essa consciência de compreender os closures foi super importante, pois foi gratificante e me encorajou a ir além – incluindo escrever um post no meu blog explicando o conceito.
Aprender é um processo, não um objetivo
Se encaramos a aprendizagem como algo que devemos fazer, tentamos finalizá-la logo, assim podemos gastar o resto do nosso tempo fazendo alguma coisa mais divertida – algo que queremos fazer.
O problema é que é impossível saber tudo sobre todas as coisas, então, ver a aprendizagem como uma corrida nos leva à exaustão e ao desapontamento.
Mas se você pensar na aprendizagem como um processo, vai poder apreciar as pequenas vitórias e insights ao longo do caminho. E isso vai levar você a seguir adiante.
Você pode comparar isso com exercícios físicos. Exercícios causam dor, mas a dor acaba assim que o exercício termina. Mas, na realidade, ela nunca acaba de fato. Está sempre esperando por você no próximo exercício. A cada vez, a dor se torna menos aguda. Você aprende a lidar com isso. Você se acostuma com a dor e ela se torna apenas parte da rotina. Você é recompensado com uma saúde mais forte e um físico melhor, assim como é incentivado a continuar.
O exercício cria um ciclo de feedback positivo:
Tradução do original, disponível em: https://d262ilb51hltx0.cloudfront.net/max/800/1*VUpAEQ2zy8FY7jcegl32qA.png
Isso também é verdade para a aprendizagem.
Tornando a aprendizagem um processo engajador
Imagine-se criando seu primeiro aplicativo para web. No início, tudo o que você tem é um assustador editor de texto em branco. A tarefa de construir o aplicativo parece quase impossível. Você não sabe nada e tem muito a aprender antes que consiga fazer isso acontecer. Felizmente, você decide ir adiante de qualquer maneira.
A partir de então, seu foco principal passa a ser dar um passo de cada vez. Em primeiro lugar, você cria uma ideia. O que você fará? Quem será o usuário final? Quais são as restrições? Em segundo lugar, você cria um protótipo ou esboça alguns desenhos toscos sobre como você acha ele deveria ser. Você pergunta a opinião dos seus amigos, ou na internet, e os refaz, para deixá-lo melhor. Em terceiro lugar, você procura pelas linguagens, ferramentas e frameworks que funcionam melhor com seus requisitos. Passo a passo, você disciplina sua mente para canalizar toda a energia nesse objetivo específico.
Em alguns momentos você vai escrever linhas de código. Frequentemente, você se verá estagnado em algum tipo de bug ou erro. Algumas vezes você vai ficar cansado demais para fazer qualquer coisa e, então, fará uma pausa. Em outros momentos, você vai achar que não está programando. E tudo bem. Você pode gastar seu tempo pesquisando ou lendo sobre assuntos relacionados ao projeto.
E, finalmente, depois de algumas semanas de trabalho duro, você vai ter criado uma fundação que pode sustentar suas grandes ideias. De repente, trabalhar no seu aplicativo já não parece tão doloroso. Você vê a recompensa pelo conjunto inicial de trabalho duro, e agora é só mais um pedaço de código que você precisa escrever aqui, ou um pouco de refatoração acolá – o que você já fez umas cem vezes até o momento, então, sem problemas.
Você transformou o que antes era uma atividade assustadora ou desagradável em algo que é complexo e engajador.
É assim que nós crescemos. É assim que nos tornamos melhores. Seja programando, dançando, correndo, ou lendo: não é fácil, e nunca haverá um momento ou um lugar onde você “terminou” de aprender.
Em vez disso, é melhor apreciar o processo de investir sua energia em algo, e apreciar as dificuldades que vêm junto com ele. Você vai notar que já não descreve mais esse processo como “penoso” – porque o que um dia foi penoso, se transforma num símbolo do que virá a seguir: uma sensação de realização pessoal e satisfação consigo mesmo.
Em outras palavras, batalhar e desfrutar começaram a ter o mesmo significado. Lembre-se novamente do ciclo:
Tradução do original, disponível em: https://d262ilb51hltx0.cloudfront.net/max/800/1*VUpAEQ2zy8FY7jcegl32qA.png
Uma abordagem sobre como aprender assuntos técnicos
Deixe-me falar um pouco sobre o processo de aprendizagem que eu sigo. Esse não é um estilo definitivo das formas de aprendizagem, então, se existe algo diferente que funciona para você, por favor, compartilhe nos comentários! Caso você não tenha percebido, eu sou uma nerd nesses assuntos 🙂
Vamos usar o processo de aprendizagem da biblioteca React.js como exemplo.
Qual é a motivação para aprender isso?
Primeiro passo: Eu faço uma pesquisa no Google sobre a documentação do React.js e leio um pouco sobre o contexto e as motivações da biblioteca.
Conhecer os “porquês” por trás de qualquer assunto é incrivelmente útil para estruturar o aprendizado. Isso responde questões como:
– De que maneira essa solução difere das outras?
– Como isso pode ser útil para mim?
– Que problemas essa solução busca responder?
– Essa é só uma ferramenta novinha em folha que vai me ser útil por alguns meses ou ela vai mudar fundamentalmente a maneira como eu penso e programo?
Lendo e compreendendo conceitos fundamentais
Em segundo lugar, eu leria quaisquer artigos de introdução ou exemplos dados pela documentação que encontrasse.
Note que eu ainda não entrei em nenhuma questão relativa a códigos ainda. Ler e se aprofundar nos conceitos fundamentais vêm antes de pôr a mão na massa. É extremamente importante fazer isso porque estabelece as fundações do resto do meu aprendizado.
Ainda que eu pudesse ir adiante e usar o React.js sem aprender os conceitos fundamentais, em algum momento, essa questão vai me pegar. Principalmente, quando eu me deparar com um bug.
Programando pela primeira vez
Depois de gastar algum tempo nos passos acima, eu começo a entender a essência do que está acontecendo, ou mesmo, começo a sentir que a compreendi totalmente.
Eu geralmente tento construir alguma coisa bem pequena com qualquer nova ferramenta usando um tutorial escrito ou em vídeo (por exemplo, no egghead.io) antes de pular para projetos personalizados.
Quando você empaca
…. E, então, inevitavelmente, eu empaco.
Lendo a documentação parecia fácil, mas colocar aquilo em prática me fez perceber que eu não tinha ideia do que está acontecendo.
Esse é o momento em que eu começo a sentir o tão temido sentimento de “apenas desista”. Mas ao invés de desistir quando as coisas ficam difíceis, eu me lembro de que dor==ganho. Voltar atrás seria algo covarde.
Aqui vai o que eu faço ao invés disso:
- Em primeiro lugar, eu diminuo o tamanho do problema e tento descobrir no que, exatamente, eu empaquei – isto é, eu defino qual é o problema. E, então, eu crio uma hipótese sobre qual ou quais as causas do problema. Mesmo se eu não tiver nenhuma ideia, eu, pelo menos, faço uma tentativa.
- Aí, eu me afasto do problema e do computador e faço alguma coisa que me relaxa. Isso é algo realmente difícil de fazer quando eu estou muito chateada com o problema no qual eu estagnei, mas deixá-lo de lado funciona maravilhosamente bem. (Já reparou como grandes ideias sempre aparecem no banho?)
- Agora eu tento depurar o problema tendo minha hipótese em mente. Eu tento ir o mais longe possível com minha hipótese em procurar por respostas online. Existe algo realmente bonito em você tentar, em primeiro lugar, resolver os problemas pensando a respeito com profundidade e por si próprio. Mesmo se você estiver indo para o lado errado, o fato de que você fez esse esforço o ensina muito e você acaba se lembrando muito melhor do “espaço” do problema da próxima vez em que se depara com ele.
- Se a minha hipótese me leva a uma solução, ótimo! Eu terminei. Se não, eu pesquiso no Google sobre documentação, textos de blogs, ou posts do Stack Overflow que possam me fazer chegar próxima de uma resposta.
- Enquanto eu leio, eu tomo nota sobre toda e qualquer informação que pode potencialmente me ser útil.
- Ainda sem solução? Tudo bem. Eu tenho certeza de que aprendi algo valioso lendo todas essas coisas, mesmo se elas não me ajudarem diretamente a resolver o problema em questão no momento. Quem sabe se esse conhecimento não poderá ser útil numa próxima vez?
- Neste ponto, se eu estou realmente estagnada, eu posto uma questão no Stack Overflow ou pergunto para um/a colega de trabalho ou programador/a que eu conheço.
- Caso contrário, eu repito até conseguir chegar perto da solução final. Em algum momento, a resposta sempre vem.
Em alguns casos esse processo leva alguns segundos, em outros leva horas (ou dias). De toda maneira, o processo em si mesmo é extremamente benéfico para o seu conjunto de habilidades como desenvolvedora.
Ficar parado em um bug dá a sensação de andar tropeçando em um túnel escuro enquanto se procura por um raio de luz. No final você vai encontrá-lo, mas, ao longo do caminho, você vai descobrir muitas coisas sobre o túnel – e é esse conhecimento sobre o túnel que o torna mais forte como programadora.
Pense na depuração dos erros como uma chance de explorar, em vez de pensar nela como um desvio do seu objetivo. Assim fica muito mais divertido.
Enxaguar e repetir
Neste ponto do processo de aprendizagem, eu construí algo pequeno e tive que lidar com alguns pequenos obstáculos ao longo do caminho. Como você pode ver, foi uma luta – eu claramente preciso de mais prática com a nova ferramenta.
Então, de novo, eu tento escrever algo por conta própria. Em vez de pular para algum grande projeto personalizado, eu procuro por uma repo na qual vou basear meu aplicativo.
Por exemplo, se existe um exemplo de todos CRUD online usando React.js (é claro), talvez eu construa um tipo diferente de aplicativo CRUD. Diferente o suficiente para me manter engajada, mas não diferente a ponto de me desencorajar se algo der errado.
Mestria
Mestria requer repetição, então eu continuo fazendo pequenos projetos até sentir que compreendi os conceitos fundamentais.
No final, eu começo a ser capaz de juntar as peças por conta própria, sem recorrer constantemente à documentação ou aos exemplos. Somente aí eu finalmente me aventuro a criar alguma coisa do zero por conta própria.
No decorrer desse trabalho, meu objetivo é tornar o processo divertido e engajador. Eu constantemente me forço a trabalhar em coisas que são mais difíceis do que eu sou capaz de fazer no momento, mas sem me jogar para o fundo do poço, onde eu me desencorajo e nunca termino.
E, finalmente, eu me certifico de me afastar do projeto quando eu me sinto frustrada demais para poder apreciá-lo.
Aprender é divertido
Com algum esforço e estrutura, aprender a programar se torna algo muito divertido. No início é incrivelmente complicado, e na minha opinião é isso que faz tanta gente se afastar com medo – não porque seja chato, mas sim por ser difícil.
Depois de passar por esse processo de aprendizagem algumas vezes, processar novas informações se torna uma “memória muscular”. Você já não para para pensar sobre isso. Você apenas aprende a surfar na onda de dor e aprende a encontrar alegria na recompensa.
Como mágica, se torna “mais fácil” aprender.
Texto traduzido por Ana Carolina Gomes da Silva e revisado por Myreli Borba.
Ana Carolina Gomes da Silva é mestranda em Linguística pela USP, dando os primeiros passos na programação e na vida científica. Acredita que empoderar mulheres através da tecnologia e da ciência é uma das chaves para diminuir as desigualdades de gênero e fazer as ciências e a sociedade avançarem cada vez mais.
Myreli Borba é estudante de informática no Instituto Federal do RS, desenvolvedora de software e artista nas horas vagas. Acredita que o mundo pode ser mudado através de códigos – as palavras, a música e a programação. Acesse seu LinkedIn e Github.