I just read this great post on Derek Sivers’s blog: There’s no speed limit. (The lessons that changed my life.) You should go and read it right now because what Derek says is so inspirational and so true. There is no limit to what you can achieve if you are motivated and inspired. I want to tell you how I started programming, hope you find it relevant and interesting.
I was 14 when my girlfriend at the time told me that her uncle got a home computer. It was Yamaha MSX and it was one of the first home computers in our town. Of course it had games and I started playing until my girlfriend’s patience ran out. After playing games for a couple of days I was very curious how it all works. I asked and asked, and after a while was given MSX BASIC book, I assume just to stop me from bothering everyone with all those questions 🙂 I still remember that it was a xerox copy, pages and pages of poorly translated text with some code and pictures. We didn’t study programming or computers in school, so it was all very new, strange and foreign. But I was captivated. I read the book couple of times (don’t remember if I understood much after the first reading) and after several days I started writing a game. Graphical card game. In MSX BASIC. Using pen and paper. You see, I had access to the computer only few times a week for an hour or two. I had to be ready to type in and run my code when I get to the computer.
So here I was, writing BASIC code on paper and tracing it line by line with my index finger 🙂 But it turned out it’s hard to add something in the middle of your code when you write it on paper. I started to leave every other line empty so I could put another line of code in between but it wasn’t enough. I didn’t know (or didn’t understand) about subroutines/functions but I figured out GOTO. It was great! I could put GOTO on an empty line and execute additional code written on a separate piece of paper. I know all programmers are laughing reading this, but I was happy that I didn’t have to squeeze several lines of code into one line in the notepad anymore!
Showing playing cards on the screen was hard. You just can’t hold all those pixels and coordinates in your head. But I found the way. I got sheets of graph paper and drew X and Y axes with screen coordinates on them. I could put dots on paper so they form a picture I wanted, then check coordinates of each dot and enter them into my program. It worked! Graph paper was my video memory simulator 🙂 Later I figured out how to copy small picture from one place on the screen to another (sprite graphics) and things became much easier.
I don’t want to bore you with other details but in a month or so my game was working. It grew to 40 pages of BASIC code in my notepad and it was a mess but it worked! It was shuffling a deck using random number generator, displaying cards, making decisions how to play and even winning against human opponents from time to time! I was so thrilled! By the end of that summer (I started at the beginning of summer break) I got crafty and even programmed the game to cheat a little.
Now if you ask anyone they would say that learning programming like that is just not possible. I would say the same thing myself if it wasn’t me who started that way. But back then nobody told me it’s impossible, so I did it. I wasn’t lucky enough to have a teacher to challenge me like Derek’s teacher but I was motivated. No, I was MOTIVATED. I was INSPIRED. I wanted to make it work. It was hard and it was challenging but I loved every minute of it. And over 20 years later I still remember the thrill of seeing my program work for the first time. That’s why I became a programmer and that’s why I write code every day.
Derek Sivers is right. There’s no speed limit. You can do so much more than anyone expects if you’re passionate about it. And it doesn’t matter if everyone says that you want to do the impossible.