Computer programming is one of those things that I've never managed to stop doing for long enough that anybody noticed. Once, I took a two year break because I was tired of the kind of code that I was writing, but as soon as an opportunity presented itself, I got back into it.
It's scary. If you add up the number of hours that I've spent in conversation with editors, compilers, and debuggers over the years, I don't doubt that they add up to more time than I've spent in conversation with human beings. Don't get me wrong here, I love conversation with human beings. But writing, creating, and especially writing code has something magical about it.
When I was a kid, computers where the stuff of legend. Someone had seen one, or knew someone that worked with one. But never someone that owned one. When I was 12, our high school allowed us to spend one day at a secondary education institution to see what kind of options were available. I visited the 'higher technical school' in Amsterdam, where they had an open day, and there they had a computer. When the doors opened, I made beeline for the computer department and hung around there all day long asking questions until they got a little tired of me. So one guy said, "OK, we have to spend some time with these other people, but I got you a gift, here is a copy of 'Byte' magazine, it's all about computers, you can take it home and read."
And so I did. That first copy of Byte magazine got read to pieces. I even knew the words of the ads by heart. Even if it didn't give me a computer, it, at least, gave me access to the terminology, which was a step ahead. I knew a little bit of English, so reading that Byte over and over again probably improved it quite a bit. A couple of articles had listings with them, computer 'code', and I couldn't make heads or tails of them, I wasn't going to get much further without access to a computer. And that was pretty unlikely to happen, or so I thought.
At the time, my 'hobby' was electronics, and one of the things I did was to help a hobby club where kids built little electronics circuits. The guys that ran the club thought that it was quite funny that one of the 'kids' was helping the other kids so they helped me get parts at a discount. One of the two worked as the 'store manager' of a Radio Shack a few kilometers away from where I lived. In January 1978 he told me that they were going to get a computer in his store and in March it was delivered. A smallish gray box with a little black and white composite monitor that displayed text.
Now, having just turned 14, I was too young to legally have a 'Saturday job', but I could hang around the store as much as I wanted and play with the computer on the condition that if a customer was present that I'd either disappear into the back of the store, or help showing what the machine could do (on the premise that if a kid can use it, adults can use it for sure). The machine came with a very wide book full of cartoon like drawings that were supposed to help you learn how to program. It took me 4 tries before it made sense to me, the first were spent on endless frustrating hours, typing in the exercises and making them work.
It was like typing in some kind of magical incantation and then something would happen on the screen, but I wasn't the fastest learner, it took me forever until it made any sense at all. And then, one day it clicked. I don't know what exactly caused it, but it was as if the light had been turned on. I suddenly understood the program that I'd just typed in, and all the ones that I'd been typing in before it. And the next program I typed in was one that I came up with, not one from the exercises.
Now, this wasn't 'programming' at any level of complexity, my 'first' program asked for two input values and it printed one output value. You'd barely recognize it as a program, it looked like this:
10 INPUT "R1?",R1 20 INPUT "R2?",R2 30 PRINT "RV", 1/((1/R1)+(1/R2)) 40 END
Well, that's not much of a program (and experienced programmers will spot several problems with it), but it has all the components of a 'real' program: input, computation, output. It actually does something useful. You can see a bit of my former hobby in there. I used to 'recycle' electronics parts, scavenge them from discarded electronics that I found on Wednesday and Friday mornings on the kerbside when the garbage was collected, and if I didn't have the 'right' resistor, then I could try to make a value closer to the one that I needed by plugging in endless combinations of resistors to see what value their 'parallel' configuration would yield.
You could save the programs on the TRS-80 to a compact cassette tape and this was the first program that I ever saved on 'my' tape. Never mind that you could type it in just as fast as load it, I felt that this one deserved to be saved.
I'd taken up a news paper route, saving all the money that I made with it in my 'savings account', which was supposedly for when I would go to college or something like that. But I had different plans with my savings, I was saving to buy a computer. The TRS-80 was expensive though, well over 1,000 guilders at the time. Then, in 1980, just after I turned 15, 'Tandy' (that's what Radio Shack was called in Europe) launched the first ever pocket computer.
Actually it was a 'Sharp', but I didn't know that at the time. It was a 'real' computer in the sense that you could write simple basic programs for it, and save them on a cassette tape as well, if you had the cassette interface, which at first I didn't, so I had a green copybook that I wrote my programs in, so I could type them in again later. Its biggest feature to me was the price, 549 guilders, or less than half of what the bigger machine went for. I plundered my savings account and bought it.
Now, this put me in a very bad situation at home. My mom seriously disagreed with it. OK, I had earned the money, but I was supposed to save it for 'later', whatever that meant. We got into a big fight and I was told to bring back the computer, but I pretty much refused to. It was my money, I had earned it, and I wanted to spend it like this. It took months for that storm to blow over. Meanwhile, instead of programming once every week, I could now do it every day. Little by little the programs grew in complexity. From 4 liners to 10 liners, sometimes even more.
At one point I ran into a new phenomenon, 'out of memory'. The tiny computer had only 2K of 'RAM', so it wouldn't hold a program larger than that, and in fact, when you tested it, it turned out that there was even less than that available for the actual programs (about 1.5K).
Whatever it was, the bug that had bitten me would not let go. I was programming all the time, day, night, in school between the lessons, and sometimes even during the lessons, since the machine was small enough to be mistaken for a calculator. Programming has an addictive component that is very strong. As you get better, you gain more expressive power, and you can do more complicated things than you could do before, thus solve more complex problems.
At the time I was a fanatic chess player and my 'dream' was to build a chess program. Of course that was a fairly advanced thing to do, in the end my knowledge of computer programming, and my theoretical knowledge of chess, the memory of the computer, and the available time, they all limited me to writing a program that could do one of two end games (KQ vs K and KR vs K).
Looking back over all those years (I'm 45 now), I don't think there ever was a time when I wasn't programming or thinking about programming in some way or another since I gained that first little bit of insight into what makes a computer tick.
It's like a drug. I'm still fascinated by it, even almost 30 years to the day later I still read about languages, new ways to solve old problems, all kinds of developments in software and hardware, as though it is the first time that I hear about these things. It is a fascinating world, the world of software.
It has changed tremendously over that time, our 'small' computers of today are more powerful than the biggest 'big iron' that you could buy when I was a kid. Your average cell phone has more storage, computing power, and bandwidth available to it than a mainframe of 30 years ago. Programming itself has changed, from 'batch' programming to more and more interactive code, 'web' development and so on. But it has also - in essence - remained the same, small building blocks are piled on top of each other to create more complex constructs, which in turn can be used to create yet more complex constructs, and so on.
That process, the act of programming, is something that I need to do. Whether to make a living or to be fooling around with some idea, the bug is in my system and I highly doubt that it will ever leave me permanently. I can see myself taking a break, but I can't see myself ever stopping. All I'll end up doing then is to change my mode from work to play and eventually that will lead back to some form of work.
If you can't program yet, or if you think that it is 'complex', rest assured, there is nothing that can't be learned. Programming is not like playing a musical instrument, and it is not something that you have to have a genetic disposition for. The pay-off is in how much time you spend plugging away at it. Over time you'll get better, and at some point it will click. It may take a while (it took me more than a year to learn 'BASIC', which is a very simple language) and I gave up several times only to go back to it once more. Eventually, I got it, and I'm sure that everybody that can do basic arithmetic and that is able to put together a precise list of instructions on how to make coffee or a pizza can learn how to program.
Maybe you won't be the next Donald Knuth, but that's not what it takes, all you need to be is a little bit better than you were yesterday and to keep doing that for a long time.
Beware of that bug though, once it bites you, you'll be hooked for life.
From Jacques Mattheij's blog