Stack Overflow pode te emburrecer?

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!).

msx_oiMundo

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).

smalltalk

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.

grandcanyon

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

pollock_1_1949

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:

  1. O indivíduo reflete sobre aquilo que foi dito.
  2. 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.

webondrugs

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.

3 comentários em “Stack Overflow pode te emburrecer?”

  1. Humberto Rodrigues

    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!

  2. pedroexpedito

    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.

    1. Kico (Henrique Lobo Weissmann)

      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!

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Rolar para cima