Best language to be "versatile" in game making.

Started by
67 comments, last by kop0113 11 years, 7 months ago
I have been following this topic very closely, and this is my personal conclusion as a self learner and with a BS in CS.

All the programming are a trip to learn. Think about them as is a way to help you achieve the system/game you have in mind. Please don't waste your time on analizing what could be more easy/dificult to handle/learn. In my experience, the harder things to learn are the most rewarding.

What I do is follow the trend; I do what PRO game developers do because, if you do, at the end you will achieve the same goals and results. It's just a matter of logic deduction.

Another thing, if virtually all the modern tools/games/engines are made in C++, it's because it has to be very versatil and rewarding (Valve or Epic can't be wrong), thus, needs some time to understand and learn; but when you do it, the results are limitless.

And finally, start TODAY. There's a bunch of tutorials/activities/classes/etc on the internet. The first that comes in my mind is gameinstitute.com, powered by PROs of the industry.

If you really want to make games, the only thing is that's stoping you is your attitude.

Hope this helps. I wish you the best success in this awesome trip.

Edit.
And you need to have "talent" to do it? nah, I don't think so. I think you have to stick with it until you accomplish your job. I remember a quote of John Romero that says (about when he was learning C) "crap, I remember readying all the book and not understaing anything that was saying". And that didn't stop him.

Check this article i read today:
http://www.theverge....on-took-so-long

Edit 2.
I wrote this as a way of reflexion. I frecuently try to stick to Aristotle's quote: Says the ignorant, the wise doubt and reflect.

Thanks guys.
Advertisement

What I do is follow the trend; I do what PRO game developers do because, if you do, at the end you will achieve the same goals and results. It's just a matter of logic deduction.


Unfortunately your logic is wrong.
Beginners are not pros - pros are often people with years of experiance in the field thus what a pro does or does not use is of no importance to someone just starting out.

For example where I work we play many tricks with how memory is allocated, pointers are fixed up and how things are passed around the system; we are professionals and yet I would never advise someone to follow our line of thought without experiance.

The end result of the journey might well be using the tools that pros use however this will be relevent once the person in question gets to their level.


Another thing, if virtually all the modern tools/games/engines are made in C++, it's because it has to be very versatil and rewarding (Valve or Epic can't be wrong), thus, needs some time to understand and learn; but when you do it, the results are limitless.
[/quote]

And they are designed this way due to legacy and existing requirements - those are not the same requirements that a beginner is going to have.

Also there has been a shift to the vast majority of in-hosue tools being written in a .Net language.

Most games in existance are probably Flash or otherwise based as such C++ has no relivance there either.

AAA game production, staffed by experianced people with specific requirements, is not a guide for where someone should start regardless of their ultimate goal - it might guide their process as they progress however first of all you have to learn to program and as such what pros do is not important.

And even if you fall back to doing char * strings or <type>* memory allocation you now run into the world of no bounds checking where you can do as you like and nothing will tell you otherwise until something blows up in your face.

I've seen beginners confused by things relating to 'access violation at address 0x000000c' which I can look at and say 'oh, it's this...' right away but they have no idea about. And yet allocating instances of types and calling functions on them is central to C++ but not for learning to program and can be taughted better in language which tell you via better error messages what has gone wrong. Try missing of a ';' somewhere in a header and watch the explosion of error messages which happen due to one tiny syntax error which has no impact on the ability of someone to learn the basics of programming.

Hell, there was an example recently of someone being confused because they could apprently call a function via a null pointer to a class without things going wrong.

The C++ standard itself is known for using the word 'undefined' or 'implementation defined' through out its language.

None of the things I've mentioned above are 'advanced' and yet I've seen over the years people repeatedly trip up over them and then the resulting cryptic error messages/reactions from the runtime which can come about from it.

Edit: you can also add to that list compile times, header files, pathing issues and libraries.
Again none of those are advanced but being forced to deal with them just to learn is, to use your phrase, 'insane'.


