Já aconteceu de você estar no chuveiro, cantarolando e fazendo moicano com a espuma do shampoo e de repente, entre um pensamento desconexo e outro, surge a imagem de uma solução para um problema no qual você pensou o dia inteiro e não conseguiu resolver? Então você sai do banho, pega papel, caneta ou o notebook e começa a concretizar aquele pensamento. O resultado não é tão claro ou bonito como o que veio a mente durante o banho, por mais que você se esforce para lembrar os detalhes daquela imagem que estava em sua cabeça, o que você consegue expressar em palavras – ou código, no nosso caso – não é tão perfeito quanto a visão que você teve. Mas ainda assim, a solução que você consegue tornar real faz todo o sentido e é bastante razoável. Lembra-se de uma situação parecida? Pois o responsável por esses momentos eureca é o lado direito do cérebro que faz um processamento assíncrono de informações, tentando realizar um pattern matching para resolver problemas que surgem no cotidiano. Essa imagem representando a solução que podemos enxergar com clareza é o resultado da busca, como o processamento é assíncrono, a resposta muitas vezes chega horas, dias ou semanas depois do início da busca. E essa incapacidade de traduzir em algo concreto a solução exatamente da forma como ela foi visualizada é culpa do lado esquerdo do cérebro, já que ele é melhor para exprimir ideias em palavras, linguagem… e código, e não tão bom assim em interpretar imagens complexas e o todo das coisas.
O cérebro, esse CPU dual core.

