Conforme a empresa cresce boa parte do meu tempo hoje é investida na formação de pessoas que estão iniciando na carreira de desenvolvimento de software na itexto, InvestTools ou em nossos clientes. Esta experiência já tem uns bons anos (desde a fundação da itexto) e acabei detectando alguns padrões que dificultam muito o processo de aprendizado de quem está dando os primeiros passos na área. Antes de começar, dois pontos importantes:
- Esta não é uma lista exaustiva, mas sim os comportamentos que observo com maior frequência: leve em consideração que estou tratando do meu ambiente de trabalho que pode ser (e é) bem diferente do seu.
- Estou escrevendo para quem está começando a programar e sente dificuldades em assimilar tanto conteúdo e não para aqueles que tem como função formar estes profissionais.
Ilusão de poder
É fácil se enganar achando que desenvolver software é fácil: não é, e pela minha experiência tem se tornado mais difícil com o tempo (na minha opinião involuímos (nota mental: escrever um post mostrando historicamente como isto ocorreu)). Acredito que dois fatores criam esta ilusão, sendo primeiro deles a volta da oralidade.
(Na minha experiência a maior parte dos desistentes existe ao caírem nesta armadilha)
A volta da oralidade
“Volta da oralidade”? Na Grécia arcaica dominava a oralidade: a Ilíada e a Odisseia, textos fundadores da cultura Grega, eram passados oralmente. Com o tempo a escrita substituí a oralidade e gera questionamentos na época: no Fedro (de Platão), Sócrates chega a dizer que apesar da escrita parecer ser um remédio para a memória, na realidade seria um mal (ironicamente este diálogo é escrito).
Em tempos recentes algo similar volta a acontecer: o YouTuber é o novo Homero, só que muito mais carismático. Não me leve a mal: há material MARAVILHOSO publicado (talvez a maior parte) tanto no YouTube como na forma de cursos online baseados em vídeo. São bem produzidos, os autores de uma eloquência incrível, gente muito bem preparada mesmo. Porém não raro há uma falha que pode ser fatal: raríssimas vezes há erros nas gravações. Tudo flui com perfeição: o código é escrito de tal forma que funciona de primeira. Iniciante, não se engane: as aulas sempre são ensaiadas (até pra que tenham a qualidade que tem).
(é por isto que meus treinamentos sempre são ao vivo: todos aprendemos HORRORES com meus vacilos (que não são raros)!)
E aqui o problema não está em quem produz conteúdo, mas no espectador pelo modo como o consome passivamente. Todo conteúdo didático deveria ser consumido como um diálogo entre espectador e autor, não como se fosse um filme de ação. Então, como você, iniciante, deveria consumir este conteúdo? Seguem algumas sugestões:
- Não use a funcionalidade de aceleração de conteúdo: a informação não é transmitida apenas pelas palavras, mas também pela entonação do autor. Uma pausa pode representar, por exemplo, uma ironia.
- Use e abuse da possibilidade de poder assistir o mesmo trecho várias vezes: não entendeu o que a pessoa disse? Volte e assista de novo quantas vezes for necessário.
- Questione o que está sendo dito: ouviu o que a pessoa disse, será que está certo mesmo? Mentalmente você consegue conceituar aquilo que foi dito?
- Se é código fonte sendo exposto, programe junto! Pause o vídeo: abra seu editor ou IDE e experimente o código exposto por si mesmo. Evite copiar me colar: digite. Deu errado? Tente de novo até entender aonde está seu erro.
- Tem dúvidas e existe um canal de comunicação? Use-o! Não tenha vergonha de perguntar: é obrigação moral de quem está instruindo considerar todas as dúvidas válidas.
- Há exercícios? Faça-os e no processo pense em como o conteúdo apresentado se relaciona aos problemas que você está resolvendo.
- Não há exercícios? Invente os seus próprios, se questione sobre o que está aprendendo.
- São mencionadas outras fontes no conteúdo? Se sim, explore todas, se não, desconfie do curso (mais sobre isto falo neste link).
Resumindo: tenha paciência no consumo do conteúdo e o faça de modo interativo e não passivo. É por isto que como avaliador (e não só eu) não dou tanto valor a “certificados de conclusão” de cursos online: como saber se você de fato interagiu e aprendeu no processo?
Agora posso ir para aquela que considero ser a segunda causa da “ilusão de poder”: você pode estar aprendendo ao contrário.
Aprendendo ao contrário
Todo conhecimento (ou quase todo (desenvolvimento de software com certeza sim)) se constrói de forma sedimentar. Você aprende alguns conceitos elementares, fixa-os em sua mente (os sedimenta), brinca com eles, tenta aplicá-los a elementos do seu dia a dia (a la Paulo Freire).
Na sequência, com base nestes conceitos elementares, que agora formam uma camada em sua mente, começam a ser depositados conceitos e ideias baseados na camada abaixo. E segue assim sucessivamente, sempre criando novas abstrações sobre o que já está sedimentado. Há vezes em que você irá sedimentar camadas que ultrapassam mais de uma abaixo, mas elas vão se montando, e com o tempo, tal como na imagem acima, você passa a entender como as camadas foram se formando.
Você não aprende a escrever frases sem antes aprender as palavras e as letras, o espaço… Aí na sequênciaaprendemos diferentes tipos de pontuação (a exclamação, a interrogação, as reticências…), e aí você começa a escrever seus primeiros parágrafos, textos, capítulos, livros.
No desenvolvimento de software vejo ocorrer o contrário: a pessoa aprende primeiro o framework (React Native, por exemplo), no meio do processo uma coisa no meio é exposta de forma praticamente acidental (a linguagem (JavaScript, TypeScript, outra qualquer)), surgem umas ferramentas que compilam seu projeto e de repente ele tá executando no seu celular como mágica.
Não raro o primeiro projeto aprendendo assim costuma dar certo por serem coisas bem simples (lista de to-dos…), mas passado pouco tempo você começa a se sentir perdido por não entender COMO as coisas funcionam, POR QUÊ é deste jeito? Por que não funciona mais? Por que tá dando tão errado?
Eu adoraria que tivéssemos evoluído ao invés de involuir tecnicamente, mas você precisa conhecer os fundamentos se quiser ir além de projetos que servem como introdução a frameworks e ferramentas. Há uma pletora de coisas que é necessário conhecer: a linguagem de programação, lógica de programação (há quem diga que não, mas não levo a sério este papo), algoritmos, o que vêm a ser um framework de fato, aonde seu código irá ser executado…
É muita coisa: talvez você não tenha tempo de aprender tudo isto. Talvez a faculdade não seja uma opção pra você (eu mesmo só fiz faculdade anos após estar no mercado (sim, recomendo muito)), talvez você tenha sido aceito em um novo emprego, usem uma ferramenta e você precise aprendê-la rápido. Então, o que sugiro?
- Busque os conceitos durante o aprendizado – se vai começar aprendendo ao contrário, na leitura do material busque identificar os conceitos. Identificou os que acredita ser essenciais? Se possível, pare o que está fazendo e busque uma definição rápida dos mesmos.
- Use e abuse da documentação oficial. Não raro esta possui duas seções: Tutorial e Guia do desenvolvedor. Evite começar pelo Tutorial e vá para o guia maior, pois normalmente é lá que os conceitos principais da ferramenta são tratados.
- Descubra onde esta ferramenta é executada: se é um framework, qual a linguagem de programação? Se é o desenvolvimento de uma aplicação móvel, trata-se de qual plataforma? É baseado em outro framework, se sim, qual ou quais? Com base nestas informações, caso esteja cru nestes assuntos, pause o aprendizado da ferramenta e comece por estes outros assuntos.
- Planeje seus estudos – deveria ter sido primeiro item da lista. Infelizmente não somos ensinados a fazer isto. Bom: criei uma metodologia pra tal que você pode ver neste link.
Rápido disclaimer sobre a “ilusão de poder”
Não é raro que eu levante o tema “ilusão de poder” e seja chamado de “gate keeper”, “elitista”, etc. Entenda: não estou dizendo que desenvolver software seja algo pertencente apenas a uma elite, pelo contrário: estou te mostrando que há um caminho a ser seguido que te permite construir as estruturas mentais para que possa ir muito além, minimizando com isto a frustração.
Não raro encontro pessoas desesperadas sem entender por que não conseguem avançar no desenvolvimento de seus projetos e adivinha a causa? Duas: consumo passivo de conteúdo e aprendizado superficial dos frameworks que estão sendo adotados.
Você se ilude achando que é fácil, consegue entregar o primeiro projeto e a partir do terceiro ou quarto, conforme a confiança dos outros sobre você aumenta, também aumenta a complexidade do que lhe será pedido. Normal: é a vida.
Uma apresentação muito limitada do mercado
Tratei deste assunto no meu último post aqui (A Web Como Martelo), mas talvez o lugar daquele post seja este. Tal como ali disse, talvez seja apenas minha impressão, mas a mídia especializada reinante hoje sobre desenvolvimento de software fala tanto de desenvolvimento web, e apenas de desenvolvimento web, que muitas vezes para quem está querendo entrar no mercado cria-se a impressão de só haver… desenvolvimento web.
E isto é péssimo pra quem está começando: cada um é um, então será que a dificuldade que você está enfrentando em aprender desenvolvimento de software seria por que desenvolvimento web neste momento é complicado demais pra sua condição atual? Não me leve à mal: talvez você tenha mais facilidade em outra área pra começar, como, por exemplo, programação de baixo nível, desktop, científica, etc. Você poderia começar por outra área na qual se sente mais à vontade (e se descubra) e depois, melhor preparado, voltar ao desenvolvimento web, o que me acha?
Vejo isto com muita frequência: aí o que faço é apresentar estas outras áreas à pessoa. Convenhamos: a web requer uma série de conhecimentos que não raro se relacionam de forma muito íntima e difícil pra quem está começando. Nem tanto por serem assuntos complexos (são), mas por serem muitos.
Então, se você está tendo muita dificuldade em aprender a desenvolver software e começou pela web, vou mencionar algumas outras áreas aqui pra que você pesquise a respeito. Quem sabe você não se apaixona/descubra em uma destas?
- Desenvolvimento desktop – ainda existe (e muito). Setor financeiro, por exemplo, adora.
- Jogos (ignore os jogos pra web :) neste primeiro contato!)
- Algoritmos científicos – existe todo um mercado de pesquisadores que precisam de programadores que materializem suas ideias.
- Financeiro – implementação de cálculos, protocolos de comunicação e integração, ferramentas de auditoria (há muito desenvolvimento web também, mas acho interessante mencionar apenas estes pontos aqui).
- Ferramentas de linha de comando – como os comandos do Linux, por exemplo. Existe todo um mercado pra isto, e você ainda pode explorar projetos muito interessantes, como o cURL, por exemplo.
- Desenvolvimento de baixo nível, como o do Linux, por exemplo.
- Criação de aplicações gráficas (meio que cai no universo desktop).
- Implementação de protocolos de comunicação (o cURL que citei acima é um belo exemplo).
- Segurança da informação.
- Inteligência artificial.
- Ferramentas de desenvolvimento de software. Pra quem tá começando? Sim! Talvez a sua dificuldade seja na realidade a oportunidade de ajudar outras pessoas em um problema comum, porém não identificado ainda.
A lista é quase infinita, e a que coloquei acima é bem limitada. O importante é saber que existe muita vida além da web.
Ter paciência com o conceito
Quando se está começando há sempre aquela ansiedade em se ir pra prática o mais rápido possível. É normal: passei por isto também (ainda passo), porém este é talvez o maior problema e está conectado à questão da “volta à oralidade” que mencionei no início deste post. Resumo: você precisa ler sequencialmente e ser paciente em relação ao seu processo de aprendizagem (mais ou menos o que Hegel chamava de “paciência do conceito”).
(quase doze anos atrás (!!!) escrevi sobre isto aqui)
Há muitas fontes de informação que você pode seguir: livros, cursos, vídeos, palestras, documentações, forums, etc. E aí está um problema: é impossível consumir tudo isto ao mesmo tempo, mas a nossa ansiedade acaba nos forçando a tal. E aí o que ocorre? Consumimos picadinho tudo isto e no final do processo absorvemos muito pouco.
Minha sugestão aqui é que você escolha uma das opções que surgirem em sua frente, agarre-a e leia do início ao fim, especialmente se for um livro ou curso. Quem cria este tipo de conteúdo traça para você um caminho (daí o nome “curso”) de aprendizado que acredita ser o ideal para que se construa o conhecimento essencial ou uma boa introdução sobre o tema. Se você é um iniciante provavelmente não sabe ainda qual o melhor caminho a seguir, certo? Então: alguém já traçou um pra você e isto é ótimo!
O problema das inúmeras fontes no entanto ainda persiste. Neste caso indico de novo minha metodologia de planejamento de estudos pois nela mostro como você pode selecionar e categorizar todas estas fontes de aprendizado para otimizar melhor seu tempo (aqui o link).
Mas a questão vai além: muitas vezes lemos inúmeras vezes um texto e não conseguimos entender que está ali. No meu caso, por sorte percebi ser quase analfabeto funcional quanto tinha mais de vinte anos. Tive de literalmente reaprender a ler. E esta é uma pergunta que você deve se fazer com muita coragem e honestidade: estou realmente sabendo ler? Anos atrás relatei esta minha experiência neste texto.
Como você pode verificar se está conseguindo conceituar bem o que está aprendendo? Escreva: crie um blog (pode ser anonimamente), mande seus textos a alguém. Se a pessoa entender o que está escrito ali, é provável que você tenha aprendido.
Concluindo
Se você chegou até aqui talvez já tenha conseguido (ou está conseguindo) superar o problema da paciência do conceito ( :) ). O importante é que você tenha a consciência de que aprender realmente é difícil para todo mundo: não há atalhos, mas a partir do momento em que o problema é reconhecido o caminho fica mais nítido. Bons estudos!
Artigo genial, muitíssimo obrigado. Veio na melhor hora possível!
Obrigado!