Fog Creek Software
Discussion Board


Most of the physical devices of a computer can be manipulated through code.  This is, to me, what makes it so interesting to write a program. 

Now, depending on the level of abstraction of the code, the physical device can often be ignored.  In other words, you don't have to know the in's and out's of how a video card works in order to draw a circle on the screen, but you do have to know various other abstractions, languages, API's etc in order to actually draw the circle.

When coding, I often visualize physical devices as abstract objects in my mind. 

For example, I always think of memory as being a rectangle.  Whenever I allocate memory, no matter what language I am using, I think of taking a chunk out of a bigger rectangle.

I also think of files as rectangular even though they are physically stored on a circular device.  This helps me to visualize the structure of the file.

At any rate, I'm wondering if anybody visualizes things like this and if you do, what object do you normally associate with things like memory or files or video displays etc.

Monday, December 22, 2003

I often think about this too, but mostly when trying to figure out what it is I'm visualizing. I always have these abstract visions of what the machine is doing, but there is no way I could describe them.

I think I'll go watch Tron now.

Monday, December 22, 2003

I hate to state the obvious abstract visualization (well, no I don't <grin>) for me is database tables.

I know for a fact that they're not really stored physically on the disk in big rectangles (rows and columns) -- but I simply can not think of them in any other way. I've tried.

I understand data pages, index pages, B-trees, I understand how the disk allocates sectors/clusters/tracks etc. They're in no way "table like" when you get down to the physical level, but it's all been abstracted away nice and neatly for me as a nice rectangular grid -- rows by columns -- and it's actually *hard* to think about them or visualize them in any other way.

Then again, maybe it's just a personal problem I have...

Sgt. Sausage
Monday, December 22, 2003

Here in the UK the publishers Usbourne produced computer books for children that featured pictures of friendly little robots running around inside the computer.

For example, variables were explained with a picture of robots placing pieces of paper into labeled boxes.

Now, whenever I imagine my computer doing anything it involves those little robots running around.

Ged Byrne
Monday, December 22, 2003

Me, I see memory as a long unidimensional string. Not sure how it can be seen as 'rectangular'.

Monday, December 22, 2003

I always picture objects (as in instances of a class) as shiny spheres- kind of like the health and invulnerabilty spheres in Doom.  Not sure why- maybe b/c "object" starts with an "O", which is round?

Monday, December 22, 2003

Despite being an extremely visual person, I actually don't visualize stuff when I'm coding.  If I do bother thinking about it, I tend to think of memory -- and database tables -- as a long, one-dimensional string (occasionally wrapping it as necessary).  For 2D arrays I'll think of a spreadsheet, and beyond 2D... actually, I never go bigger than 2D.  And for hierarchical stuff I will visualize things as a treeview, but in all cases it's because I've spent so much time working with other people's visuals for those concepts that they map easily.

Actually, that's one of the things I *like* about coding; it's so abstract (to me) that I can't really visualize it, but somehow I understand it anyway.  (=

Sam Livingston-Gray
Monday, December 22, 2003

For some reason I always imagine class variables as the bottom of the Grand Canyon and instance variables as big pillars of rock rising up from the bottom.

Jeez...I can't believe I just admitted that in public!

John Topley (
Tuesday, December 23, 2003

I always think of variables like the wall of mailboxes in a post office (must be the "address" association). 

Tom Hathaway
Tuesday, December 23, 2003

*  Recent Topics

*  Fog Creek Home