There's no secret method in becoming a better developer.
There's no substitute for hard work.
You gotta study, and simply grind it out.
But sometimes you can speed up the process.
One way is to create "good" projects
But what are good projects?
Let's dive in.
What makes a good project?
All projects are good.
But, some are better than others.
How do we judge projects?
Before I begin listing out the criteria by which I judge projects, I just wanna say that this is very subjective and at the end of the day it totally depends on you, if you think a project is great, then it is great, no arguments needed.
Now with that done, let's go over what I find important in a project:
- Tech Stack — We can judge a project by the tech stack it's using. That also depends on you, if you wanna learn Java, then simply create projects using Java. I'm not advocating using the latest and greatest tech, but it's good to experiment with different tech stacks and see which ones you enjoy programming in.
- Size — The bigger the project, the better it is? In most cases it is, big projects force you to think about architecture, file structure, and lots of other things that you might ignore. On the other hand, small projects are good if your focused on learning one specific tech. For example, if you wanna learn web sockets, you would create a super simple chat app, with the basic needs just to learn web sockets.
- Challenge — An easy project is no fun, you won't learn much. That's why it's important to have a project which is slightly outside of your comfort zone. Make sure it's not too outside of your comfort zone for you to be overwhelmed.
- Fun — In my opinion, a fun project is always a good project. It just motivates you to write code, and simply have fun.
Now that we know how to judge projects, let us answer a very common question that most beginner programmers have.
Should my projects be recruiter oriented?
This is another common question that junior developers have.
The simple answer is no.
Most companies don't look at your personal projects UNLESS they are super outstanding such as a popular open-source project or equivalent.
What I'm trying to say is that you should create projects because you genuinely want to do them, you might want to learn some new technology, or simply have fun.
That the theory is over with, let's move over to more practical advice.
Here are the projects I recommend every programmer to at least try doing.
PS. I probably have missed some other great project ideas, if I did make sure to leave them down in the comments.
Clones (Netflix, Google, Amazon, etc...)
You got no project ideas?
Any app., it can be Netflix, Google, Amazon, etc...
Cloning apps is a great way to learn how these giant apps were made.
You essentially reverse engineer these apps and learn their trade secrets.
Visualizers have become super popular lately.
Mainly because it teaches you core CS fundamentals.
It's also a nice project to put on your resume.
You can visualize lot's of things, sorting algorithms, shortest path algorithms, etc...
Bonus points making this much more beautiful
Video/Text Chat App
I don't like putting specific projects, but I couldn't skip this one.
I like this project, it's fun and it teaches you trending topics such as web sockets and WebRTC
It's also a very cool project to put on your resume.
This is a classic.
CMS systems can be very simple or complex.
If by any chance your CRM system is useful, you can turn it into a full-fledged SaaS (Software as a Service) making you some side income.
Cloud Computing Project
Lot's of companies are moving to cloud providers for their infrastructure needs.
What better way to learn the cloud, than creating a cloud-based project.
You can create a small project that uses some sort of cloud service:
- Storage: AWS S3
- Database: AWS RDS
- Functions: AWS Lambda
PS. You don't have to use AWS, it's simply the most popular one currently. You can check other cloud providers such as Google Cloud and Microsoft Azure.
If you enjoy playing games, why not make one?
It might be tough but make sure to pick something that isn't too hard, you won't be making the next witcher.
You can make a 3D game that will teach you lots about physics, or even a multiplayer game that will teach you about networking.
You can start off by learning Unity, or my personal favourite Godot.
Distributed Systems Project
This one might be a bit hard to do, but it will immensely help you because most companies are moving to a distributed architecture.
You can create simple microservices that communicate with each other using HTTP or gRPC.
You can add a reverse proxy, as an API gateway, maybe even a load balancer, and you can host this on the cloud using some cloud provider.
Online Code Editor
This is another fun and challenging project.
Personally, I've never done this but would assume that it's no easy feat.
Your gonna have to be able to work with files, and syntax highlighting.
Don't forget about running the code, probably gonna use some sort of compiler underneath.
Regex Query Tool
This will probably be a frustrating project due to how annoying regex is.
Nevertheless, it's a great project, your gonna learn how regex works (finally!!)
You can add features like having test cases for regex, and even a history
This is another fun project to do, it teaches you how the file system works.
It will also teach you basic data structures because your gonna have to use them to implement some features.
Machine Learning Project
Machine learning is hot.
People think it's too hard, but in fact, there are many ready-made libraries that abstract all the hard stuff for us.
You can create a mask detector app or handwriting detector app.
Your Own Framework
This is a great project because it will make you appreciate the frameworks your already using.
To start you can choose a framework to clone.
You can start off by cloning basic functionality and slowly start implementing more features.
That was long?
I sure hope you got an idea for your next project.
If so, tell me which one your gonna make down in the comments below!
Thanks for reading!
I also publish small snippets of content on Twitter, follow me @tamerlan_dev