Estude como um Jovem Milionario Europeu!: Uma explicação ciêntifica/psicologica para a sua dificuldade em programação.
Um psicologo russo chamado Vigostki fez na area da psicologia, o que os físicos sonham em fazer com a física. Praticamente ele criou um campo unificado na psicologia, ou seja, ele conseguiu juntar conceitos complexos e tratados separadamente em algo unico.
Vigotski nasceu no meio da União Sovietica(URSS) e foi influênciado pelas ideias comunistas, mas não o comunismo politico, o comunismo cientifico filosofico. O comunismo é antes de tudo, uma grande obra cientifica muito interessante. Basicamente, comunismo é uma segunda visão do Darwnismo, porém sociologica. Vigotski juntou isso para mostrar tanto no aspecto biologico quanto sociologico, tudo muda, inclusive a relação do homem com outros homens, e do homem com o mundo.
A genialidade da obra de Vigotski está no fato de abraçar e conseguir juntar de forma clara e precisa muitas areas da ciencia psicologica e cognitiva. É uma das vertentes psicologicas mais novas e modernas, e embora eu esteja tentando resumir, ela é uma das mais complexas. Mas guarde o fato, é importante: Tudo passa por uma transformação, tudo evolui.
Vigotski trabalhava com crianças e ele focou seu trabalho na anatomia do aprendizado. A sua primeira descoberta foi a fala. O homem deixou de ser um macaco quando começou a usar "signos", e signos não é o de Áries, signos são recursos psicologicos que usamos o tempo todo! Por exemplo, o Assembly foi uma criação de simbolos para representar o código binário/hexadecimal usado para escrever os programas no processador. Criamos simbolos para tudo, e tudo é simbolo. Inclusive esse texto é um uso softiscado e complexo de simbolos para armazenar meu pensamento e transmitir a outros o que penso... deu pra sacar, certo?
Em um experimento com grupos de crianças, foi pedido para que o grupo A realizasse uma tarefa, apenas isso. O grupo B, realizava a mesma tarefa, porém em silencio, eles não podia falar. O grupo B apresentou grande dificuldade em realizar a tarefa e de fato na média não conseguiram.
Vigostki percebeu o caracter da fala, fala é pensamento, pensamento é fala, fala é signo, signo é fala que é pensamento. Entendeu? kkkk eu também não. O pensamento é um complexo uso de simbolos/signos para representar o mundo exterior e o processamento dessas informações também é feito e expresso por signos. Você não pensa enquanto fala porquê quando fala está transmitindo de forma direta seu pensamento, por isso falamos bizarrices em momentos errados rsrs.
Aqui entra o caracter Biologico e Comunista. Simplesmente algumas pessoas apresentam uma aptidão para certos assuntos e outras não. Algumas pessoas tem uma habilidade sobre humana com numéros enquanto outros tem dificuldade em resolver problemas relativamente mais simples. Vigostki criou um negocio que foi traduzido para nós como Janelas de Aprendizado. Burrice não é conseguir saber/usar um assunto/tema, burrice é não querer aprende-lo. Guarde essa frase anterior também.
O caracter comunista? Bom, comunistas gostam de revolução(sou quase um humorista)... Não não, brincadeiras a parte, é isso mesmo. Tudo passa por evolução e revolução, certo? Logo, isso acontece com os processos internos do cerebro. Na verdade essa é uma parte muito complexa do trabalho do Vigostki, ele vai trabalhar aspectos biologicos, darwnistas, comunistas e neurologicos.
Até agora tentei trazer uma base para entendermos o funcionamento do pensamento do Vigotski, agora vamos de fato para a parte que vai nos ajudar a aprender qualquer coisa, inclusive qualquer linguagem de programação.
JANELAS DE APRENDIZADO E POTENCIAL: POTENCIAL E POTENCIAL REAL.
Dentro das Janelas de aprendizado, temos os potenciais. O potencial é aquilo que o individuo pode aprender, e o potencial real é aquilo que ele já sabe.
Se você conhece C, tem uma noção mais "fixa e focada" do funcionamento do PC/Processador. Então seu potencial real é C, mas seu potencial pode ser Assembly.
Então você teve relativa facilidade em aprender Assembly, poi estava em seu potencial.
Mas se você programa em Javascript, seu potencial real é o proprio Javascript. Seu potencial pode ser Typescript, mas Assembly é algo distante do seu habitual, então Assembly será mais dificil de entender e aprender.
Perceba que o ambiente é importante, um dev JS não precisa se preocupar com memoria, então ele não usa controle de memoria, logo ele não precisa necessariamente dessa habilidade, está fora do seu ambiente, e se ele não exercita, está fora do potencial.
Potencial tem uma relação importante com ambiente, só evoluimos com estimulos do ambiente, certo? Darwinismo puro e simples aqui. Seu potencial é explorado e estimulado pelo ambiente. Geralmente isso é expressado em uma frase muito louca: A Ontogenia recapitula a Filogenia. Seu ambiente muda sua composição biologica, ou seja, você se adapta, Ontogenia refere-se ao individuo e não uma raça, logo, um individuo pode modificar suas capacidades evolutivas em determinado ambiente, mas ele não evolui de fato, apenas aprendeu se adaptar. Um papagaio aprende falar como humanos, papagaios não tem fala, nem mesmo podem criar um idioma, mas dentro de uma casa, com humanos, ele aprende um pouco. Seus filhos não nascem falando, mas podem aprender como ele a imitar a voz humana. Sua especie não evolui para falar, mas o individuo pode aprender frases.
Sua genetica pode ser horrivel em relação a numeros(sim, existem pesquisas que afirmam ser um traço genetico habilidades matématicas) mas não impede que você aprenda algebra linear. Simplesmente depende do seu estimulo, lembre-se que Einsten não foi o mais brilhante de sua turma, mas por fatos e estimulos, aprendeu a calcular muito bem. Tenha em mente que Vigotski trabalhava e pesquisava crianças, então sua teoria e prática é muito focada no surgimento e desenvolvimento da aprendizagem em crianças, mas não impede que adultos usem suas idéias, outra coisa é que por trabalhar com crianças, Janelas de aprendizagem são usadas originalmente para traçar periodo de tempos onde crianças estão abertas a aprender certas coisas, por exemplo: melhor época para aprender outras linguas é quando o cerebro está aprendendo uma lingua, ou seja, uma criança aprenderá inglês melhor quando também estiver aprendendo português. Seu cerebro e seu potencial de linguas tem o auge de suas capacidades na infancia, entre 3 e 8 anos. Mas você ignorar o caracter tempo/faixa etária, funcionará com qualquer um.
COMO USAR TUDO ISSO A SEU FAVOR: JANELAS DE APRENDIZAGEM NA PRÁTICA.
Até aqui temos uma visão superficial das teorias de Vigotski, acredito ser o suficiente para entendermos o funcionamento e porquê funciona as Janelas de Aprendizagem. Agora vamos ver porquê não aprendemos programação!
Linguagens de programação tem, cada uma, varias diferenças de sintaxe ou de fluxo, ou algo do tipo, mas quase todas funcionam de forma parecida. Então porquê você aprende Python mas Java é um inferno?
Imagine dois devs Jr, A(Python), B(Java), agora vamos analisar as duas e aplicar em uma janela de aprendizado:
- Python: Python é simples e curta, orientada a objetos, facil de entender e desenvolver, tem quase tudo que outras linguagens tem.
- Java: É simples também, orientada a objetos, e é facil de aprender.
ONDE ESTÁ O PROBLEMA?? COMO ASSIM JAVA É FACIL COMO PYTHON???!!
O problema do Java não é o Java, é o dev! Veja, Java é verboso, enquanto python é curta. Um dos problemas da nossa educação atual é a má formação das pessoas, temos muitos individuos formados com dificuldade em interpretação de texto.
Quando temos uma linguagem verbosa, com comandos maiores, eliminamos individuos com essas dificuldades, eles terão mais dificuldade em reter e lembrar dos comandos. Por outro lado, pessoas que apresentam essas dificuldades de leitura/escrita tem mais afinidade com numeros, pois são mais fáceis de interpretar, logo uma linguagem curta como Python torna o processo de leitura e escrita mais facil.
Aplicando: Embora as duas sejam orientadas a objetos, Python parece mais facil porque o potencial real do dev A é interpretar numeros e instruções mais curtas. O dev B tem mais facilidade em reter informações mais longas. Os dois vão aplicar a mesma lógica, mas o dev A não vai desempenhar um bom papel com Java.
A solução:
Para Vigostki e as escolas que aplicam as teorias dele, não tem solução e procurar solução é uma perca de tempo. Se o dev A tem afinidade com Python, tudo bem, é melhor que ele aprenda C, Lua, Julia... As teorias de Vigotski são uma critica ao modelo de ensino atual, onde somos forçados a aprender coisas que não estamos abertos a aprender, e isso cria uma barreira de aprendizado ao invés de estimulos. Nesse caso, o potencial do dev A pode ser C, que embora possa até ser mais dificil que Java, tem instruções mais curtas, permitindo uma melhor aplicação da lógica pelo dev A.
Observe que isso é um exemplo superficial, e o contexto muitas vezes é muito mais complexo. Outro fator é que nosso modelo de aprendizado é voltado para o mercado de trabalho, enquanto Vigotski desenvolveu suas idéias em um ambiente socialista. O foco para Vigotski é formar individuos especialistas, plenos em suas habilidades, e não individuos generalistas.
Outro coisa, o modelo de ensino de Vigotski é mais conhecido e aplicado na Europa, geralmente em escolas particulares com individuos com situações "especiais"(muito ricos!), na verdade, escolas como essas nem tem professores! Elas usam pequenas turmas autosificientes, que ditam o proprio ritmo e os próprios assuntos a estudar, contam apenas com um orientador. Na média, escolas com esse modelo formam mais individuos bem sucedidos intelectualmente em relação ao modelo tradicional. Isso torna o ensino nesse modelo pouco aplicado fora da Europa/EUA, poís exige que o estudante tenha poucas "exigencias" fora da escola.
Como você vai ignorar a matematica e focar totalmente no estudo de linguas se embora você seja MUITO bom nisso, ainda vai precisar trabalhar de caixa no supermecado da esquina quando acabar a aula? Entendeu?
MEU CASO COMO EXEMPLO: COMO USEI ISSO PARA APRENDER C, C++, JAVA AO MESMO TEMPO.
contexto:
Minha primeira linguagem foi Python, era até bom nisso, mas nunca consegui usar OOP com Python, sim, simplesmente nunca aprendi, e estudava, estudava de novo, e de novo...
Então entrei no curso de Psicologia em 2016 e parei de estudar programação. Voltei a estudar programação porquê sempre gostei disso. Me matriculei num curso de Redes EAD e então aconteceu: Comecei a estudar lógica, ignorei completamente portugol e essas baboseiras(pra mim rsrs), mas teve uma coisa que me chamou atenção, as tabelas AND, E, XOR... eu nunca tinha visto isso como autodidata. Comecei a entender e me interessar pelo básico, aprendi o tal binário, converter para hexadecimal, converter para octal, e fui entendendo como as coisas funcionavam.
Então aprendi C no modulo 2 de lógica. Sempre achei C interessante mais nunca tentei aprender C porquê nem sabia usar OOP com Python, quem dirá aprender C, certo? haha
Então descobri que gosto muito de C, mas preciso trabalhar como programador(em busca da primeira vaga) e então comecei a estudar JAVA, e logo vi que aprendia Java, mas esquecia 1 dia depois... então descobri o C++, que parecia com C, eu li por volta de 3 horinhas sobre C++ e aprendi tudo que li! Fazia bastante sentido e eu estava gostando, entendi OOP pela primeira vez, o que era um contrutor, metodos, etc. Hoje eu também aprendi JAVA, e estudo C++ com JAVA. Mas porquê toda essa confusão aconteceu?
explicação:
Eu usava Python de modo procedural, foi tudo o que consegui aprender na epoca, ou seja, escrever e entender funções era o meu potencial real. Quando vi C, era muito parecido com o que eu fazia em python, logo, C era meu potencial. Quando aprendi a usar C, parti pro Java, que era diferente do que eu estava acostumado, logo, OOP não fazia parte do meu ambiente, não era como eu estava acostumado a pensar. Por isso eu esquecia tudo que aprendia, não encaixava direito.
C++ por outro lado era parecido com C, então C++ passou a ser meu potencial, pois C era meu potencial real. Coincidentemente ao ler sobre C++ eu entendi porquê era muito similar ao que estava acostumado a ver. Eu nunca tinha entendido que um metodo é só uma função! Perceba como meu potencial e meu potencial real foi mudando enquanto eu também mudava e mudava meu foco.
Hoje eu estudo de forma cruzada: Estudo Java, faço os exercicios em C++ e depois reescrevo-os em JAVA. Eu não uso ponteiros, e se for necessario usar ponteiros, faço o exercicio em Java mesmo. Faço exercicios simples mas com matematica, pois sou péssimo em matematica, então busco exercicios que envolvam calculos para também ter que estudar calculos.
Para projetos pessoais como idéias, pequenos scripts, eu uso C(Eu penso melhor dessa forma).
Também estudo, mas de forma mais espaçada sobre Assembly e Cobol, gosto muito de linguagens antigas e acho bem interessantes. Quando adolescente aprendi eletronica com meu tio, então ler sobre processadores e controladores tem feito sentido pra mim, por isso me interessei por assembly nos ultimos meses.
MINHAS DICAS A VOCÊ:
-
Estude o básico: Existe o básico, e o básico do básico. No nosso caso o básico do básico as vezes é mais dificil! kkk Estudar binário e conversão é desnecessario se você nao vai programar em código de maquina. Mas É MUITO IMPORTANTE entender o básico de um computador, de um compilador, das linguagens em si. Se você aprende o básico como a Lógica, Algoritmos, seu potencial será muito mais amplo, e você aprenderá QUALQUER linguagem de programação.
-
Estude com relação ao seu potencial real: Identifique o que você já sabe, o que você tem mais facilidade em aprender? Qual linguagem entra na sua cabeça e qual é indecifravel? Você é bom com CSS mas SQL não? Então melhor ser Frontend, certo? Parece obvio, mas somos ensinados a focar no que somos ruins, e não no que somos realmente bons.
-
Aprenda a revolucionar: Um dos perigos do metodo é estagnar, é possivel que um individuo chegue ao seu potencial e não consiga passar dele, existe um termo pra isso mas não lembro agora. Eu aprendi equação do primeiro Grau, mas tenho dificuldade em fazer calculo de subtração(isso é real), ou seja, nem tudo é linear. Se você estagnou, pode ser que você não consiga mais evoluir, mas pode ser que você ficou confortavel nesse estágio e não esteja buscando, ou não saiba buscar, o proximo passo que seria o seu proximo potencial. Mas tecnicamente, sempre existirá um proximo potencial em relação ao seu potencial real.
-
Cuidado com seu ambiente: Você não é um macaco pré-historico precisando evoluir. Mas você é um papagaio morando com pessoas barulhentas. Temos muitas pessoas criando barulho na internet, vendedores, enganadores, falsários, plagiadores, etc. Aprenda a buscar as informações corretas nos lugares corretos. Você não é um GPT reproduzindo o que viu, aprenda a pensar e repensar. Por exemplo: Estudando sobre kernels, eu vi que precisava escrever o Bootload em Assembly porquê C precisava da pilha, logo, pensei "então um bootload em C é impossivel! como vou iniciar o bootload C se ainda não foi iniciado a pilha?? no minimo precisa do assembly para isso.". Certa vez perguntei a um dev com mais experiencia em C e ele disse que NÃO! Um bootload em C é apenas diferente, mas tudo é binário, então Assembly ou C não faz diferença. Eu assumi uma informação sem questionar o básico sobre ela e guardei como verdade absoluta. Tenha elasticidade para aprender tudo, reaprender tudo.
-
É muito fácil cair na ilusão: Eu aprendi C, e entendi sobre ponteiros, pensei "vou aprender coisas mais complexas, tá facil ser programador..." eu sou muito curioso, então fui escrever um pequeno kernel. Tudo perfeito! QEMU é maravilhoso, eu criei um bootload em assembly que iniciava um "kernel"(aprendi na internet kkkk) e então tomei a maior surra de todas: Pra que o sistema seja considerado um novo sistema, ele não pode ter as libs do sistema onde está sendo desenvolvido, então vamos criar uma função pra exibir uma mensagem na tela, certo? Como que faz um printf()????? Isso mesmo! VOCÊ SABE IMPLEMENTAR UMA FUNÇÃO PRINT NA SUA LINGUAGEM SEM USAR LIBS DA LINGUAGEM? COMO VOCÊ DEV JS, FARIA UMA FUNÇÃO PRINT SEM USAR CONSOLE.LOG OU DOCUMENT.WRITE? até hoje não aprendi fazer isso, e como aprendizado eu NUNCA irei olhar o printf() original do C, esse será meu parametro rsrs vou me considerar um programador quando conseguir fazer isso(sim, eu sei que tenho que usar o buffer vga ou algo assim).
Perceba que mesmo sabendo tudo isso, eu descubri tudo por acaso, na tentativa e erro. Só recentemente resolvi organizar meu conhecimento de psicologia para me ajudar com programação.
Seja inteligente e pegue o que for util para você, monte sua propria forma de estudar ou pesquise mais sobre esse modelo. Estude como um comunista, ou como um jovem ricaço europeu. Boa sorte!
Por favor, peço que não crie comentarios discutindo politica, pois uso o comunismo na explicação porquê é parte importante na teoria, e não para apoiar uma ideologia ou para criar discussão sobre isso.
Eu sou um dev junior buscando meu primeiro emprego, tenho visto muitos posts sobre aprender programação, como aprender, etc. Resolvi escrever esse post para tentar ajudar outros devs, escrevi de forma corrida e sem pausa, da forma como veio a mente, tem erros gramaticais e minhas experiencias pessoais como autodidata e depois como estudante de TI.
Se você tem outras dicas, compartilhe nos comentarios.