# The Definitive Guide to Language Selection

This topic is 4107 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

##### Share on other sites
1. What do you feel qualifies you to write 'The Definitive Guide To Language Selection'.

2. Your guide only covers two programming languages. How is that definitive? Even if someone covers the other three languages mentioned, a guide covering only five programming languages can still hardly be considered definitive; why have we automatically ruled out the entire BASIC family and it's derived languages, countless scripting languages, and C among many other languages.

3. You mention that many existing tools and SDKs are implemented in C++; whil this is to an extent true, I think you'll find that legacy code/libraries/engines written in C are far more common than those in C++.

4. Again, you mentioned the availability of compilers across multiple platforms as an advantage of C++, but there are many platforms which lack C++ compilers or lack a fully-featured standards-compliant implementation; if you're looking for something that should be available everywhere you'll probably find C to be much better supported.

Just a few quick points. If someone hasn't done it later I might take a stab at a brief coverage of the other languages you missed, but I'm still unsure as to the actual value of this thread as a reference.

##### Share on other sites
Quote:
 Original post by Kazgoroth1. What do you feel qualifies you to write 'The Definitive Guide To Language Selection'.

This thread hopefully by the time it is closed :) I am not qualified to write such a thing, nobody is. I am qualified though, to get the ball rolling and hope the community can be mature enough to be as impartial as possible, and through community effort make such a guide. Ok, perhaps the title was a bit grand... hey, cant blame a guy for shooting high! :)

Quote:
 Original post by Kazgoroth2. Your guide only covers two programming languages. How is that definitive? Even if someone covers the other three languages mentioned, a guide covering only five programming languages can still hardly be considered definitive; why have we automatically ruled out the entire BASIC family and it's derived languages, countless scripting languages, and C among many other languages.

You are right, I only covered two languages. Frankly, I only have years of experience with two languages and prefer to only speak on subjects I understand. I havent ruled out anything, I hope other people pick up the flag and cover their languages of expertise. Ideally I want to see VB, VB.Net, Python, Delphi, etc... all covered in this thread. But like I said earlier, I have no right to comment on the strengths and weaknesses of those languages. Look to this thread as a place for each language expert to argue the weaknesses and strengths of their chosen languages. The two examples I cited were just to get the ball rolling, I hope. I have ruled out nothing, and I hope nobody else does either. Hey, if you have a particular language you want to argue the merits of, please pipe in! I hope this to be a definitive thread we can direct new developers to when they ask "What language should I choose". If I alone answered that question, this thread would be dripping with ignorance and bias already!

Quote:
 Original post by Kazgoroth3. You mention that many existing tools and SDKs are implemented in C++; whil this is to an extent true, I think you'll find that legacy code/libraries/engines written in C are far more common than those in C++.

Yes, but I figured that was rather a matter of splitting hairs and very confusing to a new developer. C today, is pretty much C++, although that is a terrible mindset to take! If someone wants to take C on as an independant language from C++, that is their perogative. Although frankly, I think very very few people actually use C anymore.

Quote:
 Original post by Kazgoroth4. Again, you mentioned the availability of compilers across multiple platforms as an advantage of C++, but there are many platforms which lack C++ compilers or lack a fully-featured standards-compliant implementation; if you're looking for something that should be available everywhere you'll probably find C to be much better supported.

Really? The fully featured standards compliant part I can beleive ( hell, is their a single fully compliant compiler even available??? ;) ). Frankly though, I cant think of a single relevant ( to gaming ) platform, that doesnt have a C++ compiler available for it. Please inform me if im wrong, but I know of C++ compiliers for Windows, Dos, Linux, BSD, Mac, GameCube, Xbox, PS2, PSP, DS, nGage, and most mobile phones. Granted, C is more available across platforms but I cant think of two many platforms without C++ available to them.

Quote:
 Original post by KazgorothJust a few quick points. If someone hasn't done it later I might take a stab at a brief coverage of the other languages you missed, but I'm still unsure as to the actual value of this thread as a reference.

That is exactly the point. I want this to be a one stop shop of (mostly) unbiased merits of various languages. Please do so! It beats having the same conversation again and again, let alone devolving into lame language wars. If you can accurately describe the pros/cons of a programming language I havent covered with a minimum of bias, please do so!

