# Programming Journey

I want to share the story of how I got into software engineering. I aim to present an autobiographical account while acknowledging that we all come from different backgrounds. One of the things I’ve always respected about working with people is the diversity of experiences we bring to the table. Sometimes, you need to know where you started to understand where you are.

My first encounter with a computer was an Apple IIe – we’re talking old-school here. It used a giant floppy disk you had to insert for anything to load. It didn’t have anything on it. As a kid, I didn’t know how to use it. This machine was more about pressing buttons and moving the mouse – although, come to think of it, I don’t believe it had a mouse.

My first real exposure to a usable computer was a 486SX. It had Windows 3.1 installed and provided access to the DOS command line prompt. Growing up in Hong Kong, we had access to more programs than most people in the United States would have. I won’t go into detail about that, but with that access came exposure to the various capabilities of the system. From games to drawing programs, I was fascinated by the interactivity of this machine.

I was interested in how it all started through discovery rather than mere exposure. I knew from using the DOS command line that you could run programs with .exe extensions, and the ones that didn’t run but could be read were text files. You could load these files into the editing program. It was just plain text, similar to how we can pack things in Notepad, WordPad, or our favorite text editor. When I loaded one of the executables into the editor, something strange happened – it would be filled with all these characters I didn’t recognize. We now know them as extended ASCII characters, but they were a mystery to me then. What was so intriguing was that, since my only comparison was a text file, I wondered how people could sit there and edit executables using these extended ASCII characters. How did it work? How did people decipher what was happening?

In middle school, I discovered that one of my friend’s dads was a computer programmer. At that time, I couldn’t tell you exactly what he did; as a kid, I never probed further to find out. But one day, in the elevator of our apartment building, when his dad was present, I asked, “Hey, I load these executable files into the editing program on DOS, and I see how things are written, but I don’t understand how someone could understand that.” He chuckled and said, “That’s not how that works,” and then essentially made an offer that changed my life. He invited me to their apartment, saying, “In an hour, come up, and I’ll show you how we do it.”

He spent an hour introducing me to QBasic, a programming language that ran on DOS. He demonstrated a simple program, compiled it, and showed me the instruction set for setting variables, managing strings, getting input from a user, displaying something on the screen, and, I believe, even using an if-else statement. It was one of those moments when someone showed me something, and everything just clicked. It didn’t mean I fully understood, but the concepts and discussion were like puzzle pieces that fit together – I just hadn’t completed the puzzle then. I’m unsure if that’s an apt metaphor, but that’s how it felt.

Over the next few years in middle school, given the limited information and resources I had access to, I absorbed as much as I could about programming. Remember, when internet access primarily came through terminals and text-based browsers like Lynx, I mostly tinkered on my own.

At that time, I was exposed to other things piqued my interest in software. Bulletin board systems (BBS) that used dial-up modems were prevalent. This allowed you to connect to someone’s computer, where they might have games to play, messages you could leave, or even downloads. At some point, there was even an email-based system called FidoNet that allowed messages to be passed through multiple bulletin boards. Naturally, I wanted to create my own BBS, but I had no idea how. Although I wasn’t successful in creating one due to the lack of accessible knowledge, I did get really good at playing Legends of the Red Dragon, the best BBS game ever.

Our school introduced a learning tool called HyperStudio Max. It is an interactive presentation program. It allowed you to create slides or “cards” with content, and you could have buttons to navigate between slides. It needed to be more advanced to develop full-fledged games. Still, it offered enough interactivity for middle schoolers to be productive and learn some basic programming concepts.

What really helped me in middle school, around eighth grade or the summer after, was when my parents allowed me to attend a computer summer camp. Besides being introduced to Monty Python, I learned a new programming language called Pascal. Like QBasic, it covered the same concepts of logic, inputs, and outputs. Still, it introduced more recent concepts of code organization, data types, and access to the display driver. Someone showed me how to draw lines and circles and animation techniques. I was blown away by the realization that we didn’t have to write text line by line. I also got introduced to Doom, Quake, and Doom 3 mods.

Being exposed to other people with the same interests opened the door for me, showing that I could continue to expand upon this. My next level of exposure came from a book I found at Barnes & Noble in San Francisco. The book, with a camel on the cover, was about Perl and written by Larry Wall. All the other programming languages I had learned before were quite simple but didn’t offer much room for minimizing or optimizing the code – I suppose “verbose” would be the right word.

