The good old "which one"; choosing a language.

Started by
18 comments, last by daedalus316 12 years, 3 months ago
I took a walk on the gamedev forums, there are a lot of questions about what language to learn, xna or own engine... I feel embarrassed for asking this stupid question, because I'm just another beginner opening another topic about the probably same question that comes around "for beginners" every 5 minutes.

I will try to make this question different from the other ones.



I like understanding how games works more than playing it.
I watched livestreams of people making games. I liked it.
I watched some tutorials about Java and C. It feels good to write the code.
I will not quit, like many other beginners, once I step upon math or language problems, or because other reason. It makes me mad when I give tips to someone and then they quit after a while. I will not do this.


So what do I want to do with programming?

I want to make games. I don't care if its my own game, or work for some company. I have no clue how the jobs in this area are, I don't know if the payment is good, don't know where I have to be (like forums, websites, blogs to read) to get into the area, know the terms (like framework). I was hoping you could answer me this.


Ok, so after reading stuff on the internet, I concluded that based on what I wrote above, the right language for me is C++. As far as I know, C++ can be used both for indie games (little fighter, liero, tibia, many many others) and to work for companies (call of duty series, blizzard games). I also have the mindset that using other game engines is BAD. I do not like (with my mindset) UDK, XNA. I don't know why, maybe because it's limited, I can't do w/e I want. I was hoping you could change or enforce this mindset (or thought, not sure which word is the right for this situation, pardon!)


Thank you in advance.
Advertisement
Read this.


The right language for professional game development is often C++. You on the other hand, aren't a professional game developer and C++ is very much *not* the right language to start with. Learn to program first, then consider C++ if you need it for your resume. I would actually posit you could learn C++ programming faster by learning another language THEN C++.

As to your mindsets; lose them. You admittedly know almost nothing, and you've already formed decisions you aren't capable of making with your current knowledge. Learn first and let actual experiences form your biases, not well... whatever it is you've used to date.
Nope, sorry... Just like every other question asked every 5 minutes, and you came to the same wrong conclusions as everyone else.

On the plus side, that makes the advice easy. Use C#, learn to program, etc etc. See Serapth's post and pretty much the entire forum for more info...

I also have the mindset that using other game engines is BAD.

Something to consider: a lot of AAA titles created by industry professionals use existing engines. Many games are built using the Unreal engine, or the various engines produced by id software. Many other studios have libraries of existing code or in-house engines that they re-use. Whilst there are also plenty that are created "from scratch" or where new engines are developed, the chances are pretty good that if you eventually get a job in the industry you'll be expected to work with existing engines.


Something else to consider: a lot of engines provide the same or very similar functionality; the engine might load and display a model, applying some particular lighting technique, provide some physics, etc. All of the interesting stuff that makes a game unique is built on top of that, and you can either wait till you've done all the same-old work to load and display a model, or you can get to the interesting stuff of implementing new and exciting game-play features right away using an existing engine or library.


Using existing engines is definitely a Good Thing™, as it saves you time and effort that you would otherwise spend re-writing code that a great many people have already written a great number of times. It's going to be a long time and take a lot of experience and mistakes made before you're good enough that your choice to use an engine will be a limiting factor in what you're able to do rather than your own skill being what stops you.


If you do decide to write your own engine for the learning experience (and I'll stress that I'm recommending against it), don't just start writing from nothing, but follow the excellent advice given in the article Write Games, Not Engines and produce your engine by isolating re-usable and repeated portions of code from actual games with real-world requirements.


I would also personally recommend a language such as C# or Python rather than C++, but if you're set on sticking to C++ and are willing to tough it through the difficulties you'll eventually reach your goal either way.

- Jason Astle-Adams

Considering that your main motivation is to program games, rather than learn about programming or computers in general, I think that the advice you got here regarding goin with an "easier" language, such as C# or Java is sound.
I really would not agree that starting with one of those languages and then later move on to C++ makes much sense though.

The things that I believe makes C/C++ a bit more tricky in some ways (such as memory management) are not things that you really pick up in those other languages.
I would actually suggest that if you really want to learn C++ then starting with learning more about how computers work would be a better starting point.
For example digital circuitry -> computer architecture -> assembly programming -> C programming -> operating systems -> C++ could be one route.
Of course you don't have to become an expert in all these areas but some things that you will do using C++ will make much more sense if you begin by studying such topics.
I would also say that knowing more about the more fundamental things can increase the pleasure you get from programming. :)

Although my experience with XNA is very limited, it seems like a great place to start if you want to dive into making a game right away, and I really doubt that you would find it very limiting.
The only issue I can see with XNA in particular is that you then afaik can only build your executable for Microsoft's platforms.
Going with something even more abstract, like a game engine (XNA is not really a game engine) could also be a good way to get started but I have no experience of these personally.
These days there are so many ways to get into game development (this is a good thing!) and it really comes down to what your preferences are regarding abstraction level, platform to develop for etc.

The things that I believe makes C/C++ a bit more tricky in some ways (such as memory management) are not things that you really pick up in those other languages.




I want to scream from the mountain tops and go on a serial slapping spree every time I read this!

Memory management is not the hard part of learning C++, not even close. Now, memory management is perhaps the most fragile part about working in C++, but that is a different conversation.

