Last month, I mentioned that I've been taking a class in Ruby on Rails, a programming framework that powers tens of thousands of websites worldwide. Why go back to school? A couple of reasons. First, I want to be a better co-worker. I'm a designer, but I rely on programmers to bring my ideas to life. By learning to code myself, I think I can make things easier for all of us. Similarly, I want to be able to build things on my own, without having to bother a programmer.

I have no doubt that I'll be able to accomplish both, once I get better at Ruby. But the course has already changed me in ways I never would have expected: Learning to program a computer is teaching me how to be a better communicator. I didn't see that coming.

We think of computers as smart and powerful machines. But your goldfish is smarter. Unlike a goldfish, a computer can't really do anything without you telling it exactly what you want it to do. A computer doesn't have a mind of its own--it needs someone else's to function.

Programming requires you to break things down to their absolute essence before building them back up again. For example, if you wanted a computer to make a sandwich for you, first you'd have to explain what a sandwich is (and maybe what it isn't), what ingredients go into a sandwich (and maybe which ones don't), how to assemble it, and every other little sandwich-related thing. When programming a computer, you can't assume a whole lot. It knows next to nothing.

Learning to program is a humbling experience. It forces you to see how well you actually understand things in the real world. Do I really know sandwiches well enough to explain them to someone (or, in the case of a computer, something) who has never heard of them? Yeah, probably. But what about more complicated things?

Once you start thinking this way, you realize how much you assume. It's easy to convince yourself you know something until you have to explain it to someone else. Then the truth comes out.

Learning how to program has taught me that I need to explain things more clearly--and not only to machines. I used to assume a lot and rush through things. But now, when I describe something new to someone, I find myself slowing down, breaking the idea down in my mind and explaining it piece by piece. I'd rather be asked to speed up than risk going too fast and skipping over the fundamentals that really matter.

For example, just yesterday, I was telling someone where I lived in Chicago. I said "Wicker Park," and I figured he knew where that was. He was polite, so he didn't stop me, but I could tell by his face that Wicker Park didn't mean anything to him. So I stepped back, slowed down, and explained where Wicker Park was in relation to somewhere else he knew in Chicago. Now it made sense. The example may seem trivial, but if I wasn't learning to program, I doubt I would have had the self-awareness to slow down.

I can see this helping me all over the place. Let's say I'm trying to explain Basecamp, our project-management software, to a new customer. It's so easy to assume this person knows what project management is. But maybe she doesn't. Or maybe she has a different understanding of what project management means. Who knows? But I do know that if I assume nothing--ironically, if I approach her not as a human being but as a computer--I'll have a better shot at making a clear and deep connection. And in business, nothing matters more than that.