Home
Журнал длительных оЖиданий
(откровенно о самом)
DON'T WAKE UP THE PROGRAMMER! 
10th-Feb-2009 02:48 pm
mkrot
I started to receive request for English version of this little essey I posted some time ago to my diary.
I won't be able to literally translate it for you as I'm lazy. I'll just try to tell this story again in English with the promise to be as close as I can to original one.



It was a long time ago since I started to think of a ways how can I explain to different sorts of people just how the programmers work. To the people that aren't involved in any similar sort of activity or simply NOT programmers, NOT Software Developers as they are called these days. What happens in that geek mind when his eyes seem to be staring at the monitor and fingers sporadically cluttering over the keyboard ? I found it difficult - if not entirely impossible - to explain that sort of thing to just anybody.The whole human population seems to be split apart into those who do know how it works and those who don't have any idea. Obviously those who do wouldn't want to know any explanation except in the situation when they themselves are in a position requiring them to come up with an explanation. Those who don't have a clue on what happens in a geek’s mind may just not be interested at all - or have no chance to do that as it is all over their mind as they seem to think.
This year during my annual holiday I finally came up with an idea which I believe may shed some light on a subject. It may just allow an ordinary person to get an idea on what is going on in a geek’s mind when it works.
Enough with prelude! Here it is - how the programmer’s mind works:

The work of a programmer is practically A DREAM.

Sounds silly and simply untrue isn't it?

Well. If you would like to get yourself in programmer’s shoes and start to understand his work from the inside – then that is a concept you need to follow. You should simply imagine that The Programmer IS SLEEPING when he is WORKING.

Product of a programmers work is a dream, the vision of the sleepy night, the fantasy. It is written in a special language for electronic device to continue its existence when programmer is awake or switches himself to another dream.

You may want to think of it if it was like a programmer just taking a task or an exercise, writing some program and the task is solved. It is actually never working this way.

Let's take a maze for example. There is a task for the programmer to come up with an algorithm of finding the way out of the maze. When a programmer is working on this task he isn't just a God's Finger showing the directions to a little girl lost in a great maze. He isn't that girl or the walls of a labyrinth either. He is actually all of that in a same time. In order to solve the task he must BECOME the labyrinth, the walls, the lost little girl and whatever else may just came along with it. It is not a figure of the speech - the programmer is literally SLEEPING and DREAMING that all in his mind.

When you watch the programmers work from a side you are effectively watching a person sleeping and dreaming. Can I ask you if you are getting to sleep very easily?

Most people take the process of getting to sleep very seriously. For many it requires a special sermon to get to sleep. Some people do it quick, some do it very slow. Some even have trouble getting to sleep when they need to, so they take pills or make themselves some special tea. Basically there is a very tiny percent of people who are getting to sleep as easy as a snap of two fingers.

The same story is true about programmers. Process of beginning to work for them is just like it is for an ordinary person to get to sleep. None of them can just start working like most people can't just tell themselves - "Start sleeping" and become knocked off. There is also no common way of doing it as there is no common way of getting to sleep.

Some who count sheep in their mind live here in New Zealand. Some find it absolutely necessary to watch TV to become sleepy. Some can't switch themselves off without reading. There are all sorts of breathing, counting, attention dissipation, special pose practicing and even more bizarre ways of making yourself just to get to sleep. I In a programmer’s world, it’s the same procees for getting to work.


So what is it to be done in situation like that? How do we deal with all those high-salary professional sleepers, you may ask.


Here it is. Let's say you are NOT a programmer and somehow directly or indirectly your are interested in getting productive results from a programmer. In this case you are interested in understanding of how to deal with your programmer more effectively, so he would be able to produce the best productive results possible.

