Para Programadores: Não tente entortar a colher. Isso é impossível. Em vez disso, apenas tente perceber a verdade. Não há colher. - Matrix

Já assistiu Matrix? Se ainda não, pare tudo o que está fazendo e vá assistir agora! Brincadeira, mas sugiro que faça isso quando estiver com tempo. No filme temos uma cena que muitos não entendem seu significado e profundidade, principalmente para nós que tanto amamos programar e ficar horas digitando linhas de código.

Vamos resumir um pouco o contexto, você consegue encontrar a cena também no youtube: Na cena, um jovem garoto (o Menino da Colher) diz a Neo: "Não tente entortar a colher. Isso é impossível. Em vez disso, apenas tente perceber a verdade. Não há colher. Então você verá que não é a colher que entorta, é só você mesmo." 🤯🤯

Quando eu assisti essa cena, eu demorei para entender, mas depois de alguns anos, vejo um valor muito grande para nosso dia a dia, como Engenheiros de Software. Como assim? Vou tentar explicar da melhor maneira possível.

Você já teve aqueles dias em que um problema de programação parece totalmente intransponível? Talvez um bug chato que não importa o quanto você percorra e leia seu código, ele se recusa a ser localizado. Ou talvez uma feature nova que você precisa implementar, mas a solução simplesmente não se encaixa na sua mente? Eu já passei muito por isso no passado! Acredite, não existe nenhum desenvolvedor que não tenha passado por essas ansiedades e dificuldades. É como se fosse impossível enxergar o real problema, a raiz de todo o caos. Mas vamos voltar ao filme Matrix.

No contexto do filme, a colher é uma representação da realidade fabricada pela Matrix. O garoto está dizendo que, para mudar a realidade, você não deve se concentrar em alterar as coisas dentro dela (a colher), mas sim perceber que a própria realidade (Matrix) é maleável e pode ser moldada por sua vontade. O que isso significa? Meu deus fiquei mais confuso ainda! Calma queridos jovens, vamos lá!

A partir daqui vou tentar expressar como eu entendo essa frase no contexto da programação:

  • Entendendo a realidade do problema: Na programação, às vezes você pode se deparar com um problema que parece impossível de resolver. Mas se você olhar para o problema de um ângulo diferente, ou mudar a maneira como você está pensando sobre o problema, muitas vezes pode encontrar uma solução. O Menino da Colher está essencialmente dizendo a Neo para mudar sua perspectiva - não é a colher que está entortando, é ele mesmo que está mudando.

  • Abstração e flexibilidade do pensamento: A ideia de que "não há colher" também pode ser interpretada como uma metáfora para o conceito de abstração em programação - a ideia de que o código que você escreve não é uma entidade física, mas uma representação de uma ideia ou conceito. Isso exige um pensamento flexível - assim como Neo precisa aceitar a ideia de que não há colher, os programadores precisam ser capazes de pensar em termos de abstrações, e não apenas em termos de linhas de código ou objetos físicos. Estamos construindo ideias, conceitos, regras de negócios!

  • Domínio sobre as regras: Quando Neo percebe que não há colher, ele ganha controle sobre a "realidade" na Matrix. Isso pode ser comparado ao momento em que um programador se torna suficientemente proficiente em uma linguagem ou tecnologia (Framework) que eles podem começar a "dobrá-la" à sua vontade, criando soluções inovadoras e eficientes que não seriam possíveis sem esse nível de entendimento. A dica aqui é que precisamos entender profundamento as tecnologias que estamos trabalhando se quisermos dominar elas!

Acho interessante que quando focamos um problema, parece que esquecemos o mar de possibilidades que temos para resolver esse problema. Por exemplo, você já se pegou pensando em seu código como uma série de variáveis, funções, loops e condicionais? Quando bate olho até vem aquele pensamento: "O que eu estou fazendo aqui?"😂. É normal se sentir perdido, principalmente quando o código foi escrito por outro desenvolvedor.

Mas assim como a colher na Matrix, nosso código não é apenas uma coleção de símbolos em uma tela. É uma representação de uma ideia, um conceito, um problema que estamos tentando resolver.

E assim como Neo precisa ver além da colher para entender Matrix, nós, como programadores, precisamos ver além das linhas de código para entender o problema que estamos tentando resolver. Isso é abstração - a habilidade de distanciar-se dos detalhes técnicos e ver o panorama geral. Não estamos apenas escrevendo código, estamos solucionando problemas!

E para fazer isso efetivamente, precisamos de flexibilidade de pensamento. Precisamos ser capazes de mudar nossa perspectiva, de ver as coisas de diferentes ângulos. Não podemos nos prender a uma única abordagem ou solução. Precisamos estar dispostos a questionar nossas suposições, a experimentar novas ideias, a aprender com nossos erros.

