Part of The Inner Chapters Unbook.
Originally part of podcast episode number fifty-seven.
Dedicated audio available from Podiobooks.
- Technology is more creative than most people realize
- Lots of good resources about creativity in general
- Mentioned de Bono's books last week
- Talked about functional decomposition and re-factoring like writing early on, similarities are more than coincidence
- At a microscopic level, algorithm choice may be deterministic
- At a macroscopic level, there is a lot of play in systems design
- Keep more than one project going
- Always keep working, creativity requires constant practice
- Don't overload, know your limitations
- Be able to prioritize
- Play when you have time to play, i.e. downtime
- Get to work when you have to deliver
- Non-technical creative projects may yield surprising insights
- Keep journals
- Even when you are not working directly on one project, you can document insights that occur when working on something unrelated
- Indulge in other creative endeavors
- Being able to switch gears more profoundly can allow for relaxation without cessation of creativity
- I do...
- This podcast
- Digital photography
- Just started writing fiction again
As promised I have another Inner Chapter, this time on the topic of creativity. I don't have a lot to say. This will hopefully be a short piece.
You might be thinking creativity is kind of an odd thing to talk about in a series of pieces discussing the practice of programming, the business of programming, the profession of programming. But I think that technology, the act of programming itself, is a lot more creative than most people realize. I think that most of you listening, whether you've explicitly realized that consciously or not, at some level appreciate what I'm talking about here. I think that there are a lot of good resources about creativity in general that may be applicable to what we do as hackers. I mentioned last week Edward de Bono's books on creative thinking, in particular in talking about that story "the pig in the box", one I wanted to get to with my kids, but I have a couple of others of his on my wishlist that I'd like to get that I think would be fruitful. And a lot of what I've read about creativity in discussing it from developmental perspectives, most often it's observed that children have the easiest time with creativity, and as we age it becomes harder to remain creative. And therefore I think that it behooves us to really look at this from a reflective, from an introspective point of view, try to understand why that is, and try to understand what we can do to maintain the high levels of creativity that are required of being a hacker.
I talked somewhat about how functional decomposition, remember factoring, are like writing, and I think that sets the tone. I talked about that early on last year, early on in this series the Inner Chapters, sets the tone for talking about creativity and programming. And I think the similarities between writing and certain aspects of coding are more than coincidence.
At a microscopic level I think algorithmic choice is pretty deterministic. I think if you look at a particular function point and you drill down, you don't have a lot of latitude. But as you start to build systems of greater and greater complexity, to get up to more macroscopic levels, you're talking about an application or a suite of applications or a service, or even a tool or a framework or a library. There's a lot more play at that point than what we typically think of of systems and applications design and development.
I think that creativity, as I said at the outset, can be challenging as an adult. And one of the things that I've found on my own that helps keep my creativity high is to make sure that I've got more than one project going at once. And you have to be careful about this. I think the trick and what you have to understand about having multiple projects going is what's more important than the number of projects is that you're always working.
Creativity, as I've hinted at, requires constant practice. If you stop exercising your creative muscles, it can get kind of hard to approach a problem creatively and come up with an innovative solution. If you have multiple projects going, the important aspect of that is that you're only working on one at a time. And the reason why you have more than one then, is that if you get stuck for any reason on one project, you can set it aside for a time, and you can work on another project. And what I find typically happens in that case is, I'll have maybe — let's talk of it in technical terms, in geeky computer terms we can all understand — two threads running: a foreground thread running, and a background thread running always. And the foreground thread is focused on the project that I've decided to work on, that I've consciously focused in on. But the one that I've switched away from, maybe the one that I'm stuck on, is still being chewed over by that background thread. That exercise of kind of context switching can sometimes break a log jam. If you're having a problem getting at a simple, elegant solution that you like, you feel like you're grinding bone, the code is getting a little smelly, the design is getting a little smelly, you don't feel like you're doing your best work, and that's signaling that you need to switch away for a while, something about it brewing in the back of your brain sometimes can clarify things that you weren't able to pull out consciously. So that's a trick that I've found to be quite effective.
As I said, you have to understand why that trick works though, and then understand that there are some limitations or maybe some dangers in undertaking more than one project at once, keeping multiple projects going. You have to understand your own limitations and make sure that you don't get overloaded. Two projects might be ideal. Depending on the size, you may be able to do as many as three or four or five. But if you undertake too many, you're going to over-commit, you're always going to have somebody expecting delivery on that, even if it's just yourself, even if it's just a commitment to yourself. And therefore if you if you have too many, then especially since you really only can concentrate on one consciously and maybe one or two in the back of your mind at any given time if you have more than you're actually able to process, you may find yourself burning out.
I think that you also need to be able to prioritize, especially if you're a professional hacker, that sure, you're going to want to have projects that are a little more playful, things you can pursue in your downtime. And that's fine. You need to understand when that's appropriate — we've talked about downtime in the past — and you need to work on those projects then. But then when you have something to deliver, you have to be able to set aside those playful projects. You may not always have the luxury of context switching when you want to or when you need to, and that's where the ability to prioritize comes in: that if your boss comes in and says, "That's nice that you've been hacking around on that XML interface of whatever whatever, but I need you to deliver this project feature today because we have a customer waiting for it, we have a commitment, you need to be able to set that aside.
I had a coworker in the past who was infamous for not being able to do this. This is also an anecdote about mentoring, by the way. When I first met him, any excuse to go work on a side project, he would go off on a tear. And he would always over-commit. And very few of his side projects were anything that he really needed to do for work, so number one, I think he didn't show good discretion in picking side projects that ultimately might circle back and deliver some positive gain to the organization. He'd just do them because he was curious or interested or fascinated. And that's fine! I mean, that's part of being a hacker, is that high curiosity, that high desire to seek out and do novel and interesting things. But when it came down to paying the bills, to doing the day job, and delivering on a schedule, he had problems with that. We worked on that over time. I worked with him over the course of two jobs, and by the time that we parted ways last time I think he was able to do a much better job. He finally got that: that it's okay to have those side projects to play on. But when the bill is due, and you have to deliver, you have to be able to set the more interesting side projects aside and get the main work done.
I think that non-technical creative projects may yield some surprising results and insights: that you don't necessarily have to have your secondary projects be technical. That as long as you keep journals, the adequate documentation, so as you're working on things that are not related to technical project work that you're doing, if it yields any ideas or you have any sudden flash of inspiration because you're exercising different creative muscles, but you're still exercising your creativity overall &mdash say you're doing digital photography, or painting, or playing in your band, or sports (I think sports can be creative: strategy and tactics and team cooperation) — you know, anything that engages your mind and presents kinds of puzzles and challenges that engage your abilities and allow you flex and stretch — hey, I think physical might be good for some of us that have sedentary day jobs anyway. But as long as you have maybe a Moleskine notebook or a deck of index cards or something like that to hand, so that when you have those breakthroughs in your background process, when you're mulling something over and you go, "Hey, wait a minute! I've got an idea of something I want to whiteboard out with my buddies at work, or run by my mentor, or my boss"... Don't lose that! That's the critical thing. If you're going to switch out to a non-technical environment, you're going to get out of doors or you're going to do something hands-on, just keep a notebook with you. Keep something — keep either your computer notebook if you want, if you're that digitally inclined, but a good old paper notebook may serve just as well.
Let's see. The last thing I'm going to talk about is in that vein of indulging your other creative endeavors. I think, as I said, as long as you're exercising your creativity it doesn't matter how you're exercising your creativity. I think the creativity that you need to undertake your technical, your programming, your hacking projects will be well served by any creative endeavors that you choose to undertake. I think that in this case there's some additional benefits: being able to switch gears to something non-technical, to something profoundly creative can be relaxing as well, without giving up that creative, that constant creative practice. It can strengthen your creative muscles, but it can allow you to relax other aspects of your mind and maybe decompress, get rid of some stress, and allow you to come back to your day job or your vocation recharged, refreshed, ready to go. You're not going to feel like you're going to have to roll a boulder up the hill to tackle a problem. You're going to feel ready for it because you've been doing that if you're doing things creative. As I said, I think they all share that aspect of a challenge, an engagement, maybe a problem.
The things that I do, just by example: obviously one of the things I do is this podcast. I think it's pretty creative; I have to put music together, I have to put segments together. It engages different portions of my brain, and doing it on a weekly basis, the fact that it's reflective, and introspective, and talking about things I do on my day job, things that I do outside of my day job, I think definitely enriches and enhances all aspects of my hacker life.
I'm also very much into digital photography, getting much more into that. That has some interesting technical aspects, but they're secondary to the creative aspects. Really, I look forward to family occasions, to trips, to anything that will allow me to take out my little point-and-shoot party cam or my full — I have a Nikon D70 digital SLR with a set of nice Nikkor CPU lenses. Any chance I get to take those out, I highly enjoy that.
And I've just started writing fiction again. I haven't done that for a couple of decades, since high school. I've been listening to some writing podcasts, so I'm starting to get back into that. And again, not surprisingly, there's a lot of overlap in how I think about breaking down problems, writing elegant solutions, communicating intent — that's something we've talked about when talking about programming, how to do your best programming.
So hopefully it gives you some ideas when you realize that you have a "crisis of creativity" — let's put it that way. You're trying to solve a particular technical problem and you're not gaining any ground. Maybe that gives you some things to ponder, both in your daily practice and maybe at the time of when you're actually during that crisis, of how you can kind of kick-start your creativity, kick-start your brain, keep yourself in good tip-top shape, maybe some things you hadn't thought about as far as resonances between your technical and non-technical life. So as always, hopefully you got something out of that. I definitely enjoyed sharing that with you all.