Como aprendo tecnologias – planejamento de estudo

Como aprendo tecnologias - planejamento de estudo 1

Do que adianta você se dizer estudioso 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 post apresento o método que desenvolvi pra mim e que agora aplico na itexto internamente.

Informação demais – escolha suas fontes

Library Book Large - Free photo on Pixabay

Há informação demais: se você quer aprender qualquer assunto hoje uma das maiores dificuldades é justamente escolher por qual material começar. Há inúmeros livros (a grande maioria de qualidade bastante duvidosa), artigos, posts, 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 aqui está 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 aos autores daquela tecnologia. Sendo assim entra aqui como fontes primárias também:

  • Mailing lists providas pela equipe de desenvolvimento ou grupos de discussão.
  • Os próprios autores – 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 auto crí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? Aonde ela pode ser aplicada? Aonde 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, Injeção de Dependências (na documentação inclusive explica, 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 pelos mantenedores daquela 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 os autores primários. 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 outros programadores usam aquela tecnologia. Uso apenas para ver se há alguma dica ou atalho usado pelos usuários daquela 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 o autor pesquisou a respeito antes de montar seu material. Se é pequena ou inexistente, pode ser que esteja vendo apenas a experiência individual de um profissional.

Posts em blogs ou artigos

Este tipo de material vejo como pertencente a duas categorias:

  • Reviews – em que o autor expõe sua experiência na adoção da tecnologia.
  • Problemas específicos – em que o autor nos mostra 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.

Tutores

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 seus tutores.

Fóruns e grupos de discussão

Evito. Isto por que normalmente servem apenas para resolver problemas específicos dos usuários. 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 muitos autores que superam os criadores das tecnologias de que tratam.

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 minha equipe sem ler antes (mea culpa). Já escrevi sobre como escolho livros neste e neste link.

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?
  • Aonde ela se aplica?
  • Aonde 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, por que 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 estes 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 seus colegas de trabalho, tente ensiná-los o que aprendeu (sem ser muito chato com eles).

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 maquinais: 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? Pra 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 – vital e todo mundo esquece

File:Gantt-chart-textless.png - Wikipedia

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 você é obrigado a 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 pra que vá aplicá-la no futuro, certo? Será que você precisa sair deste seu projeto um expert? 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 ao responsável pelo projeto como este é 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 seja produtivo terminado o seu projeto.

A grosso modo a profundidade do conhecimento em uma nova tecnologia divido 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 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 de caso pra caso.

Qual o meu material de estudo?

Além do que já falei neste post, considere também a possibildiade de ter um tutor. Ele pode te ajudar não só a encontrar material mas também para avaliar seu progresso.

Uma pessoa como material de estudo, que rude! (é, soa rude, talvez seja, mas você talvez tenha me entendido aqui (ou não))

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 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 impleemntadas em Angular, Vue, React, Swift UI, Android, Windows Forms…

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 usuários 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 an 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 lhe guia 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 com ele. Apenas imagine contratar alguém para arrumar seu carro e descobrir que o profissional está descobrindo no seu carro como realizar o reparo do seu sistema de freios.

Saiba parar

pare | Cássio Abreu | Flickr

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 método lhe dê algumas ideias ou aponte alguma solução para problemas que você enfrenta nesta área.

8 comments on “Como aprendo tecnologias – planejamento de estudo

  1. Adriano Ohana

    Lendo seu texto acabei de lembrar que tenho 3 coisas com estudo em andamento e as 3 comecei por fontes secundárias. Rollback e vamos de novo.
    Belo texto Kico, como sempre ;-)

  2. Davidson Silva

    Ótimo texto kiko.
    Sempre me espelho em vc qdo aprendo algo novo.

  3. Gleydson

    Parabéns pelo texto. Depois de 3 anos programando em ruby, semana passada comecei a ler a documentação oficial da linguagem. Se foi culpa do Rails, da própria doc, ou minha eu não sei, mas que me fez uma falta danada, isso fez. Como tem coisa boa que eu não sabia.
    Uma sugestão é o site https://devdocs.io, ficou bem melhor ler por ele.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.