People who want to learn to code constantly face the same issue: Tutorial hell. I’m constantly reading the question along the lines of “I don’t feel like I am achieving anything, I just follow tutorials, courses or constantly rely on ChatGPT / LLMs, what do I do?“.

“Hey, I’m stuck in tutorial hell.”
“Just do a project.”
“I don’t know what to do, tell me what to do.”

This conversation played out like this a million times before along with multiple questions from friends and colleagues (you know who you are) along the lines of “What project do I build?“.
So recently, whilst watching ThePrimeagen’s reaction to an article titled “Projects Every Programmer Should Try” (which you should totally go watch later), I wanted to jot down my own thoughts on the matter.

“I’m going to first give a piece of advice before I read, okay? It’s called skill issues, right now I’m coming in heavy on the skill issues, but the easiest thing to do is you first think about what you’re interested in, if you don’t even know what you’re interested in then it doesn’t matter, draw like 10 items on a piece of paper and throw a dart at it […].”
-

With that out of the way and all very minor cases of very major skill issues addressed lets get into the good stuff: My project suggestions.
Most of these are sourced from the aforementioned article but I’ve also included some of my personal ideas & do’s/don’ts.

Generally, these projects are going to be very difficult, but it is a good idea to shoot high. Do not be afraid to try a new or different project if you’re hard stuck (that would be a Sunk cost fallacy), however, don’t give up just because you reached a roadblock. In my opinion, most these are better implemented in a high-level OOP language, but try yourself out (If you end up doing OOP, I’ve linked a list of design patterns at the end of this article).
Also do not be afraid of throwing away your first drafts and just re-doing it all, sometimes this is for the best (Also see an article linked at the end).

Here we go:

  • Text editor (don’t build this with web technologies)
  • 2D game - Space Invaders (don’t use a game engine)
  • Compiler - Tiny BASIC
  • Mini operating system
  • Ray tracer
  • Key-value store web API
  • Web browser
  • Chat app (do use web tech for this)
  • Stock trading bot
  • Full-stack shopping site
  • Spreadsheet (hard!)
  • Video game console emulator (hard!) (do read a lot of documentation)
  • Something else entirely that’s customer facing (hard!) (do make it open-source)

If you have other ideas, go build those instead (as long as it’s not a clone of some popular app ;) ). Those ideas above that don’t have a section below can be found in one of the two articles. If you do not understand something listed here or in Henley’s articles but you generally like the idea, go with it anyway. You’ll best learn whilst coding. (That’s why you shouldn’t immediatly go look up a tutorial and try to figure out things by yourself.)

Chat app

Who doesn’t know the classic chat app. If you search for a project to do, the chat app will pop up sooner or later. The basic idea here is simple: You need some sort of server which a client side application running in the browser will connect to and communicates messages to.

Extra points if you add some sort of registration system and/or database so chat histories are stored. Start with a single chat without any registration first and then build from there.
You can also add some styling if you fancy that, but that is not the primary goal.

Things to learn:

  • Websockets
  • DOM manipulation inside the Browser / DOM manipulation libraries & frameworks like Svelte, Vue, React (please don’t though) or HTMX
  • Databases
  • HTTP servers
  • Styling with CSS (optional)

Further reading:

Full stack shopping site

A classic. If you’re into this idea, check out a little imaginary requirements document using Java & HTMX I made here: Java shopping site
Generally, I’d recommend here to stay away from common tech here (e.g. Wordpress, Shopify) and to try to reinvent the wheel. You’ll learn more that way.

Customer-facing software

Austin Henley’s article sparked a bit of debate on this exact topic over on Hacker News. If you have an idea you think people like, build an alternative, plugin or addon to existing software, then publish it.
If you prefer to “help” people with the things you build, then go for this route. In case you decide to go for this route, maybe check out the open-source guide linked below.
One final warning though: People suck.

Final remarks

Now, before you go jot down the ideas you liked, throw your dart and go hacking at your computers to face absolute and utter depression, have this xkcd:

Update: It turns out the cannon has a motorized base, and can make holes just fine using the barrel itself as a battering ram. But due to design constraints it won’t work without a projectile loaded in, so we still need those drills.

Further reading