Hey everyone I am new here, and I have begun the wonderful journey of being a game programmer.

first a little background, I am currently a college student studying Computer Science. I love programming, and more recently I love game programming. Unfortunately my school doesn't teach game programming as part of the core Computer Science Major so I have been tasked with learning this art on my own. What I have learned so far is the basic idea of Game loops, Movement, Collision etc.. just basic things you pick up from online tutorials. My languages so far have been Java, and C# with the XNA game library, I know the basics of both but when it comes to game programming I use C# because XNA takes care of the Visual aspect of it.

Well any way on to the main point of this topic, I know that every language has it's benefits and disadvantages, and I am looking for the ones that I would like to work with. So if you guys would be so kind as to pick some languages and give me the pros and cons of using it to make games, that would be great.

Also if there are any basic concepts of game programming I need to learn, please let me know.

Don't worry about languages, just use C# and XNA (C# is a great language), only switch if you have to (The main reason to switch language these days is for platform considerations (Many platforms have 1 "official" language for their SDK that is alot easier to work with than the rest, (For Android its Java, for WP7 its C# and for iOS its Objective-C for example, while you can use other languages aswell on those platforms it isn't necessarily as easy).

As for game programming concepts just try to make some simple games and go from there.

I don't suffer from insanity, I'm enjoying every minute of it.The voices in my head may not be real, but they have some good ideas!

C++: Allows you full control. But with great responsibility comes…many chance to shoot yourself in the foot? You can do anything you can imagine needing to be done with this language, but that also means the potential to create every kind of bug you can imagine, since you are also responsible for your own messes. The only way to allow you full control is to not clean up after your mistakes.Some say it is not a good language for starting out, but it certainly does build a level of discipline into its users.Of important note is that starting with C++ is harder than starting with Java or C# and then moving to C++ later. Breaking free of old habits, such as dropping pointers for the virtual environment to clean up for you, are harder than just forming good habits from the start.The other benefit is that it it is the defacto language for game programming, and not knowing it will never net you a good job in the industry. By not knowing it, you are absolutely putting a cap on your career potential.

C#: Good for fast results in all kinds of areas, and with XNA it is a good start in game programming; the kind of start that keeps you motivated to move forward. But don’t focus on it alone for too long; As mentioned above, getting too used to any garbage-collecting system will only hinder your growth as a full-fledged game programmer in the future. A very reasonable strategy is to use XNA alone for your first game, then start making your second game in C# but try to learn C++ at the same time on the side. Your goal should be to understand pointers mainly and to understand very clearly how your XNA practices cause memory leaks in C#. As long as you develop these 2 side-by-side, you should be set to go in the future.Learning them side-by-side is quite recommendable because you will fail your first few C++ projects, but since you still have C# with you you can still feel motivation to keep moving forward.

Objective-C: Fairly useless in the gaming industry. Instead, this gives points to C++, because iOS development supports C/C++, but not C#. Working with iOS is another good way to get a handle on game development since the platform is so small that only one person is needed to make any given game, which means you can make and release to your heart’s content. But you will be doing so in C++, not C# nor Objective-C.

Java: There are no benefits unless you know no languages at all and have for some strange reason decided to learn programming on an Android platform. Java is not required on Android so knowing C/C++ again can get you by on Android devices, and knowing Java alone is fairly close to knowing C#, so there would be little motivation to just make little Android games (which requires more than just knowing the language, since you have so many different types of devices with different resolutions and capabilities) instead of decent-looking XNA games (which are by comparison much easier to make, given the lack of diversity between hardware specifications).

These are currently the only relevant languages in game development so I will stop there. While it is true that almost every language fills a gap, when it comes to game programming many languages are simply irrelevant. Here, it is mainly a shootout between C++ and C#, but in the end you are definitely going to need C++, so the real question is, “What is the best way to shift into a C++ environment.”Using XNA or iOS development with C++ on the side is a reasonable strategy, and in any case you can take it at your own pace.If you already know C#, why not start something on the side with C++?

Another possibility is to use Unity 3D. You still need to program the logic of your game (and you can in C#) but not the engine. This has another advantage you can see how a good engine is structured.

If you want to learn about engine development then XNA + C# is IMO the best combo to start. But what is it the part of game development that you love the most? If it is graphics then I can give some tips.

If I were to start a new game tomorrow, these would be my selections in order:

- Coffeescript (or plain old Javascript) with WebGL, using Three.js
- Actionscript3 on Stage3D (to AIR for mobile, Flash for web), using Away3D
- Unity
- Some Python game framework
- C++/DirectX

Writing solo games should be fun - the bits of C++ that people say are hard (memory management, pointers) really aren't that bad, it's the lack of cohesion and incessant focus on trivia that makes it a boring language - see the trivia quizzes that everyone fails.

It's really a shame that Universities nowadays do not even teach any systems programming languages anymore. Not even C++.

I've seen people graduate from their 5-year CS program without ever having programmed a single line in any language, but the norm is that people who graduate are at least capable of writing maybe a Hello-World Java program. That's the most you can expect though.

Our OS class focused entirely on writing user-level 20-line Java programs, because the students just didn't know any C.

It's really a shame that Universities nowadays do not even teach any systems programming languages anymore. Not even C++.

I'm going to be doing my 4th year of computer science at a major Canadian university this coming fall. My intro to algorithms course used C++. So did my computer graphics course, although most of the code I saw in that course was very C-like. Both computer systems courses I've taken used C. Granted, we were never explicitly "taught" C or C++, per se, beyond a bit of syntax. Students were expected to figure things out on their own, and from what I could see, generally did. The intro to programming course they gave to first years when I was in first year used Java, but they now use a dialect of Lisp. Java is only used for generic software development courses.

It's really a shame that Universities nowadays do not even teach any systems programming languages anymore. Not even C++.

We had Pascal, C, C++, 16bit assembly, and now we've got Java.Pascal/C/C++ professors actually checked programs and asked questions to be sure you made them. However it was just collection of basics: functions, pointers, exceptions, const, reference, array, dynamic memory allocation, one program used std::vector<>. Most (or even all) below 200 lines.Assembly was too hard to check (final program over 1000 lines), correct program output was sufficient to account for it.Java is a bit different story though, we get to use a little bit more advanced features (functionality wise, not completexily as Java makes it easy): applets, threading, synchronization. But there's completely no attention towards performance of threads and their usefulness. Java code is never even checked, professor just asks about completely irrelevant stuff, for example, I was accounting on file reading/writing and containers, he asked what package, static keywords mean and what kind of visibility constructor has if none is specified.All exams consisted purely out of theory.

Therefore I feel I'm wasting time in my university, we get nothing but useless theory, which does not help at all, not to mention I knew almost everything what they taught in 2 years.