What do I need to learn in order to become a game programmer/designer?

Started by
6 comments, last by Nicholas Kong 11 years, 2 months ago

I am sure this has been asked a bunch of times already, but I will give some background information because I want a more personalized response then what I've encountered in these types of forums.

First, a little bit about myself. I am a Computer Science major. I have one year of undergraduate schooling left that constitutes pretty much 2 years worth of classes in the major, because I transferred from a completed psych degree with most of the general classes done so I am solely working on the major now. I have taken classes in Java and C. I am not a great programmer yet, but I have become more aware of concepts through the algorithms class I am currently taking. I am only barely familiar with linux/unix and other languages like perl, scheme and prolog. I am also in the second digital electronics class of a 4 class hardware series. Most of the classes I have taken so far are math related (preCalc, Calc I, II, physics I, II, and currently taking Calc IV which deals with vector math). I plan to learn C++, because it seems to be the video/computer games industry standard. Maybe add a little python in there since I read it's a good language to make games along C++ (how or why I would like to know).

For personal skills which can aide this process, I am decent at drawing and I write in my spare time. I am a planner to the extreme, so organization and setup is key before I'd even jump into programming something like this.

I don't know what direction I want to take my degree and will probably accept the first CS type job I can get to pay my student loans when I graduate. However, I do want to develop games on the side on a small scale (indie games, 2d, and possibly 3d eventually if I can find like minded people who would work on something in their off time for nothing but the promise of experience and possible future pay from digital distribution).

I want to do something small in the beginning in which I can do everything myself before moving onto bigger projects which will necessitate 3d artists, musicians and other types of staff. I want to learn what I need in order to make a 2d game from the ground up (sprite based graphics, C++ programming). It will be single player and have things like characters that can walk/run/attack, sound effects (likely taken from a public domain sound effects site like soundbible), action which requires hit detection (shooting enemies), items that can be picked up like a set of keys or items that can be picked up from the environment like picking up a box and throwing it at an enemy, (un)lockable doors, and multiple endings.

Please let me know what kind of languages, software and concepts I would need to become familiar with in order to make something like that myself. I see stuff like "whatever you are familiar with is good" but I'd like answers more in line with what standards are expected if one were to work in the industry. I don't really care about learning too much about 3d graphics yet if ever, because if this became more than a hobby, I'd want to collaborate with 3d artists who could worry about that. I do want to learn how to incorporate 2d sprite and tile based graphics into my coding and in general how coding a game works. I would also like to find a good resource on game design for beginners. Especially something that could have tutorials on making schematics if thats necessary.

Also, if I'd need to make a website to promote something like this, would a blog be good or should I make one from the ground up as well? Sorry if I'm asking so many questions at the same time, but I have done a good deal of reading and understand that doing something like this doesn't simply consist of having a good idea. It seems to take lots of work, testing and eventually promoting, so I want to get a good idea of what to expect with all of the above.

Please, if anyone has a good answer and/or helpful resources (websites, literature, etc.) for any of the questions, it'd be greatly appreciated!

Advertisement

When you finish your degree, you are expected to have a minimal understanding. That is enough to get in to entry level. In the workforce your real education can begin.

The most important features are things you cannot learn in school. Your ability to grasp new concepts, your ability to learn, unlearn, and relearn based on experience. Your ability to adapt and act under a wide range of conditions. These are all inherent attributes to your person that are gained and tested through experience.

I have many basic expectations that don't really apply to your post and normally go unstated: I expect you to come to work each day in a timely manner, to actually work during those hours, that you will be presentable at all times while on the job. I don't mean wear a suit, but I do mean that if for some reason the governor or some state legislators or members of the press were to walk through the building with a collection of corporate executives on a tour of the place, I could expect that you would not be an embarrassment.


For the things you should pick up from school....

First I expect new programmers to be technically competent. I expect a shallow depth (because of their inexperience) and broad coverage (because of their coursework).

