• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
derpcode

Where to start as a Professional Programmer who want to code games?

8 posts in this topic

So unlike a lot of people I see posting in this section, I already know how to code.  In fact, I do it every work day to pay my bills.  Past experience has been in C/C++, then C#/>Net, then Java, and now Python on AWS.  Its been a while since I touched C/C++, but I know not to try to deference a void pointer and I know enough about memory management to know I would rather not do it in a multi-threaded environment with only printf as my debugging tool.

 

My biggest hangups are on the graphics side. I can code a REST api, build a scaled out architecture that will service millions of calls at a time, secure communications, write back end servers, set up and architect systems, etc all day. (and I do as part of my day job) but the local client just makes me derp up and freeze.  Its a black box, and I have no clue what to do or where to start.

 

Looking around the forum - I have lurked for a while - the most common answer to this sort of question has been "first, you need to learn to code".  I have that covered.  I just cant find something I can use to get started.  I lack confidence because I don't know this "graphic stuff" and all of the other skills I have seem worthless.

I tried a book by a guy named Lynn T. Harrison, titled "Introduction to 3d game engine design using directX 9 and C#".  The first thing I see when I go to the site and get the source code for the book is a note that states that due to changes in the sdk, none of the code will ever compile.because - as I know now - he used classes that no longer exist and they are used in utility methods used everywhere in his engine.

 

So I did some research and found the "game programming gems" series; bought the first 6 titles, sat down, and started reading them cover to cover over a weekend with the full intention of learning everything.  I then realized I just didn't' have the graphical foundations i needed to make use of the visual parts so while a lot of it was interesting, it was not something I could use to make a local client/game, and in some cases, I felt lie I was reading the second book of a 2 part series.

 

This is not easy for me to ask.  I'm used to being the smartest guy in the room; this makes me feel dumb.  How do I learn this? Where do I start?  Amazon has so many options.. how do I know whats good or not?  I'm stuck in this odd place where i feel like either I'm too ignorant to be able to judge the books effectively an pick the correct one, or too advanced to be able to get anything out of them except for the scraps from the one chapter.. is that the way to go? Just buy a lot of books for the one chapter out of 20 that I can learn from?

 

Or am I just starting at the wrong place?  Should I try something else first?  What is the recommended thing for a professional programmer to do in this sort of situation where its just the graphical part that is the black void he doesn't understand?

 

 

 

0

Share this post


Link to post
Share on other sites

It's not clear exactly what you want to do. There isn't a single resource on how to write a "client application". It could involve anything from AI, to sound, physics, 3D graphics, 2D graphics, animations, shaders, file IO, resource management, threading systems, etc.

 

If you want to learn 3D, for OpenGL I suggest this http://www.arcsynthesis.org/gltut/

 

It explains pretty much all the theory behind all the examples it provides. Its C++, but the language is more or less irrelevant, you want to pay attention to the OpenGL API calls.

 

Its not a hard cover book, nor its 500 pages long, but give it a try. After that you'll have some idea on how "computer graphics" works (from 10 thousand poly models to sprites, it all boils down to the same principles). Then you can keep working on OpenGL or move to some other API (most of the concepts translate to other APIs).

 

Now if you want to learn how to code other kind of systems (as I said, audio, AI, etc), then you'll have to look up resources on those specific topics.

1

Share this post


Link to post
Share on other sites

If you really do have experience in programming, GD is just around the corner.

 

One important thing to notice is that you don't really need to be a graphics expert. Actually, there's plenty of room for good server/multiplayer engineers/programmers, as you implied you have experience.

But there's also tools programming, audio, gameplay, AI...

 

As game programmer, despite the area you choose, you'll need a good portfolio. For that, you'll need code samples, prototypes and, if possible, one or more games.

 

If you want a tip, stop neglecting practice. Studying theory, reading books, is good for you, no doubts about that; but if you never sit down and mash your keyboard you'll never get there.

 

