Projektideen, die einen wieder an die Kunst des Programmierens erinnern
(codecrafters.io)- Mit 73 Programmierprojekt-Ideen so zusammengestellt, dass Entwickler gleichzeitig Lernen und kreative Herausforderungen erleben können
- Jedes Projekt deckt unterschiedliche Bereiche ab, darunter Netzwerke, Systeme, AI, Grafik, Sicherheit und Datenbanken
- Die meisten Ideen sind darauf ausgelegt, zentrale technische Prinzipien direkt selbst zu implementieren, sodass sich Theorie und Praxis gemeinsam erlernen lassen
- Zu jedem Eintrag gehören passende Paper, offizielle Dokumentation und Tutorial-Links, die einen klaren Lernpfad aufzeigen
- Bietet einen Anlass, Programmierung nicht nur als Coding, sondern als Kunst des Erforschens und Erschaffens zu begreifen
Überblick
- Viele Entwickler möchten ein Side Project starten, wissen aber nicht, was sie bauen sollen
- Im Internet gibt es viele gängige und langweilige Ideen
- Dieser Beitrag stellt 73 unterhaltsame Projekte mit hohem Lernwert vor
- Jedes Projekt ist so aufgebaut, dass man bestimmte technische Konzepte durch eigene Implementierung lernen kann
Netzwerk- und Systemprojekte
- BitTorrent-Client: Implementierung eines Datei-Download-Clients, um die Funktionsweise von P2P-Netzwerken zu lernen
- DNS-Server: Aufbau eines Servers mit Query-Empfang, Paket-Parsing, Domain-Auflösung und Caching
- Container-Runtime: Lernen von Kernel-Namespaces,
chrootund Prozessisolierung ohne Docker - TCP/IP-Stack: Direkte Implementierung des TCP/IP-Protokolls im Linux-User-Space
- Load Balancer: Implementierung von Request-Verteilung, Health Checks und Session-Persistenz zwischen Backend-Servern
Daten und verteilte Systeme
- RAFT-Protokoll: Implementierung eines Systems für verteilten Konsens und Fehlerbehebung
- Redis-Klon: Aufbau einer In-Memory-Datenbank mit Basisbefehlen, RDB-Persistenz, Replikation und Transaktionen
- Kafka-Broker: Implementierung eines verteilten Log-Systems, das Topic-Erstellung sowie Message-Producer- und -Consumer-Anfragen verarbeitet
- SQL-Engine und Optimizer: Lernen von Query-Ausführung und Optimierung, angelehnt an die Struktur von SQLite
- CI-System: Aufbau eines integrierten Systems zur automatischen Überwachung von Git-Repositories, Ausführung von Tests und Berichterstattung der Ergebnisse
Künstliche Intelligenz und Algorithmen
- Wordle-Solver: Programm zur Wortableitung auf Basis von Informationstheorie und Entropie
- Deepfake-Generator: Implementierung von Gesichtsverwandlung mit Optimal Transport
- Random Forest: Lösen von Klassifikationsproblemen durch eigene Implementierung von Entscheidungsbäumen und Random Forest
- Neuronales Netzwerk-Framework: Aufbau eines Deep-Learning-Frameworks mit Tensoren, Autograd und Optimierern
- Evolutionäres Design: Simulation zur automatischen Evolution mechanischer Strukturen mit genetischen Algorithmen
Grafik und Spieleentwicklung
- Ray Tracer: Rendering einer 3D-Szene mit Kugeln, Ebenen und Beleuchtung
- OpenGL-Renderer: Implementierung eines Mini-Renderers zum Erlernen der Grundlagen der Grafikprogrammierung
- Dangerous-Dave-Remake: Nachbau des klassischen Spiels mit SDL
- Schach-Engine: Implementierung eines Schachspiels inklusive UCI-Engine
- Procedural Crossword: Automatische Kreuzworträtsel-Erzeugung mit Constraint Propagation
Sicherheit und Kryptografie
- Authentifizierungsserver (JWT/Sessions): Implementierung von Kryptografie, Token-Ablauf und Session-Management
- Anonymes Wahlsystem: Entwurf einer kryptografischen Abstimmung mit Zero-Knowledge-Proofs (ZKP)
- VPN: Aufbau eines Mesh-VPN, das Traffic ohne zentralen Server weiterleitet
- Malware-Experimente: Test von Firewall-Reaktionen in einer virtuellen Maschinenumgebung
- Zip-Archivierer: Eigene Implementierung von Komprimierung, Verschlüsselung und Bündelung
Web- und Anwendungsentwicklung
- Webserver: Unterstützung für HTTP-Request-Verarbeitung, Auslieferung statischer Dateien, Routing und Reverse Proxy
- Kollaborativer Editor: Implementierung eines verteilten Texteditors auf Basis von CRDT
- Browser-Engine: Aufbau einer einfachen Engine für HTML/CSS-Parsing und Rendering
- Video-Editor: Client-seitiger Editor, der im Browser ausgeführt wird
- Browser-Erweiterung: Speichert Passwörter, Formulare und Zwischenablagezustände und füllt sie automatisch aus
Datenvisualisierung und Suche
- Googlebot: Einen Webcrawler bauen, um die Grundstruktur von Suchsystemen zu lernen
- Wikipedia-Suchmaschine: Implementierung von Indexierung, Tokenisierung und Ranking-Algorithmen
- Wissensgraph: Visualisiert Beziehungen zwischen Entitäten und aktualisiert sich automatisch aus dem Web
- Google-Maps-Engine: Kartensystem zur Indexierung von Straßen-, Gelände- und Ortsdaten
- CDN-Caching-System: Entwurf einer Cache-Struktur, die doppelte Requests für statische Assets verhindert
Hardware und Embedded
- Laser-Tag-System: Echtzeit-Erkennungssystem mit IR-Codierung und MQTT-Kommunikation
- Smart-Home-App: IoT-Projekt mit Unterstützung für IR-Gerätesteuerung, Zeitplanung und Automatisierung
- Game Boy Advance-Emulator: Nachbildung von CPU-, Speicher-, Grafik- und Eingabestruktur
Blockchain und Finanzen
- Bitcoin-Node: Implementierung von Block-Download und Validierungsfunktionen
- Aktienhandels-Bot: Automatisierter Handel auf Basis eines eventgesteuerten Systems
- Anonyme Abstimmung und Smart Contracts: Zuverlässiges Wahlsystem auf Blockchain-Basis
Fazit
- Die 73 Projekte betonen einen experimentellen Ansatz des Lernens durch direkte Implementierung zentraler Technologien
- Jede Idee verweist über offizielle Dokumentation, Paper und Tutorials auf praxisorientiertes Weiterlernen
- Ein praktischer Vorschlag, um Programmierung wieder als Kunst des Erforschens und Erschaffens zu entdecken
1 Kommentare
Hacker-News-Kommentare
Manche meinen, diese Liste wirke KI-generiert, aber ich denke eher, dass „es von Grund auf selbst zu bauen“ der beste Weg ist, die Abhängigkeit von KI zu verringern
In Japan nennt man so einen Prozess „Shugyo (修行)“. Handwerker schärfen ihre Werkzeuge lange nicht aus Effizienzgründen, sondern um das Wesen von Stahl zu verstehen
Redis oder Git selbst zu bauen bedeutet nicht, nur ein Ergebnis zu produzieren, sondern durch die Reibung des Prozesses ein Denkmodell aufzubauen. Genau das ist der Teil, den KI nicht ersetzen kann
Hier ist meine Sammlung von Projektideen: Challenging programming projects every programmer should try
Die Liste stammt von codecrafters.io. Diese Plattform lässt einen Projekte Schritt für Schritt umsetzen und bietet dabei Integrationstests und Community
Ich arbeite auch gerade am Projekt „Build your own Redis“ und es macht ziemlich viel Spaß. Es ist nicht KI-generiert; eher scheint es eine Sammlung von Ideen aus der Community zu sein
Ich kann nur dringend empfehlen, einmal einen BitTorrent-Client selbst zu bauen. Die Spezifikation ist einfach, und die Detailprobleme sind interessant. Wenn man danach selbst den Debian-Kernel herunterlädt, ist das sehr befriedigend
Wenn man zusätzlich Magnet-Links oder Seeding implementiert, lernt man noch tiefer. Durch diese Erfahrung habe ich mich für P2P-Systeme und DHTs (wie Chord) interessiert
Diese Liste ist etwas seltsam. Zum Beispiel ist #58 die Implementierung von malloc, was für Anfänger ziemlich schwierig ist, und direkt danach verlangt #59, ein Streaming-Protokoll von Grund auf zu bauen. Die Schwankung im Schwierigkeitsgrad ist viel zu groß
Mich würde interessieren, was ihr von der 4chan-/g/-Programmier-Challenge haltet. Die Schwierigkeitseinteilung wirkt etwas willkürlich. Zum Beispiel ist es schon merkwürdig zu sagen, ein Bootloader sei schwieriger als ein C-Compiler
Referenzbild-Link
.md-Datei zu verlinkenEs ist gut, kleine, abgeschlossene Tools oder Protokolle selbst zu bauen. Die Zufriedenheit kommt dabei weniger aus der Größe als aus Klarheit und dem Gefühl, etwas vollständig abgeschlossen zu haben
Ich frage mich, ob das vielleicht Astroturfing ist
Manche Projekte sind an einem Tag erledigt, andere haben eher den Umfang einer Bachelor-Abschlussarbeit oder sogar einer Masterarbeit
Wenn ich diese Liste sehe, habe ich das Gefühl, kein guter Programmierer zu sein
Um anzufangen, sollte man sich frühere Arbeiten in einem Themengebiet ansehen, das einen interessiert. Zum Beispiel lohnt sich ein Blick auf die Arbeiten von Adam Dunkels. Sie sind für Embedded gedacht, also klein und leicht verständlich
Falls nötig, kann man auch KI-Tools nutzen, um beim Verstehen oder Generieren von Code Unterstützung zu bekommen