So when do I actually learn how to make games? ( When the nature of Game Programming finally clicked for me)
The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
My name is Jonathan Jennings and right now I am a mobie game programmer deeply entrenched in a love affair with Unity. I have worked on 4 published titles , 1 title waiting to be submitted and approved by the client and yet another in development right now .
However before any of this in the summer of 2008 almost immediately after my highschool graduation I enrolled at Devry University . I had dreamed of being a game developer since I was about 14 and like a ton of my fellow 90's kids my childhood and pre-teen years included lots of Sega and Nintendo love.
Enrolling into the program at Devry I knew nothing about programming ( except it included lots of 0's and 1's apparently) but I knew I wanted to make games because no other medium, hobby, or aspect of my life consumed me as much as game development. I posted on forums almost daily to chat about games. I loved browsing my favorite gaming mag s ( EGM, OPM, OXM, and Nintendo power) and reading every preview possible for upcoming game titles. I could never and still have never been able to consume enough information and discussion about gaming-related topics.
So I enrolled in this program off of my passion for games, no real penchant for technical stuff that didn't come with an installation disc, and catching a commercial the university broadcasted talking about how I would learn how to make awesome games and get an incredible job doing it for a living!
First year and a half of study:
I'll be very blunt, I felt that the first year and a half of my curriculum for the most part was a waste ( they weren't but at the time I was still waitin to learn how to make a game). I had a bunch of C++ classes that taught me about variables, and keywords, and loops and stuff I didn't really care about. "What the heck is inheritance and why would I EVER need it" I thought to myself .
Alongside those programming classes I had some throwaway classes covering game genres, broad overviews on positions relevant to the game industry, and classes that went over the design and development schedules of game projects. All good information to know but due to my impatience I was getting frustrated more and more by the day. I knew some basic c++ stuff and had worked with some assemblers to do really simple projects. I drew a line on screen in code but none of those were games. I didn't come to lean how to code I came to learn how to make games!
yeah ignorant 18 old me had no clue what he was doing .
Midway through my sophomore year to my Graduation :
Finally , Finally I would learn how to make REAL Game stuff I thought , code was nice sure but I wanted ot make somehting visual . so when we had a course with a brief introduction to asset management , creating game audio, and 3d modeling using 3DS max I was extremely excited. Fianlly I made something visual.
I followed that up with a course on A.I. programming and system architecture that made me fall in love with state machines because finally I understood how guards reacted in Metal Gear Solid on a technical level !
During this time period we also had an intro course to UDK , I got to make my first small visual games in game maker, and eventully everything would culmanate in my senior project.
If I felt the first half of the curriculum was too easy and I didn't learn very much about my Dream Profession. then you can say the second hald was a down-hill sprint with physics, mathematics, an all of my advanced programming courses constantly coming in back-to-back-to-back sessions.
Senior Project was interesting because eventhough I had learned a lot about devloping games and had programmed several projects this one was different. I felt like leading up to this part we had made a ton of parts of games and even very small scale game projects but as for a full-featured title it was a whole different beast .
After 3 months of hard work and awesome teammates we finishe our project which was amazing and later to to display it at GDC 2012 at our Devry booth it was an amazing experience.
Still even after College I still feel like I didn't " KNOW" how to make a game
It's really strange at this point I had graduated , programmed thousands of lines of code, made several small game projects ,built an ok Jr. programmer portfolio but still felt really insecure about my programming.
I picked up unity in my free-time and fell in love with it which lead to me getting a unity-inspired job interview and I got hired to my first game industry job as a Jr. Programmer. It was extremely exciting but I still felt like there was somehting missing about my understanding of code.
I felt like I knew a lot about what went into the code of games , an I could even make small games by myself but I heard someone compare game development to baking a cake. It was like I knew a cake contained eggs, flower, sugar, and water but couldn't tell you how to use them and in what measurements to produce a cake. Except in this case it was I knew what variables , functions, loops, and classes were but just not how to cmine them into making a game.
The Epiphany :
Being a Jr. Programmer and this being my first game my team didn't trust me and I was extremely nervous about working on the project at first so if I wasn't prepping assets or working with a more senior programmer, I was usually studying code they had already written.
One day I decided to peak at the A.I. code and I also decided to read the In-app purchase code.
It Finally clicked , I finally understood why knowing when and how to use public, and private, and local variables and functions was important. I finally saw why nowing the difference betwee a float and int mattered. Finally I understood really what programming was.
Before me I had to examples of Vastly different implementatios yet they both contained Boolean flags, they both contained integers, strings, float values. They both use loops , they both contained arrays . The only difference between them was how these variables and keywords, and functions were written and organized .
The whole Time I was waiting get to the part where the code becomes a game, where the code becomes a mechanic, the point where pressing a button resulted in shooting a gun or pressing start loaded the first level and it was right there before me.
I didn't understand the importance of algorithms I didn't understand how the GAME WAS MY CODE THE ENTIRE TIME! I have always heard that once you understand programming logic syntax becoms a non-factor and now I finally grasped why that's the case.
As programmers our job is to write these instructions for the computer and essentially craft the universe, rule-set, and mechanics of our games line by line by line . It actually makes sense that sometimes we as developers are described as World Builders.
The variables, and keywords are my tools and they make development of these mechanics and features possible . This was the nugget I just couldn't understand the entire time but it was fundamental to me understanding my role as a programmer and even to understand what skills and practices i needed to improve as a programmer.
So now I always remember that no matter how complicated the task or big the project, it's always completed line by line . Whether it's creating an intro sequence , simulating end-race results, or implementing a new weapon . Truly the code is the core of the game from a functionality point of view and that is what I was missing the whole entire time .
Seven months after joining the dev team , most of us were laid off with the hopes we would return but the company just couldn't afford us at the time. So during my errrrr.... " vacation " I ended up prototyping like crazy in unity. Initially I was nervous because much of my initial work was UI- related but then I recalled my epiphany and over the ensuing weeks I coded my brains out. If I used a float to control where a menu object transitioned to, I could use a float to move a character around as well.
Just like I had observed in the senior programmer's code , regardless of the mechanic or feature I wanted to implement it all boiled down to my own creativity, a certain level of respect/ understanding for the logical process , and time. I finally got to see first-hand how my code became the games I wanted to create !
So my advice to anyone who was like me and who isn't naturally wired to " think like a programmer" there's hope. Just like a game of tetris you gotta keep playing until the right piece shows up .