Posts Tagged ‘systems’

Systems and forgetting

2008/08/06/1849

In an inspired moment, I decided to reflect on an insight I had into human cognition and software engineering.

By way of introducing it, here’s a second insight: that insights frequently come about as a result of thinking about something you hate. In this case, I hate typing filesystem paths, because it’s really hard to remember. Even with tab completion, it’s a chore. It doesn’t matter if you use some sort of GUI browser to navigate – you still have to remember what “things” are inside which “other things.”

…it’s not just the files, but what’s inside them too… Functions, data… When you start dropping namespaces around things, to set up some barriers for a little privacy, then you have another place to lose things. Subclassing, cascading, inheritance… some borders become slippery waterfalls where code leaks into other places, and you lose track of it.

All the while, on any given day the main thing keeping you from losing a given function, or a given class, or a given file… is your memory. Human memory – the one in your head. The other thing is your documentation, because that can help you find or recall the location of the lost “thing.”

So here’s the insight: I work until I start forgetting enough things that I am slowed down enough to get frustrated.

I think this leads into patterns, templates, systems, and frameworks, because these are a sort of semantic compression that allow you to forget things. The more you “can” forget, the more new things you can try to cram in there until you get frustrated by forgetting them.

This also leads to more documentation – it’s code for your brain. The better the documentation and/or the faster the recall, the lower the frustration. The lower the frustration, the double plus the productifacity.