I've recently been thinking about how my decisions early in life have done me good to put me where I'm at right now. I've certainly lived a very fortunate life -- been blessed with so many good things and been down-right lucky being at the right place at the right time. My 30 year journey to where I am now has been very interesting. I can pretty much say that the experiences I've had up to this point have very much contributed to making me who I am -- and that I regret nothing. Still though I keep thinking about what my life would be like if I hadn't made certain choices I did make throughout the years. There are a few choices I've made that I've stuck to and I keep thinking about wondering "what if I made a different choice instead" -- and the more I think about it, the more I'm happy about the decisions I've made.
Note: This is Part 1 of a series about my early choices in life which have gotten me to where I am today. If you're interested, please stay tuned for the next parts as I go through them. Thanks for reading!
BASIC or Turbo Pascal
Early in my life I had a very early encounter with the personal computer. It was between 6 and 8 that I had seen a handful of very distinct pieces of computer technologies that I had no idea would literally change my life. I remember (and this was ~1989 -- I didn't know that at the time of course) seeing my uncle and grand-uncle playing around with various pieces of technology, with the very simple end result: games. These were the Commodore 64 plugged into a color CRT TV, an Atari 800 plugged into a black-and-white TV. As a little 6 or 8 year old, I had absolutely no idea how these things worked, but I knew that it was cool. I saw the magic and I could not take my eyes off it. I wanted not so much to learn how it worked but learn what I can do with them.
Right around 8 years old I also saw my uncle (who is approximately 8 years older than me) programming the Commodore 64 before playing games. He would type up the page-long instructions for a few minutes (I was patiently waiting to see some game turn up) while he was reading them from a little blue book. I thought it was just something to set up the system, but I didn't know that what he was doing was actually programming. Once he's typed up the instructions the game would start and I got to see his friends taking turns playing some games. It was the most interesting thing I've seen so far in my life.
One day my grand-uncle let me have one of the books and told me that the instructions in the book are actually called code and that these were basically telling the computer what to do. At a very early stage in my life I had somewhat an understanding of games because I later got to play with the Atari 800 which had pre-loaded cartridges for games -- I distinctly remember playing Missile Command with my cousins on many lazy Sunday afternoons. The book though contained code that I learned was in the BASIC programming language. This was, to a 9 year old, like being told you can control what a very powerful machine did just by knowing how to tell it how to do so.
At around 10, my mom and dad had the awesome foresight that I really did like this computer thing and that I had a very deep fascination with it. At this time my grandpa had bought a Nintendo Family Computer and a whole host of game cartridges. I still have fond memories of him and I taking turns playing PacMan and Digger. Grandpa also introduced me to chess and we sometimes played one-on-one him teaching me the rules of the game as we went along -- I wasn't bad at chess, but I also wasn't good at it. He also had this cool electronic chess board with magnetic pieces where you could play against the computer. I wasn't so fond of the actual electronics but rather the conceptual side of things -- how did it know which piece to move and what the state of the board was?
Early recognition by my parents led them to buy a mid-range 386DX-based PC-clone mostly for my and my sister's education. They saw that this computer thing might actually be the future and that it might be an essential skill to have when we grew up -- and boy were they right! I was so lucky that the private school I went to started offering computer classes to everyone in the school as an actual subject. Of course, being a Montessori school it was all about play and became the highlight of the week for me. I picked up how to use the keyboard very quickly with the help of a mock keyboard made of Styrofoam that mom had helped me build. It also helped that I've seen this keyboard before on the Commodore 64 and was excited at the idea of being able to actually learn to use it -- and finally write my own programs.
Right around the same time all this was happening I happened to be able to watch re-runs of the US TV series called "Doogie Howser MD" -- about a 14 year old doctor who at the end of every episode actually wrote to an electronic journal. I was 10 at that time and I had absolutely 0 wanting to be a doctor, but I knew that I wanted to have that program he was using to write down his thoughts. Not that I particularly liked writing at that time, but I was excited by the idea that I might be able to write a program that allowed me to do the same thing one day. That became (and still is) my motivator program that I use when learning a new programming language -- I imagine how to write that word processor (which much later I learned was Word Perfect).
So armed with my actual keyboard that I can use pretty much at my whim at home and a few boxes of floppy disks containing the essentials (DOS, Wordstar, Prince of Persia, and other gwbasic-based games) I had literally the computer at my fingertips. There was a problem though: I had no idea where to begin. I've learned about the command-prompt in school and I've seen mom and dad struggle just like me to just begin understanding (let alone teaching me) about these things so I did what any self-driven enterprising and impatient 10 year old would do: try everything.
One of my uncles (my dad's eldest brother) does have an actual IBM PC and the manuals that came with the disks -- there were two volumes, the first were the basic commands for doing things like listing contents of a disk, running executable files, and brief descriptions of what some of the available executable files were for. I learned about formatting disks, copying disks, copying files, renaming files, etc. -- operation stuff, not really the kinds of things that I really wanted to learn. My mom and dad really wanted to help me so the first thing they did was find more reading materials for me.
My parents were just so happy that I was actually reading on my own volition that they didn't mind much that every time we went to Manila (which became somewhat a weekly pilgrimage of sorts for our family) to the malls, I went straight to National Bookstore to find anything remotely related to computers. At that time we didn't find much except for the ever reliable PC Magazine. Those were expensive though and there was no way mom or dad would get an actual subscription for it. So we only got those when we found a new issue or when I found an issue that seemed interesting from the cover -- by this time I knew the difference between a double density and high density disk that I can somewhat discern what was actually in the articles from the blurbs.
Then I found an article one day which had funny looking code that I've never seen before. I've been so used to reading code from that Commodore 64 manual seeing numbers to start instructions, but this code listing didn't have those. It had weird lower-case words strung together ending with semicolons instead of UPPERCASE directives separated by newlines. And there was no "goto"! I was thrilled -- I recognized that if only I found someone who actually understood how this thing worked that I could maybe learn to write my own programs using this language!
So what will any self-driven enterprising and impatient 10 year old would do: try everything. You have to remember though that the year was 1993-1994 and we didn't have landline service nor access to the Internet (I don't think the Internet has reached the Philippines yet at this time!) but what I did have was good relationships with my teachers at school. Armed with the enthusiasm of a 10 year-old who was convinced that he's struck gold, I bring the magazine to school and show it to my computer teacher. As luck would have it, my computer teacher at the time actually had a Computer Science degree and actually knew what it was -- that it was written in Pascal, and that he needed to have the magazine overnight so he can bring a copy of Turbo Pascal to the school and show me how it actually worked.
I was delighted! It was one of those moments in my life where I realized my obsession with wanting to actually learn to program computers got solidified. I had hope that I was a few steps away from being able to build that thing Doogie Howser was typing into to pour his thoughts out. This was the beginning of something amazing.
Sure enough the next day I saw the blue background of the Turbo Pascal 5.5 IDE right in front of my eyes, with colorful words of the code listing in front of me. My teacher was gently explaining to me that the code was there in the editor, that hitting F3 saved the file, and hitting Ctrl+F9 would compile it, and hitting Alt-F9 would compile and run it (or some such combination). So he did these and showed me the program running, the screen flipping from blue into black and the running program's prompt to choose commands to 1) enter words into the in-memory dictionary 2) enter another word to be checked against the words in the dictionary to find the closest one. Later in life I learned this was an implementation using the Levenshtein distance of the just-entered word and the words already in the dictionary.
The actual thing it did wasn't important. What was important here was that I could actually get a copy of the disk containing the Turbo Pascal 5.5 IDE, bring it home, and start playing around with it. This was the beginning of the journey. I had found a copy of a Turbo Pascal 7.0 book in the school library (yes, what?! Nevermind, I just did...) and asked to be able to take it home. I went through as much of it as I could and it was as foreign to me as the blue book of BASIC, but there was a difference: I could start playing around with it at home. I spent many nights and weekends trying to understand and make little successes with the I/O functions and my primitive knowledge of mathematics, memory, and things like these.
However, I was conflicted and had a choice to make at this point: did I want to learn this new programming language that seemed really complex for a 10 year old, compared to the structure that I've already deduced from BASIC? Was it worth the complication of having to learn Pascal on my own, possibly get some private tutoring from very few people who actually understood it in our area? Better yet, what are the actual odds that if I learned Pascal instead of finding a way to program in BASIC that I would actually be able to use it (Pascal) in a productive manner?
To put this in context, I was 10 turning 11. Summer was coming up and I really wanted to spend it learning more about programming. Whether it was going to be after "advanced" swimming lessons or reading books while in transit I was determined to actually learn programming.
So this early in my life I made a decision: I was going to pester my mom to enroll me, an 11 year-old to the local college for a summer course on programming with Turbo Pascal. It didn't matter what the actual subject matter was, as long as I would learn to use Turbo Pascal at that time. She only had to ask me once while we were at the local IT college's admissions office, after she had talked the administrators into letting an 11 year-old sign up for one of the special courses for graphics programming in Turbo Pascal. Her question went something like this: "Dean, are you sure you want to spend the whole summer doing this?" and my answer was as clear as day... yes!
Of course it wasn't that easy -- I had to show to the teacher who was going to sit down and teach me programming with the graphics unit in Turbo Pascal that I actually already knew some Turbo Pascal. So they took me to one of the computers, handed me the disks (one for DOS 5.0 and another for Turbo Pascal 5.5) and asked me to show them what I already knew how to do. That's when I did something that seemed really amazing to them: I programmed a simple adder, which took two input numbers, and printed out the sum, in something like 10 minutes from cold boot to working program. That sealed the deal, and in "famous last words" fashion, the rest is history.
My progression from 11 year-old wannabe programmer to novice programmer happened in the Philippine summer of 1995. The following year was my 6th grade and by that time computers became an actual tool available at my disposal. In the 2nd year of high school (8th grade equivalent) I actually have another computer programming subject and this time I breezed through the exercises and was helping my classmates understand the intricacies and subtleties of programming. I grew an appreciation of programming as a craft and a respect for computers as a tool very early on in my life that I still hold dearly today.
Fast forward through my career of interesting challenges and opportunities I'm now in Australia working at Google using C++, Java, and Python among other things. I'm so thankful that I chose the route of challenging myself with Turbo Pascal instead of sitting on my familiarity of BASIC that it's prepared me very well in understanding how the craft of programming is a matter of expressing your solution well using the power of the tools available at your disposal. Learning this at an early age fuels me daily to keep learning, keep solving problems, and keep trying to write that damned word processor in another programming language.
And guess what: I've managed to do what Doogie Howser MD does at the end of episodes -- by pouring my thoughts out into a computer for the world to see.