##### Share on other sites
Oh, and if anybody with BlitzBasic, DarkBasic, GameMaker, etc... experience feel like chiming in, that would be great aswell. Many new developers ask about the strengths and weaknesses of these environments aswell!

##### Share on other sites
I only skimmed your post, but I want to point out the following.

Quote:
 Original post by Serapth.NET is a library of routines to do day to day stuff.

.NET is more than this. It includes the CLR (Common Language Runtime), Microsoft's implementation of the CLI (Common Language Infrastructure). Such inadequate abbreviations of the larger picture constitute the main source of misunderstanding regarding .NET, an issue you appear to be aware of:

Quote:
 .NET is a very confusing topic to many ( for good reason )

Quote:
 It *can* execute a bit slower because of the overhead of being virtualized.

It can also execute more quickly, because the JIT compiler can make optimizations relative to the machine the program is being run on.

##### Share on other sites
Quote:
Original post by nilkn
I only skimmed your post, but I want to point out the following.

Quote:
 Original post by Serapth.NET is a library of routines to do day to day stuff.

.NET is more than this. It includes the CLR (Common Language Runtime), Microsoft's implementation of the CLI (Common Language Infrastructure). Such inadequate abbreviations of the larger picture constitute the main source of misunderstanding regarding .NET, an issue you appear to be aware of:

Quote:
 .NET is a very confusing topic to many ( for good reason )

Quote:
 It *can* execute a bit slower because of the overhead of being virtualized.

It can also execute more quickly, because the JIT compiler can make optimizations relative to the machine the program is being run on.

You are right on both accounts, and like you said, it is a topic of which I am aware of. However, im intending this thread to be a primer for new users, so I dont want to get to mired in details. Hell, explaining what .NET actually is could take an entire thread on its own, and still fail! :)

##### Share on other sites
*Raises hand*
I have a question?
Why not do a Wiki article so that people can put their information in an unbais enviroment and edit what of other people they find bias. That's exactly what Wiki is for! Then people could write about as many languages as exist. A link from this forum to the article would also be very apropriate. It could be a Gamedev community driven Wiki-project! Wouldn't that be cool?

##### Share on other sites
I think this thread is retarded. I am a beginner programmer and am interested in such facts.

However, it was stated at the beginning that this thread should be summarising language pro's and con's and NOT getting pedantic about other peoples comments.

So far there have been like 7 posts, yet only one of which is useful (the first). The rest of them have been just snapping at each other and about what X ACTUALLY is. Who the hell cares! this is for beginners, and beginners are not going to notice the minor inaccurate descriptions on peoples posts unless other people point them out. So how about we all shut up and if you have a post with something USEFUL to add for a BEGINNER then do so.

##### Share on other sites
Quote:
 Original post by DjMaShthis is for beginners, and beginners are not going to notice the minor inaccurate descriptions on peoples posts unless other people point them out.
It's because those inaccuracies aren't going to be noticed by a beginner that they should probably be pointed out; as a beginner, do you want a simple to understand explanation that isn't correct?

While people should certainly try to stick to the topic at hand and not nitpick minor details too much, I'd suggest that you'll end up with a better resource if people are allowed to point out what they feel are gaps or flaws in the information.

##### Share on other sites
Someone correct me if I'm wrong but I would have thought the Beginners forum is for people who have difficulties with their programming, or ask a questions about certain programming issues realating to games

I don't think this forum is suitable for debating the different kind languages, what each one is good for or how alike they are. This thread would likely cause people to side with their language and ultimately turn into a war of the languages as I have seen in past threads on similar issues.

##### Share on other sites
Quote:
Original post by Kazgoroth
Quote:
 Original post by DjMaShthis is for beginners, and beginners are not going to notice the minor inaccurate descriptions on peoples posts unless other people point them out.
It's because those inaccuracies aren't going to be noticed by a beginner that they should probably be pointed out; as a beginner, do you want a simple to understand explanation that isn't correct?

While people should certainly try to stick to the topic at hand and not nitpick minor details too much, I'd suggest that you'll end up with a better resource if people are allowed to point out what they feel are gaps or flaws in the information.

It probably won't make a difference to the beginner. By the time beginners are going to need to know about these topics, are when they are quite experienced and capable of picking a language on their own.

##### Share on other sites
Quote:
Original post by Kazgoroth
Quote:
 Original post by DjMaShthis is for beginners, and beginners are not going to notice the minor inaccurate descriptions on peoples posts unless other people point them out.
