Stack Overflow pode te emburrecer?
Tags: braziliandevs, stackoverflow, armadilhas
Published: 2021-06-15 14:26:40

---
title: Stack Overflow pode te emburrecer?
published: true
description: Stack Overflow pode te emburrecer?
tags: braziliandevs, stackoverflow, armadilhas
cover_image: https://devkico.itexto.com.br/wp-content/uploads/2017/08/tree_layers.jpg
---

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&nbsp;que é interessante compartilhar aqui minhas impressões e descobertas sobre este assunto.

Vou começar por descrever&nbsp;uma doença que observo em nossas consultorias e, principalmente, nos processos seletivos que realizo tanto para a Itexto quanto para nossos clientes.&nbsp;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".
<h2>Como aprendemos</h2>
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&nbsp;<strong>comando</strong>. 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!).

<img class="aligncenter size-medium wp-image-2611" src="https://devkico.itexto.com.br/wp-content/uploads/2017/08/msx_oiMundo-300x290.png" alt="msx_oiMundo" width="300" height="290">

Após ter enjoado de todas as variações&nbsp;daquele comando elementar&nbsp;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).

<img class="aligncenter size-medium wp-image-2612" src="https://devkico.itexto.com.br/wp-content/uploads/2017/08/smalltalk-223x300.jpg" alt="smalltalk" width="223" height="300">

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.

<img class="aligncenter size-medium wp-image-2613" src="https://devkico.itexto.com.br/wp-content/uploads/2017/08/grandcanyon-300x200.jpg" alt="grandcanyon" width="300" height="200">

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&nbsp;pupilos que melhor se desenvolvem normalmente são aqueles que baseiam seu conhecimento em um guia com <strong>começo, meio e fim bem definidos</strong>.

(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)
<h2>A importância do guia</h2>
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&nbsp;os novos conhecimentos (as camadas) possam ser adquiridos.

Este guia pode ter as mais variadas formas: um professor, um livro, vídeo aulas,&nbsp;uma série de artigos. O&nbsp;<strong>essencial</strong> é 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.&nbsp;<strong>O bom guia torna claro a conexão entre as camadas.</strong>

<em>(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)</em>

Ainda mais importante: o guia te diz&nbsp;<strong>aonde você irá chegar</strong>. Há um objetivo bem traçado: você sabe&nbsp;<strong>exatamente aonde deveria estar</strong> 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 <strong>se está questionando, é por que está pensando</strong>.

Após&nbsp;<strong>n</strong> 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.

<em>(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))</em>
<h2>Aí&nbsp;chega o Stack Overflow e ferra&nbsp;tudo</h2>
<img class="aligncenter size-medium wp-image-2616" src="https://devkico.itexto.com.br/wp-content/uploads/2017/08/pollock_1_1949-300x183.jpg" alt="pollock_1_1949" width="300" height="183">

Não me entenda mal, eu gosto do Stack Overflow,&nbsp;<strong>mas não como ferramenta de aprendizado</strong>. 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&nbsp;que nos guiou até aquele ponto. Há um momento inicial essencial ali: o recebimento da informação e, posteriormente, a&nbsp;<strong>confirmação do conhecimento</strong>, que se dá normalmente em duas fases:
<ol>
 	<li>O indivíduo reflete sobre aquilo que foi dito.</li>
 	<li>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&nbsp;ou confirmar aquela informação.</li>
</ol>
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:
<blockquote>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.</blockquote>
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&nbsp;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: <em>"mas Kico, tudo em demasia faz mal, basta usar com sabedoria e bla bla bla bla bla"</em>. 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&nbsp;<strong>naquele caso</strong>.

(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 <a href="https://devkico.itexto.com.br/?p=2596">aqui</a>)
<h2>O problema tá na web</h2>
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,&nbsp;<strong>era minha única opção</strong>. 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&nbsp;web a coisa é diferente: você começa a ler um texto e de repente topa&nbsp;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").&nbsp;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.

<img class="aligncenter size-full wp-image-2618" src="https://devkico.itexto.com.br/wp-content/uploads/2017/08/webondrugs.jpg" alt="webondrugs" width="400" height="275">

E para piorar a situação há a pressão do dia a dia. Seu chefe quer a solução&nbsp;<strong>na hora</strong>, 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... <strong>basta que o negócio funcione!</strong>

Pressa, informação fragmentada, falta de bases bem consolidadas... talvez esteja aí a base para que tantos <a href="https://devkico.itexto.com.br/?p=2539">livros técnicos e cursos online ruins</a> estejam sendo criados.
<h2>Então o que faço?</h2>
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 <a href="https://devkico.itexto.com.br/?p=2555">link</a>).

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 <a href="http://www.guj.com.br">GUJ</a> 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&nbsp;acostume com a mediocridade, pois você dificilmente sairá dela.