The year was 1999, I'd been out of college for a year and a bit, and I was working hard at my first proper programming job. I'd stayed in the same town, but everyone I knew had graduated and gone away, so there wasn't much in my life besides work, spodding and sleep. A former college housemate of mine phoned me up one day and asked how I was, and when she heard that the company secretary had been coming up to me to ask me to take time off work because I hadn't taken any in over a year and it was confusing the record-keeping, she told me that this was an insufferable situation and that steps would be taken. That weekend I found myself on a train to Lincoln.
In Lincoln I was staying at the house of my former housemate's godmother, who owned two horses: every day she would get up at the crack of dawn and go to muck them out. At first she thought I wanted to sleep in in the mornings, but I explained that clearing horseshit out of stables was so different to bug-squashing in object database servers that I would be happy to help. So every day, out I went and got very mucky.
I also learned to ride a horse for the first time. (I don't know whether I still could; perhaps it's like riding a bike and you never forget.) One of the horses was old and docile, but he wasn't not strong enough to bear me any more; the other was a proud Arab mare who induced some amount of fear to mount, especially since none of the helmets I could find around the stables fitted me, and that I had only brought sandals as footwear. But I learned to walk and trot, though I didn't stay long enough to learn cantering, and I discovered what people mean when they say dressage, and I went to a small local show in a small local field where all the horses had ribbons tied in their manes. It's a whole different world, I found, but then I suppose so is software.
I borrowed one of the ponies, whose name was Glorious George, and practiced riding him around the fields. One of the horsey people told me that George was a good choice because he knew where he was going better than I did, and wouldn't lead me into any danger. Then she said something that surprised me: The only way to learn is by hacking.
I asked her what she meant, and she told me that hacking is just fooling around. It's wandering around for no reason other than that you love riding the horse. It's trying all the things you can do riding a horse so you know what the horse and you and the pair of you together are capable of. And apparently it's the only real way to learn to ride a horse.
I was amused, because it's also the only way to learn how to use a computer, or at least how to program one. Do, please, note that I'm not talking about some kind of attempt to break into other people's computers when I talk about hacking: it's plainly immoral to damage other people's possessions without their consent. Rather, the hacking I mean is the older sense, finding out what your language and your equipment can do and pushing it to its limits because it's fun, because you're just fooling around, and it's the only way to learn. If you want to be a mediocre programmer, you can afford to hate programming. If you want to be a really good programmer, you have to push it to its limits and beyond.
The only way to learn is by hacking.