The book I picked showed me that a language could be simple yet allow you to perform complex tasks with minimal code. I know Perl has a bad reputation for being difficult to understand. Still, this book introduced me to powerful concepts that I could never return to less versatile languages. Something that took just one line in Perl would require 30 lines in QBasic. Let’s be honest – regular expressions (regex) are incredibly powerful.

Perl was also my first introduction to web programming with CGI. Around this time, Netscape Navigator was a popular browser, and people were writing programs for this interface. Perl, as a platform, had CPAN for downloading modules, so you didn’t have to write all the code yourself. The CGI module was just there.

To learn some of these more complex programs for the web, I started by emulating other people’s programs. Open source was a thing, but it wasn’t as accessible as now with platforms like GitHub. There were scripts and programs people could use on their websites, like guestbooks or web forums, which I tried to build myself. Much of the code I emulated came from a website called Matt’s Script Archive – a piece of internet history worth checking out.

In my sophomore year of high school, I started taking all the programming classes I could, including IB Tech and AP Computer Science. I was the only sophomore to take that class at the time. It focused on C++, and while I understood the language in terms of syntax, I didn’t grasp how widely used and versatile it was. I didn’t understand the difference between a compiled language like C++ and an interpreted language like Perl. I knew I could do the same things in both, and one allowed me to write code more quickly. For the most part, the runtime of the programs I built, whether in C++ or Perl, was about the same, as I needed to do something computationally complex enough to push the limits of the code.

Since I had Netscape and such, my nerdom and geekdom became cemented as part of my life. My time in high school was spent on the internet, consuming programming knowledge and tinkering. I was up until 2 AM every night trying to figure out how something worked.

As the web became more popular, I started building not necessarily more complex things but projects that I would use more often on the web, including websites. Like many high schoolers at the time, I built websites for people trying to get on the internet to represent a business or have a presence. JavaScript had come out, showing that you could have minimal interactivity with websites. Still, even that tiny amount of interactivity was enough to create new things. My skills expanded when I learned to build my first HTML/JavaScript-based game, Dynamic HTML. It was a simple two-player game on one computer. Still, it was much easier than writing console programs, which spoke to the power and flexibility of web-based languages.

I built a series of themed web pages in my later high school years. One was a site that a few friends and I created to post weird things, which we thought was probably the equivalent of internet graffiti. Nothing terribly exciting, just high schoolers and nerds being weird.

Wayback Machine of thealienz.com

Another site I built personally, and I was really into the X-Files then, was a UFO community website. The original idea was to invite other UFO websites to join and become their host, creating one central place for people to visit. It was still a bunch of high schoolers, and no one had any objective evidence. Everyone was copying and pasting pictures they found from other places on the internet of aliens and UFOs. Still, it was a good learning experience on how to host websites, build a community, and share a general interest with people.

The third website I built was a fan website for South Park, which started in 1997, though I didn’t have access until 1998. This website was called killkenny.com, and we had three sections that made us an actual webpage. First, we had a hate mail section because we would get hate mail from people who found South Park disgusting and somehow found our website to complain about it. Others argued that we should give up the domain for Kilkenny, Ireland, which is not spelled the same. Another section we had was weekly trivia. Every time we watched an episode, we noticed that the creators of South Park had put in little tidbits that would go by quickly, so we would have trivia questions based on these details. The third section of the website was hosting the episodes before streaming was a thing. The only real contender in the space was a program called RealVideo, which had a low bitrate that made the files small enough for people with only modem connections.

Wayback Machine of killkenny.com

I learned a lot from building this website. I was still in Hong Kong then, and only a few people in Hong Kong could watch South Park or even understand the cultural references. But I designed, built, and maintained that website for three years and through a couple of iterations. I never thought much of it since I was in college and didn’t keep it up as an adult. However, when I discussed with some people my age about having had a South Park fan website called killkenny.com, many said they used to download episodes from there. This showed me the internet’s power, being continents apart and having people use my site.

So, there you have it - my adventure through programming and how it all began. From playing with QBasic to building websites and nurturing online communities, every lesson and experience has shaped who I am as a programmer and person. It shows how the constantly changing world of computer programming opens up endless possibilities for those who dare to dive in and create something amazing.