Jim, an old family friend, is a tinkerer. He puts his endless supply of curiosity and deep intelligence to use by doing things like collecting old radios and broken telephones, taking them apart, and seeing if he can fix them. Or training his dog to do sequentially more detailed and challenging tricks. Or planting cherry trees in his yard. We'll come back to Jim in a minute.
The Artist’s Way is a classic book on creativity by Julia Cameron. One of the exercises in the book has become a standard practice for writers and artists: the daily pages. The idea is simple. Every day, you wake up and write three pages. The rule is you must sit down, start writing, and not stop until three pages are filled. This exercise inspired one of my favorite sites, 750words.com.
Like Jim's curious wandering, I think of this exercise as a kind of tinkering for the mind. Tinkering means you explore somewhat aimlessly, but not uselessly. You’re generally fixing and organizing things, but you may not have a specific plan or any grand ambitions for what you’re doing. For a writer, this wandering has many benefits. It gets your pen moving when you may not feel like moving it, it builds a daily habit of consistent progress, and it reveals hidden thoughts and connections you may not have discovered without the exercise.
As my painting teacher would say, the paintbrush should be moving more than it’s not moving. The rule to not stop writing short circuits the tendency to second guess what you're writing. Stopping to sit around and think doesn’t do a writer or a painter any good, it just blocks the flow.
This may seem counterintuitive as a programming exercise. Programming is thinking. It's slow and careful thinking, translated into instructions a computer can understand. Of course a programmer needs to think! So much of our time spent programming, either as an employed developer or as a student or hobbyist, is spent focused on a specific project. When you sit down, you already have a goal in mind. But I don't think this needs to be the only way to write code. Code can be used to freely tinker as well. Instead of daily pages, we can write daily scripts, and with a little adjustment to the exercise we can get the same benefits a writer finds in the daily pages.
Try this. Before you start your “work” for the day, write a script. You can do this in your text editor, on a site like glitch.com or codepen.io, or in your language’s command line interface. Instead of setting a number of lines of code to write or setting a rule to not stop typing once you start, set a time limit for twenty minutes. It might feel strange at first to write code without a goal. But spend twenty minutes tinkering with code. You might explore a language feature you’ve used but don’t fully feel fluent in. You might end up writing a script to automate a manual task you do every day. You might end up discovering a solution to a problem you’re actually working on in your “real work.” You might discover a cool pattern that might be useful later. You might not end up with anything useful at all. Or you might end up writing the first 50 lines of a new and very useful open source library or interesting project that you’ve quietly been thinking about for months but never had the chance to explore and recognize.
Twenty minutes a day tinkering seems almost like nothing at all. But like brushing your teeth, the daily habit has a great benefit over time. Just like writing, programming can be a way to explore and discover ideas just beneath the surface that haven't been expressed yet. What you discover might even be far more valuable than anything you write when you’re trying to get real work done. Or at the very least, it can reconnect you with why code is fun if you’ve been feeling burnt out on the job or get you started on a new idea if you have absolutely no idea where to start.
What programming exercises do you do to stretch your creative muscles?
It's midnight. You're huddled in the restricted section of the library, eyes glued to powerful tomes—Creating Killer Websites! Resilient Web Design! The Pragmatic Programmer! You get a missive from your co-conspirators in the Late Night Code Club—another night of adventurous learning is about to begin.
If you enjoyed this post and want to read more like it, I'd like to invite you to join the Late Night Code Club by signing up for the newsletter—it's a programming newsletter all about learning and teaching programming, code as a creative practice, and programming as part of an interdisciplinary education. In each newsletter you'll receive updates about new posts as well as other resources and ideas all about learning programming! It'll be short, interesting, and encouraging for learners and teachers. See you there!