Ozan Sazak | sazak.io
home blog whoami

Fantastic Side Projects and Where to Find Them

So you are a newbie developer looking for a project idea to apply what you've learned in that Udemy course, or maybe an experienced engineer searching for the next side project to work on for fun. Either way, you need a creative idea to bring to life.

It's a fun way to apply what you have learned in the courses/books and an excellent skill to craft the tool you just need to automate that boring stuff you need to do every day.

Here, I will list a few sources/techniques I used to find cool project ideas while learning programming and now to craft useful tools for my needs. This blog post is a little bit opinionated. Everyone has a unique learning curve, so if you find my suggestions harder or easier than expected, it's okay to modify them to fit your level.

you have just started learning programming...

...and looking for project ideas. You probably know Python or JavaScript a little bit, or maybe C/Go, and want to dive into interesting real-life stuff.

In this stage, you should not dive right into big and complex projects. I know it's exciting, but hear my reasons:

  1. You probably don't have the technical background required to build a complex system. Whether it's creating a browser, a search engine, a social media app, …. These projects seem simple from the outside. "I mean, you just enter a search text, and it lists some websites", yes, but in the background, there are too many moving parts and some pretty complex algorithms for a beginner. For a browser, you need to write a JavaScript parser; for a search engine, you at least need to understand graphs, and so on.
  2. You may not have the ability to read other people's code. Building complex stuff requires the skill (yes, it's kind of a skill) to read long lines of production code to see how other engineers solved similar problems. Also, you can't always find blog posts/videos/docs explaining "how to do X" after a certain level of problem complexity.

However, the most beneficial thing you can do is code simple yet not tedious stuff using the programming topics you learned to jump to advanced levels where you can work on complex projects as fast as possible.

I suggest coding simple versions of those complex programs, such as creating little terminal-based games. You don't need to learn GUI, a self-made hangman game is still fun after all. Also, while building one, you will need to use most of the topics you've learned/are learning: fundamental data types, variables, control flow (conditionals, loops), terminal input/output, etc…

Another one may be a simple chatbot in the terminal. It gives you a list of prompt options, you select one, and it prints a defined answer for the fixed prompt. It's like a super simple version of ChatGPT - you don't need to design and code all the frontend, backend, and ML stuff.

you had some time with a programming language and can write basic programs

Perfect! Now you are ready to step up your game a little bit and start learning and applying CS fundamentals in your programs to reach a higher level of complexity:

In this stage, you can add more functionality to the programs you have created until now, adding dynamism by implementing:

The idea is forcing yourself to use a new data structure/algorithm in every project you create.

Let's say you have a program that gives you the information of students when you enter the name of one. You can enhance this program to run in a loop that takes the student name, gives the info, then asks the user if they want to update the information. To do this, you will need to use a data structure (linked list, for example) instead of hardcoded data. Then, you will need to use a search algorithm to find specific students given the name.

Adding more functionality pushes you to utilize new stuff in your code, which is an excellent way to learn and practice new concepts in programming.

CodeAdd more functionalityLearn new stuff

you are fluent in a programming language and know basic CS theory

This is the time you need to start learning more advanced stuff. Such as:

In this stage, you can try to design and implement your own version of existing stuff you use, such as creating your own programming language and writing a compiler for it, trying to write your own database engine with indexes, basic queries, and maybe aggregations.

You don't have to go with a fully functional clone; for example, creating a programming language with just integer types as the native type is a good exercise, and it's still challenging!

Here are some practical resources and project ideas:

Some good resources worth reading/checking for compiler/interpreter design:

you are capable of designing and implementing complex stuff

This blog post became longer than I expected, and it's been a while since I started writing, so I will write another one just for this subtopic 🤷‍♂️

that's all!

I hope you found this content useful. I will add sequels to this post, writing about my side projects or other resources to find fun side project ideas in the future.

  1. https://github.com/python/cpython ↩︎

  2. https://realpython.com/build-python-c-extension-module/ ↩︎

  3. https://www.cloudflare.com/learning/performance/static-site-generator/ ↩︎

  4. https://github.com/gohugoio/hugo ↩︎

  5. https://www.getzola.org/ ↩︎