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.
In this stage, you should not dive right into big and complex projects. I know it's exciting, but hear my reasons:
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.
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.
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:
dict, etc.) are implemented, how did they handle memory management, and so on.
Some good resources worth reading/checking for compiler/interpreter design:
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 🤷♂️
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.