O que quero dizer com isso? Vamos voltar ao filme:

No filme Matrix, o personagem Neo só consegue mudar sua perspectiva quando ele finalmente aceita que a Matrix, a realidade fabricada que ele conhecia, não é real. Quando ele aceita que a "colher" que ele vê não é uma colher física, mas uma construção do Matrix, ele é capaz de "entortar" a colher com sua mente. Ele mudou sua percepção da realidade.

Quando estamos programando, encontrar a perspectiva correta para resolver um problema pode ser um pouco diferente, mas a ideia central é semelhante: precisamos estar dispostos a mudar nossa percepção, nossa abordagem. Sem isso nunca vamos nos libertar da nossa cadeia mental!

Mas como fazer isso? Vou listar sugestões que funcionaram, algumas podem te ajudar outras não, por isso tente abstrair as que podem realmente ser úteis:

  1. Pare e respire: Às vezes, quando estamos muito focados em um problema, podemos ficar presos em um único modo de pensamento. Fazer uma pausa, mesmo que seja apenas para fazer uma caminhada ou tomar uma xícara de café, pode ajudar a limpar sua mente e permitir que você aborde o problema de uma nova direção quando voltar.

  2. Peça ajuda: Outra perspectiva pode ser exatamente o que você precisa para encontrar a solução. Não tenha medo de pedir a opinião de um colega de trabalho ou buscar ajuda online. Às vezes, só o ato de explicar o problema para outra pessoa pode te ajudar a ver onde você estava preso.

  3. Divida o problema: Se um problema parece muito grande ou complexo, dividi-lo em partes menores pode ajudar. Essa nova perspectiva pode revelar soluções que você não conseguia ver antes.

  4. Revisite os fundamentos: Às vezes, voltar aos princípios básicos pode dar uma nova luz sobre um problema. Isso pode ser especialmente útil quando você está preso em um problema complexo.

  5. Experimente: Não tenha medo de tentar coisas novas. Às vezes, a melhor maneira de encontrar uma nova perspectiva é experimentando novas abordagens. Mesmo que elas não funcionem, você pode aprender algo valioso que pode te ajudar a resolver o problema.

Lembre-se, assim como Neo teve que aceitar que a realidade que ele conhecia era uma ilusão para ver além dela, você também pode precisar deixar de lado suas primeiras impressões ou suposições sobre um problema de programação para encontrar a solução. Por isso não tenha uma visão limitada, busque alternativas e ajuda para resolver problemas e entender conceitos da programação.

Pra mim a principal dica é a 4: no fundo tudo isso passa pelos fundamentos da computação (que aliás, não mudam há décadas). E que infelizmente, muitos acabam menosprezando, por considerar "um monte de teoria chata e inútil". Vemos até gente com muitos anos de carreira enchendo a boca pra falar que nunca precisou, o que é triste. Ela não sabe o que não sabe, não vê utilidade porque ela nem sabe que aquilo existe, e portanto não percebe como seria benéfico saber.

Os problemas mais comuns (e até muitos dos incomuns) já foram resolvidos, com algoritmos testados e melhorados ao longo do tempo, em situações reais. Se as pessoas estudassem mais esses fundamentos, não gastariam tanto tempo pra resolver tais problemas (e nem chegariam a gambiarras horríveis que se vê por aí).

Mais ainda, muitas vezes a pessoa não consegue aplicar tais algoritmos porque não consegue reconhecer que o problema se encaixa nos casos que o algoritmo resolve, porque faltou outro fundamento: a capacidade de abstração (que vc adquire estudando outra coisa que muita gente considera inútil, uma tal de matemática).

Pra mim, a falta dos fundamentos (seja por desprezo, ou pela má qualidade de muitos cursos) é um dos principais problemas da nossa área.

> Vemos até gente com muitos anos de carreira enchendo a boca pra falar que nunca precisou, o que é triste. Exatamente. Os fundamentos são essenciais para qualquer profissional de programação. Sem eles não conseguimos buscar por mais soluções e as vezes até mesmo entender o problema. Se um profissional não concorda com isso, principalmente com anos de experiencia, de nada vale a experiencia dele, provavelmente esse tipo de profissional gera apenas código sujo. Concordo muito e é bom saber que existem pessoas que sabem do valor dos fundamentos.

Muito boa postagem.

Somos engenheiros. Ou não? Somos pagos para dar soluções, não para entregar soluções já existentes (às vezes isso é ok). Precisamos entregar o melhor. E para isso temos que entender muito bem qual é o problema. E dominar todas as técnicas, até as raras de serem usadas, para oferecer a melhor solução.

Mas antes precisamos interpretar o que temos à nossa frente. Para tudo. Só assim podemos evoluir e partir de algo correto para pensar na solução. Muitas vezes a nossa falha não está nem em ainda não ter experiência com programação, falta a base da base, que se aprende, ou deveria aprender na escola.

