One day, I began to think about how I became a computer scientist/software engineer for a career. How did I get here? Here's what I recall.
My dad purchased several computers when I was younger. I can't remember all of them, but there was atleast one Apple II and one Commodore. At this relatively young age, these were mostly just for my sister and I to play games on. I have faint recollections of playing Stickybear, a Conan game, and some game related to cleaning teeth.
Perhaps the most important thing I learned with these early computers was how to touch type (a skill I learned through a program purporting itself to be a game). It's a skill that I now realize was useful for becoming a great programmer, because you weren't wasting time figuring out how to type.
I also was taught very beginning BASIC programming on the Apple II. (Again, I think through an educational program purporting itself to be a game.) I didn't understand much of it, but I technically did write my first code on it.
At some point late in gradeschool my parents also got our first machine w/ Windows 3.1. This was key because ...
Thanks to my friend Brian Soucy in junior high (where are you Brian, I've lost track of you) I began BBSing and participating in the local St. Louis BBS community (and later setting up my own BBS). This was the first time I began fiddling with computers in earnest and participating in an online community. I opened up a computer for the first time and installed a modem. Later I installed a soundcard because I wanted to play some games with better sound (non-NPD software, I swear!). Through BBSing I was learning more things about computers and figuring out many tiny things about them. Things like meddling with autoexec.bat, stacker, and defrag.
I was quite fortunate. A lot of schools didn't offer programming classes in my area, but thanks to Mr. Hottelman, my highschool did. I was able to take BASIC I, BASIC II, Visual BASIC, and C in highschool. I didn't learn any advanced algorithms or anything. My recollection was only learning bubblesort. I remember learning about pointers in the C class and thinking it was really dumb (for any recruiter reading this, I no longer think they are dumb :P).
The highlight of my work in these classes was a program I wrote in BASIC that displayed the periodic table of elements. You could move your arrow keys around to select an element and bring up details on the element. It was technically useless (any book could have given you the same information) but it looked neat and awesome. I believe the code is still sitting in a 3.5 diskette in my parent's basement.
Looking back, the coolest thing I ever did in this periodic table project was my intellectual "creation" of functions. I was never taught how to do functions in BASIC, I was only taught about gosubs (I was still young enough in my programming life that the concept of a function was not fully there). With so much repetitive code in my periodic table program, I wanted to condense code so I wasn't cutting and pasting all over the place. I eventually created a system where I would set global variables (I wasn't knowledgeable of local vs. global variables yet either, everything was global) to certain values. The globals were generically named things like val1, val2, val3, etc. I would set them and then call common gosub-routines that would know what globals to read and how to operate on them. I'm quite proud of the fact that I was able to figure out this way to condense code. (Note: My recollection is that gosubs in BASIC don't take parameter arguments. If they do, then the above technique was obviously very dumb. But I'm still quite proud of my ability to condense code this way.)
At some point, I also made a webpage for myself. Not something crappy like on Geocities, but a real hosted one. I made some fan pages for my favorite St. Louis sports icons like Ozzie Smith and Brett Hull. My Ozzie Smith homepage actually got some references in newspapers and sports magazines. All these pages are gone now, but I was able to find my homepage on the internet archive (Most of this was written when I was 15/16 years old, don't laugh!). While I didn't understand how the internet worked and how the pages I uploaded to some server would magically appear at a web address, this was my first introduction to FTP, Unix, and the chmod command (at the time, I had no idea why I had to type 'chmod 644' on these files).
Picking A Major
Well, with interest in the internet, making a homepage, liking programming classes in highschool, and hearing computer people made good money, it was easy for me to pick "computer something" for my career. The "computer something" was a tough choice though. I remember reading the descriptions for "Computer Engineering" or "Computer Science" and not knowing the difference. I think I ended up picking "Computer Science" because I didn't consider myself a hardware guy (other geek friends of mine liked to build computers, but I wasn't as into it). I got accepted to several schools and ended up chosing UIUC.
In hindsight, there were a lot of lucky circumstances along the way. What if I had never met Brian and installed a modem in Junior High? What if my dad never got an Apple II? What if my highschool never taught a programming class? Would I even have this career? What would I be doing if I didn't major in Computer Science?