The hard part about C++ is the byzantine set of rules that will literally take you years to learn, if you ever come to grips with them. It is a complex language, brutally complex in fact. Ironically, memory management is in fact one of the simplest and best defined aspects of the language! Additionally, to a new developer, C++ also adds a ton of hurdles you just frankly don't deal with in most other languages. The build process is awful, there are so many legacy features that are so rife for new developer abuse ( the preprocessor in general comes to mind but old C style string functions come to mind too ), the error/warning reporting is god awful, especially when templates are a factor. Additionally, C++ is essentially 3 different languages, you have 1983 level C in there, then you have C++ pre-templates, then C++ post templates... that template metaprogramming in C++ is essentially a turing complete language in itself is pretty telling. Perhaps worse of all for new developers, the standard libraries are to put things as succinctly as possible... sparse. I was going to use a different s-word there, but I changed my mind.

I am not calling C++ a bad language, but it sure as hell isn't an easy one. And memory management has very little to do with why.
I agree with what you are saying.
Memory management definitely isn't the hardest part of learning C++, but it's most likely one of the most obvious differences when coming over from a language with garbage collection or such.
Of course it takes a lot of work to master any language, and C++ in particular, but when learning the very basics of the language (not things like TMP. maybe not even templates in general), memory management tends to be one of the things people coming from a language like Java or C# have problems with, at least in my experience.

Hello again

Sorry for the delayed answer, I was out of town.

Again, my objective is "

I want to make games. I don't care if its my own game, or work for some company". I guessed C++ would be the best because all the games I've seen so far (both indie and company ones) are made in C++.




[font=helvetica, arial, verdana, tahoma, sans-serif][color=#282828]About the own engine. Lately I've seen a lot of unique engine great games. With 1 minute of thinking I can come up with these unique-engine games.[/font]


[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]Maplestory, Tibia, Liero, Little fighter, Starcraft, Warcraft, Minecraft.[/font]


[font=helvetica, arial, verdana, tahoma, sans-serif][color=#282828]Minecraft in special is made by one guy, and yet it's still better than a XNA game, made by one guy too: Terraria. That's why I thought making engines are worth.[/font]



[font=helvetica, arial, verdana, tahoma, sans-serif][color=#282828]I'm completely new like everyone making topics in this category. I'm just not sure about the language I should start to learn because for e.g, I don't wanna be stuck with terraria-like games if I learn XNA. This happens mostly because I have no idea how this area (programming) works. Neither do I know how to learn and which communities to be in.[/font]




[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]I'll use CG as an example. I started at videocopilot.net. I learned about how videos work on it, then stopped learning AFX after a while. Then I found some good websites because I knew what to search with my knowledge from video copilot. With my searches I got good knowledge at tracking, 3D stuff, lightning, rendering. Ended up that I know how all the CG area works, I can lead someone to the right way if the ask me something, just like JBadams, seraph and everyone else that posted here, but in the programming area.[/font]



[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]So, how do I start at programming? Is there a "videocopilot" where I can learn how the area works. This example is good because video copilot teaches after effects, which is what I (wanted to) get extremely good at. I would like to start in programming with something that I would use to make the games. That's why I'm unsure about engines and languages. I don't want to be stuck with games like Terraria because I learned C# for 6 years. I want to make my Little fighter, my Tibia, or work on a warcraft game with some people.[/font]


I guessed C++ would be the best because all the games I've seen so far (both indie and company ones) are made in C++.


C++ is the industry standard for AAA, cross platform titles with hundreds of devs or skilled indies. C# is much easier to start with.


Minecraft in special is made by one guy, and yet it's still better than a XNA game, made by one guy too: Terraria.


Minecraft is made in Java. So that doesnt quite waork 100% with your argument, but I get the gist.


I don't wanna be stuck with terraria-like games if I learn XNA


While I havent played Terraria, XNA is one of the most widely used engines available and game quality is almost always a result from the programmer and people working on the game, not the engines. There is some quality stuff from Indies on the Xbox Live Arcade, and that is all made in XNA. No matter if you make your own engine, you are still limited by either OpenGL or DirectX - unless you write your own drives, which you cant - and most engines implement almost everything available from those libraries.

I would first recommend you learn C++ or C#, and use a simple-ish game engine like SFML or XNA, just to get a tast for programming, and then use either of those until you hit a limit with an unsupported feature etc, and then move on to your own engine if you need it. Just get some code examples for GL or DirectX just to see what youre getting into with your own engine.


Edit:
Regarding tutorials, as programming is text based, most tutorials are in text form. just search for c# tutorials etc
You can do anything you want with C#, only if your a real master you could benefit from the freedom of C++.

Xna is just a framework that has a ready made game loop and functions that let you draw 2D or 3D on the screen right off the bat. You are not being held down like you are in game maker or something like that. You can do pretty much anything you want with XNA, especially in the first (Let's say 4) years you learn programming C++ has nothing better to offer then C#. Once you know how to program in C# the step to C++ is a lot easier since you know how programming and especially OOP programming works.

I bet my money on it if you still be programming in a year or 2 you won't even make the step to C++ since you love C# + (put in your framework) and it has everything you need. Unless you you really want to work at a major studio, but you better get started then since if you don't want to bring coffee around you need at least 10 years under your belt and a buffy port-folio.

This topic is closed to new replies.

Advertisement