











The best way to learn is often to do, to work on real-world projects. If you want to learn HTML and CSS, build a simple website. If you want to learn to play piano, commit to playing a song at an upcoming recital. If you want to learn about regime change, make some molotov cocktails.

Remember though that taking action is not the first step. Rather, the first step is deciding what to take action on. And this decision can make all the difference.

For example, let’s say you want to learn to make websites. You don’t have an idea in mind, but someone suggests that you make a clone of some popular site, say Reddit for instance. You shrug, “sure that sounds fine,” and start working on it. How long do you think this lasts? Sure, you might be lucky enough to make some progress the first weekend if there’s nothing going on. But as soon as you get swamped at the office, or get sick, or life decides to throw any number of other obstacles at you, you’re going to drop that project like a guillotine blade in 1790s France. Why? Because you don’t actually care about it.

Sure, it’s possible that you’re so driven to learn about websites that any project will do. But most of us need something more meaningful to carry us through the storm of everyday bullshit. What do I mean by meaningful? When it comes to personal programming projects, especially beginner-to-intermediate ones, this generally boils down to two qualities: useful and fun. There’s a lot of overlap here, but the brainstorming process can be a little different for each.

In brainstorming ideas for both of these types of projects, you’ll want to be able to note down everything that comes to mind. Don’t spend any effort judging your ideas at this point, you’ll do that later. Just let it flow.

Useful Projects

An obedient machine that does your work is a beautiful thing to behold. Here’s a simple process that can help you think of useful ways to bend your computer to your will:

To start, take a look at your to-do list, physical or mental. With everything on there, ask yourself if there’s any way a computer could do it, or just a part of it, even if it would require some extra hardware to allow your program to interact with the world. Simple and repetitive tasks are often good candidates, but don’t necessarily restrict yourself to those either. Online shopping, watering plants, scheduling, and a million other things are all fair game here. Get creative.

Next, close your eyes and walk through a recent day you had from start to finish. Again, with everything you did, stop for a moment and consider whether it might be possible for a computer to do that for you. Comb your entire day from morning to work to bed. If you’re employed, I’d encourage you to give some extra focus to your work day. Even if you’re not a professional programmer, and perhaps especially so, programming can make a big difference in your career. Programs that are useful to your employer are also useful for justifying raises and promotions.

Finally, expand the search even further by going through your calendar/planner for the past few weeks or months and again give some thought to each item.

Fun Projects

Start by writing down all your hobbies, interests, and skills, anything you do when you have some free time. Then for each item on your list, again try and imagine a programming project that could somehow relate to the given topic.

If you love platformer video games, then perhaps making your own 2D platformer with pygame would be a good option. If you’re a prankster, there are no end to elaborate computer-related pranks you can pull. If you play fantasy sports, maybe try and write a program that manages your fantasy teams for you.

This process is very open-ended and takes even more creativity than last section. You might find it helpful to take an initial pass at brainstorming followed by some unfocused, diffuse-mode activity, like going for a walk, that will allow your subconscious mind to chew on the problem. Then run through the list again and see if anything novel comes to mind.

Picking Your Project

Now that you’ve got your two lists of ideas, it’s time to review them. Narrow them down to your top five or ten and then pick just one that you will focus on for now, whichever one interests you the most. And if you get a little ways into it and discover that the project won’t be feasible for you at the moment or isn’t as fun or useful as you first thought, you can just return to your list and pick another.

Be on the lookout for any ideas that appear on both lists. A project that is both useful and fun to you personally is probably a winner.

Of course, even with the above processes at your disposal, it’s often useful to see some example ideas that allow you to get a feel for what’s possible. So if you’re interested in Python and automation-related projects, consider checking out the free Ebook you get can get by subscribing below. In any event, happy coding.