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.

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.

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.