Imagine that there is EVERYTHING at stake and it all depends on results of your sleep. Everything - your life, the life and future of your children, your career and mortgage payments, literally everything. It is even more - there are lives of people flying in aircrafts, their money on banking accounts, their career and their personal little secrets in social networks. It is ALL depends on how good your sleep is going to be. Not just one sleep. EVERY ONE and EVERY NIGHT. Every night you are going to sleep knowing that it all depends on how good you are going to sleep today.

Imagined?

That is exactly how it is for programmers! Literally.

It is just for you it looks like you only asked a simple question. Just asked what the time is... just that.

How about I ask you what time it is sometime around three in a morning?
Nothing biggie isn't it? Just asked a simple question. I just asked. You just answered and then you can keep sleeping.
Not a biggie. Just once in a while I'd ask you something not very difficult to answer. Something like - "Have you checked your E-mail recently?" There is nothing to worry about, just yes or no answer would be sufficient and then you can go get your sleep again.

Is it now easier to imagine such situation?

Do you still remember that EVERYTHING is still totally dependent on how good your sleep is? It is still in account, no one taken that condition away. If you sleep is bad - people will die. And I am still asking those simple little questions time to time during your sleep.

Feeling like dreams a sweat now?

How about sleeping and just a little bit watching TV. AND just a bit listening to radio. AND just a little bit checking your E-mails time to time. AND may be sometimes helping me getting some stuff from grocery. Can you do that?

Would you be able to do it every day, five days a week, forty eight weeks a year?

If you want life like that - come apply for a job to our company. That will all come to you just like dream come true.


But of course it is not everything is that tragic. There are people who can sleep a little bit almost all the time. I knew some drivers who could fall asleep whenever opportunity presents itself. Just like battery-powered toys they can switch themselves on and off whenever it is required. You probably have experience of waking up driver like that when lights turn green and you happen to be behind. You just give it a little honk and it wakes him up, then you both go.

So are the programmers. There is a category of them which works just this way. They can easily get themselves to work at any moment. The downside of it is that when you sleep that quick and that "shallow" you don't dream much. You may have a little bit of dreaming but there wouldn’t be much to remember about after that. So it is in programming world.

The majority of software products are produced by that "shallow sleepers", not only because the majority of programmers prefer it that way. It is rather because the majority of people dealing with programmers don't let them get to sleep that deep. "Annoying" is today’s most popular way of management in software production industry so it keeps the great mass of software developers awake... awake when they actually have to be asleep to get the work done. Hence there are gazillions of poor quality software around.

I personally cannot work in environment like I described above. Yes I am just like you need to perform my little ritual to get me to start being productive. You can't get to sleep without reading a page in your novel. I can't get to be productive without reading my Livejournal a little bit, checking on news and just staring at my monitor with no obvious practical result. If I interrupt you getting to sleep procedure you would have to start it again. So do I - when interrupted I have to start all over again. You can't get to sleep progressively doing something in parallel, it can only be done in one go. So it is for me when I get myself to start working. Sometimes you just can't get to sleep at all fighting with your pillow and blanket till very early. It happens to me as well, I can't sometimes get myself to work at all because of no obvious reason.

I hope you can understand that analogy even if you have never had experience of being a programmer. I hope that when more people will understand this simple analogy between the programmer’s work and dreaming it would help them to understand what to do about it. It may help people to understand where the good high quality programs are coming from and why there is a vast of poor quality software around.

Do you want good programs?

Do you want your software developer husband be successful and earned all the money in the world?

Do you want your employees finally achieve the best you want them to?

There is a simple recipe for you:

DON'T BLOODY WAKE UP THE PROGRAMMER TOO OFTEN!

