- Disusun agar para developer dapat merasakan pembelajaran sekaligus tantangan kreatif melalui 73 ide proyek pemrograman
- Setiap proyek mencakup berbagai bidang seperti jaringan, sistem, AI, grafis, keamanan, database, dan lainnya
- Sebagian besar ide dirancang agar pengguna mengimplementasikan langsung prinsip inti teknologi, sehingga teori dan praktik dapat dipelajari bersama
- Setiap item menyertakan tautan ke paper, dokumentasi resmi, dan tutorial sehingga jalur belajar menjadi lebih jelas
- Memberikan kesempatan untuk memandang pemrograman bukan sekadar coding, melainkan seni eksplorasi dan penciptaan
Gambaran umum
- Banyak developer ingin memulai side project tetapi tidak tahu harus membuat apa
- Di internet ada banyak ide yang umum dan membosankan
- Artikel ini menyajikan 73 proyek yang bernilai tinggi untuk belajar dan juga menyenangkan
- Setiap proyek disusun agar pembaca dapat belajar dengan mengimplementasikan langsung konsep teknis tertentu
Proyek jaringan dan sistem
- Klien BitTorrent: mengimplementasikan klien unduh file untuk mempelajari cara kerja jaringan P2P
- Server DNS: membangun server yang mencakup penerimaan kueri, parsing paket, resolusi domain, dan caching
- Runtime container: mempelajari kernel namespace,
chroot, dan isolasi proses tanpa Docker
- Stack TCP/IP: mengimplementasikan langsung protokol TCP/IP di user space Linux
- Load balancer: mengimplementasikan distribusi permintaan antar server backend, health check, dan session persistence
Data dan sistem terdistribusi
- Protokol RAFT: mengimplementasikan sistem yang mendukung konsensus terdistribusi dan pemulihan gangguan
- Klon Redis: membangun database in-memory dengan perintah dasar, persistensi RDB, replikasi, dan transaksi
- Broker Kafka: mengimplementasikan sistem log terdistribusi yang menangani pembuatan topik serta permintaan produksi dan konsumsi pesan
- Mesin SQL dan optimizer: mempelajari eksekusi kueri dan proses optimisasi dengan meniru struktur SQLite
- Sistem CI: membangun sistem terintegrasi yang mengotomatiskan pemantauan repositori Git, eksekusi tes, dan pelaporan hasil
Kecerdasan buatan dan algoritme
- Solver Wordle: program penebak kata yang memanfaatkan konsep teori informasi dan entropi
- Generator deepfake: mengimplementasikan transformasi wajah menggunakan Optimal Transport
- Random forest: menyelesaikan masalah klasifikasi dengan mengimplementasikan langsung decision tree dan random forest
- Framework jaringan saraf: membangun framework deep learning yang mencakup tensor, autograd, dan optimizer
- Desain evolusioner: simulasi yang secara otomatis mengevolusikan struktur mesin menggunakan algoritme genetika
Grafis dan pengembangan game
- Ray tracer: merender adegan 3D yang terdiri dari bola, bidang, dan pencahayaan
- Renderer OpenGL: mengimplementasikan renderer mini untuk mempelajari dasar-dasar pemrograman grafis
- Remake Dangerous Dave: merekreasikan game klasik menggunakan SDL
- Mesin catur: mengimplementasikan permainan catur termasuk mesin UCI
- Procedural Crossword: membuat teka-teki silang otomatis menggunakan constraint propagation
Keamanan dan kriptografi
- Server autentikasi (JWT/Sessions): mengimplementasikan kriptografi, kedaluwarsa token, dan manajemen sesi
- Sistem voting anonim: merancang voting terenkripsi dengan zero-knowledge proof (ZKP)
- VPN: membangun mesh VPN yang meneruskan trafik tanpa server pusat
- Eksperimen malware: menguji respons firewall di lingkungan virtual machine
- Arsip Zip: mengimplementasikan sendiri kompresi, enkripsi, dan bundling
Pengembangan web dan aplikasi
- Server web: menangani permintaan HTTP, menyajikan file statis, routing, dan dukungan reverse proxy
- Editor kolaboratif: mengimplementasikan editor teks terdistribusi berbasis CRDT
- Mesin browser: membangun mesin sederhana yang melakukan parsing dan rendering HTML/CSS
- Editor video: editor sisi klien yang berjalan di dalam browser
- Ekstensi browser: menyimpan dan mengisi otomatis status kata sandi, formulir, dan clipboard
Visualisasi data dan pencarian
- Googlebot: membuat web crawler untuk mempelajari struktur dasar sistem pencarian
- Mesin pencari Wikipedia: mengimplementasikan indexing, tokenisasi, dan algoritme ranking
- Graf pengetahuan: memvisualisasikan relasi antar entitas dan memperbaruinya otomatis dari web
- Mesin Google Maps: sistem peta yang mengindeks data jalan, medan, dan lokasi
- Sistem caching CDN: merancang struktur cache yang mencegah permintaan duplikat untuk aset statis
Hardware dan embedded
- Sistem laser tag: sistem deteksi real-time yang memanfaatkan encoding IR dan komunikasi MQTT
- Aplikasi smart home: proyek IoT yang mendukung kontrol perangkat IR, penjadwalan, dan otomasi
- Emulator Game Boy Advance: merekreasikan struktur CPU, memori, grafis, dan input
Blockchain dan finansial
- Node Bitcoin: mengimplementasikan fungsi pengunduhan dan verifikasi blok
- Bot trading saham: melakukan perdagangan otomatis dengan sistem berbasis event
- Voting anonim dan smart contract: sistem voting andal berbasis blockchain
Penutup
- Ke-73 proyek menekankan pendekatan eksperimental untuk belajar dengan mengimplementasikan langsung teknologi inti
- Setiap ide terhubung ke dokumentasi resmi, paper, dan tutorial untuk mendorong pembelajaran berbasis praktik
- Sebuah usulan praktis untuk menemukan kembali pemrograman sebagai seni eksplorasi dan penciptaan
1 komentar
Opini Hacker News
Ada yang merasa daftar ini terlihat seperti dibuat oleh AI, tetapi menurut saya justru "membangun sendiri dari nol" adalah cara terbaik untuk mengurangi ketergantungan pada AI
Di Jepang, proses seperti ini disebut 'shugyo (修行)'. Seorang perajin mengasah alatnya dalam waktu lama bukan demi efisiensi, melainkan untuk memahami hakikat baja
Membuat Redis atau Git sendiri bukan soal hasil akhirnya, melainkan membangun model berpikir lewat gesekan dalam prosesnya. Inilah bagian yang tidak bisa digantikan AI
Memperkenalkan kumpulan ide proyek yang saya buat: Challenging programming projects every programmer should try
Ini adalah daftar dari codecrafters.io. Platform ini membuat kita mengimplementasikan proyek langkah demi langkah sambil menyediakan integration test dan komunitas
Saya juga sedang mengerjakan proyek 'Build your own Redis' dan cukup menyenangkan. Ini bukan buatan AI, sepertinya hanya kumpulan ide yang didapat dari komunitas
Saya sangat merekomendasikan mencoba membuat klien BitTorrent sendiri. Spesifikasinya sederhana dan persoalan detailnya menarik. Setelah selesai, ada kepuasan tersendiri saat mengunduh kernel Debian secara langsung
Jika menambahkan implementasi tautan Magnet atau fitur seeding, pembelajarannya bisa lebih dalam lagi. Dari pengalaman ini saya jadi tertarik pada sistem P2P dan DHT (seperti Chord)
Daftar ini agak aneh. Misalnya #58 adalah implementasi malloc, yang cukup sulit bagi pemula, lalu tepat setelahnya #59 menyuruh membuat protokol streaming dari nol. Rentang tingkat kesulitannya terlalu besar
Saya penasaran bagaimana pendapat orang tentang tantangan pemrograman /g/ dari 4chan. Pembagian tingkat kesulitannya terasa agak sewenang-wenang. Misalnya, mengatakan bootloader lebih sulit daripada compiler C terasa agak aneh
Tautan gambar referensi
.mdAda baiknya mencoba membuat sendiri alat atau protokol yang kecil dan lengkap. Kepuasan yang didapat dari kejelasan dan rasa tuntas, bukan dari skalanya, itu besar
Saya jadi bertanya-tanya apakah ini 'astroturfing' (promosi yang direkayasa)
Ada proyek yang bisa selesai dalam sehari, tetapi ada juga yang skalanya setara tugas akhir sarjana atau tesis master
Melihat daftar ini membuat saya merasa seperti bukan programmer yang baik
Untuk mulai, ada baiknya melihat riset atau karya pendahulu di bidang yang Anda minati. Misalnya, Anda bisa merujuk ke karya Adam Dunkels. Karena untuk embedded, ukurannya kecil dan mudah dipahami
Jika perlu, saya juga merekomendasikan memanfaatkan alat AI untuk membantu memahami atau menghasilkan kode