Como se tornar um super ninja aprendiz de programação

Vitor Martins
devtranslate
Published in
8 min readMar 10, 2018
Cortesia de Giphy

Quando você aprende alguma coisa nova, você não sabe o que você não sabe. Existem sempre segredos para se tornar bom em algo e aprender a programar não é diferente. Esses segredos são as meta-aprendizagens que proporcionam as técnicas, ferramentas e a mentalidade para fazer os avanços que você precisa para ser ótimo programador. Por sorte, eu estou aqui para entregar as técnicas de meta aprendizagens que eu descobri na minha jornada de programação na Makers Academy, para que você possa acelerar a sua própria jornada.

Os primeiros 5 segredos: Veja o código de maneira diferente, solucione os problemas de maneira diferente.

[1] Aplicando a mentalidade de um desenvolvedor é absolutamente incrível

Fundamentalmente, a mentalidade de um desenvolvedor significa uma aproximação ao código pela perspectiva de um solucionador mestre de problemas, em vez de um memorizador.

Infelizmente, aprender decorando é uma maneira satisfatória de se aprender, e é a maneira predominante nas escolas. É o modo padrão que implementamos, por causa da recompensa que sentimos quando conseguimos lembrar de algo: um fato, uma ficção, alguma sintaxe de código. É bom falar “Eu sei o método ‘map’, Eu seu o método ‘each’ e até mesmo ‘split’ em Ruby, óóótimo”. Enquanto isso pode te levar a um temporário ‘Eu me lembro’, não vai te ajudar a aprender, desconstrua e destrua um novo, problema de código difícil.

“Se eu tivesse seis horas para derrubar uma árvore, eu gastaria as primeiras quatro horas afiando o machado.” — Abe Lincoln

O machado, obviamente, sendo sua maneira de resolver problemas

Isso soa obvio, mas esse meta aprendizado é talvez a armadilha mais comum para novos programadores (certamente me enrolou). Enquanto você aprende a programar e lidar com problemas, seu foco deve ser melhorar sua melhor maneira de resolver problemas, em vez de aprender qualquer trecho de sintaxe de código possível de cor. Quando você termina um problema e decide o que aprender depois, você deve refletir em como você pode continuar a aprimorar a sua resolução de problemas para tornar mais robusta e efetiva possível.

Para mais informações sobre isso, veja: Coding 101, Thinking like a programmer (artigo em inglês).

[2] Veja através do texto: Entenda o contexto do código

Quando você olha para o código, você essencialmente está olhando para uma tela de texto. Isso naturalmente cria uma abstração da realidade do que você está tentando alcançar quando você escreve seu código.

Certamente, antes de as linguagens de programação de hoje em dia que representam textos em inglês, você estaria olhando para uma tela com números — 1s e 0s, que seria ainda mais abstrato (alguém poderia olhar por cima do seu ombro e não saber se você estava escrevendo código para fazer uma lista de tarefas ou alterando a trajetória de um míssil).

Entretanto, ignorando esses passos para tornar código escrito mais declarativo (Ex.: fazendo o texto de código mais refletivo do que o código está fazendo, para tornar mais fácil de entender e trabalhar), ainda existe um grande esforço em escrever o próprio código. Você poderia estar escrevendo código para controlar a aceleração de um carro, uma questão física de mundo real, mas quando você olha para aquele código e seu cérebro o processa, não é natural ou fácil compreender completamente o que irá fazer no mundo real (isso pode ou não te surpreender, mas os carros modernos não conectam o pedal de acelerar por um mecanismo físico, mas sim via software).

Enquanto você escreve o seu código, está conscientemente atento a essa desconexão natural entre o texto e a tela. De uns passos para trás, frequentemente, e lembre-se do que você quer que se código represente e realize (seja isso real ou virtual). Isso irá possibilita-lo um entendimento mais profundo no que você estar querendo alcançar enquanto escreve o código; tenha certeza que você desenvolva o código para que possa se encaixar de maneira correta e finalmente lhe ajudar a conseguir avanços sendo capaz de refletir de forma holística na sua base de código.

O poder do código vem da habilidade incrível de representar e ser utilizado tanto no mundo real quanto no virtual criando qualquer numero de novos universos no seu computador, desde modelar as mecânicas de um carro até criar um novo ambiente virtual. Fixe na mente o que o código está realmente representando, para que o seu código possa alcançar sua meta final por representar o mundo real e o transcendendo quando faz sentido para fazê-lo.

[3] Conheça o problema e ame o problema, ou seja, o problema

Tanto na vida quanto na programação, todos já passamos por isso. Surge um problema, e você quer resolvê-lo, rápido. Você mergulha direto para rascunhar uma resposta para a questão da prova, utilizando todos os seus conhecimentos em potência máxima, e você se sente bem por isso.

Eu nunca me senti assim em uma prova… NA VIDA TODA

Então você recebe sua nota… um 3. Espera, 3??? Então você percebe, você não leu a pergunta direito — você respondeu a questão que queria, não a que foi questionada. Você não sabia o seu problema o suficiente.

Mas não aceite minhas palavras, aceite as palavras do cientista da computação que foi ganhador do Prêmio Turing:

