Side projects are incredibly important. They’re arguably more important than your actual courses in terms of job applications or even how much you learn. They help you learn practical technologies like front end development, back end server dev, deployment/DevOps, etc. They give you experience with long term codebases and working with other people. Plus you get to work on whatever you want. Any crazy idea you have, any fun little project you want, you can work on.
I Don’t Have Time…
Of course, when I bring up side projects, there’s this inevitable answer; “Oh I’d love to work on something but I’m just so busy” Which I’m not going to contradict. It’s not my place to say if you’re too busy or not. Sometimes people genuinely have too much going on, whether it’s work, mental health or something else.
At the same time, I get this answer so often, that I’ve become a tiny bit skeptical—especially with NYU CAS students. NYU CAS’s curriculum is not monstrous in terms of work. There’s harder courses than others, but really students aren’t being pummeled with work like at other schools.
If I had to guess why students constantly say they have no time, I’d venture that a lot of students kind of divide their time into two sections: time spent on school/work/etc. and time spent doing fun stuff. When someone says “I don’t have time”, they often actually mean “I don’t want to take from the time I have to do fun stuff”. Which is fine! But the answer isn’t to avoid side projects. It’s to find a side project that you find fun.
Take something you find interesting, programming related or not. Try to figure out a way to have technology make it easier. If you can’t come up with an idea, ask your friends or people in the community. I guarantee one of them has some sort of problem or frustration. Boom, now you have a side project.
The second most common answer I get with side projects is some indignant noises about how employers demanding side projects is unreasonable and age biased and late stage capitalism and therefore the devil. And sure, I wouldn’t expect full fledged professionals to be judged on their side projects, much as I wouldn’t expect a doctor to be judged on how much medicine they did outside of their practice. But students are not full fledged professionals. If you have no job experience and only limited programming knowledge, a side project demonstrates that you can actually code to some extent.
Some indignant noises make a claim that “other professions don’t have to deal with this!!!” Which…I just don’t think is true. If anything, other professions have to do far more unpaid bullshit work to get a job. Politics majors have to do unpaid internships. Pre-med students need to volunteer at clinics or labs. Science majors need to do research. What’s a few measly hours working on an interesting side project compared to that?
First, you need an idea. As aforementioned, take an area you find interesting, let’s say cooking. Think about various apps or projects you can do with cooking. Maybe you can make an app that gives a random recipe from a certain type of cuisine. Or maybe you can make an app that gives recipes based on the contents of one’s fridge. Honestly the idea doesn’t have to be great. It doesn’t have to be original and it doesn’t have to be that interesting. One of my first side projects was just a blog written in Ruby on Rails. Literally the least creative idea possible.
People often wait for the perfect idea. I say the first idea is the perfect idea.
Next you need a stack. For your first project, try to use what you know. If that’s Java and Python, then Java and Python it is! My cardinal rule with new technology is that I try to learn one thing at a time. Therefore I don’t write an app in Swift with a Kotlin backend when I know neither. That’s just asking for trouble. This is harder to accomplish when you’re new to programming, since everything is new. But you can start by focusing on one aspect of the project. Perhaps you can write the front end before focusing on the back end. Or perhaps you can just write the database code.
When you’re learning your one new thing, try to keep a tight cycle of reading-writing-applying. Basically, read the necessary documentation/tutorials, write the code necessary to learn the feature, then apply it immediately to the side project. That way you keep it applicable and don’t get stuck in the weeds of learning this technology (which can be pretty boring imo). The cardinal rule of side projects is to get something done. This something doesn’t have to be impressive. It just needs to be done.
Code Code Code
Once you’ve learned juuuuust enough to get started, code like mad! Hopefully you should find this interesting enough that this isn’t a chore. Try to keep the momentum going. I find that I work in spurts, i.e. I code a bunch in a few days, then I step away for a bit. Maybe you work differently. That’s fine too.
As you get more comfortable with one technology, you can introduce another. Maybe you start by building the front end, but as you get better at front end, you can learn back end stuff too.
The secret to most side projects is that there usually isn’t an end. There’s just a point where you stop working on them. Really, that’s true with any code.
Don’t feel like you need to keep projects alive just because. If it’s no longer interesting to you, then you can drop it. Sometimes you’ll come back to the project. Or sometimes you’ll slog through a boring section and it’ll get better. But if it stays boring and uninteresting, just ditch it.
I’ve harped on this point a lot, but really try to learn git for side projects. Not only is it incredibly useful for saving your work and trying out ideas while being able to roll back, you can also flex by pushing your project to GitHub and showing off your account. Plus it’s very helpful if you have collaborators.
Speaking of, collaborators are really awesome if you can find them. It’s hard to find someone with the same work ethic and interests, but if you can, it’s immensely valuable. I’d highly recommend asking around if people want to work on a project together.
You can find collaborators at any stage of the project. If you find someone to collaborate with at the beginning, you can work together to get the project off the ground and teach each other the various technologies. If you find someone later, they can give you a fresh perspective on the code and point out flaws or confusing parts. Plus you can teach them the codebase and relevant technologies. Which is a great addition for a resume or talking point on an interview. People love it when you mentor others.
However, you shouldn’t let your project live or die by other people. If your collaborator doesn’t do their work, don’t use it as an excuse to not do your work. It’s tempting to get discouraged, but ultimately you’re responsible for what you want to get done.
Programming is a very unique skill in that it’s immediately applicable. You can learn a little programming and immediately start using it in very cool ways. It’s almost like getting superpowers. Whatever interests you have, it can be improved using programming. If you can find a project you find fascinating along with the time and will to get it done, you’ll become a far better (and more employable) programmer. If a project really takes off, you could have a startup on your hands!
Hopefully you’ve already started brainstorming side project ideas. Now go out there and get coding!