Código à mão


Eu tenho lido Alice’s Adventures in a differentiable wonderland. Todo fim de capítulo vem com um exercício prático aplicando os conteúdos do capítulo. Esses exercícios ajudam muito a fixar as principais ideias e são essenciais para tornar os formalismos matemáticos em conhecimento prático.

image.png

Exercícios do primeiro capítulo especificando a implementação de um algoritmo de gradient descent

O certo seria resolver esses exercícios num computador, já que envolvem programação, porém isso não tem encaixado muito bem no meu setup. Eu tenho lido esse livro normalmente no meu iPad, sentado na praia, durante minhas férias. Ter que esperar até mais tarde para fazer esses exercícios num computador não combina muito com a rotina de praia. Como que posso fazê-los sem sair da minha cadeira na praia?

escritorio

Eu gostaria de ser capaz de tratar minhas anotações manuscritas do OneNote como um programa e executar minhas anotações para testar seu funcionamento.

O problema é que não há, no iPad, um aplicativo que permita o uso do Apple Pencil para escrever código [1]. Portanto eu não consigo fazer os exercícios de programação do livro a não ser que eu digite usando o teclado virtual ou um teclado externo. Nenhuma dessas opções é muito ergonômica (e de qualquer forma você acaba com uma versão piorada de um laptop, levemente mais portátil).

Ok — não há um aplicativo que permita escrever código com meu Apple Pencil, mas quem que escreve código usando lápis e papel na vida real?

Se você já fez alguma aula introdutória de computação na faculdade, é bem possível que você tenha feito isso para uma prova. Escrever código no papel não é algo tão incomum do ponto de vista de aprendizagem e clareza. Um exemplo disso é visto em quem faz programação competitiva. A maioria de quem participa de competições está acostumado a escrever código no papel e somente digitar o código em um computador após ter certeza de que a implementação no papel faz sentido.

É claro que ninguém vai escrever software “profissional” com papel e caneta [2]. Dito isso, para aprendizagem, escrever à mão pode ser melhor que digitar

Disso, eu escrevi uma aplicação que se propõe em fazer exatamente isso. Você pode testá-la agora clicando aqui (você precisa criar uma API key no Groq, 100% gratuita, para as chamadas de modelo que transcrevem suas anotações em código). (Github)

.

Eu tenho 2 exemplos de anotações mostrando o uso que eu imaginei para a ferramenta:

Exemplo de uso do app, muito similar a um notebook python, com células em que se escreve o código manuscrito

Exemplo de uso do app, muito similar a um notebook python, com células em que se escreve o código manuscrito

merged-image-1766884996976.png

Eu gostei bastante do resultado final [3], fora as sharp-edges, mas sinto que existe um problema fundamental. Para ser capaz de segmentar o código em células, transcrever e executá-las, tive que criar meu próprio frontend. Isso faz com que eu tenha que “reinventar a roda” nas features de escrita/note-taking. O melhor form factor para isso seria uma extensão de uma aplicação de notas estabelecida como o One Note. Porém, os principais aplicativos de notas não são nada extensíveis pela minha pesquisa [4].

Para instalar tinygrad e começar a escrever modelos de deep learning, crie uma célula e execute:

import micropip
await micropip.install(['sqlite3', 'tinygrad', 'numpy'])
import os
os.environ['DEV'] = 'PYTHON'

[1] Tecnicamente, qualquer aplicativo de texto permite que você use o pencil para escrever, e um modelo então é responsável por traduzir sua caligrafia para texto de verdade, mas o uso é péssimo. O modelo erra muito, e não detecta indentaçãi (o que torna escrever algo em python impossível). Você também perde a flexibilidade e fluidez de escrever à mão, já que tudo vira texto depois e sua caligrafia some. Eu achei UM aplicativo, anunciado menos de 1 mês atrás no Reddit, mas ele não é muito flexível.

[2] Eu ia adicionar um contra-exemplo que eu achei ter lido sobre Donald Knuth fazendo exatamente isso, mas não consegui achar :( mesmo assim, ele é uma lenda: https://www.paulgraham.com/knuth.html.

[3] Velocidade de inferência foi a coisa mais importante para que o aplicativo ficasse realmente usável. Inicialmente utilizei o OpenRouter, mas o tempo de inferência tornava o loop de (escrever → transcrever → rodar → corrigir) bem desagradável. A velocidade de inferênica da Groq é sensacional.

[4] Não existe um equivalente do Emacs, infinitamente extensível, para notas manuscritas digitais