Sign in to follow this  
rcsteins

Intermediate Programmer - How to Advance Skills

Recommended Posts

rcsteins    100
Hi All,
Right now I am interested in programming games as a means to teach myself about programming and software development.
I come to this forum to ask for advice on how to improve my programming skills.

How much programming do I know? Well, I had two classes in high school teaching the procedural subset of C++(the part that is like C, without classes or objects), and I took one class in college that taught java and object oriented programming.

More recently, I have been working on an AI simulation in which a team of (poorly drawn)red spaceships faces off against a team of green spaceships. Its kind of like a game that plays itself because there is no user input. It is written in c++ with SFML(Simple Fast Media Library). I would be happy to share the code if anyone would to critique it. I also rewrote this program in python with PySFML as a learning experience.

My question is where should I go from here? What would be a good way to spend my time? There's a lot of things I would like to do but time is a scarce resource.
Should I learn more libraries? I've been looking into things like SDL, DirectX/Direct3D, and OpenGL. Should i try working on a game with other people?(Anyone here need some help?). Should I look into RAD Game tools like Unity and XNA so that I could quickly prototype a game? At the moment time is plentiful, but I spend too much of it reading threads with topics like
"C# vs Java: which has better performance?"

Anyways, thanks for your time, and please let me know if there's anything else I can tell you about myself to help you provide better advice. Here's a screenshot of the project I mentioned:
[attachment=1837:screenshot.jpg]

Share this post


Link to post
Share on other sites
MeshGearFox    158
The best way to get better at programming is programming I guess, alternatively you could learn something like Lisp or Haskell if you wanted to get a grasp on functional programming -- which you probably should -- or Smalltalk if you want to get an idea of what actual OOP is.

Otherwise don't worry too much about libraries I guess? I get the impression that same concepts tend to apply across them, they just have their own ways of doing things.

Also you could try a really overly-ambitious project that you're going to fail horribly at and then when you do fail, examine why you failed and do better next time. I mean, overly ambitious as something you can still reasonably make. If you fail before getting out of the planning stages that isn't going to help much.

Share this post


Link to post
Share on other sites
PropheticEdge    150
You know, I've always approached learning with something of a shotgun approach. I pick a topic, pick a starting point, then just try to learn everything about it that I can radiating out from that one point.

For game development, the approach really hasn't been that different. I have no idea what initial topic I started with (I've wanted to make games for a VERY long time), but I went to college, studied computer science, and just sort of went from there. Anytime I ran across anything that I thought might be remotely related to making games, I investigated it.

XNA is a framework for making games? Better check it out then. Oh, it uses C#? Better sign up for that class I heard about that uses C#.

The rationale behind this, for me at least, is that I can't really do direct, targeted learning until I have a broad foundation of knowledge to pull from. So I just learn as much as I can about all sorts of stuff figuring that it'll be useful in the future. Usually it is! So don't be afraid to study something that you think might be a dead end; even if it is it's better than sitting around and twiddling your thumbs.

Anyway, you actually suggest a lot of good things in your post to increase your skills.

[quote name='Charland0' timestamp='1302565263' post='4797307']
My question is where should I go from here? What would be a good way to spend my time? There's a lot of things I would like to do but time is a scarce resource.

1) Should I learn more libraries? I've been looking into things like SDL, DirectX/Direct3D, and OpenGL.

2) Should i try working on a game with other people?(Anyone here need some help?).

3) Should I look into RAD Game tools like Unity and XNA so that I could quickly prototype a game?

4) At the moment time is plentiful, but I spend too much of it reading threads with topics like
"C# vs Java: which has better performance?"
[/quote]

1) Yes, but I'll throw in a word of caution. "Learning a library" implies to me trying to memorize all the function calls and such that comprise a library. This [i]is[/i] a futile effort for the most part, it's like a person trying to expand their vocabulary read strictly by reading the dictionary. Humans tend to learn better by doing, not by sitting down and memorizing words without context! If you want to expand your skills, don't sit down and try to memorize all the function calls in a library. Instead, figure out how the library actually works. Knowing on a high level how the Direct3D render cycle works is way, way more useful than knowing all the function calls but not having the bigger picture view of the system. So sit down and start programming! You'll learn the function calls well enough without having to study them, and the more you program (and make a concerted effort to figure out what the hell this library does), the better you'll understand how the library actually works and how to bend it to your will.

2) Yes, collaborating with others is a really great way to improve your skills and gain valuable experience with, well, working with others. It can also be a frustrating experience, though, and a lot of novice teams try to bite off more than they can chew or make some grandiose, unrealistic project. Also, it can be intimidating to work with people who you view as being "experts" when you view yourself as being a "novice". When working with a team of likewise inexperienced people, try to keep your projects small and realistic. When working with people who you think are out of your league, just take a deep breath, do your best, and don't be afraid to ask for help. It's better than panicking, thinking "ohmygodIcantdothisFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" and then freezing up.

3) Sure thing, although personally I'm not sure I'd consider XNA a RAD tool. It's a whole lot more streamlined than C++ and Direct3D, but still pretty chunky in its own right. Unity is super, super cool and definitely a worthwhile tool to mess around with. The UDK is also pretty sweet, if you've ever heard of that.

4) I actually spend a lot of time myself reading articles about game development. I'll read just about anything I can get my hands on, even if it's stuff that's over my head. At the very least, it gives me exposure to ideas and techniques that I can come back to and take another crack at understanding. Keep hunting for articles and tutorials, but don't be afraid to abandon them if they look bad or tremendously useless. I wish I could point out other good resources than gamasutra, gamedev and official documentation for library X, but I really don't know that many.

Another piece of advice I can give is to set a concrete goal, like an idea for a game you want to make. If you want to make the game to just make the game, then the scope of it can determine what tools you should use (Relatively simple/small, web distributable, decent 3D graphics? Unity's a good fit. Complex, custom, cutting edge? Use C++ and Direct3D). Or, you can pick a game and make it using a specific tool to learn that one in particular. I think it's pretty important to make a game, or at least a demo of some graphical effect or gameplay mechanic, just something concrete. Again, humans learn by doing, and they learn even better when they have a concrete context to frame things in.

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