Continuing side projects
This section continues the discussion on side projects. It's meant to go in a little more depth if you already have some coding and side project experience, but it might still be an interesting read otherwise.
Once you have work experience
Projects are important when you don't have work experience yet, but they're not as essential once you have work experience on your resume. There's a lot of experiences that valuable to have in life besides side projects. It's really healthy to have other hobbies besides programming.
At this point, projects are less for finding a job and more for increasing your options, or for personal interest. For example, if you eventually want to try doing a data science role, it's easier to convince a company that you're genuinely interested in data science if a data science project shows up on your resume.
More ways employers can see side projects
You can work in a team
- Example: You make a platformer game with 2 friends and publish it online. There's only one level in the game but it works great!
- Why it's useful: A lot of software is developed in teams and this experience will help you learn how to work in teams more effectively
You can go in depth in a subject
- Example: You really get into computer vision and read a bunch of papers about recognizing different types of architecture from pictures
- Why it's useful: A more advanced version of learning a concept on your own
You can do things of value to other people
- Example: After a year using The Latest Javascript Framework, you notice that it doesn't have a wrapper for another popular library, and you create it
- Why it's useful: It shows that you have enough experience to have context on what other people want to use or care about
You can maintain a project over a long period of time
- Example: You make a really good calendar widget for iOS. It breaks everytime a new iOS release comes out but you fix it everytime
- Why it's useful: It demonstrates good work ethic and requires you to be diligent in writing future-oriented, robust code
Open Source
One underrated form of getting experience is contributing to open source projects. Open source projects are codebases that anyone can see, use, and contribute to. Contributing to projects exposes you to git, code reviews (and writing good code), communication with other engineers, and more. If you're interested in a particular technology, check out what open source projects use it that you could contribute to! Open source contribution is actually very similar to an internship in terms of what you can learn (...but in most cases no one's being paid to do work or manage people so the pace will likely be slower and mentorship/conversation will likely be less)
A good alternative to internships is to contribute to open-source via Google Summer of Code.
Evy runs an open source project called mathsteps, and wants y'all to know she would be happy to help any of you get started on something in the project!
Rudi wrote this on Quora:
In general, I recommend contributing to open-source when the time comes organically, rather than forcing yourself to do it
That means working on your own projects. While doing so, you may end up writing code that can reused and contained into a library, which you can then open-source. You may end up using existing open-source libraries, but discover that it has a bug, a missing feature, a performance issue, etc. Then you can make a contribution as it helps you solve a problem you encountered in practice.
I've made attempts to contribute to open-source in the past. For example, about 2 years ago, I was interested in contributing to Mono. That didn't really go anywhere. While I had experience in C#, I never actually used Mono. It was hard to find a small accessible project to get started, and the codebase was very massive. I lacked context.
The hardest part is often defining the problem you need to solve, as opposed to writing the code that solves it. Once you know what path to take, you can walk it, no matter how hazardous - you just need to put in enough effort. When I don't know what path to take, when I don't have a sense of direction, I can't even apply effort. Those are days that I spend starring at the ceiling. I've run into this issue with academic research, and I've run into this issue with open-source projects. In both cases, I don't have someone (teacher or employer) giving me a specific task to do.
To make a contribution to an open-source project, you need to understand at a minimum what problems it solves and what problems it isn't solving. This can be difficult to understand unless you've run into those problems yourself.
If you work on your own projects (say an app), it will be significantly easier to stay motivated and make progress. Hopefully, it will be a project that you will be excited about and feel a sense of ownership. The goal of the project will be better defined, you will understand what you need to do. This means you will get more done. Always factor motivation in the equation.
And it will allow you to find problems organically - missing functionality in existing open-source projects. You will understand the context of the open-source project. A common advice given to startups applies here: a problem that you solve for yourself because you've encountered it is likely a problem that someone else has encountered.