It's because those inaccuracies aren't going to be noticed by a beginner that they should probably be pointed out; as a beginner, do you want a simple to understand explanation that isn't correct?

While people should certainly try to stick to the topic at hand and not nitpick minor details too much, I'd suggest that you'll end up with a better resource if people are allowed to point out what they feel are gaps or flaws in the information.

It probably won't make a difference to the beginner. By the time beginners are going to need to know about these topics, are when they are quite experienced and capable of picking a language on their own.

##### Share on other sites
Another idea: How about making overview table that rates the most important aspects used for language selection each language, like this:
Note: This table is a mock example for illustrations only.                                             C    C++    Java    C#    Python    Delphi    BlitzBasic    DarkBasicEasy to learn and use                        -    --    +        +     ++        +         ++            ++Big community                                +    ++    ++       ++    ++        +         /             /Gamedev libraries available                  ++   ++    /        /     +         +         ++            ++Run time efficiency                          ++   ++    /        /     /         ++        /             /Free implementations available               +    +     +        +     +         -         -             -    Often used by professional game developers   +    +     -        -     -         -         -             -Has been used to make (semi-)pro games       +    +     +        +     +         +         +             +Note: This table is a mock example for illustrations only.

I think that would be more useful than long rants by advocates.

Bonus points: make each rating an expandable link/popup that explains the rating in more detail.
Even more bonus points: Allow voting, web 2.0 style.

##### Share on other sites
Quote:
 Original post by DjMaShI think this thread is retarded. I am a beginner programmer and am interested in such facts. However, it was stated at the beginning that this thread should be summarising language pro's and con's and NOT getting pedantic about other peoples comments. So far there have been like 7 posts, yet only one of which is useful (the first). The rest of them have been just snapping at each other and about what X ACTUALLY is. Who the hell cares! this is for beginners, and beginners are not going to notice the minor inaccurate descriptions on peoples posts unless other people point them out. So how about we all shut up and if you have a post with something USEFUL to add for a BEGINNER then do so.

I agree, but u have to consider this is GameDev.net. There are some real helpfull people with good threads, but you also have to consider that most of the programmers who respond to this are in their cubicle and haven't seen the sunlight in a couple weeks. They get cranky and then come here to vent.

What we really need on this board is a list of poster for beginners to beware. Now that would have some real merit.

##### Share on other sites
maybe, just maybe this will help beginners more.

http://www.gpwiki.org/index.php/Picking_a_Language

##### Share on other sites
Quote:
 Another idea: How about making overview table that rates the most important aspects used for language selection each language, like this:

I don't think that's particularly useful. Whether or not a language has widespread professional use is pretty much irrelevent, in almost all cases, as a basis for selection by a beginner. Furthermore, categories like "run time efficiency" are misleading and equally useless, because the language isn't the entire deciding factor there. And so on.

It's pretty much impossible to come up with a simple, general metric like that that actually has utility, because the statements it makes are so broad and vague and hide so many implications.

Quote:
 What we really need on this board is a list of poster for beginners to beware. Now that would have some real merit.

That's what the rating system is (ostensibly) supposed to do. Although I'm not sure how well the use and meaning of the system is communicated to new users.

In general I would agree that it would be nice to have a resource discussing the merits of a variety of languages, but I'm so sure it could actually happen in a way that would be useful. Certainly this thread (or any thread) is not a suitable medium (although Serapth gets some credit for trying). An article or some other "mostly static" medium would be preferable, because it wouldn't get clouded by discussion and misinformation. A discussion thread is more useful as a research mechanism.

The problem, though, is that there are as many (good) reasons to pick a particular language as there are languages themselves; and you have to remember that the complete neophyte has different needs for a language -- typically, he needs a language that will help teach him the concepts involved in programming without bogging him down in language-specific idiosyncracies (which is why, for example, the "professional use" portion of the previously suggested metric is mostly pointless).

##### Share on other sites
Quote:
 Original post by jpetrieI don't think that's particularly useful. Whether or not a language has widespread professional use is pretty much irrelevent, in almost all cases, as a basis for selection by a beginner. Furthermore, categories like "run time efficiency" are misleading and equally useless, because the language isn't the entire deciding factor there. And so on.