He'll learn the best way to do the things he's been doing later. Just like when you start off writing code like int box1, int box2, etc, and then later you learn "Oh, that's what arrays are for. Bad habit erased."


But it's not just Bad habits like that - C++ carries with it a massive legacy and with it comes 'advice' which might have been important 10 or even 5 years ago but these days is worthless.

New C++ programmers, the ones who seem to defend the language with such tenacity (or ones who only know C++ like it is the only thing worth knowing), are also the biggest source of 'not made here syndrome' - many shunning the standard library as if it is some slow and horrible thing, instead favouring that own bug ridden versions, because they once read somewhere that it was slow. This persists going forwards and instead of taking advantage of tools which exist they go on to try and reinvent everything because they feel somehow they will 'learn more' (also the classic excuse of someone who wants to make a game but believes making an engine first is a good idea).

This is a mind set which is VERY hard to break and one which continues to be recycled from programmer to programmer as someone new starts all the other newbies around them just tell them what they have done themselves.

(I figure it must be some kind of self reinforcement cycle - "if someone else does it then I can't be wrong" but that's far far off topic).

All of the above is why, when compared to other languages, C++ is lacking.

Yes, C++ has it's strengths, one of which is being on all platforms and other of which being if you know what you are doing you can get more out of it than maybe you can in another language HOWEVER those two arguements are utterly moot because they are advanced topics (often requiring knowledge of the target platform and how the code generation can work) and you have already stated that advanced things don't matter to beginners.

When you are starting out getting told what you are doing wrong is more important than speed or frankly other considerations beyond learning the art of programming.
C++ makes this harder than it needs to be.
[/quote]

This was by far your best post. You used specific, concrete examples and attacked the ideas I presented instead of attacking me, I love this post. Now here's my response:

I've come up against a couple of the things you mentioned, and usually after already getting a couple of days into coding something. It was frustrating, I was confused, there were few answers, and it would have been easy to quit. But it was also exciting. It's fun making horrible mistakes and then learning why they're mistakes and what makes them so wrong in the first place. There's no better way to learn about something than to try really hard at it, fail, and then ask people who know better than you "Why did I fail?" It will always be better than having people warn you beforehand: You should absorb what you can from what you read/are taught, try it out, and then go back to learning with the new perspective you've gained from putting it in action: You can relate to what you're reading.

This is my personal philosophy, and you may agree or disagree.

And what you bring up also points to a very valid concept I neglected, but should have mentioned: There are some languages that might be better for those who want to learn to program games, and then there are some better for people who want to make games. I think it is misguided to try to write your own huge libraries/tools/engines when you can just build on previously done work, but then again the people who justify it by saying "I'll learn from it" are being sincere. Most likely, they aren't just interested in making games, but also understanding the basic inner workings of games. They want to know why the cool stuff works just as much as they want to make the cool stuff.

To that end, it's a bit harder to find a distinction between learning to program and learning to program with the technologies at your disposal. If a person agrees with you, they'll think that C++ is overkill, or too burdensome, and they probably think it's a language that requires too much technology learning at the cost of programming learning. If a person agree with me, they probably feel like they're interested in both learning the foundations of programming, and some powerful technologies to program with.

Again, it's just a matter of personal discretion rather than some god-given guideline. Completely subjective.

Unfortunately your logic is wrong.
Beginners are not pros - pros are often people with years of experiance in the field thus what a pro does or does not use is of no importance to someone just starting out.

In this case, phantom is far from wrong.
Beginners should not emulate pros—the same results have no meaning if the reasons behind them are not understood.


But phantom says (without quoting) that people don’t learn from mistakes they can’t see.
That’s really a non-issue. Programmers will see those mistakes when the time comes that they reveal themselves.
The logic that a beginner will only see certain mistakes at a certain time can be applied to us all.
Whatever your level in C++ is, a mistake at your level +1 could be lurking in the shadows.

We will all get to them when we are ready.
As far as I am concerned, facing them early on is just building a level of critical thinking that will at a later age put you above your peers.
Unless you want to deny the biological truth that younger people learn more easily than older people.

You do no one a favor by presuming what they will be thinking at age 30.
I can tell you I wish I had learned C++ sooner so that I would be better at it today. For me to have followed the advice given on this forum today—
It’s like a 3-year-old child I met on the plane to Thailand the first time I left America. His mother was Korean, his father Japanese, and he was raised in America.
Guess what. While everyone else is second-guessing how much children can learn, his Korean and Japanese were entirely fluent, while I at the time knew only English (he also knew English, making him trilingual at age 3, with no accent in any language).


I stand by my previous statement.
Each person learns at his or her own level and rate.
Let each person explore this subject on his-or-her own and decide for him- or her- self what language is suitable for him or her.





Shaquil is not making his point very well, but he is not wrong.

What do you mean?
[/quote]
I mean what I said. I am sitting here taking your side, but I can’t vote up your posts. Something irks me within them…
That being said, it is possible that you are not being taken seriously enough because of your rating.
I do feel that some people are making C++ seem more horrible for a beginner than it should be, and I agree with points you have made in your posts.
They have been taken out of context and used to promote the other side.


C++ was my 3rd language, preceded by BASIC (TI-81 Calculators) and mIRC Script. That is what I had available to me. I could not initially grasp concepts such as dynamic memory allocation, and I was an idiot in this regard, but no previous programming experience helped me with it, and I would have ultimately been better off just learning it from the start.
As I mentioned, this was a basic thing I learned later than I should have just because of my upbringing.

Again, the final answer is to let this person try some languages himself and decide by himself what is overwhelming. Everyone learns differently. We can’t answer this question for this person.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid


I've come up against a couple of the things you mentioned, and usually after already getting a couple of days into coding something. It was frustrating, I was confused, there were few answers, and it would have been easy to quit. But it was also exciting. It's fun making horrible mistakes and then learning why they're mistakes and what makes them so wrong in the first place. There's no better way to learn about something than to try really hard at it, fail, and then ask people who know better than you "Why did I fail?" It will always be better than having people warn you beforehand: You should absorb what you can from what you read/are taught, try it out, and then go back to learning with the new perspective you've gained from putting it in action: You can relate to what you're reading.

Now you have started to support your side better.

This is the type of person I would hire. Is it not the type you would hire?

I can also say for sure that I would never hire a person who asks, “What are the minimum requirements for blah blah blah.” I don’t care about people who seek the minimum requirements to complete a job.

C++ is harder to learn but I would rather have someone on my team whose resolve has been tested than someone whose resolve has not.
That being said, going with another language as your start is not so bad as I make it seem either. Again you really need to gauge this for yourself. Few people will blame you if you discover that C++ is too much to learn as a beginner. But you should at least try it out before you dismiss it.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid


I do feel that some people are making C++ seem more horrible for a beginner than it should be, and I agree with points you have made in your posts.

On the other hand, most of the people making C++ out to be a nightmare (myself included), have experienced C++ in a production environment. My impression (possibly incorrect) is that most of the posters avidly defending C++ do not share this same experience.

My daily work involves tracking down and squashing the kind of bugs that even highly experienced developers introduce to a large C++ code base. The type of bugs caused by triggering undefined behaviour in the language, misinterpretations of the language standard, compiler-specific edge cases, and obscure threading and allocation issues (which are often platform-specific).

Now, I'm not saying that other languages don't suffer from many of the same problems - but a language like Java does a hell of a lot more to insulate you from this sort of thing. And that's why I'll always recommend that one not start with C++ as a first language.

C++ is harder to learn but I would rather have someone on my team whose resolve has been tested than someone whose resolve has not.[/quote]
So you like to hire stubborn programmers? Nothing wrong with that.

But sadly, 'learning' does not strongly correlate with 'knowing', when it comes to C++. There is a world of difference between someone who programs in C++, and someone who actually understands the language well enough to defensively anticipate pitfalls he hasn't run into yet - and trust me, there are still pitfalls that both you and I are yet to encounter.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]


C++ is harder to learn but I would rather have someone on my team whose resolve has been tested than someone whose resolve has not.
That being said, going with another language as your start is not so bad as I make it seem either. Again you really need to gauge this for yourself. Few people will blame you if you discover that C++ is too much to learn as a beginner. But you should at least try it out before you dismiss it.


For me it would depend; if they ONLY knew C++ then I'd frown on it a little. Knowing a few programming languages make someone considerably more useful than someone who only knows the one at the expense of others, even in a junior position.

Part of my usefulness on our rendering team is that I can work just as well on the C++ engine as I can with the C# and python based tools - in fact during our swift rewrite of our build system I'm pretty sure in one day I did significant code in all 3 languages. Granted I wouldn't expect a new person to be able to do that, but still if I was presented with two candidates who were otherwise the same and one had some C# experiance and the other a little more C++ I'd take the former over the later.

[quote name='jbadams' timestamp='1347080627' post='4977903']
I received the following question from the original poster via private message, but I'm answering here so others can also benefit from the responses.


[quote name='Tyl3r684']
As you know I want to begin python, where may I find updated tutorials there all from 2 - 3 years ago... :|

You'll want to learn Python 2.7 rather than Python 3; the differences (from your perspective) will be fairly minor and easily adjusted to once you decide to update, but for now a lot of the libraries (such as PyGame) you will want to use have not been updated to Python 3.

I recommend Thinking In Python, A Byte of Python, and the official documentation for learning Python. Once you get to learning Pygame you'll want to start with the official documentation and tutorials listed on the website.
[/quote]

Would there be a difference between 3, and 2? We both have 3 and are willing to downgrade.
[/quote]Different in syntax, the only difference I remember, is using ("this is a string") instead of "this is a string" for printing out strings. Or printing out anything.
But yes, I had to downgrade to Python 2, to get it to work with Pygame. That was in June though, so maybe they've updated their library.

Easiest way to make games, I love LÖVE && My dev blog/project

*Too lazy to renew domain, ignore above links


I do feel that some people are making C++ seem more horrible for a beginner than it should be, and I agree with points you have made in your posts.
On the other hand, most of the people making C++ out to be a nightmare (myself included), have experienced C++ in a production environment. My impression (possibly incorrect) is that most of the posters avidly defending C++ do not share this same experience.

My daily work involves tracking down and squashing the kind of bugs that even highly experienced developers introduce to a large C++ code base. The type of bugs caused by triggering undefined behaviour in the language, misinterpretations of the language standard, compiler-specific edge cases, and obscure threading and allocation issues (which are often platform-specific).


But this is where I think the conversation diverges from "Is C++ a good language to start with?" and becomes "Is C++ a good language?" As I've mentioned earlier (many posts ago; I don't expect anyone to go back and read) "learning" code and "mission critical" code are two entirely different things. Someone whose first language is C++ may never actually use any C++ at their workplace. On the other hand, someone who started with python may end up writing tons of C++ code in positions you've held yourself. We're talking about a starting point. The very beginning. The basics. And in that context, C++ is just plainly no worse than many of the other languages mentioned. There's a lot that it doesn't do for you, and there are plenty of things you're left confused about; but this isn't a problem exclusive to C++.

We're talking about a starting point. The very beginning. The basics. And in that context, C++ is just plainly no worse than many of the other languages mentioned.

Spot the error that won't be caught by compiler or runtime, then try to reproduce the same (silent) error in Python:
[source]int main(int argc, char **argv) {
if (argc > 1);
printf("too many arguments.\n");
}[/source]
And another:
[source]int main() {
char *array = new char[10];

array[20] = 5;
}[/source]
Shall I go on?

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

This topic is closed to new replies.

Advertisement