Open-source project
practical-tutorials/project-based-learning avatar
practical-tutorials/project-based-learning

Project-Based Learning: A Curated List of Build-From-Scratch Programming Tutorials

GitHub describes it as Curated list of project-based tutorials. The repository metadata lists Python as its primary language. The metadata lists the MIT license. This article stays within the project description and details documented in the GitHub repository README.

285,244 stars36,460 forksPythonMIT

At a glance

What is it?
practical-tutorials/project-based-learning is a curated list of programming tutorials where the goal is to build a complete application from scratch. Organized by primary language, it covers over twenty languages from C to Swift and links to external tutorials rather than hosting any content itself.
Who is it for?
Project-based-learning is useful for developers who already know what they want to build or what language they want to learn through building, and who want a curated starting point for finding a suitable tutorial. It is not appropriate for learners who need a structured progression with clear prerequisites and progress tracking.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What This Repository Is and Who It Is For

Project-Based Learning is a curated list of external programming tutorials where developers learn by building a complete application from scratch. The README describes it as a list of programming tutorials in which aspiring software developers learn how to build an application from scratch. Tutorials may cover multiple technologies and languages even when organized under a primary language.

The target audience is developers who learn better through doing than through reading theory. The list serves beginners looking for their first real project, as well as experienced developers exploring a new language by following a tutorial that builds something concrete rather than presenting isolated syntax examples. It covers the range from close-to-the-metal projects (operating systems, compilers, memory allocators) to application projects (web apps, databases, games) across more than twenty languages.

Repository Organization: Languages and Topic Categories

The repository is a single `README.md` file organized by primary programming language. The table of contents lists: C#, C/C++, Clojure, Dart, Elixir, Erlang, F#, Go, Haskell, HTML/CSS, Java, JavaScript, Kotlin, Lua, OCaml, PHP, Python, R, Ruby, Rust, Scala, Swift, and an Additional resources section.

Within each language section, tutorials are grouped loosely by the type of project. Under C/C++, for example, a reader finds both low-level systems work (building a shell, writing a bootloader, implementing a key-value store, writing an OS from scratch, building a Linux container in 500 lines) and application work (beginning game programming with SDL, building a CHIP-8 emulator). The diversity within each section reflects the range of what contributors have submitted rather than a systematic syllabus.

The Additional resources section at the end lists tutorials that either span multiple languages or do not fit the primary language organization. The repository has a `.github/` directory with a link-rot check workflow that validates external links.

What the C/C++ and Python Sections Contain

The C/C++ section is among the most detailed. It includes tutorials for writing a shell in C, writing a FUSE filesystem, building a text editor, building a Lisp interpreter, writing an OS from scratch in two different tutorial series, building a CHIP-8 emulator, beginning game programming with C++ and SDL, implementing a key-value store, building a 3D renderer in 500 lines, implementing a Ray Tracer in 256 lines, writing a minimal x86-64 JIT compiler, writing a hash table in C, building a simple database, writing a kernel, writing a bootloader, creating a Linux container, implementing an LC-3 virtual machine, learning KVM, building Redis in C/C++, writing a C compiler across a ten-part series, implementing a language with LLVM, and writing a Linux debugger in a ten-part series.

The Python section covers web applications, bots, machine learning projects, and scripting tools. JavaScript tutorials cover building front-end applications, Node.js servers, and browser-based projects. The breadth across language sections varies: some sections have dozens of entries while others have only a handful.

How to Use the Repository

There is no installation required. The repository exists as a reading list. To use it, browse the README at github.com/practical-tutorials/project-based-learning or visit any of the linked tutorials directly.

To clone it locally for offline browsing:

bash
git clone https://github.com/practical-tutorials/project-based-learning

To contribute a new tutorial, the README says to fork the repository and follow the guidelines in `CONTRIBUTING.md`. The `.github/` directory contains a link-rot workflow that checks external URLs, which helps maintain the usefulness of the list over time as tutorials move or disappear.

Limitations: A List, Not a Platform

