Já faz um tempo que planejo escrever sobre educação, mais especificamente sobre a forma como nós, programadores, nos educamos. Como alguém que se encontra do outro lado da mesa agora – como contratante – creio que é interessante compartilhar aqui minhas impressões e descobertas sobre este assunto.
Vou começar por descrever uma doença que observo em nossas consultorias e, principalmente, nos processos seletivos que realizo tanto para a Itexto quanto para nossos clientes. Chamo esta doença de “emburrecimento por Stack Overflow”. Poderia usar o termo “fórum”, mas dado o sucesso do site, noto que seu nome se tornou uma espécie de sinônimo para “fórum”.
Como aprendemos
Para entender esta doença é necessário começar pensando o modo como aprendemos as coisas, especialmente as complexas, tais como programar. Tudo tem seu início nos conceitos mais simples.
Você começa a partir do clássico “Olá mundo”. O computador irá imprimir textos aleatórios na tela de acordo com aquilo que você definir em seu código fonte. Isto te fornece a ideia (e experiência) do conceito fundamental de comando. Você, humano, enviando instruções para o computador e este te respondendo, no caso, imprimindo algo na tela (ainda me lembro da minha primeira impressão desta experiência, e foi linda!).
Após ter enjoado de todas as variações daquele comando elementar você começa a brincar com operações matemáticas, condicionais, loops, entrada e saída por teclado. Entra a lógica de programação mais básica: começam os códigos mais simples, tais como nossas primeiras funções de soma, talvez algo um pouco mais avançado, como a implementação de um Fibonacci, coisas assim.
Com o tempo adquirimos segurança e começamos a pensar em reuso: surgem as funções melhor elaboradas (uma função chamando outra), você começa a se preocupar com a qualidade do código que vai escrever, pois nota que aquele negócio vai ficando mais complexo conforme evolui. E aí entram as noções de programação procedural, que em pouco tempo irão evoluir para módulos (se estiver experimentando BASIC ou Pascal na faculdade).
Os módulos no futuro se transformarão em classes e objetos, e você começará a modelar sistemas orientados a objetos, a complexidade aumentou, o código começa a ficar bem mais difícil de ser mantido e você busca por soluções que outros tenham adotado para contornar estes problemas. É quando nos deparamos com padrões de projetos, frameworks, bibliotecas…
(se vir por aí alguém dizendo que programar é fácil, já te adianto: é picareta que tá tentando te vender curso ou livro)
Este é um caminho possível e, na minha opinião, o melhor. É o conhecimento sendo construído em camadas. Primeiro você monta uma camada bem simples (os comandos), se sente à vontade com ela, constrói outra (as funções), e outra (reuso), e outra (módulos) e outras (orientação a objetos), e outras (frameworks, bibliotecas) e outras (pensa em arquietura) e outras…. E por aí vai.
E é por isto que bons professores e livros são tão importantes: se suas primeiras camadas forem mal construídas fica muito mais difícil se reprogramar e apagar impressões erradas. Na minha experiência enquanto contratante e tutor fica claro que os pupilos que melhor se desenvolvem normalmente são aqueles que baseiam seu conhecimento em um guia com começo, meio e fim bem definidos.
(Você sabe a diferença entre pupilo e estudante? O primeiro requer atenção continuada por parte do tutor, o segundo se vira por conta própria)
A importância do guia
Chamo de guia uma sequência de conhecimentos que são passados ao pupilo. Sequência esta que, naturalmente, começa pelo mais elementar, mas provê a base para que os novos conhecimentos (as camadas) possam ser adquiridos.
Este guia pode ter as mais variadas formas: um professor, um livro, vídeo aulas, uma série de artigos. O essencial é que começo, meio e fim sejam bem definidos e, mais ainda: que cada camada forneça a base para que possamos dominar a próxima. O bom guia torna claro a conexão entre as camadas.
(talvez a metáfora das camadas não seja a melhor, pois o conhecimento pode ser não linear, entretanto sempre há um ponto que segue o outro, mesmo que surjam bifurcações, sendo assim a ideia de sedimentação como base para elevar o conhecimento funciona no final das contas)
Ainda mais importante: o guia te diz aonde você irá chegar. Há um objetivo bem traçado: você sabe exatamente aonde deveria estar no final da jornada. E como você sabe que o caminho está certo? Simples, aquele objetivo que parecia distante de repente começa a se mostrar cada vez mais factível, de repente escrever seu próprio sistema operacional, linguagem de programação, website ou sistema de controle de armas nucleares começa a se tornar mais fácil ou pelo menos mais viável de ser realizado por você.
E como você sabe se o caminho está sendo bem trilhado? Simples: a partir da segunda camada de conhecimento, você pode verificar se o que está sendo dito é válido ou não checando aquilo que aprendeu no passo anterior. E se neste momento surgirem dúvidas que serão repassadas ao seu guia, o melhor sinal possível acaba de ocorrer: você está questionando, e se está questionando, é por que está pensando.
Após n camadas, o pupilo começa a perceber novos horizontes, novas fontes de conhecimento. Neste momento ele pode largar seu guia atual e buscar outras fontes de conhecimento. É quando o pupilo se torna estudante.
(no final das contas, o conhecimento sempre se dá a partir de conexões que criamos entre aquilo que está chegando (as novas camadas) e aquilo que já conhecemos (as camadas que sedimentamos))
Aí chega o Stack Overflow e ferra tudo
Não me entenda mal, eu gosto do Stack Overflow, mas não como ferramenta de aprendizado. Infelizmente o problema que observo tanto em consultorias quanto em processos seletivos é que o indivíduo não usa fóruns como fonte secundária de conhecimento, mas sim primária. Explico melhor.
Você em uma sala de aula (virtual ou não): primeiro aprendemos com o guia. Em seguida, comentamos aquilo que aprendemos com os colegas ou mesmo diretamente com aquele que nos guiou até aquele ponto. Há um momento inicial essencial ali: o recebimento da informação e, posteriormente, a confirmação do conhecimento, que se dá normalmente em duas fases:
- O indivíduo reflete sobre aquilo que foi dito.
- Se não ficou claro após ter refletido (e experimentado) o que foi dito, interage com o guia ou seus colegas ou o mundo buscando entender ou confirmar aquela informação.
Agora: e quando você inverte a ordem? E quando quer criar um sistema de gestão mas não sabe programar? No Grails Brasil, por exemplo, já vi muitas dúvidas que seguem mais ou menos esta forma:
E aí pessoal, tudo bem?
Seguinte: quero criar um sistema de controle para minha padaria. Preciso então saber como, em Grails, eu faço para, me conectar ao banco de dados e persistir os dados para que eu possa gerar meus relatórios gerenciais.
Note: a pessoa sabe que existe uma ferramenta que pode ser aplicada para se atingir o objetivo traçado, mas ela não buscou conhecê-la em um primeiro lugar. Ao invés disto, buscou primeiro o auxílio dos colegas. Naturalmente a frustração irá ser o resultado final desta investida (e não raro a pessoa odiará o framework e sua comunidade até o fim dos seus dias).
Outra situação bastante comum: você precisa integrar seu sistema com alguma tecnologia, um hardware qualquer, por exemplo. Entra no Stack Overflow, busca por algo do tipo: “como ler dados de uma porta serial com Java”.
Encontra uma discussão que tem algum código fonte de exemplo. Copia para o seu projeto pessoal, altera um pouco aquele código fonte e a coisa funciona. A solução para o problema imediato está ali: a questão foi resolvida. Mas e no segundo (e terceiro, quarto…) momento, no qual é necessário entender por que a coisa parou de funcionar?
Tá, você poderia me dizer: “mas Kico, tudo em demasia faz mal, basta usar com sabedoria e bla bla bla bla bla”. O problema é que na esmagadora maioria das vezes noto as pessoas usando em demasia, o que mostra que há algo extremamente errado conosco e a maneira como estamos buscando conhecimento.
O conhecimento baseado em fóruns não passa de uma simples tentativa e erro. Talvez você encontre algo que te atenda, mas sem ter a base, jamais terá a certeza do seu funcionamento. No máximo sabemos que a coisa funcionou naquele caso.
(quanto ao Stack Overflow, confesso que detesto o próprio formato da coisa, que não promove discussões, mas sim uma forma extremamente rudimentar que visa apenas sanar dúvidas imediatas. Já escrevi sobre isto aqui)
O problema tá na web
Quando a Internet se popularizou me lembro bem que todos pensávamos que a partir daquele momento não haveria mais ignorância pois o conhecimento estava todo lá, acessível a qualquer um (que tivesse acesso à Internet). A impressão que tenho hoje é a de que na realidade a ignorância aumentou. Creio que a culpa esteja no link.
Sou da geração pré-internet: quando ela apareceu eu devia ter lá pelos meus 15 anos. Na minha época o guia não era uma alternativa, era minha única opção. Você não tinha dinheiro para comprar vários livros, então comprava um e, como um disco ruim, lia e relia várias vezes caso não tivesse gostado. E aquela leitura do início ao fim (mesmo que não necessariamente na ordem proposta pelo autor) nos obrigava a trilhar um caminho, a sedimentar camadas.
E sabe o que é interessante? Muita gente aprendia a programar pelo help das linguagens de programação (VB, Delphi, PowerBuilder), e normalmente os que se tornavam melhores eram justamente aqueles que haviam estudado horrores seguindo um guia, e não os links dos arquivos de ajuda. (o help de ontem era a web de hoje)
Na web a coisa é diferente: você começa a ler um texto e de repente topa com um link. Clica nele, e vai para outra página, e depois outra, e outra, e outra. No final das contas, o guia sumiu. Em seu lugar entrou um processo que, no frigir dos ovos, não passa de tentativa e erro. Se tiver dado muita sorte, continuou no mesmo assunto que iniciou sua pesquisa.
E ainda mais interessante: com os motores de busca você diz o que precisa saber naquele momento (“como renderizar um cubo em OpenGL”). E sem base alguma você topará com uma resposta em um fórum, contendo aquele código fonte perfeito, que basta copiar e colar para o seu projeto.
A ideia da teia (web) nos remetia a uma certa harmonia, mas na prática o que temos é uma daquelas teias feitas por aranhas que se encontram sob o efeito de narcóticos. Você não sabe o que vai encontrar, nem se aquilo que encontrou de fato resolve seu problema.
E para piorar a situação há a pressão do dia a dia. Seu chefe quer a solução na hora, você tem pouco tempo para resolver o problema. A web está ali: basta realizar uma busca, basta alterar um pouquinho aquilo que obteve na sua pesquisa… basta que o negócio funcione!
Pressa, informação fragmentada, falta de bases bem consolidadas… talvez esteja aí a base para que tantos livros técnicos e cursos online ruins estejam sendo criados.
Então o que faço?
Só tem uma solução: é encontrar um bom guia, por a bunda na cadeira e ler a coisa do início ao fim. Aliás, é importante saber ler também: não raro somos analfabetos funcionais (sobre como ler e minha própria história envolvendo este problema, veja este link).
Fóruns só servem como fonte secundária de conhecimento e troca de impressões a respeito de algo. Eles podem promover maravilhosas discussões e você aprender horrores com elas? Com certeza, basta lembrar de como era o GUJ em seu início. Entretanto, tal como Aristóteles, creio que para que haja uma discussão enriquecedora é fundamental que todos os participantes antes de mais nada saibam sobre o que estão falando.
E pra usar o fórum portanto… você primeiro vai ter de ler seu guia. Hegel tinha um bom nome para a cura deste problema: “paciência do conceito”.
Não tem como: você precisa ser paciente se quiser aprender algo. Ficar pulando de resposta em resposta dificilmente te fornece alguma base.
PS:
_ Mas e se eu não gostar de ler?
_ Se acostume com a mediocridade, pois você dificilmente sairá dela.
Lendo esse artigo, não tenho como deixar de concordar. Tenho trabalhado algum tempo com projetos legados. E mesmo que esse projeto use framework x, y ou z, percebo que o desenvolvedor anterior saiu apenas copiando pedaços de código achados na internet e colando eles no projeto. Não há interesse em aprender, aprodundar o conhecimento naquilo que faz, uma pena!
Discordo em partes, se a pessoa for seguir o método antigo apenas para estudar no qual citou ter um bom GUIA, raciocinar e depois conversar com os colegas, vai demorar muito, muito mesmo o aprendizado, sem contar que ter um guia é meio difícil.
Um meu exemplo peguei um “ótimo” livro de C “C como programar´´ no qual possui 846 páginas cheias de letras.
Eu já terminei a leitura e ainda estou aprendendo e minha habilidade com C tá no nível de fazer um jogo da cobrinha com muita dificuldade. RESUMINDO eu tenho +300 horas de estudos em C e quase não consigo fazer nada.
Outro caso foi estudar oque precisa para resolver o meu problema momentâneo usando as ferramentas expo e godot no qual eu não peguei livros e fui apenas usando documentação
para fazer meus programas, eu já fiz um APP com integração no banco de dados com mongoDB que trabalha junto com nodejs, e na parte do Godot remakes de jogos como Mario, Pacman, Space invaders. E t tenho cerca de 240 h em Godot e sei que posso fazer vários tipos de jogos 2D, e no Expo app simples.
Acho que o melhor conhecimento para programação que eu queria ter no começo dos meus estudos é “NÃO REINVENTE A RODA” se oque você quer fazer já está na net com um código prontinho é melhor você estudar o código do cara, aprender como funciona e implementar no seu projeto.
O método que eu uso agora é pensar, pensar, pesquisar, pedir ajuda, tem horas que não tem como! E como empacar e tu precisa de uma ajudinha externa, para continuar aprendendo.
Oi Pedro, são bons pontos, sem dúvidas.
Mas acho que não devemos jamais subestimar o valor do guia, mesmo que seja ruim mas, ainda mais importante: como USAMOS o guia.
Uma leitura linear quando se está aprendendo algo como programação não é muito prático realmente: o ideal é que você tenha um ciclo do tipo: leia, reflita, experimente, erre, tente novamente, verificar se entendeu realmente.
Vou te dar uma dica de leitura que fiz ano passado que muito provavelmente você vai gostar.
É um livro chamado Ultralearning, de Scott Young (https://www.amazon.com.br/Ultralearning-Outsmart-Competition-Accelerate-English-ebook/dp/B07K6MF8MD/ref=sr_1_1?adgrpid=79540435605&gclid=EAIaIQobChMIodWbvdb25gIVBAWRCh160QZpEAAYASAAEgJ0zPD_BwE&hvadid=392969952872&hvdev=c&hvlocphy=1001566&hvnetw=g&hvpos=1t1&hvqmt=b&hvrand=4058597493014254198&hvtargid=kwd-423146885202&hydadcr=5623_10696872&keywords=ultralearning&qid=1578578317&sr=8-1).
O autor ficou famoso ao terminar o curso de Ciência da Computação do MIT em 9 meses apenas com material online, um feito incrível. Neste livro ele fala algumas coisas na direção do seu comentário, espero que curta, valeu!