While I don’t feel like I really learned “real programming” until my first quarter of college, I had been trying to learn to code for a long time before that. Here, I’ll lay out everything I tried, what worked, what didn’t, and how it affected me when I started doing “real programming.”
When I say “real programming,” I mean writing code in text in a real programming language. While I do think that other types of programming, block programming for example, can be valuable, my goal was to get to “real programming” and I think that’s what really sets you up to succeed.
The beginnings, StarCraft
The first thing I did that would classify as programming was making my own StarCraft maps when I was in 4th grade. I loved playing StarCraft, and even more, I enjoyed playing multiplayer online on Battle.net. Online, I discovered custom games that people had made and got really into them.
One of the main ones I liked was Hydra Ranchers, which acted just like a regular game, except that every few seconds, your army would spawn a Hydralisk that could attack your enemies or defend your base. This added a wrinkle to the game that made it much quicker, since everyone had a virtually unlimited supply of units that always kept coming back. I thought this was a cool premise, so I decided to make my own version of this custom game. StarCraft comes with a map editor that allows you to create a custom map and apply custom triggers to the game. I explored this and made modifications to farm different types of units and at different rates. From there, I made custom games that had lots of different tweaks to them including gameplay edits and types of chest codes that you could explore.
Creating custom maps was my first foray into seeing that the computer could be programmed. Even though the StarCraft map editor had a limited set of customizations you could make, it was very powerful for me to realize that I had the power to make the game my own. It was exciting to know that I could actually make my own versions of games, change things I didn’t like, and improve things I did.
Starting with StarCraft, I went on to explore modifying (modding) lots of different types of games and creating my own.
Up Next, Websites
HTML isn’t really a programming language, but it’s still creating on the computer, so I’ll talk about it. In middle school, I discovered several websites that would allow you to create your own websites.
The first one I used was Homestead, which gave you tools to put a website online. I remember an extra credit assignment in 5th grade when we were studying Greek Mythology. The teacher offered extra credit if we designed (drew on paper) what an online store would look like for the god, Hephaestus, who was a god of fire and metallurgy.
After having just discovered Homestead, I decided that instead of just drawing a design for a website, I’d actually make a website instead. I made a site on Homestead and turned it in for extra credit. I didn’t end up getting any because I didn’t follow the exact instructions for the assignment, which was to turn in drawings, which is the most “middle school” thing I can think of. Luckily, I didn’t let that negative reinforcement affect me, and I continued on my learning path.
The Most Influential Week of my Life
The summer after 7th grade, I went to a summer day camp in LA at my cousins’ school called Techno-tainment camp. It was a computer camp, and I signed up to learn video game creation, which I was extremely excited about.
Looking back, this week of camp is possibly the most influential week of my life.
We used a program called Multimedia Fusion (MMF), which was a drag and drop program for designing and creating video games. In just one day, I came home having programmed my own version of pong and having started making a Mario-style platformer. I was hooked.
After showing my parents what I did, they agreed to buy me MMF for use at home, and I spent the whole week working all day at camp and then coming home at night to keep working on my games.
That week, I made a pong game, a platformer, a space invaders style shooter, an animated screen saver, and a top-down adventure game. MMF was a perfect balance of giving you the tools to make game creation easy but also forcing you to actually define the behaviors, actions, and triggers that make the game work. It comes with a library of sprites and images to use in your games, so you do not need to be an artist, which I was not.
While I didn’t know the concept at that time, it taught object oriented programming, since every character or item in the game was an object that had properties, responded to events, and interacted with other objects in the game. I learned how to set properties, define my own events and triggers, all in the context of game programming. I learned a lot and realized my dream of creating my own video games.
The camp director, Danny, also played a huge role because he was so supportive of my learning. I tried to soak up as much knowledge as I could because I knew I’d wanted to continue learning on my own after the camp.
This week planted a seed in me that continued to grow and blossom into exciting and unexpected, wonderful things.
My Own Video Game Creation Camp
Over the next year back in Dallas after learning to make video games, I spent a lot of time making more games and got pretty good at it. I was confident in my abilities in MMF and thought that I could even teach it to others. Some family friends were interested in learning, so I set up some private tutoring sessions with them to teach them MMF.
After a few sessions, I realized that I had a lot of interest and came up with a new idea. While the camp I went to was in LA, I didn’t know of any similar camps in Dallas. I decided to start one of my own.
I’ll discuss the full story of starting my camp in another post, but as it related to my programming education, it was a great next step that reinforced my own knowledge of game creation and MMF because I not only had to figure it out for myself but also know it well enough to explain it to others.
High School: My Attempt to Learn “Real Programming”
Backing up a little bit, I took an elective class in 8th grade on Visual Basic, but my teacher didn’t know Visual Basic, so I really ended up only copying the sample programs, changing the names of buttons, and running them. I didn’t really learn anything.
When I got to high school, I was really interested in continuing to learn more about video game creation, and I explored several other tools that made it easy to create your own games. I made 3D games and maps using the Hammer Editor for Half-Life and the Unreal Engine, which provided the scaffolding to make my own mods to popular 3D games and make them my own.
However, I knew deep down that the video game creation I did was not “real programming.” I knew that someone had to make the games originally and didn’t rely on the tools I was using to make games.
My school didn’t offer any coding classes, so I needed to figure out both what I wanted to learn and how I wanted to learn it. Luckily, my school’s computer teacher was really supportive of me. He didn’t know programming himself, so he couldn’t actually point me in the right direction, but he was more than willing to create a class just for me and buy me whatever resources I needed.
I took a custom created class with him every trimester of high school and picked what I wanted to learn every time.
Through some relatives and friends, I managed to visit several video game studios, including Activision and LucasArts. In those visits, I learned that they used C++ to code their games, so I decided that that as what I needed to know.
My teacher bought me a C++ book, but between needing to use Visual Studio and having no instruction, it didn’t work very well for me. I was able to get some simple programs running that printed things to the screen and asked some questions, but I got totally stuck once the book got to arrays.
To me, arrays were a square of dots that you drew on a piece of paper, so it made no sense to me what an array was in terms of programming, and the book didn’t bother to explain what they were or why they were useful. I understood what variables were, so I really should have been able to figure out that arrays were just a special type that held a list of values instead of just one value, but the book was pretty bad, so I gave up.
Giving Up On Real Programming
I really wanted to learn “real programming,” but I had a problem. Books were unhelpful, and I didn’t have a teacher or a friend who knew more than I did. Most of all, I had become really good at creating video games using tools like MMF, so it was hard for me to justify learning a “real” programming language like C++ when it was really hard and not very fulfilling when I had the ability to make really awesome video games.
Despite this, I still tried learning “real” programming languages because I knew that if I didn’t, I’d never get to where I really wanted to go. It just made it much more difficult.
After giving up on C++, I tried to learn Java, but it wasn’t really any easier. I tried using Flash ActionScript, but all I was really able to do was download an example of a game that someone else made in Flash and modify it. It was a start, but there was still so much missing.
I also learned how to program my calculator, but that was limiting because I was only really writing programs using the calculator type pad during math class. I was able to write some cool math based programs to help me do my homework, but I didn’t feel like I was getting anywhere that exciting.
In the meantime, I kept making more video games and exploring tools but feeling unfulfilled.
The summer before I started my freshman year at Stanford, I began planning which classes I’d take, and the Intro to Programming class, CS 106A, was a 100% must take for me.
When I got to that class, everything clicked. The professor was fun and explained to concepts clearly, and the support system was in place for me to actually learn the programming.
After a couple of weeks, I realized that all of the concepts I learned when making games in MMF were the same concepts in Java, and all I had to do was learn to translate what I already knew to Java.
During the third week of the class, the assignment was to make a basic Breakout game, and I spent hours and hours of extra time making power ups, cheat codes, difficulty levels, a menu, and many other extra features that weren’t required.
For the end of the class, I recreated a platformer that I had built in MMF during high school called Donut Dude. I spent maybe 40 or 50 hours outside of class making every feature I could possibly think of and entered it into the class’ end of quarter competition, which I won!
CS 106A scratched an itch that I’d had for nearly 10 years, and I spent my winter break getting ahead in CS 106B because I couldn’t wait to continue learning.
From there, I decided to major in CS, and the rest is history. I just couldn’t believe it took so long to get there. So much of my own experience is motivating my current work at CodeHS. I’m making something I wish I had when I was in high school.