Update: Thank to [info]_scorp for a help with editing!
Expressions 
10th-Feb-2009 04:25 pm (UTC)
Made first page on reddit, nice
10th-Feb-2009 06:10 pm (UTC)
Please excuse my curiosity, but...
What is "reddit"?
10th-Feb-2009 05:53 pm (UTC) - Great analogy
Anonymous
Just got here from reddit.
10th-Feb-2009 06:32 pm (UTC) - Re: Great analogy
Welcome!
10th-Feb-2009 06:23 pm (UTC) - boohoo
Anonymous
in soviet russia, everyone is sleeping when they're working
10th-Feb-2009 06:32 pm (UTC) - Re: boohoo
I wouldn't dare to say for everyone because when you say something of everyone you are saying it of yourself first of all.
10th-Feb-2009 06:45 pm (UTC)
A programmer friend linked to this... and what strikes me is how close this description is to what I do! I am a landscape architect - I spend a lot of time designing places. If they are done wrong, there are big issues - some of it's reserach based, but a lot of it is unconcious.

I do my best "dreaming" first thing in the morning. I have my little rituals. I can't be distracted otherwise I lose the dream. Etc.

Good stuff. Thank you for this - it helps me understand my programming friends more... and makes me realized why we have so much in common, even though on the surface it looks like we do not!

N.
10th-Feb-2009 06:51 pm (UTC)
Thank you for stopping by!
It is a great pleasure to know that you're being helpful.
10th-Feb-2009 06:51 pm (UTC)
I haven't even read the whole post yet, but this is all so true! Fantastic! I'm forwarding this to my mom, my girlfriend, and my CEO.
10th-Feb-2009 06:52 pm (UTC)
I greatly appreciate your feedback.
Thank you!
10th-Feb-2009 07:08 pm (UTC) - been there, read that :)
Anonymous
I suspect you already read this right?

http://www.paulgraham.com/head.html

and

http://www.paulgraham.com/distraction.html

Lol Lolovici
10th-Feb-2009 07:20 pm (UTC) - Re: been there, read that :)
Thank you for those links!
I haven't red any of those before, but I see they certainly relevant. They are bit more practical and more straight to the point then what I was trying to say here though.

Don't get me wrong but I am not trying to establish any new instructions on how to do things properly. I strongly believe there are enough of that already.

My point was to make it possible to get into intellectual workers shoes for those who aren't there yet.

I'm sure we all eventually be there anyway so being prepared for that could be of help I's pose. :))
10th-Feb-2009 08:12 pm (UTC) - So True
Man, I'm a programmer working at MS right now, and that is SO TRUE! Writing code is very, very similar to dreaming. A lot of us here put headphones on and listen to music; that helps. I find trance music puts me into that "zone" more quickly than anything else...

But the constant interruptions; yes; those can really hurt the quality of code.

BTW, Reddit is big stuff with US programmers, kind of like slashdot and digg combined, only better. You should definitely check it out.
10th-Feb-2009 08:18 pm (UTC) - Re: So True
Thank you for your feedback!
You might be right and I should check that stuff out. However I am so in love with what I am up to. At this stage I'd rather not break my dream with possibly mind-catchy new inspirations. :))
10th-Feb-2009 08:33 pm (UTC) - DREAM NOW!!
Anonymous
DREAM MORE!!! DREAM MORE QUICKLY!!! Surely with everybody dreaming in there, more can get done. Here is another dreamer... that should make you all dream faster!

There is a lot of truth to what you say.

:-) Thanks.
10th-Feb-2009 09:41 pm (UTC) - Im a dreamer/programmer
Anonymous
From the moments my school teacher said i was a dreamer until just now when i've finished reading the article - i have realized my ultimate calling - i should have be born with a keyboard/mouse at my fingertips.

So ... how can i get a job. at your company.

