I'm an artist. The vast majority of my thinking and planning time happens with a sketchbook or drawing program open in front of me, and me rapidly generating rough sketches and/or story notes. I have learnt over the years that, sure, I can sit there staring off into space trying to work stuff out in my mind's eye all I like, but things go a lot faster if I work it out by creating a rapid feedback loop between what I'm sketching out in front of me, and how I want it to look when it's done.
Sometimes when I am very stoned I can enter a state where I'm holding a nearly complete image of the whole drawing in my mind's eye and "tracing" it onto the paper. It's a pretty cool place to be in. But it's super fragile; interrupt me and I'll lose it, with an incoherent fragment of a drawing. So normally, I don't work like that at all - I'll quickly draw the roughest version possible of the important parts of the drawing, and iterate on that until it's done, or until I decide this approach is not working, and try another one. My ideas are in tangible form as soon as possible.
When I'm writing (I mostly make comics, so I get to draw AND write), it's the same thing. As soon as I have the germ of a baby idea that sounds okay, I pull out paper or Evernote or whatever and write it down.
Interruptions still suck. Interruptions can still take time to recover from. But I don't have to spend a half an hour building up an intricate mental model of what I want to do afterwards from scratch, because I have a pile of roughs and notes that documents the process of getting to where I was.
So my suggestion, from how I practice my craft: As soon as you realize you're getting into complex territory, open up a notebook and start scribbling questions and answers and inspirations to yourself, draw little diagrams (or big ones). And mess up your copy of the code with a ton of comments - what's this section doing, what do I need to investigate further, here's some pseudocode for how I might fix this, etc, etc. Document as much of your thinking as possible, put as much of the headspace you're generating outside of your head as you can so that it's easier to pick up the pieces after an interruption.
It depends on what I’m working on, of course, so I think its essentially when problems become too abstract, then I can’t easily translate my in-my-mind understanding to paper/screen.
I did, however, enjoy my time playing with Max/MSP (a visual programming language) for the exact reasons you mentioned: I could think “out loud” so to speak, at least to a larger degree than I can in text. Pseudocode helps, a bit, but I’ve always found boxes-and-lines better to focus my thoughts. Incidentally, whiteboards are one of my favourite programming tools :)
This includes a mix of writing code, drawing on a whiteboard, sketching on paper, and taking point form notes.
Even as I get writing placeholders for unit tests, it often leads to thinking of another case of situations that goes back to inform the high level design.
I think also the motivation can be a factor. When I start getting into this mode, it's highly motivating to keep going. If I get so interrupted as to lose some of what I had figured out, I find it can be hard to build up that motivation to even get going again. It's actually demotivating to start into it, run into a new problem, then realize I had actually already thought of it and the work I just did has to be changed - whereas if I had kept going the first time that wouldn't have happened.
If it was just the size, it would actually still be manageable with a notebook -- but it's not just size. Every single character on every single line matters, to some non-negligible extent. If you could condense that into a notebook, you'd condense the code in the first place.
Imagine you (and your ancestors) had written five hundred novels. Now you're making a significant change in the storyline. You need to be DAMN SURE you didn't miss anything anywhere, or created any plot holes. You can either take a million notes as you go, defending against all possible interruptions, taking obscene amounts of time; or just try and focus and get it done.
What would you do?
I'll try to make this post more useful than self congratulatory by echoing: Notes notes notes. Whiteboards, sticky notes, and a giant perpetually updated todo list in an email draft (discount-evernote :) ), have been my saving graces, even while my memory gets worse as I age.
As soon as we have an idea we immediately open up an IDE, and then get a GIT repository going, and get Yarn to prepare all the libraries we need, and get a quick little back end database api set up, and then a quick little front end framework and then we are...
finally ready to start experimenting.
`cp -R` is a thing.
` alias initblock='function __initblock() { mkdir $1 && cd $1 && degit 1wheel/d3-init && gistup -m $1 --private --no-open && subl . && hot-server; unset -f __initblock; }; __initblock' `
git clone https://github.com/myaccount/proj_template.git newprojI've been using permutations on the same dev stack for backend stuff for--well, before I wrote a new one[1], about five years.
This sort of middlebrow thing isn't good or helpful.
In programming terms the tangible are the concrete things... the code on the screen in tangible, but when you start inferring meaning, concepts, origin, relationships etc in your head (or the reverse - doing that before you write some code) - that stuff is the quantum probability field that you need piece and quiet for, when that guy comes and asks you a question it collapses and you start over - if your very lucky you might get some state back and it wont take quite as long.
But here's the thing... the more complex the problem the longer you need to stay in that state - building it up larger and then refining it and so on, and the more important quiet becomes. Sometimes I don't mind noise if i'm just hoping from one "tangible" bit of code to the next doing some fairly mindless debugging that doesn't take a whole lot of insight, but most of the time i'm not.
But it's hard we all need to communicate eventually, constant meetings are no good, I find the best thing is this new instant messenger trend... not because I like being pestered but because I can turn off the notifications and then go and check it when i'm done on my current chunk of thinking.
you mean email? :-p
If you aren't available, you can just collect little messages - better still the person who sent them can edit and refine their messages after they realise you aren't immediately available - you can't really do any of that with email.
What I still don't quite get though, is why anyone should be paying for this.
That's why personally I'm a big believer in functional visual/feedback based tools for programming, like touch designer, grasshopper. Strictly for code there's Light table, but it's pretty far off of real visual programming tools. These help a lot in offloading some of that brittle house of cards construction you have to store in your head.
Iteration does help improve on the inferior version, but the risk is that you might be iterating on a local maximum instead of the more global maximum you could've conceptualized.
I'm happy to see that I wasn't entirely out of my mind...
The hard part of our job, and what takes the majority of my time, is creating solutions to problems. And a lot of that time doesn’t even involve typing. I have to look through documentation, other people’s code, logs. And just think. The typing starts when I have an idea to try out.
Interrupting that process is like detailing any other creative process. The problem is not the time I have to take to answer a question, it’s the time it will take to get back into the headspace the interruption took me out of.
In my experience, even if I get interrupted playing a piano score that I practiced hard, I still remember the whole notes and I can easily come back to the state, because the main thing to remember is where I have stopped playing and this easily fits in my working memory.
Opposed to that, when I'm in creative mode, I heavily rely on working memory and when I get distracted, new info comes in and my working memory easily blows up. I forget what I was thinking about and cannot come back to the state before I got distracted.
Interruptions are the same for me coding as they were when I was troubleshooting a difficult network issue. There's so much to consider and as you're iterating through your mind interruptions at the wrong time can be brutal... there's just so many ramifications to consider as you cycle through possibilities that if you're loose your train of thought you really do have to start at point A again if you're going to be careful about what you're doing.
In particular "habitual" responses being improved by having an audience and non-habitual responses being hindered.
https://en.wikipedia.org/wiki/Social_facilitation#Attention_...
I wouldn't say creative work and "create new things that don't exist yet" is what's defining for expensive interruptions. Rather, whether you need to keep a lot of stuff in mental cache or not. That is not true for a large subset of design work.
Edit: My personal experience is that interruptions during design work is, in contrast, almost welcome. Once you come back to your designs after an interruption you often see things in a new light and catch stuff you previously didn't see.
A lot of seminal jazz was created on the fly in fairly rowdy venues. But even in that genre, there are performers who can't stand interruptions: http://slippedisc.com/2014/07/keith-jarrett-is-disgraced-in-...
I like to think of it like this: A musician can play for a busy stadium, or a chef can cook for a busy restaurant, if they are playing a song they rehearsed or preparing a dish they made many times. But to write that song or create that dish in the first place, like hell you could do that with all that noise and distraction.