Programming as Play

What is the difference between programming for fun and programming for work?

I spent much of today revamping this here website.

The act of revamping was basically indistinguishable from what I do on a daily basis for work:

The big difference is I didn't get paid for what I did today. And what I did today didn't benefit anyone except for me. Funny how those things go together.

The other big difference is that what I did today was fun.

Which is not to say that work is not fun (it is). But this was a qualitatively different fun.

Play is purposeless. Perhaps that is its defining characteristic. Purposelessness is fun, refreshing, renewing.


I also installed Live Reload for the first time. It's one of those technologies that I've vaguely felt like I should check out for a long time. But I've never actually gotten around to it.

Now that I'm using it, I can't imagine life without it. A few simple configuration steps are going to save so much time.


I learned a bunch of other things today. The details are unimportant.

What is more important and interesting is this:

So much of programming is gaining knowledge like I gained today: random knowledge I had no direct intention of learning, knowledge I learned on accident due to a bug.

But that knowledge, no matter how accidentally gained, will permanently inform my use of git (one of the core tools of modern programming) in the future, allowing me to do things I couldn't do before.


In a vague way, I've been feeling like I've been learning less this year working as a paid programmer than I learned the previous year when I was studying on my own and working on my own random projects.

Programming-as-work vs. programming-as-play.

Are there ways to make programming-as-work more like programming-as-play?

One thing: haste can be the enemy of learning. With programming, it's easy to get to the point where "it just works" and the immediate objective has been achieved.

It takes time to explore--to explore all the configuration options, to explore alternate configurations, to explain why they don't work--or just how they work differently.

Maybe there is something about programming-as-play that simply cannot be replicated when programming-as-work.