Why do you think I put this between two bold disclaimers "Note: This table is a mock example for illustrations only."? [rolleyes]

I simply used these criteria as an example, because they often come up in these discussions. Any "Definite Guide" should mention them and at least explain why they are "irrelevent". Or even better, show the rating anyway.

And even if such criteria can never be perfect, they are far preferable to random rants and discussions without any structure. The posted link is a nice example:
Quote:
 Original post by crowleyhammerhttp://www.gpwiki.org/index.php/Picking_a_Language

For my taste, it's still a bit long and will probably scare more beginners away than it educates. On the other hand there is still so much information missing.

That's why I think a table and expandable explanations might be a good alternative.

##### Share on other sites
Quote:
 Original post by jpetrieIt's pretty much impossible to come up with a simple, general metric like that that actually has utility, because the statements it makes are so broad and vague and hide so many implications.The problem, though, is that there are as many (good) reasons to pick a particular language as there are languages themselves; and you have to remember that the complete neophyte has different needs for a language -- typically, he needs a language that will help teach him the concepts involved in programming without bogging him down in language-specific idiosyncracies (which is why, for example, the "professional use" portion of the previously suggested metric is mostly pointless).

It might be impossible to come up with objective criteria to evaluate languages, but it should be possible to come up with something that is useful for beginners. One such effort is snk_kid's blog Self taught beginner (game) programmers are misguided, let me shed some light...

When I started, I was completely clueless and like so many people I began with C++. I can't even remember why exactly, but it probably had something to do with the fact that everyone else seems to do it for gamedev. Completely clueless means here I didn't even know what a compiler is, what libraries are and didn't understood that most concepts are not tied to a language. Like a lot of beginners I didn't realize that what is learned in one specific language carries over to other languages and that that is the most important part. I also thought that all the complexity of C++ was proportional to it's power and expresiveness, and all the hard work grokking it would pay off.

A metric for the usefulness of a language should always be in light of a specific goal, for example learning how to program with the intention of making games. One thing I don't see so much is some higher perspective to all this (like snk_kid's blog) targeted at the beginner. For example, to understand something about the differences between languages it would help to explain the following concepts as well, on a very basic level:

- compiled and interpreted languages
- type system
- scalability, complexity
- programming styles: procedural, object-oriented and functional
- libraries
- importance of programming concepts vis-a-vis mastery of syntax
- when performance does and does not matter
- productivity

A discussion / article which manages to give a survey of some languages in the light of these points should be informative for beginners. I think a guide to language selection, if aimed at the beginner, should also explain some of the criteria used (and why they are used) in a general way.

##### Share on other sites
Quote:
 Why do you think I put this between two bold disclaimers "Note: This table is a mock example for illustrations only."?

I'm well aware you included the disclaimer. It was precisely in response to that disclaimer that I said, "It's pretty much impossible to come up with a simple, general metric like that that actually has utility, because the statements it makes are so broad and vague and hide so many implications."

A chart or table with a number of stars or some other kind of rating next to general categories is not beneficial because it ignores the specifics, which are the key to selecting a language for most purposes. And if you include expandable detailed descriptions as to what each general category means, and when the rating given to that general category applies, you destroy the usefulness of the rating entirely for all situations where it doesn't apply, and it just makes the chart misleading.

Quote:
 One such effort is snk_kid's blog Self taught beginner (game) programmers are misguided, let me shed some light...

##### Share on other sites
I think the most important thing to get across to beginners is that the language they pick to start with does not have to be (and should not be) the one they use for every project they ever write in their lives.

This invalidates many of the criteria usually considered. For example, *any* reasonable language is more than perfromant enough to learn with. You don't need efficiency for guess the number or tic-tac-toe [smile].

Also, the existence of great game libraries is not such a big deal. You don't need to have access to professional game engines or networking libraries from your starter language. Having some way to display simple graphics would probably be nice though. Then again almost every language has some way to do this.

I think this misconception contributes to the large number of beginners who head down the long, winding path of learning C++. Which I feel is a mistake. I would alos guess that a good majority of game developers started out with somthing simpler than C++ like some form of BASIC.

My two cents.

