Thursday, March 22, 2012

The visual life of a programmer

I've been doing a big push at work this week, lots of late nights, and I woke up this morning with all these images flashing through my mind.  They were not images of anything in the physical world.  They were my mental models of the software I was working on.

As I observed more carefully, I could see I had a mental shape for all the constructs I was working with, and I saw these energetic flows move between these shapes as the entities interacted with each other.  I had a physical structure in my mind and I was interacting with it, moving things around, optimizing, finding where the issues were.

It was quite amazing to me, that I could hold this entire mental model in my head and work it through its paces.

And then I pictured all of us at work, each of us sitting at our desks, mentally moving our images around as we worked to get our software to work.  Here we were, an entire construction crew, but instead of using trucks and cranes and power diggers we were using our fingers, just our fingers.  Creating entire worlds with our fingers, managed and maintained in a mental world that nobody sees and I can't show it off to anyone.

Engineers of prior generations created beautiful structures that everyone could walk through, experience and admire.  With software, people do get to experience what we create, but only the result, not the structures themselves, the complex, and often beautiful design structures behind the product, which have life and weight and form, but only within the mind.

So when my children wonder what I do, all they see is me in front of a screen using my fingers.  They can not see nor appreciate the rich, beautiful (OK, and sometimes hacky) structures that I am creating.  I've always been sad about this - I can't say "see, see what I'm building, ain't it cool?"  It's a strange feeling, my entire career has been creating things nobody can see but me...

Saturday, March 03, 2012

My life as an artist



I was talking with a friend last night who is a wonderful artist.  As he shared what it meant to lead the life of an artist, I found myself filled with a bit of longing.  I have a somewhat romantic, artistic side to myself, but here I am as a career programmer.

Then I thought about it some more, and began sharing with him that actually, building software is a very creative act for me.  He asked in what way.   I said that I love that feeling of letting a design reveal itself to me.  I said that the use cases and tests that I put *around* a system are like the negative space that define the system.  As I add more test cases and refine the design, a form starts taking shape.  That experience of revelation, and of uncovering the elegance in the raw marble that is the initial design, is incredibly satisfying.