Think of simple small games, create them with code quality in mind (2D will do if you don't want to go 3D just yet). If you have already chosen an area to work in, focus on it, be it graphics, tools, AI...

After you successfully created a small game, start fooling around with performance/memory profilers, version control systems and anything you may not have used.

 

The only thing you're lacking is research, and research no one can do for you. Still, I can name some game engines for you to look up.

  • UDK
  • Unity
  • Monogame
  • Cryengine
  • SDL
  • Maratis3D

SDL and Monogame are probably the most accessible ones I listed for a single experienced programmer that is giving gamedev a try.

 

I just wouldn't go straight into OpenGL and DirectX, as they usually require a lot of time to do even simple things. Give game engines a try, and if you ever decide to go the 3D Graphics programming route, then you come back to OpenGL and DirectX...

2

Share this post


Link to post
Share on other sites
 

 

It's not clear exactly what you want to do. There isn't a single resource on how to write a "client application". It could involve anything from AI, to sound, physics, 3D graphics, 2D graphics, animations, shaders, file IO, resource management, threading systems, etc.

 

If you want to learn 3D, for OpenGL I suggest this http://www.arcsynthesis.org/gltut/

 

It explains pretty much all the theory behind all the examples it provides. Its C++, but the language is more or less irrelevant, you want to pay attention to the OpenGL API calls.

 

Its not a hard cover book, nor its 500 pages long, but give it a try. After that you'll have some idea on how "computer graphics" works (from 10 thousand poly models to sprites, it all boils down to the same principles). Then you can keep working on OpenGL or move to some other API (most of the concepts translate to other APIs).

 

Now if you want to learn how to code other kind of systems (as I said, audio, AI, etc), then you'll have to look up resources on those specific topics.

 

I am aware that a game is multiple systems working together, thank you. My blind spot is the graphical layer; Its something that i have no knowledge of.  i do have prior experience in:

  • Audio (writing codec's and audio subsystems for mobile phones, mostly),
  • AI (FSM's, Path Finding, Some neural Network and Bayes systems experience with 'big data" data-sets, mostly, but I suspect I will need to brush up as genetic algorithms are of interest to me).
  • Physics (simulation of scientific models, mostly)

 

Things like file IO (memory mapped, steam based, and fd based) and threading and other resource management seems sort of "normal" to me (Unless I'm missing something special about it in a gamedev context?) Am I missing something special about these?

 

I see the graphics things like shaders, 2d and 3d animations, as my biggest gaps in knowledge.  I am very ignorant of them and are not sure of where to start; And clearly the data I thought i knew is now outdated and can not be trusted; its a shame too as I just got a big black book titled "Michael Abrash's Graphics Programming Black Book (Special Edition)" I found at a second hand bookstore,  its really old,  Is that data/book still any good?  Is it worth reading or did I waste my money?

I will read that link next,  It looks like a nice deep dive that could last me a while.  Thank you.
 

 

If you really do have experience in programming, GD is just around the corner.

 

One important thing to notice is that you don't really need to be a graphics expert. Actually, there's plenty of room for good server/multiplayer engineers/programmers, as you implied you have experience.

But there's also tools programming, audio, gameplay, AI...

 

As game programmer, despite the area you choose, you'll need a good portfolio. For that, you'll need code samples, prototypes and, if possible, one or more games.

 

If you want a tip, stop neglecting practice. Studying theory, reading books, is good for you, no doubts about that; but if you never sit down and mash your keyboard you'll never get there.

 

Think of simple small games, create them with code quality in mind (2D will do if you don't want to go 3D just yet). If you have already chosen an area to work in, focus on it, be it graphics, tools, AI...

After you successfully created a small game, start fooling around with performance/memory profilers, version control systems and anything you may not have used.

 

The only thing you're lacking is research, and research no one can do for you. Still, I can name some game engines for you to look up.

  • UDK
  • Unity
  • Monogame
  • Cryengine
  • SDL
  • Maratis3D

SDL and Monogame are probably the most accessible ones I listed for a single experienced programmer that is giving gamedev a try.

 

I just wouldn't go straight into OpenGL and DirectX, as they usually require a lot of time to do even simple things. Give game engines a try, and if you ever decide to go the 3D Graphics programming route, then you come back to OpenGL and DirectX...

 

GD?  What is that?   You mean gamedev?

 

Game programmer Area? So I should specialize? Or do I have to? What if I like being a "full stack" guy?  Is that possible?

I looked up a lot of engines; But the people I sent emails to about details to use them to learn them didn't get back to me, as all of them seem to be commercial with undisclosed prices.  Its almost as if they are scared of telling people the price? Or maybe they don't have one and just make one up based on how important looking the person asking for it is?  Most of the effort seems to be in getting these companies to respond to you, else you cant get the devkit to use to learn... and they don't seem to think I am important enough to reply back to, so I have nothing to learn with. :(

You did list some opensource ones too, I will look into them as well.  At least I should be able to get source on them without waiting for weeks for an email response :/

Thank You.
 

1

Share this post


Link to post
Share on other sites

Since you mentioned you know C# there's a free book you could check out:

 

Introduction to Programming Through Game Development Using Microsoft XNA Game Studio, by Rob Miles. http://www.andrews.edu/~greenley/cs2/IntroProgXNAGameStudio_eBook.pdf

 
Of course, these days you'd want to use Monogame in lieu of XNA, but I've heard it's pretty simple to transition over. And hey, price-wise it's hard to beat free!
 
Others have mentioned SDL, and on that note I'd recommend checking out this video from Steam Dev Days: http://www.youtube.com/watch?v=MeMPCSqQ-34&list=PLckFgM6dUP2hc4iy-IdKFtqR9TeZWMPjm . The guy goes into all the different functionality you can get from SDL, to include some very simple graphics as well as an easy way to use OpenGL. It's a fascinating video that I think I'll be linking in threads here for a while, and you might also check out some of the OpenGL videos they have (though I haven't watched those yet, so I can't comment intelligently on them).
1

Share this post


Link to post
Share on other sites
GD? What is that? You mean gamedev?

Yes!
 

 

Game programmer Area? So I should specialize? Or do I have to? What if I like being a "full stack" guy? Is that possible?

If you want a job, you can try to go generalist or specialize yourself. I, myself, try to specialize in AI, as it is tightly tied to my mechatronic engineering background.

I can't say this for sure, but it is easier to convince someone you're a specialized engineer and a fairly competent generalist than that you are an exceptional generalist. Usually, specialized coders are just as good generalist as those who didn't pick an area of interest to dedicate a little more time...

That is my experience working on small projects, with small teams, where the generalists were just as good generalists as the other ones. That may not be true on higher standards gamedev...

 

But if your intention is actually to code an entire game by yourself, it certainly is possible.

 

 

I looked up a lot of engines; But the people I sent emails to about details to use them to learn them didn't get back to me, as all of them seem to be commercial with undisclosed prices. Its almost as if they are scared of telling people the price? Or maybe they don't have one and just make one up based on how important looking the person asking for it is? Most of the effort seems to be in getting these companies to respond to you, else you cant get the devkit to use to learn... and they don't seem to think I am important enough to reply back to, so I have nothing to learn with. sad.png

You did list some opensource ones too, I will look into them as well. At least I should be able to get source on them without waiting for weeks for an email response :/

Thank You.

You will want to download non-commercial copies of these commercial engines, I'll provide links here, if you're interested.

Remember, you'll just be getting experience and building your codefolio, not really releasing commercial games with them just now.

 

UDK - http://www.unrealengine.com/en/udk/downloads/

SourceSDK is available under Steam, need a legitimate account- https://developer.valvesoftware.com/wiki/SDK_Installation

Cryengine - http://mycryengine.com/

Monogame, Maratis3D and SDL are all Open Source.

 

If you want, here's post I made some time ago: http://www.buildandgun.com/2014/02/my-gamedev-bookmarks-danger-minefield.html

There's an engine list at the very bottom of that post.

Edited by dejaime
1

Share this post


Link to post
Share on other sites

From what I can see, you are having issues figuring out where to start with graphics? There are several libraries that have been already mentioned, and all of them should have simular graphics setups, much as all the physics engines I have played with were simular in nature.

 

I recommend starting with a simple 2d setup at first (for myself, I really enjoyed LibGDX, which uses java, when I was first getting into figuring out some things, and it looks like they now have some more nice tutorials, such as http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-create-a-working-prototype-in-a-day-tutorial-part-1/ ).

 

As you have seen since lurking, it is often recommended to start with pong. It is very simple to make, easy graphics, and a good way to learn a new system.

 

Anyway, many libraries will keep you from having to do the low level details. I started using LibGDX because I needed to do low level details, then looked at their source and saw most of it was written how I would have done it. I recommend using an open source library, seeing if you can get anything on the screen through looking up some tutorials, then reading through any render functions called if you want lower detail. Examples would be sprite.draw(), 

 

Of course, if you were referring specifically to animations, then for 2d it is often a series of sprites from a spritesheet or textureatlas (in libgdx), and I believe 3d is vertex manipulation. I haven't really done much 3d outside of school years ago... have started playing around in blender, and can import things from blender to the Playstation Mobile Development Studio now, which has simple models and shaders available to do what I have needed thus far.

0

Share this post


Link to post
Share on other sites
Seconding others (beyond the up-votes) -- based on your described experience you could probably go get a job as a video game programmer right now.

The days of one programmer knowing everything about everything in a modern game are long gone. They went away almost twenty years ago. Games today can be massive engineering exercises with hundreds of developers. They can also be smaller teams, which means 20-35 developers. On smaller teams people will touch multiple systems; most people above the junior levels are expected to have ownership of one specific domain rather than a shotgun splattering across all areas.

Right now you are working on back-end database work, you probably seldom (if ever) work on the front end work of making the user-facing components beautiful. That work is usually given to a team who focuses on it specifically. So it is with games; server backend teams, network communications teams, AI teams, tools teams, graphics teams, GPE (gameplay engineering) teams, and more.

If you are looking for a game development job, just start applying. It is unlikely (but not impossible) they will pay for moving costs as you don't have industry experience, but if you live in or near a city that has game developers (see gamedevmap.com and similar sites) you could apply for and likely get interviews for jobs focusing on networking.

/edit: The gems books are good. There are lots of books, basically if you want to learn you need to start somewhere. They assume a pretty solid math background, and if necessary you might want to brush up on college-level math like linear algebra. 3D graphics is little more than applied linear algebra, the math of manipulating things in spaces. Edited by frob
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0