Welcome to Software Craftsmanship!
This repository is dedicated to practical programming challenges that encourage you to build real systems from scratch. The focus is on understanding how things are constructed, exploring architecture, algorithms, and data structures, and improving your skills as a software artisan.
Every challenge is an opportunity to craft software thoughtfully, from utilities to complex applications, without being restricted by programming language or abstraction level.
To start crafting your own software:
- Browse the challenges and pick one that excites you.
- Read the challenge instructions in the linked markdown file.
- Implement the solution in any programming language or framework.
- Focus on understanding how things work, not just making it function.
- Test thoroughly and iterate on your design.
- Optionally, share your solution via GitHub issues using the solution template.
These challenges focus on fundamentals, algorithms, systems, and utilities. The goal is to understand how systems work under the hood.
| Title | Description | Link |
|---|---|---|
| Grep | Build a command-line tool to search text using patterns | Link |
| Tar | Implement a simplified tar archiver | Link |
| Top | Read process information and display a live system snapshot | Link |
| Shell | Build a shell with pipelines, redirection, and job control | Link |
| Git | Create a lightweight Git-like object store and commit system | Link |
| Curl | Implement a simple HTTP client using raw TCP requests | Link |
| Redis | Build an in-memory database server with TCP protocol | Link |
| HTTP Server | Build a web server with HTTP parsing, headers, and routing | Link |
| DNS Server | Implement a DNS server with query parsing and caching | Link |
| BitTorrent | Implement a peer-to-peer file sharing client | Link |
| SQLite | Create a small relational database engine with B-trees | Link |
These challenges focus on real-world applications or domain simulations. The goal is to understand how components interact in complete systems.
| Title | Description | Link |
|---|---|---|
| Uber | Design a small ride-hailing simulation system | Link |
| Airbnb | Build a simplified property rental system | Link |
| PayPal | Create a simplified payment processing system | Link |
| Amazon | Build a simplified e-commerce platform | Link |
| Create a microblogging platform | Link | |
| Discord | Build a team messaging application | Link |
| Dropbox | Create a file storage and sharing system | Link |
| Spotify | Build a music streaming service | Link |
| Tinder | Create a dating and social discovery platform | Link |
| Github | Build a collaborative development platform | Link |
| Create a search and information platform | Link | |
| Youtube | Build a video sharing platform | Link |
⚡ Note: Challenges are intentionally broad — you can go deep or wide depending on your interests. The goal is learning by building, not finishing a task.
Community-submitted solutions can be found in solutions.md. Feel free to contribute your own implementations or improvements.
- Questions? Open a GitHub Issue.
- Found a bug? Report via GitHub Issues.
- Ideas? Suggest new challenges or improvements.
See CONTRIBUTING.md for contribution guidelines.
We welcome:
- New challenge proposals
- Improved instructions or references
- Community solutions and examples
- Testing and documentation improvements
This project is licensed under the MIT License. See the LICENSE file for details.
🎉 Happy building!