
"O que não posso criar, não entendo" é uma citação famosa de Richard Feynman que ressoa profundamente em diversos campos do conhecimento. Essa ideia, que enfatiza a importância da criação para a verdadeira compreensão, é um princípio que muitos profissionais, incluindo programadores, deveriam abraçar. Enquanto alguns aconselham a não reinventar a roda, a verdade é que construir sua própria roda pode proporcionar um entendimento mais profundo de seu funcionamento do que qualquer quantidade de leitura.
Em 2025, a beleza e a arte de desenvolver software enfrentam desafios significativos. Com o avanço da inteligência artificial, o prazer que muitos encontram na programação está ameaçado. O desenvolvimento de software se torna cada vez mais uma mercadoria, padronizada e industrializada. É crucial resgatar a alegria na programação e, para isso, projetos pequenos e divertidos podem servir como um lembrete do que inicialmente motivou nosso interesse pela tecnologia.
Os projetos de brinquedo, que seguem a regra 80:20, focam em realizar 20% do trabalho para alcançar 80% da funcionalidade. O objetivo não é criar software ideal para produção, mas aprender e explorar. Ao evitar o excesso de engenharia e limitar o código ao estritamente necessário, é possível descobrir que ideias que pareciam impossíveis de implementar podem se tornar viáveis.
A experiência com projetos pequenos pode também trazer benefícios inesperados. Muitas vezes, conhecimentos adquiridos em um projeto lúdico revelam-se valiosos em situações profissionais, ajudando a resolver problemas ou a evitar erros. Compreender as limitações que moldam o software é fundamental, e não há maneira melhor de entender essas restrições do que ao se deparar com elas diretamente.
A seguir, apresento uma lista de projetos de brinquedo que tentei nos últimos 15 anos, classificados por dificuldade e tempo estimado de execução. É importante ressaltar que essas avaliações consideram que você já tem familiaridade com pelo menos uma linguagem de programação.
1. **Motor de Regex** (dificuldade = 4/10, tempo = 5 dias): Um motor que lê e reconhece strings que correspondem a expressões regulares estilo POSIX.
2. **Kernel de SO x86** (dificuldade = 7/10, tempo = 2 meses): Um kernel de sistema operacional multiboot com suporte a CLI e gerenciador de memória.
3. **Emulador GameBoy/NES** (dificuldade = 6/10, tempo = 3 semanas): Um emulador para jogos simples de GameBoy ou NES, com desafios adicionais na implementação de vídeo e áudio.
4. **Jogo para GameBoy Advance** (dificuldade = 3/10, tempo = 2 semanas): Um jogo baseado em sprites, que aproveita a comunidade ativa de desenvolvedores para a GBA.
5. **Motor de Física** (dificuldade = 5/10, tempo = 1 semana): Um motor de física 2D que implementa a física newtoniana com suporte a formas complexas.
6. **Intérprete Dinâmico** (dificuldade = 4/10, tempo = 1-2 semanas): Um intérprete para uma linguagem semelhante ao JavaScript, com controle de fluxo básico.
7. **Compilador para uma linguagem semelhante ao C** (dificuldade = 8/10, tempo = 3 meses): Um compilador com suporte para uma arquitetura alvo e otimizações comuns.
8. **Editor de Texto** (dificuldade = 5/10, tempo = 2-4 semanas): Um editor que pode variar muito em complexidade, dependendo das funcionalidades desejadas.
9. **Execução Assíncrona** (dificuldade = 6/10, tempo = 1 semana): Uma biblioteca para tarefas assíncronas, que se torna mais complexa com suporte a I/O.
10. **Hash Map** (dificuldade = 4/10, tempo = 3-5 dias): Uma estrutura fundamental, que muitos programadores não compreendem totalmente.
Esses e outros projetos oferecem uma oportunidade de aprendizado e crescimento, além de um retorno ao prazer de criar. Lembre-se de que, ao explorar o desconhecido, você não deve depender de ferramentas que possam poluir sua mente com soluções predefinidas. A verdadeira alegria na construção de projetos vem da exploração e da descoberta, mesmo que isso exija um esforço inicial. O caminho pode ser doloroso, mas a recompensa é inestimável.
Confira os últimos vídeos publicados no canal