Rich.
10th-Feb-2009 10:04 pm (UTC) - Re: Im a dreamer/programmer
Next time I'll write about how to get job for dreamers. Dream job I suppose it should be. :))
11th-Feb-2009 01:44 am (UTC)
Cool, glad to see this post made it to reddit! Very funny article which I could 100% agreed to before I start agile programming and test driven development. I found out that agile and TDD help me to maintain my programming pace even being distracted by customer support and micromanagement. Still like your post though!
11th-Feb-2009 01:59 am (UTC)
Thanks for you comment!
So called "agile" programming is cool on surface level and I'd be the last one to disagree with it's effectiveness. However deep down the core it is absolutely inapplicable as I strongly believe. "Agile" works for short turn-over ping-pong style SDLC, which I suppose it IS by the very definition.
(no subject) - Anonymous Expand
11th-Feb-2009 02:37 am (UTC) - :)
Anonymous
I am beside my boyfriend right now as he's working - this is a very good description of how the mind works to get things done.
11th-Feb-2009 04:31 am (UTC) - It bothers me
Anonymous
It bothers me when people wake me up at work when I am not programming. Since I am not a programmer, I sleep most of the time. People are always saying "wake up" and "stop sleeping!". This interferes with my potential.
11th-Feb-2009 05:01 am (UTC) - I Agree!
Anonymous
Couldn't agree more, stop bothering us when we are sleeping!
11th-Feb-2009 06:30 am (UTC)
Anonymous
Bloody awesome! Have to forward the link to all my friends :) Thanks!
11th-Feb-2009 10:55 am (UTC) - Other ideas
Anonymous
I am a programmer, and I understand your article 100%.

But I am trying to thing about other jobs out there like this. Or even worse.

I am thinking a rope dancer, for instance, or the guys that used to build sky-scrappers "the old way".

You go there every day. And a fraction of a second of distraction and you are dead. Not interrupted a bit. But dead. Physically dead!
11th-Feb-2009 06:11 pm (UTC) - Re: Other ideas
I got the impression, thank you. I am originally Siberian and what it means to be close to the skeleton with the scythe I'm very much aware of. Nevertheless - being dead is inevitable result for each and every one of us. It is the final score what counts, not the fact itself. That's what I believe. :)
11th-Feb-2009 05:19 pm (UTC) - Meditation, Sleep, or Hacking
Anonymous
I often equate the "zone" closer to meditation than sleep. I've always wanted to hook up sensors to programmer's heads and find out what their brain waves looked like while in the zone.

Great article, beneficial for others to know what the process feels like...
12th-Feb-2009 09:49 am (UTC) - :)
Anonymous
Moj kollega anglichanin tolko chto zapostil etot link na intranet companii,
ne bespokojte programmistov! Pravilno!
12th-Feb-2009 11:36 am (UTC) - Use a better translation
Скажите ему, чтобы взял человеческий текст на не-ломаном английском и поменял - здесь:
http://alexthunder.livejournal.com/290612.html?page=2&format=light
/* look for "greenkrokodilla" on page 2 of commentaries to the original post */
12th-Feb-2009 12:16 pm (UTC) - Translation of ORIGINAL ESSAY - part1
I went on vacation for the first time in my life.. some people never do that, I guess.

I do not know if it's good at all - to stop working for a month. I have not figured out how it's going to affect my productivity. But - while on vacation I got something what I had thought about a lot and could not figure.

I've always pondered about how to explain what is happening in my head when I am working to people that have never done this kind of work. How NON-programmers could imagine the work of a programmer and realize - finally - what is going on and what to do with it

So, I grokked it, finally. Possibly because I switched myself off for a whole month, while still keeping it at the back of my mind that I would have to go back to programming again soon.

OK, that's more than enough for an introduction.
Here it is:

------HOW A PROGRAMMER WORKS-----------

A programmer's work is SLEEP.

That sounds ridiculous, right?

But if you want to imagine what a programmer does when he's working, that is the easiest way to do it: he's asleep.

The product of a programmer's work is the same as the product of a sleep, it's a dream, a chimera. A dream recorded in a special language and handed over to an electronic device for it to continue it when the programmer woke up or has simply changed his dream and is dreaming another one now.

You might think of course that a programmer just picked up a problem, wrote a program and the program just solved the problem. Nope.