##### Share on other sites
I don't think this is a good, idea mostly because in a thread based system like this it will be hard to find actual information. Someone experienced would have to compile the information somewhere. Also the Serapth's post is heavily biased, towards OO imperative compiled1 c-derived languages (that's actually quite specific). To be fair you'd need to cover OO, procedural, logical (eg. Prolog) and functional at least. You would need to at least mention a minimum of special features like memory management (GC? RAII possible?), concurrency (message based? Lock based? Data flow variables? Implicit? Thread-based? Futures?) and evaluation (lazy or eager?). FYI evaluation style is very important when choosing a language, both because of the technique of programming and because of effiency gains/loses.

Your post also contains lots of misinformation, which could really misguide beginners. "99% of commercial windows or console games", more like 10-15 %, AFAIK the Java, C and C# are more widely used.

About the greek and chinese, they won't really understand the advantage of early/late binding, but neither will they understand the advantage of Boost, libraries, etc. You will need to properly explain all concepts before describing languages, and that isn't an easy task. You need to give beginners easy to understand information like "X is easy to learn", "y is efficient". However this will most likely misguide them, since they want to easily and efficiently create their new MMORPG. So you'll also need to explain how to choose a language, that you can't just go ahead and create a MMORPG, you need years of experience in various languages and projects before even starting the design.

If "definitive" guide would have to be created you would at least need to cover different approaches to programming, like functional (maybe also logical or constraint based). Some languages I don't think you can leave out:
Scheme (SICP, a good approach to programming)
Common LISP (cool object system, and have lots of cool features neatly integrated)
Standard ML (interresting type system, similar to Haskell in some regards)
O'Caml (another functional languages (not strictly functional though) )
Smalltalk
Erlang (fault tolerant, interresting concurrency model)
Epigram (not all that mature or proven, but have dependent types which is interresting)
Prolog (example of logic programming)
AspectJ (one of the most important aspect-oriented languages)
Java (imperative, JIT compiled, OO)
C (low-level, very popular)
Objective C (popular on Macs)
C++
C#
Oz (an example of a lanuage integrating many concepts)
I have most likely forgotten a bunch.

I doubt many people here at GDNet would be able to create such a guide, there are a few who I believe might be capable of doing it (I'm not one of them).

1: C# is actually a hybrid language, but in the end it's compiled on the end user's machine.

##### Share on other sites
To add to the language database: Felix along with any C++ libraries, and Objective Caml with LablGL and/or OCamlSDL bindings.

##### Share on other sites
Quote:
 Original post by CTarI don't think this is a good, idea mostly because in a thread based system like this it will be hard to find actual information. Someone experienced would have to compile the information somewhere. Also the Serapth's post is heavily biased, towards OO imperative compiled1 c-derived languages (that's actually quite specific). To be fair you'd need to cover OO, procedural, logical (eg. Prolog) and functional at least.

You are 100% correct. My hope was others here would do a writeup about other languages.

Obviously, that failed.

##### Share on other sites
The reason that this effort has failed - and the reason that similar efforts have always failed, and likely will always fail - is because what language a beginner selects really doesn't matter. People who no longer consider themselves beginners put far too much emphasis on the matter. The beginner should pick a language - any language, based on any criteria, no matter how bad or irrational - and stick with it. Yes, picking another language may have made things easier, but not by that much.

These days, whenever someone asks "language X or language Y," my response is "flip a coin." Seriously, it doesn't matter that much. Yes, picking C# when your objective is to write games for mobile phones may seem irrational, but the truth is that the majority of your early work will not be on the mobile phone but on the PC, and the majority of your gained knowledge/understanding of programming translates to Java or C++.

This is why language wars are silly.

##### Share on other sites
Oluseyi has a good point. (I'd probably be more sarcastic and reply with: "English".)

I started with Sinclair BASIC. Unfortunately, advising people to start on a Sinclair ZX81 / Timex 100 rarely goes down well with the instant gratification crowd intent on creating the next great MMORPGRTSONEONEONE in a week.

There is no reason for an FAQ for this subject, simply because the question is, at best, rhetorical.

There is no way to provide a definitive answer without knowing far more about the questioner's intentions. When the questioner has given you the full, contextual background behind his query, the answer is, more often than not, dictated by pragmatic necessities rather than base desires and thus becomes moot.

I would therefore replace any such FAQs with a more general guide to game development for beginners. I'm working on an outline for such an article at the moment, which I intend to post to the forums for further refinement and discussion before embarking on the full work. (I could use some writing samples for my CV, so this seems a good opportunity to kill two birds with one flame war.)