You are expected to have an absolutely solid grasp on fundamental algorithms and data structures, a knowledge of many non-fundamental algorithms and data structures, and the ability to intelligently discuss and potentially implement any algorithm or data structure that I ask of you with minimal assistance. To that end, I will point you to the National Institute of Standards and Technology's Dictionary of Algorithms and Data Structures. As a CS graduate I would expect that you will either know exactly what these things are by name, or if you don't know it by its name you could read the description as given on that web site you could explain to a lay person what each is.

You are expected to have the ability to read, write, and speak the English language in a professional, businesslike way. This is far beyond just the basics of proper spelling and correct grammar. This includes an understanding of the elements of argument and persuasion.

You are expected to be able to read and write code in the language demanded by the job. As an entry level programmer I don't expect you to be a language lawyer, but I do expect that you could implement any fundamental algorithm without difficulty. I would also expect that you could learn new languages, tools, and technologies in a reasonable time for whatever the item is, and that you will continuously do so without supervision or instruction over the course of your career.

Anything more than that is a bonus at the entry level.

Honestly, you will always learn the more you apply what you know and if you are trying to solve a problem. You don't learn as much if you just want the answers. A game is a program that is made up of data structure and algorithm. Since you have experience with C++ and Java, the answer to your question should be trivial. If you played enough games, you obviously know what features to implement into the game. How you implement is your choice. If you know how to implement it, that's good. If you do not, just research.

Just go out of your way to make the game happen.

Thanks to both frob and warnexus for the replies. They were completely different but helped answer some questions I had, nonetheless.

The Dictionary was a great resource and I will work on becoming competent in the knowledge and application of these concepts. I am, as stated earlier, taking an algorithms and data structures course at the moment. The other information was also noteworthy, but reading it resulted in more questions arising. For one, I see what it would take to secure a job, but does all the above get you in the door? Specifically, what would it take for me to even get an interview to get to the point of demonstrating my CS skills and mastery? I have a nonexistent resume at the moment and hope to make it look pretty with some projects I do during the time I am not doing homework (this game and possibly starting a blog documenting its creation). What else would make a resume pop when being viewed by someone in your position?

And to frob, I am aware that my implementation of the program is what is important and will do the necessary research. I do already have some ideas on where to start and am in the process of designing the game before I program, but I wanted to know more information on the graphics side. I am very green in programming in general, so my experience is lacking, but I want to know if I am to program a game from the ground up, will I need to become familiar with separate software for sprite creation? I am guessing I will use the assets in my code, but where do I create them? Or am I just asking the wrong questions?

Thanks again.

And to frob, I am aware that my implementation of the program is what is important and will do the necessary research. I do already have some ideas on where to start and am in the process of designing the game before I program, but I wanted to know more information on the graphics side. I am very green in programming in general, so my experience is lacking, but I want to know if I am to program a game from the ground up, will I need to become familiar with separate software for sprite creation? I am guessing I will use the assets in my code, but where do I create them? Or am I just asking the wrong questions?

At the entry level you are a beginner, a novice, someone with no practical experience. You will be treated as such, given tasks with little responsibility and little chance for error. That isn't because you may lack in talent, but because you have no proven experience.

At an entry level you will not be making changes anywhere near the rendering engine or the core code. You will probably be tinkering with helping more senior people on game object scripting or very light tools work.

As the months and years go by you will be given increased responsibility with increased risk (and rewards) to your career and to the project's success. Prove that you can do those jobs well and additional responsibilities will be added.

Specifically, what would it take for me to even get an interview to get to the point of demonstrating my CS skills and mastery? I have a nonexistent resume at the moment and hope to make it look pretty with some projects I do during the time I am not doing homework (this game and possibly starting a blog documenting its creation). What else would make a resume pop when being viewed by someone in your position?

Employers are really interested in only two things when hiring people:

1. Will they do the job well?

2. Will they fit in with desired culture?

