- 73 adet programlama projesi fikri, geliştiricilerin hem öğrenme hem de yaratıcı meydan okumayı aynı anda deneyimleyebilmesi için derlendi
- Her proje ağ iletişimi, sistemler, yapay zeka, grafikler, güvenlik, veritabanları gibi farklı alanları kapsıyor
- Fikirlerin çoğu, temel teknik prensipleri doğrudan uygulamayı hedefleyecek şekilde tasarlandığından, teori ve pratiği birlikte öğrenmek mümkün
- Her maddede ilgili makaleler, resmi belgeler, eğitim bağlantıları yer alarak öğrenme yolunu netleştiriyor
- Programlamayı basit bir kodlama işi değil, keşif ve yaratım sanatı olarak görmeyi sağlayan bir vesile sunuyor
Genel bakış
- Birçok geliştirici ne yapacağını bilmeden bir yan projeye başlamak istiyor
- İnternette yaygın ve sıkıcı pek çok fikir var
- Bu yazı, öğrenme değeri yüksek ve eğlenceli 73 proje sunuyor
- Her proje, belirli teknik kavramları doğrudan uygulayarak öğrenmeye yardımcı olacak şekilde kurgulanmış
Ağ iletişimi ve sistem projeleri
- BitTorrent istemcisi: P2P ağ iletişiminin nasıl çalıştığını öğrenmek için dosya indirme istemcisi geliştirme
- DNS sunucusu: Sorgu alma, paket ayrıştırma, alan adı çözümleme ve önbellekleme işlevlerini içeren bir sunucu kurma
- Container runtime: Docker olmadan kernel namespace'leri,
chroot ve süreç yalıtımını öğrenme
- TCP/IP stack: Linux kullanıcı alanında TCP/IP protokolünü doğrudan uygulama
- Load balancer: Arka uç sunucuları arasında istek dağıtımı, sağlık kontrolü ve oturum sürekliliği işlevlerini uygulama
Veri ve dağıtık sistemler
- RAFT protokolü: Dağıtık uzlaşma ve hata kurtarmayı destekleyen bir sistem uygulama
- Redis klonu: Temel komutlar, RDB kalıcılığı, replikasyon ve transaction içeren bellek içi veritabanı kurma
- Kafka broker'ı: Topic oluşturma, mesaj üretme/tüketme isteklerini işleyen dağıtık günlük sistemi uygulama
- SQL motoru ve optimizer: SQLite yapısını taklit ederek sorgu yürütme ve optimizasyon sürecini öğrenme
- CI sistemi: Git deposunu izleme, test çalıştırma ve sonuç raporlamayı otomatikleştiren entegre sistem kurma
Yapay zeka ve algoritmalar
- Wordle çözücüsü: Bilgi teorisi ve entropi kavramlarını kullanan bir kelime tahmin programı
- Deepfake üreticisi: Optimal Transport kullanarak yüz dönüşümü gerçekleştirme
- Random forest: Karar ağaçları ve random forest'ı doğrudan uygulayarak sınıflandırma problemlerini çözme
- Sinir ağı framework'ü: Tensor, autograd ve optimizer içeren bir derin öğrenme framework'ü kurma
- Evrimsel tasarım: Genetik algoritmalar kullanarak mekanik yapıları otomatik olarak evrimleştiren bir simülasyon
Grafikler ve oyun geliştirme
- Ray tracer: Küreler, düzlemler ve ışıklardan oluşan 3D bir sahneyi render etme
- OpenGL renderer: Grafik programlamanın temellerini öğrenmek için mini bir renderer uygulama
- Dangerous Dave yeniden yapımı: SDL kullanarak klasik oyunu yeniden oluşturma
- Satranç motoru: UCI motoru dahil bir satranç oyunu geliştirme
- Procedural Crossword: Kısıt yayılımını kullanarak otomatik bulmaca üretimi
Güvenlik ve kriptografi
- Kimlik doğrulama sunucusu (JWT/Sessions): Kriptografi, token süresinin dolması ve oturum yönetimini uygulama
- Anonim oylama sistemi: Sıfır bilgi ispatı (ZKP) kullanan kriptografik oylama tasarımı
- VPN: Merkezi sunucu olmadan trafiği aktaran bir mesh VPN kurma
- Kötü amaçlı yazılım deneyi: Sanal makine ortamında güvenlik duvarı tepkilerini test etme
- Zip arşivleyici: Sıkıştırma, şifreleme ve paketleme işlevlerini doğrudan uygulama
Web ve uygulama geliştirme
- Web sunucusu: HTTP isteklerini işleme, statik dosya sunma, routing ve reverse proxy desteği
- İşbirlikçi düzenleyici: CRDT tabanlı dağıtık bir metin düzenleyici uygulama
- Tarayıcı motoru: HTML/CSS ayrıştırma ve render işlemi yapan basit bir motor kurma
- Video düzenleyici: Tarayıcı içinde çalışan istemci taraflı bir düzenleyici
- Tarayıcı eklentisi: Parola, form ve clipboard durumunu kaydetme ve otomatik doldurma
Veri görselleştirme ve arama
- Googlebot: Bir web crawler oluşturarak arama sistemlerinin temel yapısını öğrenme
- Wikipedia arama motoru: İndeksleme, tokenization ve ranking algoritmalarını uygulama
- Bilgi grafiği: Varlıklar arası ilişkileri görselleştirme ve web üzerinden otomatik güncelleme
- Google Maps motoru: Yol, arazi ve yer verilerini indeksleyen bir harita sistemi
- CDN caching sistemi: Statik varlıklara yönelik tekrar eden istekleri önleyen bir cache yapısı tasarlama
Donanım ve gömülü sistemler
- Laser tag sistemi: IR encoding ve MQTT iletişimini kullanan gerçek zamanlı algılama sistemi
- Akıllı ev uygulaması: IR cihaz kontrolü, zamanlama ve otomasyonu destekleyen bir IoT projesi
- Game Boy Advance emülatörü: CPU, bellek, grafik ve giriş yapısını yeniden oluşturma
Blokzincir ve finans
- Bitcoin düğümü: Blok indirme ve doğrulama işlevlerini uygulama
- Hisse senedi alım satım botu: Olay güdümlü bir sistemle otomatik işlem yürütme
- Anonim oylama ve akıllı sözleşmeler: Blokzincir tabanlı güvenilir bir oylama sistemi
Sonuç
- 73 proje, temel teknolojileri doğrudan uygulayarak öğrenmeye dayalı deneysel yaklaşımı vurguluyor
- Her fikir, resmi belgeler, makaleler ve eğitim bağlantılarıyla uygulama odaklı öğrenmeyi teşvik ediyor
- Programlamayı keşif ve yaratım sanatı olarak yeniden keşfetmeyi sağlayan pratik bir öneri sunuyor
1 yorum
Hacker News görüşleri
Bazıları bu listenin yapay zeka tarafından üretilmiş gibi göründüğünü söylüyor, ama bence tam tersine, ‘en baştan kendin yapma’ yaklaşımı yapay zekaya bağımlılığı azaltmanın en iyi yolu
Japonya’da buna ‘şugyo (修行, Shugyo)’ deniyor. Ustalar verimlilik için değil, çeliğin özünü anlamak için uzun zaman boyunca aletlerini biler
Redis ya da Git’i bizzat yapmak, ortaya çıkan üründen çok süreçteki sürtünme sayesinde bir düşünme modeli inşa etmek demek. Yapay zekanın yerini dolduramayacağı kısım tam da bu
Kendi hazırladığım proje fikirleri derlemesi olan Challenging programming projects every programmer should try yazısını paylaşıyorum
Liste codecrafters.io kaynaklı. Bu platform, projeleri adım adım uygulatırken entegrasyon testleri ve topluluk da sunuyor
Ben de şu anda ‘Build your own Redis’ projesini yapıyorum ve epey eğlenceli. Yapay zekanın yazdığı bir şey değil; daha çok topluluktan gelen fikirlerin derlenmiş hali gibi görünüyor
Kendi BitTorrent istemcinizi yazmayı güçlü biçimde tavsiye ederim. Spesifikasyon basit, ayrıntıdaki problemler ise ilginç. Bitirdikten sonra Debian kernel’ini gerçekten onunla indirmek çok tatmin edici
Magnet bağlantıları ya da seeding desteği eklerseniz daha da derin öğrenebilirsiniz. Bu deneyim bende P2P sistemleri ve DHT’ye (Chord vb.) karşı ilgi uyandırdı
Bu liste biraz garip. Örneğin #58 malloc gerçekleştirmesi; yeni başlayanlar için oldukça zor bir konu, ama hemen sonraki #59’da akış protokolünü sıfırdan yazmanızı istiyor. Zorluk seviyesi farkı fazla büyük
4chan’in /g/ programlama meydan okumaları hakkındaki görüşleri merak ediyorum. Zorluk sınıflandırması biraz keyfi gibi. Mesela bootloader’ın C derleyicisinden daha zor sayılması tuhaf geliyor
Referans görsel bağlantısı
.mddosyasına bağlansa daha iyi olurduKüçük ama tamamlanmış bir araç ya da protokolü bizzat yapmak iyi olur. Ölçekten çok netlik ve tamamlanmışlık hissi daha büyük tatmin veriyor
Acaba bu bir tür astroturfing mi diye düşündüm
Bazı projeler bir günde biterken bazıları lisans bitirme projesi ya da yüksek lisans tezi ölçeğinde
Bu listeye bakınca iyi bir programcı olmadığımı düşünüyorum
Başlamak için ilgi duyduğunuz alandaki önceki çalışmalara bakmak iyi olur. Örneğin Adam Dunkels’in çalışmaları faydalı olabilir. Gömülü sistemler için olduklarından küçük ve anlaşılması kolay
Gerekirse kodu anlamak ya da üretmek için yapay zeka araçlarından yardım almak da tavsiye edilir