The repository contains no tutorial content itself. Every item is a link to an external resource. When a tutorial's external URL changes or becomes unavailable, the list entry becomes broken until a contributor updates it. The link-rot workflow in `.github/` helps detect this, but there is no guarantee that all links are current.

The list also has no quality grading. A brief tutorial that covers the basics of a topic appears alongside a comprehensive multi-part series without any distinction in the list. A reader has no way from the list alone to judge difficulty, estimated hours, or the skill level required before starting. The README itself is the only content; the actual tutorials are external.

Because each tutorial is external, prerequisites, tool versions, and the currency of the content vary widely. A C++ tutorial written several years ago may use patterns or library versions that have since changed. The list does not indicate when a tutorial was last updated.

Finally, the Python section is the largest and most varied, reflecting the language's popularity in the contributor community. Languages with smaller communities in the GitHub contributor base have fewer entries, and some languages that are widely used in industry (such as TypeScript as distinct from JavaScript) may not have dedicated sections.

Comparing This List to Other Learning Resources

The Odin Project is an interactive web development curriculum with its own lessons, projects, and community. Unlike project-based-learning, The Odin Project hosts its own content and tracks learner progress. It covers HTML, CSS, JavaScript, and Ruby with a defined sequence. Project-based-learning is language-agnostic, links to external tutorials, and imposes no sequence.

Awesome lists on GitHub follow a similar curation model but typically cover libraries and tools rather than tutorial content. Project-based-learning is specific to tutorials that teach by building, which distinguishes it from broader tool-listing repositories.

For learners who want explicit direction, a structured curriculum like The Odin Project or a university open courseware list like PKUFlyingPig's cs-self-learning may be more useful. For developers who know what they want to build and want to find a tutorial for it, the project-based-learning list is a starting point.

Maintenance and Licence

The repository is not archived. The last push was on 2026-09-28, and the project has no GitHub releases (it is a living document, not a versioned product). The repository has a link-rot check running in `.github/workflows/`. This workflow validates external URLs and flags broken links, which helps contributors identify entries that need updating.

The licence is MIT, which applies to the list itself. The tutorials linked in the list are under whatever licence their original authors chose, and the MIT licence here does not grant any rights to that external content. Contributing requires forking and submitting a pull request, following the guidelines in `CONTRIBUTING.md`.

Editorial conclusion

Project-based-learning is useful for developers who already know what they want to build or what language they want to learn through building, and who want a curated starting point for finding a suitable tutorial. It is not appropriate for learners who need a structured progression with clear prerequisites and progress tracking. Before choosing a tutorial from the list, verify that the external link is live, check the tutorial's date or tool versions, and confirm the expected difficulty matches your current skill level.

Frequently asked questions

What is project-based learning in programming?

In this repository, project-based learning refers to tutorials where the developer builds a complete application from scratch, learning the language and tools through the construction of a real working project rather than isolated syntax exercises.

What are examples of project-based learning tutorials in this repository?

The C/C++ section includes writing a shell in C, building an OS from scratch, implementing a key-value store, writing a Linux debugger, and building Redis. The Python section covers web apps, bots, and machine learning projects. Over twenty languages have dedicated sections.

How do you contribute to the project-based-learning list?

Fork the repository, add a tutorial link in the appropriate language section of the README following the format in CONTRIBUTING.md, and submit a pull request. A link-rot check workflow in `.github/` validates external URLs.

Does the project-based-learning repository host tutorial content?

No. The repository is a curated list of links to tutorials hosted on external sites. The repository itself contains only the README with the list and a contributing guide. All tutorial content is on external URLs.

What programming languages are covered in project-based-learning?

The list covers C#, C/C++, Clojure, Dart, Elixir, Erlang, F#, Go, Haskell, HTML/CSS, Java, JavaScript, Kotlin, Lua, OCaml, PHP, Python, R, Ruby, Rust, Scala, and Swift, plus an additional resources section.

Official sources

  1. Official README
  2. Project repository
Community notes

Community notes