- Com 73 ideias de projetos de programação, a proposta permite que desenvolvedores vivenciem ao mesmo tempo aprendizado e desafios criativos
- Cada projeto abrange áreas diversas, como redes, sistemas, IA, gráficos, segurança e bancos de dados
- A maioria das ideias foi pensada para que você implemente diretamente os princípios técnicos centrais, permitindo aprender teoria e prática em conjunto
- Cada item inclui artigos acadêmicos, documentação oficial e links para tutoriais, deixando o caminho de aprendizado mais claro
- Oferece uma oportunidade de enxergar a programação não como simples escrita de código, mas como uma arte de investigação e criação
Visão geral
- Muitos desenvolvedores querem começar um projeto paralelo sem saber exatamente o que construir
- Há muitas ideias comuns e sem graça na internet
- Este texto apresenta 73 projetos divertidos e com alto valor de aprendizado
- Cada projeto foi estruturado para permitir aprender implementando diretamente conceitos técnicos específicos
Projetos de redes e sistemas
- Cliente BitTorrent: implementar um cliente de download de arquivos para aprender como funciona o networking P2P
- Servidor DNS: construir um servidor com recebimento de consultas, parsing de pacotes, resolução de domínio e cache
- Runtime de contêineres: aprender namespaces do kernel,
chroot e isolamento de processos sem usar Docker
- Pilha TCP/IP: implementar diretamente o protocolo TCP/IP no espaço de usuário do Linux
- Balanceador de carga: implementar distribuição de requisições entre servidores backend, verificação de saúde e persistência de sessão
Dados e sistemas distribuídos
- Protocolo RAFT: implementar um sistema com suporte a consenso distribuído e recuperação de falhas
- Clone do Redis: construir um banco de dados em memória com comandos básicos, persistência RDB, replicação e transações
- Broker Kafka: implementar um sistema de log distribuído que processa criação de tópicos e requisições de produção/consumo de mensagens
- Engine SQL e otimizador: aprender execução e otimização de consultas imitando a estrutura do SQLite
- Sistema de CI: construir um sistema integrado que automatiza monitoramento de repositórios Git, execução de testes e relatório de resultados
Inteligência artificial e algoritmos
- Solver de Wordle: programa de dedução de palavras usando teoria da informação e conceito de entropia
- Gerador de deepfake: implementar transformação facial usando Optimal Transport
- Random Forest: resolver problemas de classificação implementando diretamente árvores de decisão e random forests
- Framework de redes neurais: construir um framework de deep learning com tensores, autograd e otimizadores
- Projeto evolutivo: simulação que faz estruturas mecânicas evoluírem automaticamente usando algoritmos genéticos
Gráficos e desenvolvimento de jogos
- Ray Tracer: renderizar uma cena 3D composta por esferas, planos e iluminação
- Renderizador OpenGL: implementar um mini renderizador para aprender os fundamentos da programação gráfica
- Remake de Dangerous Dave: recriar o jogo clássico usando SDL
- Engine de xadrez: implementar um jogo de xadrez com engine UCI
- Palavras cruzadas procedurais: gerar automaticamente palavras cruzadas usando propagação de restrições
Segurança e criptografia
- Servidor de autenticação (JWT/Sessions): implementar criptografia, expiração de tokens e gerenciamento de sessões
- Sistema de votação anônima: projetar votação criptografada com provas de conhecimento zero (ZKP)
- VPN: construir uma VPN em malha que retransmite tráfego sem servidor central
- Experimento com malware: testar resposta de firewall em ambiente de máquina virtual
- Arquivador Zip: implementar diretamente compressão, criptografia e empacotamento
Desenvolvimento web e de aplicações
- Servidor web: processar requisições HTTP, servir arquivos estáticos, fazer roteamento e dar suporte a proxy reverso
- Editor colaborativo: implementar um editor de texto distribuído baseado em CRDT
- Engine de navegador: construir uma engine simples que faz parsing e renderização de HTML/CSS
- Editor de vídeo: editor client-side executado dentro do navegador
- Extensão de navegador: armazenar e preencher automaticamente senhas, formulários e estado da área de transferência
Visualização de dados e busca
- Googlebot: criar um crawler web para aprender a estrutura básica de um sistema de busca
- Mecanismo de busca da Wikipedia: implementar indexação, tokenização e algoritmo de ranking
- Grafo de conhecimento: visualizar relações entre entidades e atualizar automaticamente a partir da web
- Engine do Google Maps: sistema de mapas que indexa dados de estradas, terreno e lugares
- Sistema de cache CDN: projetar uma estrutura de cache que evita requisições duplicadas para ativos estáticos
Hardware e embarcados
- Sistema de laser tag: sistema de detecção em tempo real usando codificação IR e comunicação MQTT
- App de casa inteligente: projeto IoT com controle de dispositivos IR, agendamento e automação
- Emulador de Game Boy Advance: recriar a estrutura de CPU, memória, gráficos e entrada
Blockchain e finanças
- Nó de Bitcoin: implementar download e validação de blocos
- Bot de trading de ações: realizar operações automatizadas com um sistema orientado a eventos
- Votação anônima e contratos inteligentes: sistema de votação confiável baseado em blockchain
Encerramento
- Os 73 projetos enfatizam uma abordagem experimental de aprendizado por meio da implementação direta de tecnologias centrais
- Cada ideia leva a documentação oficial, artigos acadêmicos e tutoriais, incentivando um aprendizado prático
- É uma proposta prática para redescobrir a programação como arte de investigação e criação
1 comentários
Opiniões no Hacker News
Algumas pessoas dizem que esta lista parece gerada por IA, mas eu penso justamente o contrário: “fazer do zero com as próprias mãos” é a melhor forma de reduzir a dependência de IA
No Japão, esse processo é chamado de shugyo (修行). Um artesão passa muito tempo afiando suas ferramentas não por eficiência, mas para entender a essência do aço
Construir algo como Redis ou Git por conta própria não é sobre o resultado final, e sim sobre desenvolver modelos mentais por meio do atrito do processo. Essa é justamente a parte que a IA não pode substituir
Apresenta a coletânea de ideias de projeto que eu montei: Challenging programming projects every programmer should try
A lista veio de codecrafters.io. A plataforma faz você implementar projetos passo a passo, oferecendo testes de integração e comunidade
Eu também estou fazendo o projeto “Build your own Redis” e está sendo bem divertido. Não parece algo feito por IA; parece mais uma coletânea de ideias recebidas da comunidade
Recomendo fortemente tentar implementar um cliente BitTorrent por conta própria. A especificação é simples, e os problemas de detalhe são interessantes. Depois de terminar, baixar você mesmo o kernel do Debian dá uma sensação ótima
Se você implementar também links Magnet ou seeding, dá para aprender ainda mais. Essa experiência me levou a me interessar por sistemas P2P e DHTs (como Chord)
Esta lista é meio estranha. Por exemplo, o item #58 é implementar malloc, um tema bem difícil para iniciantes, e logo em seguida o #59 manda criar um protocolo de streaming do zero. A variação de dificuldade é grande demais
Queria saber a opinião do pessoal sobre os desafios de programação do /g/ do 4chan. A divisão de dificuldade parece meio arbitrária. Por exemplo, dizer que um bootloader é mais difícil do que um compilador C soa estranho
Link da imagem de referência
.mdVale a pena criar por conta própria ferramentas ou protocolos pequenos e fechados. A satisfação vem mais da clareza e sensação de completude do que da escala
Fica a dúvida se isso não é astroturfing (promoção manipulada)
Alguns projetos podem ser concluídos em um dia, mas outros têm escala de trabalho de conclusão de curso ou até de dissertação de mestrado
Olhando essa lista, dá a sensação de que eu não sou um bom programador
Para começar, vale olhar trabalhos anteriores na área que te interessa. Por exemplo, dá para se inspirar no trabalho de Adam Dunkels. Como é voltado para embarcados, é pequeno e fácil de entender
Se necessário, também recomendo usar ferramentas de IA para ajudar a entender ou gerar código