“Arquitetos desenham plantas detalhadas antes de qualquer tijolo ser posto ou um prego ser martelado, mas poucos programadores escrevem sequer um esboço do que seus programas farão antes de começarem a programar.”

Leslie Lamport

O que podemos aprender disso? Desenvolvedores de softwares tem uma tendência a pular antes de olha a queda, eles tendem a começar a programar antes de saberem com clareza o problema. Isso não é individualmente você, é um problema humano.

Quando vamos começar a programar, devemos saber, realmente saber, os requisitos para o nosso problema. Nós precisamos ver ‘as madeiras por dentro das árvores’ e entender nosso problema tanto do alto nível quanto do mais detalhado.

A primeira batalha para resolver um problema de programação, é verdadeiramente entender ele. Tire o tempo extra no começo para entender cada passo das instruções que foi lhe entregue, e o que você (ou seu cliente/entrevistador) quer alcançar no final.

[4] Busque a fundo o entendimento (o porquê) mais do que a largura do conhecimento (o que)

Busque entender o que seu código está realmente fazendo e porque ele faz isso, em vez de memorizar o que aconteceu quando você digita um método específico ou uma sintaxe em um cenário específico.

Você sempre pode usar o Google para procurar soluções específicas para uma grande quantidade de problemas. Sempre haverá muito conteúdo no Google para você pesquisar, mas entender profundamente é a chave para aplicar soluções, saber o que o código deve fazer antes de você executar e mais importante aprender porquê o código está fazendo o que faz. Você não precisa entender cada bit (um 1 mudando para um 0 ou vice-versa), mas saber porque o código se comporta do jeito que se comporta irá tornar o código robusto de uma maneira que não pode ser negada, enquanto limita você a involuntariamente criar bugs no seu código.

O escopo na programação é um bom exemplo disso, como provavelmente o maior motivo para erros de programação quando as pessoas aprendem a programar com, por exemplo, Ruby. O escopo define aonde as coisas no código (variáveis, métodos, etc) são visíveis no programa. Se você usar o escopo de maneira incorreta você recebera um NameError, por exemplo, quando você está no código e não consegue ver ou acessar a variável que você está tentando se referir, por que você dentro de um escopo diferente.

Uma metáfora completamente fora do contexto de programação para explicar isso seria: imagine que os quartos de uma construção são escopos separados, e você não consegue escutar alguém se essa pessoa estiver em outro quarto. Se eu estou no mesmo quarto (escopo) com meu amigo, Phil, eu consigo chamar pelo nome dele e falar “bate aqui”. Ele está no mesmo quarto (o mesmo escopo), então iremos bater as mãos perfeitamente! Se eu entrar em outro quarto (um novo escopo) e falar “bate aqui”, ele não está mais no meu quarto (escopo), então ninguém ira bater. Se eu tivesse profundidade em entender o escopo, eu saberia porque ninguém bateu na minha mão, Phil está em um escopo diferente (um quarto diferente), então eu sei como resolver meu problema (é um problema de escopo).

[Como complemento, porque providenciar escopo? Digamos que existem duas pessoas; Phil e Frank, por deixar eles em escopos diferentes, eu posso dizer “Ei, bate aqui!” sem precisar ocorrer nenhuma confusão de quem eu quero que bata na minha mão. Eu posso bater na mão de Phil em um quarto (um escopo), e bater na mão de Frank em outro quarto (um escopo diferente), ambos sendo chamados pelo mesmo comando de “Ei, bate aqui!” em qualquer quarto, sem risco de confusão].

Entretanto, quando você aprende algo novo (mesmo sendo algo simples como um método), siga sua curiosidade e busque por um melhor nível de entendimento, para que você possa explicar não somente o que o código está fazendo, mas o porquê. Não somente isso irá ajudá-lo a melhorar a qualidade do código, evitar bugs e chegar a uma solução rápido, irá possibilita-lo de articular o que o programa está fazendo e o porque para outras pessoas (seja elas um colega, um entrevistador ou até mesmo você no futuro).

[5] Aprendendo a como meta-aprender

Está é a primeira sessão de um conjunto de duras lições eu tive que aprender na minha jornada ao código. Alguns irão ler e instantaneamente aplicar, outros vão ganhar suas próprias dolorosas experiencias para realmente aprender e viver, outras ainda vão estar na sua própria lista de meta-aprendizagem, surgindo do seu próprio único código de personalidade.

Aprender a programar é uma coisa pessoal; seus caminhos específicos e tribulações serão seus mesmo. A jornada do código é uma maratona não uma corrida, e eu indubitavelmente tenho várias novas lições e meta-lições para aprender. Marcando seus próprios meta-aprendizados, e deliberadamente buscando as enquanto você aprende e desenvolve irá ajuda-lo a criar as mudanças estruturais que você precisa para um último impacto em não somente no seu código, mas como você aprende a programar.

Procurando por mais segredos da programação?

Para o próximo post, 5 powerful yet underused ways to approach coding problems clique aqui.

Este é o primeiro post de uma série que foca no segredo da meta-aprendizagem que captei quando eu estava aprendendo a programar na Makers Academy: as maneiras de aprender, ferramentas e mentalidade que você precisa para ser um programador excelente.

--

--