I'm a big fan of theories. I think a theory is an opinion that you don't have to have thought through entirely. -Daniel Kitson

I have a theory that there are three 'levels' of using a computer. Its best expressed in terms of how you use spreadsheets, but I think it applies just as well to any other application.

  1. The Computer as electronic paper. You put your numbers into a spreadsheet, but still do the calculations with a calculator. In other words, you see a spreadsheet as a table of numbers – which it is – but don't understand why a spreadsheet is anything more than just a table. (Similarly, you might not see much of a difference between a word processor and an electrical typewriter.)

  2. The Personal Computer. You use spreadsheets as spreadsheets, ranging from using simple formulas and functions to things like macros and VBA. But your output is still just a table of numbers – if you leave your formulas in there, its to make it easier to follow your working at a later date.

  3. Computing systems. You make spreadsheets for other people to use. This is where you get into 'developer' territory, where your formulas and macros aren't just there for you to remember where your numbers came from, but to help other people figure out their own numbers using the patterns that you figured out.

Now, although I consider myself a fairly advanced computer user (in Excel terms, I'm comfortable with macros and VBA, I can write my own functions, and I will usually be able to find a way to make the computer do the hard or repetitious work so that I don't have to.) But the limitation I tend to hit is that I almost always work in a 'personal computer' mindset – probably a result of being largely self-taught, or helping people to solve specific problems or accomplish specific tasks (as opposed to helping them set up systems.)

So, one of my goals is to shift my mindset to "systems" kind of thinking – to write clean and tidy code that others will be able to read/understand/reuse, and to share more of my work (and what I'm learning along the way).

The motivation here is purely selfish – I want to find the kinds of problems that I won't find by staring at my own work. And by putting things out into the open, I'm hoping that it will apply a certain level of pressure to 'finish things' in a way that, with a bunch of files saved on my own desktop, I don't currently feel.

Now, this 'theory' is probably more of a reflection of my own igorance and lack of experience than a unique insight into computer users' minds. (ie. I say nothing about what actually happens in a computer, in terms of CPUs, boolean functions, logic gates, cache, registers and so on.) I'm sure that someone who works on hardware would be wincing at the fact that I don't so much as refer to what happens inside an actual machine at any stage.

But, this is about using a computer – not understanding it. (In the same way that you don't need to understand the chemistry of petrol or the physics of the internal combusion engine to drive a car.) And I'm trying to figure out what I need to do to get better at using computers – not (just) writing code, or using particular applications. Because its the kind of thing that I don't think any number of Excel or VBA books or forums can really help with.