Na verdade, não existe exatamente um conceito de lado esquerdo e direito em nosso cérebro. Mas há uma divisão clara de responsabilidades lá dentro. Uma metade, a popularmente conhecida por “lado esquerdo” é a que gosta de fatos, de nomear coisas, de dizer que o tempo está passando, de analisar e de sintetizar. Já o “lado direito” é um cara interessado em imagens, sons e sentimentos mais do que em uma palavra que dá significado. Se preocupa com o todo e as relações entre as coisas e não se importa com as coisas em si. Não quer nem saber quanto tempo vai levar para conseguir conectar duas pontas e solucionar um problema, afinal ele tem que relacionar esse problema com todo o conhecimento existente – inclusive aquele que está guardado mofando e cheio de teias desde a infância – afim de encontrar um relacionamento entre coisas que até hoje poderia ser completamente ignorado. O lado esquerdo é o cara racional, exato. O direito é o search engine (assíncrono) do cérebro. Há mais informações a respeito do funcionamento do cérebro no interessantíssimo Pragmatic Thinking and Learning: Refactor Your Wetware
.
É por isso que é um pouco desconfortável traduzir a solução que surgiu tão clara lá no banho para algo mais concreto, ou mais especificamente um código. O lado direito é mais apto a visualizar (literalmente) o todo, enquanto o esquerdo precisa dissecar esse todo, analisar os pedacinhos para formar palavras e frases que tenham sentido. Sabe quando você acorda e tem aquele sonho divertido inteirinho na mente, começa a explicar para alguém e puuufff, a lembrança simplesmente desaperece? No seu cérebro o sonho está armazenado no lado direito, e esse lado não se preocupa com linearidade ou tempo. Enxerga o sonho por completo em toda sua riqueza de cores, sons, cheiros e impossibilidades. No momento em que você tenta explicar essa imagem com linguagem, está efetivamente usando o lado esquerdo: incompatibilidade imediata de funções! E agora você deve estar se perguntando: e cadê o papo sobre saber várias linguagens de programação?
Quando você tem uma base de dados extensa disponível para o lado direito fazer queries, você certamente tem maiores chances de ganhar insights durante um banho [ou insira aqui sua atividade descompromissada favorita]. Outra coisa que você ganha aqui é o desempenho: quanto mais possibilidades para um matching ocorrer, mais rápido ele aparece. E ainda há a quantidade: com muitos matches possíveis é mais provável que você receba mais resultados até que o problema finalmente seja resolvido da melhor forma que seu cérebro pode conceber. Se você aprende sistematicamente novas linguagens de programação, está potencialmente aumentando essa base de conhecimento onde ocorrem as buscas. Mas, espera um pouco, se o lado direito é quem faz as buscas e ele não se importa com linguagens e seus detalhes (e por isso não liga para novas sintaxes e apis que você decora), como é possível se beneficiar desse aprendizado contínuo?
Estar ciente do contexto é essencial
A resposta está na maneira como essas novas linguagens são estudadas e aprendidas. Muito mais relevante que a sintaxe e a api é o contexto onde essa nova linguagem resolve muito bem os problemas. É claro que é interessante conhecer a fundo algumas linguagens, principalmente aquelas que você usa no dia a dia. Mas se você vai estudar todo ano uma nova como sugere o The Pragmatic Programmer: From Journeyman to Master
, será realmente muito difícil se tornar perito em todas elas, e não tem problema pois esse realmente não é o objetivo. O importante é compreender a “cultura” dos desenvolvedores nativos daquela linguagem X. É essa abordagem de estudo que vai garantir a expansão da sua capacidade de pensar em um mesmo problema sob diversos prismas, e por consequência é isso que irá aumentar a base para as buscas onde o lado direito faz consultas. Ao estudar uma linguagem de programação desconhecida entenda como os “nativos” da linguagem enxergam um problema. Frequente as listas de discussões, se habitue com o linguajar, procure acompanhar o conteúdo gerado pelos gurus daquele universo. Quando estiver razoavelmente ambientado, submeta suas ideias de solução para qualquer problema na linguagem estudada. Pergunte o que eles acham e receba abertamente todas as críticas, pois nelas estarão embutidos os conhecimentos, costumes e formas de abordar os problemas. Quando sentir que é capaz de abordar problemas simples da mesma forma que as pessoas habituadas com aquela forma de pensar, traga aquela perspectiva de mundo para sua realidade. Essa experiência durante o aprendizado é, na minha opinião, onde está o verdadeiro valor em se aprender uma nova linguagem.
Conheci uma professora de música que, ironicamente, escutava demais. Tinha uma condição física que a impedia de levar uma vida 100% normal devido as possíveis sobrecargas sensoriais que uma cidade como São Paulo podem proporcionar: ao melhor estilo Dare Devil. Me lembro de um dia em que a vi com uma laranja junto a orelha, não entendi a cena e perguntei: “que é isso pô?”. E ela, com toda a naturalidade: “estou vendo se já está madura”. Wow. Se havia uma abordagem que eu nunca havia visto para escolher uma fruta, era aquela. Claro, eu tenho uma audição normal e nada treinada, seria incapaz de ouvir qualquer diferença entre uma laranja e uma melancia. Mas aquilo me fez pensar: realmente existem muitas nuances possíveis em uma simples escolha de frutas além da aparência. Passei a prestar maior atenção em textura, cheiro, além da aparência que era minha maior preocupação até então. Meu contexto para a escolha de frutas se tornou mais amplo quando conheci a cultura de alguém com uma abordagem completamente distinta da minha. Não tenho nem de longe a habilidade e conhecimento dessa professora no campo onde ela é especialista, mas apenas o fato de saber que ela fazia aquilo me permitiu abrir a mente sobre o assunto, o que influenciou a forma como eu escolho maçãs, laranjas e afins.
A partir do momento em que você se torna familiar com novas formas de pensar sobre os problemas, fica cada vez mais claro que uma linguagem é apenas uma ferramenta. E passa a ser aceitável que uma solução ideal possa envolver diversas delas. Já ouviu dizer que para quem só tem martelo, todo problema é prego? Pois quando você aumenta a área de busca de soluções no cérebro é como se tivesse adquirido novas ferramentas. Pode ser até que você use sua própria linguagem nativa e favorita, mas de uma forma que outra pessoa que não conhece outras possibilidades poderia nem sequer achar que é possível. O programador poliglota é alguém que conhece várias linguagens porque pode usar a ferramenta correta para um problema específico. Mas além disso, é alguém que sabe considerar o todo, o contexto de um problema, e sabe que a melhor solução depende inteiramente desse contexto.