In what little spare time I have, I have cycled through several projects looking for a side programming project to work on. Here are several of the reasons that I've used in the past to start a project. After listing them, I'll give you the main reason why they're all bogus:
- I want to learn <insert some in demand technology>
- This project is associated with a big name company ... maybe they'll notice my contributions.
- There are lots of companies using this technology. That would be a good one to learn.
- <Insert famous developer> says that learning about this topic will make me a better developer.
- This <insert subject>was interesting when I worked on it for a class in college. I could re-learn about it and maybe that will lead to a project I'm interested in.
The main problem with all of these reasons? There is no passion in any of them. When using these reasons (except for maybe the last one), the project is a means to an end. If something else comes up that keeps you busy for long enough to lose momentum on the project, you're not going to want to finish the project. You have no reason to.
Given this, how do you go about finding a project to work on?
Take some time to be honest with yourself and answer the following questions:
Who am I trying to please?
If you are working from the path that somebody else took to success or the list of things they put forward on how to run a successful project or become a successful developer, you'll only reach moderate success at best. Nobody can give you anything but their opinion on what you should do and how you should get there.
You must take some time to find something that is important to you. You'll learn what you need to learn in order to reach a goal that you care about.
What are my goals?
What do I care about? Here, for example, are some of the things that I have as goals for myself regardless of if they directly apply to software engineering:
- Become a better husband to my wife every day
- Become a better father to the children in our home every day, whether they're foster kids or, someday, our own
- Grow deeper in my faith every day
- Grow deeper in my understanding of the world around me every day
- Become a better singer
- Win an international gold medal in the Barbershop Harmony Society's chorus contest (here's the first concretely achievable goal)
- Gain the respect and admiration of the people in the communities I take part in (respect and admiration from your peers is a need everybody has, including myself. How important is this need to you? Although it is a need, are you letting it control you?)
- Improve upon a complex project in such a way that people can get more creative tasks done and spend less time on tasks that can be automated (ray tracers and compilers are of interest to me at the moment)
Am I willing to shift my focus if pursuing my goal reveals a worthier objective?
Regardless of the reason that you start a project and whether there is passion there or not, be ok with a shift of focus. If you find yourself drifting off into some other part of the process of the project, take some time to consider whether the direction in which you're drifting will be useful to you and others.
As an example, drift on one project (pb_ray) has lead me into working with build tools such as cmake (to make it build on multiple OSes) and editing tools (vim, syntastic, etc). Some of these things even lead to topics to start this blog with. Eventually, I imagine that I'll get back to working on the original project.
In the long run, having a project or goal that you care about makes life much better. It gives you something to live for. Otherwise it is too easy to let life happen day by day becoming further chained to someone else's opinion, drifting on the waves of their changing whims. I will keep working every day to find what that goal is for me.