Sometimes I fall into the trap of reading about programming and not programming. I can’t always find an interesting project to work on, even though I know there are a sea of opportunities. If you have the same issue, here are some tips that might help.
- Hang out with other programmers. This is the best source of inspiration because, naturally, they’ll have ideas that you won’t. It doesn’t matter if it’s just some coder friends, a programming group, or even a conference. The mixing of all those ideas is sure to give you a fresh perspective.
- Hang out with non-programmers, too. First of all, it’s healthy to be around people that make you happy or challenge your thinking, whether or not they code. Second, they can give you inspiration from a user’s perspective. What frustrates them about their computer? Can you come up with a solution?
- Have a dedicated workspace. If it’s not possible to have a dedicated space, at least make sure it’s quiet and you can focus on the computer. Make it your cave. Make sure your chair is comfortable and supports your back. Make sure you don’t have to get up too often – have a drink handy. The more incentive you have to stay at the computer, the more likely you’ll be to stay and be productive.
- Have a good development environment. The software version of the previous tip. I don’t care which editor you use (though I recommendvim) but make sure you’re using one that gives you some power and flexibility. Always use source control – in particular, I recommend you learngit because of the concepts it will teach you. Always back up your work. All of this will prevent the massive demotivation you will experience if you don’t use them and you lose your work.
Keep your ears open. Read the twitter feeds and blogs of the programmers you respect. (Look at my twitter feed if you want – it’s mostly programmers.) RSS aggregators, such as Ruby Inside, or the old-school Planets, can be great sources of news because they add prominent new programmers without you having to search. Pick a few blogs on topics you wouldn’t normally read, and subscribe to them too.
Yes, this can get you sucked into the trap of reading code and not writing it, but being plugged into the larger coding ecosystem is good for you and can be the source of many ideas.
- Read good code. Think of some software you love and look at the source code. What problems did they have? How can you learn from it, or better yet, how can you improve that software? There are many sources of good code, but GitHub has to be one of the best. The GitHub Rebase series on the GitHub blog lists a number of notable new projects if you want some specifics.
- Learn a new language. This is a classic piece of advice that keeps on giving. I recommend learning something from each of the following categories:
- Mid-level: C, C++
- Object-Oriented: Ruby, Python, Java, C#
- Functional: Scheme, Haskell, Erlang
- Shell: Bash, Zsh, awk, sed
- Set-based: SQL
The more languages you know, the more ways you’ll have to think about problems in any language. The more ways you can think, the easier it will be to find interesting ways to solve problems, and therefore to have inspiring projects. (And, of course, don’t limit yourself to this list.)
- Learn good techniques. Rather than a specific language, learn good general techniques from books like The Pragmatic Programmer, Structure and Interpretation of Computer Programs, and The Little Schemer. (The last two are about Scheme specifically, but they’re so good everyone should read them.)
- Have a toy project. It’s nice to have a toy project, something you can turn to when you’re frustrated by other projects. It doesn’t matter what this is, as long as all yours. Don’t feel compelled to share it or to have it become some kind of success – it’s there to help you work things out.
- Write a game. A lot of people think it’s a waste of time to write games because so few independent games are commercially viable, but if you’re a gamer, write one anyway. It’s therapeutic, and there are a lot of deep concepts that come up when you work on them. I’ve written a number of small games in my days, almost all of which are unreleased; they were good experiments. If you can’t think of a starting point, try a Roguelike.
Take the brute-force approach. I know, this was supposed to be a top ten, but this is a bonus tip for when you’re really striking out on inspiration. Look through your programming books, your RSS subscriptions, twitter, Stack Overflow, or any other source of programming information. Find two unrelated topics that are even remotely interesting to you. Now find a way to connect the two. Even if it’s a little obscure.
For example, just at random, I’ll pick… parsers and… accessibility. You could learn about them, then write an HTML parser that pays particular attention to accessibility factors. As of today, I don’t see too much code on this topic, so that could be a good thing to explore. (Here’s one open-source accessibility tester I was able to find as an example. One is never enough.)