Starting side projects

A side project can loosely be defined as "code that you write outside of an obligation". They're great for learning, and employers like to see them on resumes. Anyone can create side projects, regardless of your experience level!

Nor do these have to be big or take too long to do! It's totally okay to make something assignment sized that takes less than a week of work, or a few hours on a weekend.

Hopefully, this section will provide you some insights on how to think about side projects and ideas on how to get started.

Benefits

  • It's a chance everyone has to write code. Getting better at coding requires writing code!
  • It's a chance to build something from scratch
    • You don't always get to do that at work
    • You get to see the whole picture
    • It's satisfying
  • You can learn and explore different technologies with little commitment
  • They help get you employed
  • They really help get you employed when you don't have industry experience
  • They open up more doors even when you have experience

Rudi says: They can also be fun and allow you to enjoy programming in a way that your job can't. For instance, I made a fractal rendering app because they look cool, definitely not something anyone would ever pay me to do!

Important notice

While side projects have a lot of benefits, it doesn't mean that they should take up all your free time. PLEASE PLEASE please don't spend all your time on coding projects unless that's just how you like to spend your time you don't have to do side projects to be successful even though it often is talked about as if you do.

Side projects from the perspective of the employer

Among other misconceptions, side projects don't have to be novel, amazing, or even useful. For internships and junior positions especially, all that an employer cares about is interest and willingness to learn. Here are different "signals" that a side project can convey, sorted roughly by the amount of experience associated with them. Any one of these can be interesting for an employer!

You can learn a technology on your own

  • Example: You're reading through a book on learning a new language, and applying what you learned by coding a few Project Euler problems
  • Why it's useful: Most employers will hire you even if you don't know all the technologies that they use, and will expect you to learn some on the job. Here, you've established that you can do that.

You can learn a concept on your own

  • Example: You got interested in Big Data and read some blog posts about how work can be split up and parallelized to run on multiple machines
  • Why it's useful: Employers sometimes have hard problems to solve and like to know that you can read up on the concepts behind them and help solve them

You can come up with project ideas

  • Example: You noticed that the school newspaper club manually tallies up survey results into different demographics. You write a script that automates this work for them and generates pretty graphs
  • Why it's useful: Employers like to see that you can take initiative

You can complete a project on your own

  • Example: You make a website to create and send reminders like your parent's birthday. It has user authentication, and a bunch of other thing so other people can use it
  • Why it's useful: It's good to complete a project at some point, as you can learn different things at different stages of a project

The first few don't require you to do anything extraordinary, and can be done even if you've only been programming for two weeks! See this relevant XKCD.

You might have heard that the tech industry changes quickly, trends come and go and technologies become obselete quickly. In addition, many companies have proprietary tools that are only available within the company. That's why it doesn't really matter what you learn, as long as you learn something. That signals to employers that you can learn whatever is necessary on the job.

Becoming and staying motivated

It's ideal that you only do side projects if you're enjoying it. That way, it's sustainable, and just a generally healthy thing to do.

But realistically, expect that it can take a few tries to enjoy something. Not all aspects of programming appeal to everyone. It's possible that the stuff you learned in class so far is pretty dry. Some people will enjoy UI/visual/graphics programming. Some people like math and algorithms. Some people like systems. Some people like building products. Some people like to do social good via tech. If you've committed to programming in some way anyway (e.g. enrolled in a CS degree), might as well do some exploration to see what you really like.

This also means that it's totally fine to abandon projects as you find more interesting ones, as long as it helps you learn!

Project ideas

See this great GitHub repo with tons of project ideas.

Online courses

This is often the easiest way to start. You don't need to come up with an idea or even know anything, you can just go around shopping for something that looks interesting. We know, we know, you're taking enough classes at school already. But these courses are often more practical, fun, and have more selection.

They can also leave you with something to show in the end. They allow you to build something super fancy complicated. You can create something through a course (like this Udacity web development course) or make a game like hangman or build a calculator or whatever else you can think of. You'll be surprised how complicated "simple projects" can be and how much you can learn. That's what employers want to see. So it's good to find courses where the syllabus says you'll have a project completed at the end.

Places to shop for courses: Udacity, Coursera, EdX.

Reimplementing stuff

A great way to learn how something is built is to build it. Make a much simpler version of Twitter, a BitTorrent, the ls command-line function, a compiler for a small subset of C, etc.

Solve a problem you or something you know has

Great ideas come when you notice a problem someone has, that could be solved with software. I don't expect that telling you something vague like this will generate an idea right now, but if you keep it in the back of your mind, an opportunity might come by!

Make a game

Games tend to especially satisfying to build because you get to play with it as you go. There are very few constraints, it's very free-form. Along the way, you'll get a chance to learn from a wide range of programming concepts (AI algorithms, OOP design patterns, UI, etc).

Example

If you do happen have a lot of time on your hands that you want to spend on side projects, and have something in particular you'd like to work in that you don't have experience in yet, then Chris Cates suggests that you can work on a big project to gain experience. For example:

  1. Say you want to work in AI
  2. You could choose to do research on Tensorflow.
  3. You could fork a Tensorflow project from GitHub (look up "fork Github" on Google if you're not sure what that means) and write a wrapper for a specific neural network technique (Alexnet for example).
  4. You could then write a blog post, website demonstrating processes, methodology and use case for the technique.
  5. You can then apply to relevant companies, showcasing the project and case study as an informal cover letter.

Evy: I've never done this. That's more technical work outside of school/jobs than I'd want to do. But it does work for some people!