For the past couple months, I’ve been feeling stuck. Every time I sit down and try to get something done, I can’t. I find myself “dreading” the thought of going through all the troubles involved (working out some minor low level details, etc). So instead of doing work, I’d procrastinate on youtube or facebook or what have you.
I tried to pin down why I was having this mental block that prevented me from doing work. I thought: maybe I’m worrying about the code quality. I know that my code won’t be perfect and elegant, and that disturbed me. Maybe that was one of the reasons. Maybe I was worried about my “reputation”; it’s not that I have any reputation online (I’m pretty much a nobody), but when potential employers are reviewing my work (say, on github), they may think I’m a messy programmer when they see my messy code.
So, I made a mental note (I also wrote down these thoughts on a file) of these worries and how they could be stopping me, but that didn’t quite get rid of my problems. I still felt “stuck”. I still couldn’t get much done.
And then one day, I decided to do some “doodling” (after I read an article on HN about how doodling helps your brain when you’re bored). I doodled random non-sense for about a minute, and then I found myself sketching a UI for an iPad app that’s been in my head for a while now. I didn’t just draw some boxes; I also wrote down some notes about how various elements should behave. Then after that, I found myself sketching out another version of the same app but for the web. I didn’t only sketch it, but I also sketched out the basic structure of the code behind it. I basically wrote a high level view of the code that would make it run. Then I worked out some of the mathematical details. All that on paper. All these ideas have been in my head for a while, but I wasn’t able to express them as code; I was stuck; I had a mental block. But now, I expressed them on paper. This got me excited, so I went to my laptop right away and started translating this stuff into code.
This time, I didn’t have anything to worry about. I didn’t have any psychological worry about how things will turn out. I was basically code-monkeying my sketch. I wasn’t thinking while I was coding, I had already figured things out on paper, so my coding consisted of me looking at the sketch and writing it down in the programming language I was doing my app in. I was plagiarizing from my sketch.
There were a few details which I didn’t get right on paper, but they were easy to fix. And in very little time, I got a working prototype of my idea.
And then I realized that this is the way to go. And I also realized what exactly was happening, and why sketching is the solution.
I’m an INTP, and I think this applies to xNTP types. I don’t know if it applies the same to xNTJs.
What happens when I have lots of ideas that I want to express in code is the following: I have a rough/vague picture in my head representing the structure of my program. As soon as I start writing code, I have to concentrate on the details of the code I’m writing now, and this means that there’s no more room in my mind for that general “picture” I just mentioned. This is a problem because: I don’t want to lose this picture in my head; if I lose it, I won’t get it back easily. It’s basically the same thing when you are in flow and then suddenly you’re interrupted. You need a lot of time to build the house of cards, and you can’t afford to let it fall apart; it’s mentally devastating.
This is where sketching comes in. When you sketch the idea on paper, you have the entire picture in your head, and you’re translating it on paper. Because it’s just paper, you don’t have to worry about details; you’re not writing code; you’re just sketching; there is no need for your mind to do any context switching. After you layout the general structure, you can then dive into some corners and work out some of the details in a very rough/general manner. Again, because it’s on paper, you get to control how deep you want to dive in, and because the structure is already written on paper, you don’t have to rebuild it in your head; you just look at it again and delve into the next detail (if needed).
Then you can translate this into code, and you will not have the problem of context switching. Why? Because you’re not worried about preserving the “mental picture” of the general structure of your idea. This way, you don’t have to think a lot while you’re coding, you’ve already done the thinking and produced this sketch. Now you can just follow your own sketch, like a code-monkey.
Why is this related to psychological type? Well, It’s related to how you organize and express your thoughts. In the classical MBTI/Jung theory, INTPs organize logical structure internally (introverted thinking) and express ideas and intuitions externally (extroverted intuition).
When thinking, you get alot of ideas, and you want to express all of them. The problem is, if you try to express them in code directly, you can’t, because it will take quite some time to express each idea, and working on one idea at a time kills you, because you have all these other ideas that also want to be expressed, at the same time! And you know that if you start detailing some idea before the other ideas got a chance to be expressed, you’ll lose them. So, by righting down a sketch of these ideas on paper, you can express all of them in a rough basic form. This way, all of your ideas get to be expressed at the “same time”, and this clears up “cognitive space” in your brain to start working on the details of each idea.
Like I said, maybe this doesn’t apply to INTJs, who constitute about half the programmers/hackers out there, but I’d be interested to know if any INTJ tries this and finds it helpful.
This sketching business is not entirely new to me. I used to do it a lot in the past. In fact, now that I think about it, most of my non-trivial programs in the past were sketched out on paper first before I started coding them, otherwise they probably wouldn’t have been possible. I just didn’t realize how important/pivotal it was. I don’t remember how/when did I stop doing it. Maybe somehow I got the impression that real hackers just sit down and churn out code.