Não podemos só montar peças de Lego. Sim, oque fazemos é montar peças de Lego, tudo o que fazemos já está aí, não tem muito como inventar coisas novas, até para os cientistas mais renomados na área, pelo menos no básico, mas usamos com criatividade, questionando, entendendo, raciocinando.

Por isso não adianta perguntar onde usar design patterns, precisa aprender o que é, quais são eles, e entender o todo para o momento que precisar de um deles, poder usar adequadamente, sem forçar para usar por usar.

Só quero destacar para dividir os problemas, sem perder o todo, em muitos casos a solução não sai ou não é boa porque na divisão cria-se um novo problema. Então é preciso ter atenção em tudo.

Nada disso é novidade. Mas é sempre importante entregar formas diferentes para audiências novas o quanto é importante. Queria que mais pessoas tomassem consciência disso.

Faz sentido para você?

Espero ter ajudado.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Obrigado pela comentário!😀 Sobre a parte dos Design Patterns, hoje o pessoal aplica muito pouco, principalmente porque tenta aplicar padrões de projetos onde não se deve aplicar ou não entende o momento correto de encaixar o conceito. Muitos tentam "entortar a colher" ao utilizar os design patterns para resolver problemas que o proprio padrão não se encaixa. É por isso que estudar os conceitos e práticar é essencial para todos, independente do anos de experiencia. No ponto de dividir o problema, eu me refiro a quebrar um problema em peças menores, como se fossem um quebra-cabeça, muitos problemas precisam ser divididos em partes para se chegar a conclusões racionais. Se o desenvolvedor não quebrar um problema complexo em partes até montar a imagem completa para ai sim conseguir propor a solução, ele pode entregar uma solução de curto prazo, ou a famosa gambiarra colossal. Vejo que muitos programadores hoje tem medo de enfrentar problemas ou tentar solucionar bugs, muito pela falta de confiança, experiencia e por estarem travados mentalmente em uma solução momentânea. Assim como o personagem do filme entendeu que é necessário mudar a perspectiva sobre o problema, nós também precisamos fazer isso na nossa profissão? Faz sentido para você?

Post senssacional! A analogia com o filme para ilustrar problemas reais que temos diariamente foi uma boa sacada. Recentemente estava desenvolvendo uma nova feature onde estava preso em uma funcionalidade que eu nao sabia como resolver, tentei varias coisas, mas a solucao estava no obvio, nos principios basicos, o que me ajudou a ver isso foi ser capaz de abstrair o problema e dar um tempo nele ocupando a cabeca com outras atividades, um dia estava voltando da academia, cansado ja e como num estalo de dedos a ideia veio!

Muito obrigado por ler! Cara que sensacional a maneira que você resolveu o problema. Normalmente nós sempre achamos que temos que "dobrar" o framework ou linguagem para que nossa solução funcione. Não é assim que as coisas funcionam. Não é a ferramenta que tem que mudar, mas nossa percepção da realidade do problema, precisamos ter claro os fundamentos. Parabens e continue com essa mentalidade. Grande abraço!

Se ainda não, pare tudo o que está fazendo e vá assistir agora!

E depois volte aqui e nos conte o que achou e se o alerta valeu a pena.

Existem tantos bons motivos para assitir Matrix que não vale a pena começar a listar. Coloco essa recomendação na conta do Confie em mim! que depois a gente conversa.

Muito show, cara. Deu um mindblowing sinistro quando você explicou a ideia da colher hahaha

Muito obrigado pelo comentário, fico feliz que tenha gostado e que conseguiu captar a ideia do texto. 😁

Não dei nada pelo titulo mas a reflexão é incrivel <3

Obrigado por ler! Realmente, eu não sou criativo com titulos 😂😂😂. Abraço!

Pessoal muito obrigado pelos comentários e por lerem. Gostaria de comentar mais um pouco sobre o tema e complementar.

Precisamos entender que não é a ferramenta (a "colher") que precisa mudar, mas a nossa percepção da realidade do problema. O que isso significa? Precisamos entender melhor o problema que estamos tentando resolver, os princípios fundamentais que estão por trás dele, e como a nossa ferramenta pode nos ajudar a resolver esse problema da maneira mais eficiente possível.

Lembre-se, a "colher" é apenas uma ferramenta em nossas mãos. A realidade do problema e a solução para ele estão em nossas habilidades, experiencias e criatividade. Como Neo, precisamos aprender a ver além da "colher" para alcançar as soluções, isso pode ser dificil as vezes, pode nos obrigar a sair até mesmo da zona de conforto. Então, da próxima vez que você se encontrar lutando para "dobrar a colher", lembre-se de olhar além da ferramenta e se concentrar em entender a realidade do problema.