Do que adianta você se dizer uma pessoa estudiosa se não é eficaz no processo de aprendizagem? Com o passar do tempo observei isto em mim e outras pessoas de que sou tutor: elas querem aprender tecnologias, se esforçam para tal e simplesmente não conseguem. Ou pior, adquirem a ilusão de terem aprendido quando na verdade apenas reproduzem tutoriais.
Sei como é, já passei por isto. De uns anos pra cá, entretanto, a coisa melhorou bastante pra mim: por pressão tenho aprendido cada vez mais tecnologias e posso dizer que com profundidade bastante satisfatória. Neste artigo apresento o método que desenvolvi pra mim e com o qual tenho obtido resultados bastante positivos.
Informação demais - escolha suas fontes
Há informação demais: se você quer aprender qualquer assunto, uma das maiores dificuldades é justamente escolher por qual material começar. Há inúmeros livros (a grande maioria de qualidade bastante duvidosa), artigos, posts e vídeo aulas pra seguir.
E sabe qual o problema? Muitas vezes no meio de uma leitura você topa com um link. Clica nele e, de repente, horas depois, se vê num canal do YouTube que nada tem a ver com seu propósito original. Num mundo com informação em excesso, como me viro então?
Primeiro problema a resolver: como escolher seu material de estudo.
Entender as fontes bibliográficas
O primeiro passo é entender o quê é uma bibliografia. É essencialmente o material que guiará o seu estudo. E aqui é importante saber categorizá-la. A bibliografia se divide essencialmente em dois grupos (e esta é uma dica que pode lhe economizar um bom dinheiro e tempo):
Fontes primárias
A fonte primária quando falamos de uma tecnologia é aquela gerada o mais próximo possível da origem do assunto sobre o qual tratamos. É a documentação oficial. Algo que aprendi com o tempo: é muito rara a necessidade de comprar livros ou cursos quando a documentação oficial é boa (e a maior parte é, falarei mais a respeito disto adiante).
Quando você, responsável pelo desenvolvimento de uma tecnologia, escreve a documentação oficial, na prática está escrevendo uma proposta de venda. É de seu interesse que o maior número possível de pessoas a entenda para que a adotem.
Sendo assim, você deve sempre iniciar a partir da leitura destes documentos. Sugestão: leia sequencialmente e entenda os títulos que os autores dão.
- Introdução - normalmente é onde se encontram os conceitos essenciais por trás da tecnologia.
- Quick start - serve apenas para te ensinar a montar seu ambiente de trabalho e começar a trabalhar.
- Tutorial - vai te fornecer uma experiência inicial de uso e não mais que isto.
- User guide - normalmente dividido em tópicos, apresenta os principais problemas e ações que você irá executar no uso daquela tecnologia.
A fonte primária não se limita apenas à documentação oficial, ela vai além. Lembre-se de que você tem acesso também às pessoas que criaram aquela tecnologia. Sendo assim, entra aqui como fontes primárias também:
- Mailing lists providas pela equipe de desenvolvimento ou grupos de discussão.
- As pessoas que criaram a tecnologia - encontrou um problema complicadíssimo? Normalmente seus e-mails são disponibilizados e são pessoas bem fáceis de lidar. Por que não escreve pra eles?
Fontes secundárias
Após ter tido ao menos um primeiro contato com a documentação oficial, você pode querer buscar outras fontes para aprender mais. Talvez você não tenha gostado da documentação oficial. Neste caso é necessário autocrítica: a documentação é realmente ruim ou é você que não tem base pra aprendê-la?
Se você não tiver base para aprendê-la, preste atenção nos conceitos de que trata aquela tecnologia. Quais problemas resolve? Onde ela pode ser aplicada? Onde não se aplica?
Busque aprender as informações essenciais para compreender aquela tecnologia. Se vai aprender Spring, por exemplo, primeiro precisa saber Java. É importante entender o que é Inversão de Controle e Injeção de Dependências. Na documentação, inclusive, esses conceitos são explicados, mas se não tiver entendido, vai precisar de outras fontes.
As fontes secundárias são todo o material que não é gerado diretamente por quem mantém aquela tecnologia. Isto quer dizer que há o sério risco de que quem está escrevendo a respeito não conheça tão bem o assunto quanto quem criou a tecnologia em questão. Leve isto em consideração.
A fonte secundária deve ser vista como material de apoio portanto. Primeiro leia a documentação oficial, depois busque estes materiais. Segue como uso algumas fontes secundárias.
Cursos online
Cursos em vídeo servem para que eu veja como outras pessoas que também desenvolvem software utilizam aquela tecnologia. Uso apenas para ver se há alguma dica ou atalho usado por quem utiliza a ferramenta e também pra ter uma noção de como é sua experiência de uso.
Meço a qualidade do curso por sua bibliografia. Se é extensa, é sinal de que quem criou o curso pesquisou a respeito antes de montar seu material. Se é pequena ou inexistente, pode ser que esteja vendo apenas uma experiência individual.
Posts em blogs ou artigos
Este tipo de material vejo como pertencente a duas categorias:
- Reviews - onde são expostas as experiências na adoção da tecnologia.
- Problemas específicos - onde são mostrados aspectos sobre a tecnologia ou como resolver problemas relacionados a esta.
Os posts não servem portanto como um guia pois são fragmentados. É fundamental ter um guia que nos forneça um caminho de aprendizagem.
Tutoria
Uma fonte secundária que vejo ser muito pouco aproveitada. Quando quero aprender algo e não faço a menor ideia de por onde começar procuro pessoas com experiência no assunto e lhes peço opiniões a respeito de quais caminhos seguir.
Você pode aprender horrores com isto, mas não abuse da boa vontade de quem está fazendo sua tutoria.
Fóruns e grupos de discussão
Evito. Isto por que normalmente servem apenas para resolver problemas específicos de quem utiliza a tecnologia. Muito raro aprender algo de fato neles e, ainda pior, podem te fornecer uma visão muito fragmentada do assunto. Há opiniões demais.
No entanto uma boa discussão pode ser uma mão na roda. Você pode aprender com a vivência de outras pessoas e até fazer novos contatos. Mas tirando isto, já faz um tempo que digo que StackOverflow pode te emburrecer.
Livros de outros autores
Há casos nos quais a documentação oficial realmente é muito ruim, muitas vezes por não estar mais disponível. Nestes casos é interessante um livro que entre no lugar da documentação oficial. É raro, mas existem muitas pessoas que escrevem conteúdos sobre uma tecnologia que superam os conteúdos criados por quem, de fato, criou aquela tecnologia.
Neste caso é muito importante, especialmente se você for iniciante, que saiba escolher bem seu livro. Já tive prejuízos significativos com livros horríveis que comprei para a equipe com quem trabalhava sem ler antes (mea culpa). Já escrevi sobre como escolho livros nesta e nesta publicação.
Dica de ouro: busque pela bibliografia do livro. Não tem ou é bem pequena? Normalmente é armadilha disfarçada de livro.
Como escolher seu material portanto
Fontes primárias como guias principais. Secundárias como material de apoio. Caso a documentação oficial não te ajude, escolha bem este livro.
Escolhida a fonte primária, fique com esta até se sentir seguro no uso da tecnologia.
Entenda o conhecimento
O segundo passo consiste em entender que o conhecimento no aprendizado de tecnologias se divide essencialmente em dois grupos.
Aquilo que você deve entender
Em toda tecnologia há aspectos que você, de fato, deve conhecer. No caso, você deve poder responder prontamente as seguintes perguntas:
- O que é esta tecnologia?
- Quais problemas ela resolve?
- Por que foi criada?
- Onde ela se aplica?
- Onde não se aplica?
- Quais seus principais conceitos?
A última pergunta é essencial. Você deve ter um bom conhecimento a respeito dos conceitos que aquela tecnologia trata, porque normalmente denotam termos que serão usados em toda a bibliografia que a envolve.
Você não sabe programar no paradigma orientado a objetos se não entender o que é uma classe e a diferença deste conceito com o de objetos. Não sabe o que é o Spring Framework se não entende o que é um bean. Não entende JavaScript se não entender o que é uma função de primeira grandeza, e por aí vai.
Como sei que entendi esses conceitos? Se conseguir escrever a respeito deles e, ainda mais importante, expor seus escritos ou descrições orais a outras pessoas e estas te entenderem de volta.
Como treinar isto? Crie um blog, converse com as pessoas que trabalham com você, tente ensiná-las o que aprendeu (sem precisar evangelizar ninguém).
Aquilo que você deve decorar - o aspecto mecânico
O outro grupo do conhecimento são as coisas que você deve decorar na tecnologia. São os aspectos mecânicos do conhecimento. Não adianta: se você quer programar bem, tem de programar pra treinar.
Se vai aprender uma linguagem, tem de decorar suas palavras chave, métodos mais usados (você já fez isto, decorou o método main, não decorou?). Vai aprender um framework? Decore o nome de suas classes principais, eventos, ciclos de vida, etc. Como decoro isto? Praticando e, principalmente, ao praticar pensar nos conceitos do primeiro grupo de conhecimentos.
Mas não basta decorar, enquanto decora você deve se lembrar daquilo que deve entender. Em um framework de persistência, por exemplo, você deve na sua prática sempre ligar o ato de persistir ao ciclo de vida de persistência definido por ele. Aí as coisas não ficam mecânicas: você decora os métodos, objetos e ferramentas que precisará no seu dia a dia, mas ainda mais importante, você os entende na prática.
Só há um modo de aprender, portanto, estes aspectos: praticando, praticando, praticando. Sabe o que uso bastante pra praticar quando vou aprender uma nova linguagem? Para ganhar tempo busco entender quais as ferramentas que existem para testes automatizados. Com isto realizo meus experimentos com a biblioteca que o ambiente me fornece.
Planeje - algo vital, mas fácil de esquecer
Talvez devesse este ser o primeiro ponto do texto, mas deixei pro final. Se você vai aprender uma tecnologia, antes de começar, selecionar suas fontes, entender a diferença dos conhecimentos, você deve primeiro ter um planejamento.
Convenhamos: você tem que aplicar rapidamente aquilo que irá aprender, seu tempo é limitado, assim como seus recursos, sendo assim será indispensável otimizar seu tempo e recursos disponíveis. Você deve portanto responder as seguintes perguntas.
Quanto tempo tenho para aprender isto e quanto tempo disponível tenho pra tal?
É fundamental saber a resposta a esta pergunta, pois ela determinará quão profundo será seu conhecimento a respeito desta tecnologia finalizado o tempo que você lhe fornecer.
Ainda mais importante, é obrigatório que você se discipline aqui. Se vai aprender algo, esporadicidade é lei. Você deve estudar constantemente o que está aprendendo. Só tem uma hora por dia? Que seja. Não tem tempo mesmo? Já aprendi muita coisa no ônibus a caminho pro trabalho.
Encontre estes gaps de tempo e neles foque-se inteiramente no seu objetivo. Eu sei que não é fácil ter tempo, mas você precisará resolver este problema.
Não tem tempo mesmo? Então desista aqui e pare de sofrer. Resolva seus problemas e futuramente retome seu projeto de estudo.
Quanto preciso aprender a respeito?
É uma consequência/complemento da pergunta anterior. A resposta "o máximo possível" é tola. Você começou a aprender para que vá aplicá-la no futuro, certo? Será que você precisa sair deste seu projeto alguém especialista nesse assunto? Ou será que precisa ter apenas alguns conhecimentos chave?
Dica: você sempre precisará ter o conhecimento conceitual da tecnologia, então pelo menos a introdução da documentação oficial você precisará ler.
Se é para aplicação no trabalho, pergunte à pessoa responsável pelo projeto como esta é tecnicamente. Por exemplo, se você precisar aprender um framework web fullstack como Ruby on Rails, você não precisa aprender de cara coisas sobre agendamento de tarefas ou envio de e-mails. Talvez precise conhecer apenas como funcionam pra iniciar os controladores, views e persistência.
É, portanto, importante elencar quais os tópicos que precisa conhecer o mínimo para que você tenha uma boa produtividade ao terminar o seu projeto.
A grosso modo, costumo dividir a profundidade do conhecimento em uma nova tecnologia nos seguintes níveis:
- Se vou lidar com uma base legada - preciso ter conhecimento profundo pois irei lidar com código que talvez não seja bem escrito ou que não siga as recomendações oficiais da ferramenta.
- Se vou começar um projeto do zero - um pouco menos profundo, pois todo o código será novo e, em teoria, baseado nas boas práticas.
- Se vou apenas avaliar uma tecnologia - preciso ter um conhecimento bem raso a seu respeito, pois será usada apenas para criar uma prova de conceito.
Mas isto irá variar em cada caso.
Qual o meu material de estudo?
Além do que já falei neste artigo, considere também a possibilidade de ter alguém para lhe dar uma tutoria. Essa pessoa pode te ajudar não só a encontrar material, mas também para avaliar seu progresso.
Tenha um projeto prático - a prova de conceito
Este é o pulo do gato no aprendizado e, depois que comecei a aplicá-lo minha vida, melhorou meu desempenho significativamente. Se você vai aprender uma tecnologia, e há o conhecimento que você deve entender, e aquele que você deve decorar, não se vicie nos tutoriais oferecidos pela documentação oficial.
Tenha um projeto que guiará o seu desenvolvimento. Um projeto pessoal, seu. Por exemplo: quando quero aprender um novo framework front-end, eu uso como base o /dev/All. Observo sua interface e, usando sua API, implemento diferentes versões daquele front-end nos mais variados frameworks. Temos versões do /dev/All implementadas em Angular, Vue, React, Swift UI, Android, Windows Forms e por aí vai!
Não tem um projeto legal como este? Pense em algo mais simples. Por muitos anos o meu projeto básico consistia em um sistema de cadastro de livros e autores somado a um mecanismo de autenticação e autorização. Ainda mais simples: apenas um mecanismo de autenticação e autorização de acesso se estiver aprendendo um framework web.
O importante é que você tenha seu próprio projeto e use o processo de aprendizado na confecção do mesmo. Isto lhe proverá a oportunidade de experimentar a tecnologia e, ao mesmo tempo, descobrir suas limitações e vantagens.
Muita atenção na escolha deste projeto: opte por algo que seja o mais próximo possível do objetivo final do seu aprendizado para que, finalizado seu processo de aprendizagem, não termine muito distante do objetivo inicial.
Mas o fundamental é: tenha um projeto que seja um guia para o aprendizado e que seja seu. Sendo seu, você terá um impulso a mais para concluí-lo e, ainda mais importante, com isto conseguir prosseguir ainda mais nos seus estudos.
Agora, por favor, não use o projeto do seu cliente como seu projeto de aprendizado. Não é justo! Apenas imagine contratar alguém para arrumar seu carro e descobrir que quem você contratou está descobrindo no seu carro como realizar o reparo do seu sistema de freios.
Saiba parar
A vantagem de se ter um projeto é que ele é essencialmente a sua prova de conceito. É ele que vai te dizer se aquela tecnologia vale à pena ou não. Se durante o desenvolvimento você notar que há mais dificuldade que facilidade, é hora de parar e buscar outra tecnologia.
Você também pode parar quando o tempo se esgotar (claro) ou quando se sentir realmente confortável com a tecnologia. A partir deste ponto, o mundo se torna sua fonte secundária, e você o consultará apenas para aprender detalhes a respeito daquele assunto.
O momento do "Pare" é quando você se testa. É o momento em que se desafia na execução de tarefas que poderão surgir adiante. Se possível, encontre alguém que lhe teste para evitar o auto engano.
Concluindo
Bem, este é meu método de estudo que, com o tempo, tem se mostrado muito bem sucedido, inclusive junto a alguns clientes. A sua vantagem é que ele evita distrações. A partir do momento em que temos um projeto a ser implementado, e este projeto é próximo do que iremos ter na aplicação da tecnologia, além de validar sua aplicação também focamos nos pontos que serão essenciais na aplicação prática.
Outro ponto fundamental é o planejamento e a compreensão do que é uma fonte bibliográfica e os tipos de conhecimento que você precisa lidar. Ao valorizar as fontes primárias, além de você economizar um bom dinheiro, também pode evitar a cilada de basear seu estudo em material de péssima qualidade. E, ao definir o ponto de parada, consegue se planejar cronologicamente para que possa aproveitar ao máximo seu tempo e recursos disponíveis.
Mas a coisa não acaba aí, este processo que apresentei é na realidade um loop infinito. Os conhecimentos que obtenho em uma tecnologia normalmente são aproveitados no aprendizado de outras. Quando aprendo um framework MVC, por exemplo, os conceitos que vi neste normalmente aparecem novamente em outros frameworks, muitas vezes com pequenas diferenças, mas com a mesma base.
Espero que meu artigo lhe dê algumas ideias ou aponte alguma solução para problemas que você enfrenta nesta área.
Sobre o autor
Henrique Lobo Weissmann é Programador e co-fundador da itexto com mais de vinte anos de experiência em desenvolvimento, projeto, manutenção e evolução de sistemas. Autor do blog /dev/Kico e também de dois livros pela editora Casa do Código: "Vire o Jogo com Spring Framework" e "Falando de Grails", além de também ser o fundador do Groovy e Grails Brasil.