opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

Project-based learning curated by language, from OS kernels to game emulators
GitHub RepoImpressions1

Project Description

View on GitHub

Stop Reading Tutorials, Start Building: Project-Based Learning for Programmers

You've read the tutorials. You've watched the videos. You've followed along with the "Hello World" examples. But somewhere between understanding the syntax and actually shipping something real, there's a gap—and it's a frustrating one. The cure, as it turns out, isn't more theory. It's building things that feel just beyond your reach, like writing your own operating system or emulating a game console. That's exactly where the Project Based Learning repository comes in.

What It Does

This is a curated list of programming tutorials where the goal isn't a demo app—it's a real, working project built from scratch. The repository organizes hundreds of tutorials by programming language, covering everything from C# to Swift, with heavy hitters like C/C++, Python, JavaScript, Rust, and Go in between.

The core idea is simple: instead of learning syntax in isolation, you learn by building. Each link points to a tutorial that walks you through creating something substantial. For C/C++ alone, that includes writing a shell, building a text editor, creating a CHIP-8 emulator, implementing a key-value store, and even writing an OS kernel from scratch. The Python section (which was truncated in the README but is clearly substantial) follows the same pattern.

The project is actively maintained—there's a link-rot sweep action that checks for dead URLs, and a Gitter community for discussions. It's also open to contributions, so the list stays fresh as new tutorials emerge.

Why It's Cool

This repository isn't just a bookmark dump. It's a philosophy about how to learn, packaged into a practical resource.

  • It turns "I don't know how" into "I'll figure it out." The tutorials here are ambitious. Writing a FUSE filesystem or a JIT compiler isn't a weekend side project—it's a serious undertaking. But that's the point. You'll learn more from debugging a memory allocator than from re-reading a chapter on pointers.

  • The curation is thoughtful. Each link is a full tutorial, not a snippet. Many are multi-part series, like the "Write a C Compiler" series or the "Tiny 3D graphics projects" collection. You're not getting a taste of a topic; you're getting a complete arc from zero to working software.

  • It's language-agnostic in the best way. Whether you're a JavaScript developer who wants to understand how V8 works under the hood or a Rubyist curious about building a game emulator, there's a path for you. The tutorials often use multiple technologies, so you'll naturally pick up adjacent skills.

  • It respects your time. The README is a clean table of contents, organized by language. You don't have to scroll through blog posts or dig through forums. You pick a language, find a project that scares you a little, and get started.

  • The "from scratch" constraint is powerful. These tutorials don't rely on heavy frameworks that hide the interesting bits. When you write a database in C or a ray tracer in C++, you're dealing with raw concepts—memory, algorithms, architecture—not abstractions.

How to Try It

Getting started is as simple as picking a project that matches your current comfort zone plus one step.

  1. Head over to the repository.
  2. Scan the table of contents and pick your primary language. If you're feeling adventurous, pick a language you don't know well—that's a learning multiplier right there.
  3. Browse the list and find a project that sounds interesting but slightly intimidating. For C/C++ beginners, "Build an Interpreter" or "Write a Shell in C" are classic starting points. If you're into graphics, the Tiny Renderer series is a rite of passage.
  4. Fork the repo if you want to track your progress or contribute back. The README explicitly mentions forking as the starting point, and there's a CONTRIBUTING.md if you find a great tutorial that's missing.
  5. Set aside dedicated time. These aren't 20-minute tutorials. Block out a few weekends.

There are no installation steps or dependencies to manage—it's a list of links, not a framework. Your only prerequisite is a willingness to get stuck, debug, and push through.

Final Thoughts

This repository is best for developers who are tired of feeling like they're learning in a vacuum. If you've got a few months of experience and want to build something you can be genuinely proud of, this list is a goldmine. The tutorials are demanding, but that's precisely what makes them effective. You'll come out the other side not just with a project on your resume, but with a deeper understanding of how the software you use every day actually works.

The fact that it's community-maintained and actively checked for dead links means it'll stay useful for years. So go ahead—pick a project, clear your schedule, and build something that scares you a little. Future you will thank you.

Follow @githubprojects for more developer tools and open source projects.

Back to Projects
Project ID: fe524595-11df-47b4-84e3-0e1cb265a5f9Last updated: August 28, 2026 at 03:31 AM