Consider for example the problem of finding your way in a maze. A programmer who is solving it is not a God's finger which is leading a tiny lost child along an unfamiliar path straight to the exit. He's not that child either, and not the labyrinth's walls. He is not the exit which the child must fund. He is all these things at the same time.

To solve a problem the programmer must become the labyrinth, the exit, the lost little girl and that pointing finger which is directing her somewhere, and those little pebbles she is dropping on the road to mark the ones she's already trod. And all this the programmer IS DREAMING during his work.

I am not being metaphorical. This is what you are DREAMING - LITERALLY. The programmer working on a problem becomes a virtual inhabitant of the world of chimeras he is creating, which in some way are similar to the objects and conditions determined by his task.

Watching a working programmer from the outside is the same as watching a sleeping man. Well, do you drop to sleep right away after you decided to go and lie down?

Most people perceive going to sleep as a certain ritual. For some the ritual is short, for others it is rather long and complicated. People differ. Some need to read before sleep, someone else cannot have it unless he does 30 sit-ups before bed. Anyway, going to sleep is different for different people, not like SNAP! - and you dropped off. Though some probably can do that too.

The same very thing happens with programmers. The process of warming to your job is exactly the same. A programmer can just sit down and start working no more that you cannot tell yourself "hey, you, you go to sleep NOW!" - and shut off.

Some people count sheep, which, having been called to life by this magic, have to go on living somewhere here in the hills of New Zealand. Some phantasize. Some listen to their breathing, and my neighbour swallows a cup of a special kind of flower tea - and bingo.

This stuff changes with time, too. Jumped in the sack and seeing sweet dreams in 5 minutes today. And tomorrow you are turning right and left, for one hour, two, three - and nothing comes out of it. That is how it happens in programming, literally the same way.

SO, WHAT DO WE DO ABOUT IT?
12th-Feb-2009 12:17 pm (UTC) - Part 2
SO, WHAT DO WE DO ABOUT IT?

Let's say, if you are NOT a programmer, and you have a vested interest, directly of not, in the outcome of his work, you have to understand the above more or less.

Imagine that your dream determines your life, the life of your children and all things really. Imagine that the quality of your dream defines whether your children go to a university or cut the grass for living. Imagine that how beautiful, successful full and viable your dreams are determines the lives of passengers in planes and the quality of service in supermarkets, and the main thing, that it determines is how full your pocket will feel on the day you get your salary.

Have you?

This is how it looks to us, the programmers, EXACTLY LIKE THIS.

You might think you just came to ask the time.

Let me come to your house at 3 a.m. and ask you the time. So what's the big deal? You've just fell asleep? So what? I'll just ask you, you'll tell me the time, and then you can sleep on. What's the fuss about?

That's for you to understand it better, with this example

Keep in your mind that your dream determines ALL! All things about. Whether you sleep well today will predermine how much you will eat tomorrow. Will your daughter marry or not. Will your son grow into a looser or achieves something in his life. All this hangs on how you sleep today.


And now you are about to start this dream. This very dream that is the cause of everything, and you know it well.

And tell me how about sleeping and talking a tiny bit, help a little to solve a school math problem for your son, glance to a TV from time to time, and go fetch a couple of things from a corner store?

Are you sleeping well now?

And now think what happens to a programmer who is approached 2-3 times each hour with questions, demands of help or to give advice, fill in some paper, check that and not to forget about something else.

Could you live like this EVERY DAY?!
12th-Feb-2009 12:18 pm (UTC) - Part 3
Could you live like this EVERY DAY?!

That is you go to sleep every day KNOWING how totally important this sleep is, and how much all depends on it and even more than that. And during that sleep you receive all this crap, reminders, rememberings, phone calls, irrelevant conversations 5 inches from your ears. And this is going on EVERY NIGHT.
How do you like to live your life like this?

Want to try?

Come and start programming in our company. You'll get it in full.