That is it.

A degree is strong evidence to the first question. It shows you have at least a minimum level of skills that most people do not.

A strong portfolio of completed projects is also strong evidence to the first question, and also evidence to the second question.

To build a strong portfolio, complete several extra-curricular activities that show you are interested in the industry. Build something that shows that you can write software. Build something that shows you can work in a group. Build something that shows you can work alone. Build something that uses many existing libraries that shows you understand how to leverage existing work, or build something from the ground up that focuses on exactly one thing.

In other words, just BUILD SOMETHING. Anything. Use whatever libraries and tools you need to build it. Then polish it. Then polish it some more. Show it to some friends and have them break it, and polish it some more. Show it to more people, honestly look at their feedback, and polish it some more. Then post it to the appropriate forum here on this site and ask for critical feedback, and polish it some more.

The portfolio is just evidence that you can do the job. Completing a full game is certainly evidence. Building some fancy level-editing tools is evidence. Building graphical demos that just fly over a static scene is evidence. Building an articulated animation system is evidence. Building an IK system is evidence. Building a particle system generator is evidence. Building a complex AI system that runs on stupid-looking blocks in a crappy gui is also evidence. Building audio mixers and controls is evidence. Building UI systems is evidence. Building a networked flow simulation is evidence. A very important piece of building games is that it ABSOLUTELY MUST BE POLISHED. A bad launch can kill an otherwise stellar game. (Look at D3 or the very recent SimCity release.) No matter what else you show with your portfolio, demonstrate that you can make it polished.

In short, ALMOST ANYTHING you build can be polished and turned in to something that contributes to your portfolio.

For more than that, look at the "Breaking In" forum FAQs. There are other important issues like being in the right place --- studios don't relocate at the entry level --- and being at the right time --- studios hire very few entry level workers per year --- and having a lot of contacts to hear about openings before they are open, or the moment they are posted publicly, and to get you a recommendation from an insider.

Read that forum's FAQs and it should answer many of the other "how do I get hired" questions.

I suggest you get a head start just putting your resume together. Add in any relevant skills that you think will logically make sense into the job you want. Looking at your resume, you should know if you are missing any skills. Any job you apply will ask of qualifications. If you meet those qualifications, you are likely to get chosen. If you meet ABOVE them, then you stick out. You should never worry about I need to learn this and that, just start focusing on learning that thing and make sure you know it well and move on.

Seeing as I'm reading game studio closing down a lot and plenty of layoffs of great talented people, it certainly is not stable. The "whole structuring of the company" idea seems to be doing this.

Since you learning to make a game and not commercially releasing one, your main focus should be programming. I suggest you get a head start just understanding how the code works. There's plenty of important concepts that apply to game programming even in an arcade shooter clone that is essential for you to know and understand. The only design you should focus on is code re-usability, scale-ability, code organization and good programming style. These 4 ideas is very important in a production environment. It will give you enough ground to work on.

What about the art? You can use the sprite-sheets online for educational purpose. If you create them yourself, it will take too much time and game design always changes. So rather than you creating new art if design changes, use those on the Internet.

Java should be easier in game programming in terms the java built-in library has facilities that allow you to draw images and provides a canvas for you to do the drawing. Again, just get a head start and dive in to the programming. If you worry too much, you just be caught in this conundrum. Why have such a thing and makes things hard for yourself.

As for C++, I heard it does not have a built in graphics library so just found one on the Internet, and learn how to put it together with C++. Anything you need to learn and know can be google searched.

Time is finite. So just dive in and learn. It will be okay. I hope you will find it rewarding in the end.

Thanks warnexus. Google is definitely my friend. I rather work on C++ instead of java though, because even if I don't plan on releasing anything in the near future on a commercial level, I will want to develop the programming skills and show it through my portfolio should I ever apply for a job at a video game development company.

Java can develop your programming skills and your portfolio.

This topic is closed to new replies.

Advertisement