blag

Escolhendo o que aprender

Sendo sincero, não sei o que quero aprender. Comecei o Crafting Interpreters tem um tempo, e percebi que tem duas maneiras diferentes de ler o livro: Implementando junto ou implementando depois (se você não implementa, eu vou puxar seu pé hoje a noite).

Independente do jeito, eu não fiz muito progresso. Já tentei ler no celular, no Kindle, no físico, no computador. E isso não é caso isolado, tenho isso com alguns outros livros e alguns outros hobbies, e acho que é esse o problema: Tenho muitos hobbies.

Tenho assistido bastante o canal do Joe Minosaur no YouTube, tem me ajudado bastante a progredir nas minhas músicas. No espírito do que aprendi lá, pretendo realizar algumas mudanças pra garantir mais sucesso em outros hobbies.

Realmente é a porcaria do celular

Autodescritivo, mas é tão importante que quero gastar uma prosa falando um pouco do quanto eu realmente botei isso em prática:

  1. Não tenho YouTube nem Instagram instalados no celular (e nunca nem cheguei a ter conta no TikTok)
  2. Só uso YouTube pelo navegador (é horrível, e é esse o ponto)
  3. Uso filtros do uBlock Origin pra arrancar Shorts do YouTube
  4. Uso o filtro instagram.com/* pra quebrar o Instagram de propósito no navegador do celular
  5. Costumo só assistir vídeos na TV do quarto
  6. Entro no Instagram só pelo PC para responder mensagens (mas estou avaliando usar o Beeper só pra isso)

Entre outros pequenos hábitos. De maneira geral, qualquer coisa que me mantenha longe do celular já ajuda.

Escrever e rabiscar

Outra coisa que tenho notado me ajudar bastante é escrever em papel. Tenho três cadernos: um quadriculado de 5mm, um sem pauta e um pautado, cada um com seu propósito. O sem pauta é para pensamentos soltos, associações livres, contas, diagramas ruins e desenhos piores ainda. É legal ter um lugar que eu posso usar só pra exercitar isso, é impressionante o quanto a gente desaprende a escrever direito quando não praticamos!

O quadriculado atualmente uso só pra fazer desenhos de Nós Celtas, mas planejo usar para outras coisas que precisem de mais ordem no futuro, como diagramas mais formalizados, contas mais complexas e coisas assim.

No momento da escrita desse texto, o pautado está em branco, mas não por muito tempo. Eu decidi que seria uma ótima ideia escrever um livro, e por conta disso, prevejo muito uso desse caderno. Quero usar ele para discorrer por ideias inicialmente esboçadas no sem pauta, mapas mentais e coisas do tipo, para dar mais forma às ideias que se formarem. Por que não digital? Volto nisso já já!

Rabiscar é outra coisa importante pra mim. Eu gosto de desenhar, mesmo não sendo muito bom nem praticando muito, e adoro quadrinhos. Em nenhuma ordem em particular, adoro os trabalhos do Paulo Moreira, Helô D'Angelo, Laerte (não entendi), Gabriel Lage (Bom Dia e Tal), Rafa Fritzen (Ângulo de Vista) e a Bennê Oliveira. Outros nomes gringos que gosto muito são o Randall Munroe (xkcd), Safely Endangered, Shen Comix, Zach (Extrafabulous Comics) e o mais recente, Harris (Beetlemoses). Claro que tem outros, mas esses me vieram à mente mais rápido.

A parte legal de rabiscar (desenhar não, rabiscar) é ser uma ferramenta muito útil se você trabalha com programação. Por que você acha que ensinam Autômatos, Compiladores, Estruturas de Dados, Grafos e tudo mais usando diagramas? Por que você acha que existe UML? Somos capazes de absorver e expressar conceitos complexos muito melhor visualmente. Em quase todas as equipes e projetos onde eu passei de uns tempos pra cá, uma das primeiras coisas que eu estabeleci com colegas e clientes é que "quer que eu desenhe?" não é, e não deveria ser, um insulto.

No final você ainda pode se perguntar: Mas por que usar cadernos físicos? Não existem quadros brancos digitais e editores de texto excelentes por aí? Sim! Mas a mente é uma coisa engraçada, nem sempre você deve facilitar seu processo expressivo. Escrever ou rabiscar no papel muda fundamentalmente o seu processo de raciocínio exatamente pelo fato que é mais lento.

Você gasta mais tempo pensando no que vai escrever, os pensamentos passam mais tempo perambulando na sua mente, os traços são mais comprometedores, o preço de corrigir um erro agora não é mais tão baixo ou transparente quanto um backspace. São todos esses pequenos efeitos que, cumulativamente, levam a mais ideias e ideias melhores à longo prazo.

Claro que as ferramentas rápidas tem seu momento: É interessante usar meios físicos para raciocinar e meios digitais para produzir. Aprendi esse conceito num post do David Kadavy que entra em muito mais detalhe sobre o assunto, vale a leitura.

Decisões

Legal, gastei algumas horas escrevendo sobre escrever e rabiscar e não esclareci nada que me propus a falar sobre no começo desse post.

Como estava dizendo, não sei o que quero aprender. E é refletindo sobre essa constatação que cheguei na resposta: Não sei o que quero aprender porque não consigo decidir. Se o problema é escolha, vamos escolher:

Sobre compiladores

WebAssembly me parece a escolha mais sensata para quem quer dar seu primeiro passo mais sério em compiladores: Roda em qualquer navegador moderno, além de existirem runtimes indepentens de WASM, como o Wasmtime. É um investimento de tempo considerável estudar a spec toda, quiçá escrever um compilador que emite WASM, mas a recompensa é estar um passo mais perto de emitir código de máquina de verdade do que seu próprio bytecode.

Falando em código de máquina, RISC-V é um ISA aberto, projetado em parte justamente para ser facilmente ensinado e aprendido. Se eu perder completamente minha conexão com a realidade, eventualmente aprendo isso aqui.


Vou terminar o Crafting Interpreters. Quero pensar numa linguagem parecida com TypeScript, mas com algumas coisas diferentes, notavelmente um operador de "pipe" (tipo o |> do Elixir) e pattern matching.

Vou escrever um compilador e interpretador de bytecode em Zig, e um compilador pra WebAssembly em Zig também. Vou escrever um interpretador de AST em TypeScript.

Eventualmente vou escrever um livro.