Well, not everything is so tragic, of course. There are people who can be dozing all the time. There are drivers like this, he stops at a traffic light, and dozes off. You know, they have to be honked at a bit, to get restored to life. You must have met them.


Yes, there are programmers like that too, They are always close to sleep, A minute no one is around they fall to sleep. Not too deep, just a little. No big and colourful chimeras can be produced that way, but small and slightly hazy ones, those that do come easier in that kind of sleep

That is how most of programming products are created in the world. They are written by people who either do not understand what they are doing, or by those who simply cannot physiologically get deep sleep. Therefore the results.

Because their attention is constantly diverted. Because they are bloody AWOKEN all the time. Because people do not understand you are asleep and all their fucking "managerial" activity does is HINDER the work. Most NON-programmers simply do not realize this.

I hope that after seeing the analogy between programming and sleeping people might, just might see better how to treat programmers and where good programs come from ultimately. They will realize, that this stinking LiveJournal I am reading - is what I am reading and writing BEFORE MY SLEEP. Like you, you cannot close your eyes unless you dive into that paperback, or goggle at you TV. You can not, right?

Neither can I until I fill myself with LJ, go to the toilet, brush my teeth, and dothewholenumber. And if you do not let me finish the process, before my deep sleep happens, if you interfere with the ritual, I will have to start it all over. Like you have to start counting your sheep in your head if I awake you right when just started sleeping

You want good programs? That your programmer huspand was successful and got all money in the world? That the programmers in the team you manage did produce them well?

Then here is a simplest recipy to follow:

DO NOT WAKE THE PROGRAMMER TOO OFTEN!!
14th-Feb-2009 11:51 am (UTC)
YES! You hit the nail right on the head.

I LOVE those days when I get to "sleep" and have the really vivid "dreams". It drives me crazy that so much of my programming life is spent up in the shallower levels, where I really have to fight through each problem. I feel *stupid* when I am not deep enough in "the zone". I feel nothing but the programming when I'm in "the zone" but when I come out of it, I know I've done something really worthwhile.

My best dreams are when I have headphones on and sing along with the music while I code away. When I'm in an office, I don't sing along so I won't disturb other people, and that's a bummer, but, you know, life's tough. :)
14th-Feb-2009 08:59 pm (UTC)
Thank you for your feedback!

Yeah, life is tough. However it doesn't have to be for those who honestly and genuinely do their work. It is in our power to change it.
1st-Mar-2009 11:36 pm (UTC) - AWESOME
Anonymous
I am a program designer but not a developer. I know what I want it to do but my partner and friend does majority of the coding. From time to time, I will start sending him message after message of ideas and flutter his brain with everything except what he is working on. Today he sent me a link to this article. WOW, you have nailed this baby dead on

Thank you for taking the time to write it

Cheers
Hazzaa
2nd-Mar-2009 12:26 am (UTC) - Re: AWESOME
You are very welcome!
17th-Mar-2009 12:47 pm (UTC) - Very nice post
Anonymous
Very nice written; I like the metaphora.
Good job

Regards from a developer :-)
17th-Mar-2009 06:03 pm (UTC) - Re: Very nice post
Thank you for your support!
17th-Mar-2009 06:43 pm (UTC) - Nailed It!
Anonymous
Thanks for the piece. It was brilliant! Analogy is by far the best i've come across for us programmers! lol, now to get our bosses to read this!
17th-Mar-2009 07:55 pm (UTC) - Re: Nailed It!
Thank you! I'm glad to know all that writing wasn't just a waste of time.
20th-Mar-2009 03:38 pm (UTC) - Translation
Anonymous
Hi alexthunder,

I'm asking for your permission to translate your text to german and to publish it on a german social media site. I will credit you and link to your original.
21st-Mar-2009 04:11 am (UTC) - Re: Translation
Hereby you have my permission.
God bless you!
Page 1 of 2
<<[1] [2] >>
This page was loaded Nov 26th 2009, 6:32 pm GMT.