Sign in to follow this  
zjr568

Java or learn c++

Recommended Posts

I have been learning java for the past 4 or 5 months. I started dabbling in making games about a month ago in java following some tutorials on YouTube and have found that I enjoy it quite a bit. I have been reading some of what people say around the internet and they say that c++ is much better for making games than java. I was wondering if I should switch to c++ and start learning it instead of continuing java. I haven't been able to decide and I hoped that you guys here would have more incite on this than anyone else on the internet. Thanks

Share this post


Link to post
Share on other sites

I don't use either, but I have heard that it really doesn't matter. There are great games made in java and great games made in c++. When you think about it, they are both incredibly popular languages and are for a reason, both are very powerful tools. If I were you I would simply stick to java, but if you think you will prefer c++ more, use that. I think it is more of a personal preference than a definite answer.

Share this post


Link to post
Share on other sites

I'd say learn to make a game in Java first so you get the hang of programming, and then consider switching. C++ is not a beginner friendly language to learn. It's like someone tried to make an octopus by nailing 4 legs onto a greyhound ;)

Share this post


Link to post
Share on other sites

c++ is much better for making games than java

 

People argue that java is a little slower than C++, which may be true in numbers, but honestly it doesn't hinder its ability to make great games.

C++ is more difficult and complex than java and since you have already been learning java, you will prevent many headaches by sticking with java.

 

I won't tell you to not learn C++, it will certainly prove to be an excellent tool, but don't leave java behind just because someone said c++ was better.

 

Edit: I take back what I said about slapping in the face, but honestly people that think this are stuck in the days when java wasn't what it is today.

Edited by minibutmany

Share this post


Link to post
Share on other sites

Thanks for all the answers everyone. Also I see what you mean Cornstalks. I am not doing anything complex enough right now for the language to affect it. My main thought was why learn java if it is obsolete to something else I could learn. Almost like why waste my time with it but like you said I will use java for other things in life so I might as well stay with it. Thanks again for everyone's input. Oh and one last thing. It seems like c++ is more widely used in game development than java. If this is true wouldn't there be more a lot more information online about creating games with it.

Share this post


Link to post
Share on other sites

 I started dabbling in making games about a month ago in java following some tutorials on YouTube and have found that I enjoy it quite a bit.

 

Other than the Youtube bit, you answered your own question.  You've been using Java for a few months, are making progress with it and are enjoying it.

 

Stick with it.

 

What other people tell you, tell them to blow it out their arse.  Opinions are like... oh wait, already covered that orifice.

 

 

 

Simply said, you've got a hell of a lot to learn still from the Java side of things, you are making progress and it's going well, so stick with it.  When you run into an actual barrier that you can't surmount, not a contrived one "other people" tell you that you are going to hit, then switch languages.

Share this post


Link to post
Share on other sites

complete control over your code,

 

Just curious, but what exactly in real world terms, do you mean by this.

 

At the tier of skill we are talking about at the beginner level, this expression comes up so often, but I cant imagine beginners really find they don't have the level of control over Java/C#/JavaScript/Lua/VB/etc... that they do over C++.  In 99% of my coding experiences, even though I've been at this professionally for almost 15 years, I rarely run into situations where I don't have complete control over my code.  I have on a few occasions thought I ran into such a situation, but generally it was my ignorance of how the language I was working in actually worked. The few examples I can think of are time of the time of garbage collection, byte ordering, implicit memory allocation and direct hardware access... and again, none of those things are something a beginner ( or often intermediate ) programmer ever runs into.

Share this post


Link to post
Share on other sites

complete control over your code,

 

Just curious, but what exactly in real world terms, do you mean by this.

 

At the tier of skill we are talking about at the beginner level, this expression comes up so often, but I cant imagine beginners really find they don't have the level of control over Java/C#/JavaScript/Lua/VB/etc... that they do over C++.  In 99% of my coding experiences, even though I've been at this professionally for almost 15 years, I rarely run into situations where I don't have complete control over my code.  I have on a few occasions thought I ran into such a situation, but generally it was my ignorance of how the language I was working in actually worked. The few examples I can think of are time of the time of garbage collection, byte ordering, implicit memory allocation and direct hardware access... and again, none of those things are something a beginner ( or often intermediate ) programmer ever runs into.

I know I'm not the original poster, but you would have more control over the hardware with things like inline assembly, right? I'm fairly new to java, and correct me if I'm wrong, but you certainly wouldn't write an OS in Java, would you? But this thread is on Java or C++ for games so I won't pull the conversation that way.

 

I think both are great languages. I think since you're new and have already started with Java, stick with Java. I started with C++ and it took a few years for it to completely click (granted I was 10 when I started), Java has a kinder learning curve.

Share this post


Link to post
Share on other sites

A lot of concepts of making a game are the same across all languages. So I imagine if you are a beginner all that really matters is your skills going up :).

 

Right now I am prototyping some things in C++ and I find that it really is not quite as rapid as in Java or C#. So it has its disadvantages.

Share this post


Link to post
Share on other sites

If you enjoy Java more, then go with it. It is true that C++ is superior in performance, but at the beginner level you won't notice the difference. But if you are up to take a slightly complex, but better path - go with C++. In the end - the game you have made is all that matters, not the tool you have chosen.

 

Edit: wrote something stupid, deleted something stupid

Edited by GuardianX

Share this post


Link to post
Share on other sites

I'm 99.9% sure you can do function overloading in Java... you can't do operator overloading though and lack of unsigned types might be a bit of a chore if dealing with hardware directly.

 

Ah yeah, just checked that. Long time ago when I was working on android project it didn't work for whatever reason =\

 

Anyway in 3D realm C++ blows anything.

Edited by GuardianX

Share this post


Link to post
Share on other sites

 

complete control over your code,

 

Just curious, but what exactly in real world terms, do you mean by this.

 

At the tier of skill we are talking about at the beginner level, this expression comes up so often, but I cant imagine beginners really find they don't have the level of control over Java/C#/JavaScript/Lua/VB/etc... that they do over C++.  In 99% of my coding experiences, even though I've been at this professionally for almost 15 years, I rarely run into situations where I don't have complete control over my code.  I have on a few occasions thought I ran into such a situation, but generally it was my ignorance of how the language I was working in actually worked. The few examples I can think of are time of the time of garbage collection, byte ordering, implicit memory allocation and direct hardware access... and again, none of those things are something a beginner ( or often intermediate ) programmer ever runs into.

I know I'm not the original poster, but you would have more control over the hardware with things like inline assembly, right? I'm fairly new to java, and correct me if I'm wrong, but you certainly wouldn't write an OS in Java, would you? But this thread is on Java or C++ for games so I won't pull the conversation that way.

 

I think both are great languages. I think since you're new and have already started with Java, stick with Java. I started with C++ and it took a few years for it to completely click (granted I was 10 when I started), Java has a kinder learning curve.

 

In theory, yes, in reality no.

 

We are long long long gone from the day we poked directly at the hardware.  In the days of 16bit DOS and slightly less ( and this is when abstractions started taking over ) 32 bit DOS extenders, yes, we fiddled directly with hardware.  Now, unless you are writing drivers, not so much.

 

It's one of those things we talk about as a language feature, but unless you are hacking on an OS kernel or writing a device driver, you don't actually do in practice.  Especially not at the level of the OP.

Share this post


Link to post
Share on other sites

C++ is complex and easy at the same time, mainly because it lets you choice how to do things. If you choice the safe and easy C++ path development can go fast and smooth, but if you take the wrong turn you might up on a path that leads to certain death with no way to recover other then going back and starting over again. This is probably the biggest pitfall for new C++ programmers, the language doesn't prevent you from making a wrong turn, it allows you to mix automatic memory management with manual memory management, for example the compiler won't prevent you from calling delete on a stack variable, it will just horribly crash when you run the program.

 

That doesn't mean it's a bad language for beginners though, that depends on how your skills are and how patient you are. If you are planning to learn programming by diving straight into it and hope to succeed using trial and error, you probably shouldn't start with C++. However if you are patient and can refrain yourself from using certain language features before you understand how they work, it shouldn't be a problem. So called 'easy' language are no guarantee for success either, for example I started out with basic, which was considered easy, but the first attempts didn't turn out very well. And managed languages as Java certainly have their pitfalls as well, garbage collectors are unpredictable and can have some nasty side effects that are not beginner friendly.

 

Personally I would stay away from garbage collected languages and stick with predictable memory management systems, but that has a safe mode (preferable no undefined behaviour in debug mode, either safe and defined or debug assertion). Specially when you are learning, I rather have a debugger that says that you are doing it wrong, then a magic software component running in a second thread that attempts to silently fix your mistakes (specially as this sometimes fixes it the wrong way and you have no clue what happened). Question is, is there such a language, that is also suitable for making games...

Share this post


Link to post
Share on other sites

If you enjoy Java more, then go with it. It is true that C++ is superior in performance, but at the beginner level you won't notice the difference. But if you are up to take a slightly complex, but better path - go with C++. In the end - the game you have made is all that matters, not the tool you have chosen.

 

Edit: wrote something stupid, deleted something stupid

 

Yeah, this is a classic example of ignorance over the languages features, as opposed to an actual advantage. 

 

I don't mean that as an insult in the slightest.  It's just often brought up that C++ somehow gives you more control over your code, but in reality, for most day to day developers, it doesnt.

 

Unless of course you think rolling your own basic libraries == control over your code.  You can do that in any language, it's just in C++, you often have to do it.  This of course, ins't a positive.

Share this post


Link to post
Share on other sites

That doesn't mean it's a bad language for beginners though

 

 

Actually, that's pretty much exactly what it means.

 

 

 

Coincidentally, this comes up again and again and again in threads like this.  That the thing that makes C++ hard to use is memory management.  This is patently wrong.

 

This is what makes C++ fragile, there is a much different thing.

 

What makes C++ bad for beginners is a myriad of things.  The convoluted inheritance system, the fact its 4 languages mashed together, the horrible build process, the completely lacking standard libraries, the 20 years of legacy cruft.  These are the things that make C++ bad for beginners.

 

Memory management... not even close to the boogieman it's made out to be.  Don't get me wrong, it can blow up in your face, but its really no different then leaking an unmanaged resource in C# for example.

Edited by Serapth

Share this post


Link to post
Share on other sites

If you enjoy Java more, then go with it. It is true that C++ is superior in performance, but at the beginner level you won't notice the difference. But if you are up to take a slightly complex, but better path - go with C++. In the end - the game you have made is all that matters, not the tool you have chosen.

 

Edit: wrote something stupid, deleted something stupid

 

Yeah, this is a classic example of ignorance over the languages features, as opposed to an actual advantage. 

 

I don't mean that as an insult in the slightest.  It's just often brought up that C++ somehow gives you more control over your code, but in reality, for most day to day developers, it doesnt.

 

Unless of course you think rolling your own basic libraries == control over your code.  You can do that in any language, it's just in C++, you often have to do it.  This of course, ins't a positive.

 

Yes, things like DirectX make C++ stand out of the crowd.

Share this post


Link to post
Share on other sites

I like C++ since it has tons of game and graphics libraries for it, not to mention the sheer amount of tutorials and books on game programming that use C++.

Its not as hard as some people make it out to be, it aint close to the nightmare that calculus based physics was... lol

Share this post


Link to post
Share on other sites

 

If you enjoy Java more, then go with it. It is true that C++ is superior in performance, but at the beginner level you won't notice the difference. But if you are up to take a slightly complex, but better path - go with C++. In the end - the game you have made is all that matters, not the tool you have chosen.

 

Edit: wrote something stupid, deleted something stupid

 

Yeah, this is a classic example of ignorance over the languages features, as opposed to an actual advantage. 

 

I don't mean that as an insult in the slightest.  It's just often brought up that C++ somehow gives you more control over your code, but in reality, for most day to day developers, it doesnt.

 

Unless of course you think rolling your own basic libraries == control over your code.  You can do that in any language, it's just in C++, you often have to do it.  This of course, ins't a positive.

 

Yes, things like DirectX make C++ stand out of the crowd.

 

DirectX is just a library.  You can generate bindings in a variety of languages, in many of them with very little overhead.  A prominent poster on this sight for example created SlimDX, a DX wrapper for .NET languages.

Share this post


Link to post
Share on other sites

Java is easier to handle, has a pretty big library, its very well documented (yay for javadoc!) and in my limited experience, I see its lack of complex features as a positive trait. Though learning a good ol' compiled language with manual memory management can make easier to understand many general quirks about programming (it might teach you a thing or two about why some things are like they are in a managed language) and shape up your coding habits (avoiding creating 8823824 objects in a 3 line method for example, Java makes it very easy to get these performance/memory hogs up and running like they're the best code ever if you don't know what is going on).

 

I think the longer you linger with a managed language before learning a non-managed one, the steeper the learning curve will be when you do so. You're going to deal with memory management, like it or not, managed language or non-managed language.

Share this post


Link to post
Share on other sites

I have been learning java for the past 4 or 5 months. I started dabbling in making games about a month ago in java following some tutorials on YouTube and have found that I enjoy it quite a bit. I have been reading some of what people say around the internet and they say that c++ is much better for making games than java. I was wondering if I should switch to c++ and start learning it instead of continuing java. I haven't been able to decide and I hoped that you guys here would have more incite on this than anyone else on the internet. Thanks

 

IMO, Java is just as good for making games as C++. So if you want to make games and you find it enjoyable, use Java.

Share this post


Link to post
Share on other sites

 

 

If you enjoy Java more, then go with it. It is true that C++ is superior in performance, but at the beginner level you won't notice the difference. But if you are up to take a slightly complex, but better path - go with C++. In the end - the game you have made is all that matters, not the tool you have chosen.

 

Edit: wrote something stupid, deleted something stupid

 

Yeah, this is a classic example of ignorance over the languages features, as opposed to an actual advantage. 

 

I don't mean that as an insult in the slightest.  It's just often brought up that C++ somehow gives you more control over your code, but in reality, for most day to day developers, it doesnt.

 

Unless of course you think rolling your own basic libraries == control over your code.  You can do that in any language, it's just in C++, you often have to do it.  This of course, ins't a positive.

 

Yes, things like DirectX make C++ stand out of the crowd.

 

DirectX is just a library.  You can generate bindings in a variety of languages, in many of them with very little overhead.  A prominent poster on this sight for example created SlimDX, a DX wrapper for .NET languages.

 

I'm fully aware that there is a number of wrappers for DirectX for different languages. But still they will perform slightly less efficient than original one. This is another one reason as to why we don't see any AAA-titles on Java. The only advantage Java gives you is unmanaged memory (just like thousands of other languages out there). In C++ you can work both with OpenGL and DirectX natively, dont need any JVM environment, and one can learn everything he needs about different programming paradigms and how computer actually works. Heck, you can ever write low-level code with it. You are right that beginner dont need all of it, but he can choose the simple OOP approach and forget about others for now. But if he needs them - they are here, unlike in Java.

Share this post


Link to post
Share on other sites

"This is another one reason as to why we don't see any AAA-titles on Java"

 

Minecraft is written in Java, Minecraft is not a "AAA" title. But I suspect that doesn't bother the now-multimillionaire author.

 

 

Java is plenty fast enough to write all sorts of games. Someone who's been playing with languages for a couple of months isn't writing a AAA title anyway. They're writing Tetris. And Java is a good choice to learn to write Tetris in.

 

I miss the days of Basic. When you could just turn the machine on and Basic was waiting for you. Didn't have all this crap about what languages and frameworks to use, everyone just used the Basic on their machine and moved onto using bits of machine-code when they were ready. And so people learned how to write game-loops and how to manage state and how to do collision detection and how to make a game actually fun without having a long debate on the internet about what tool to use because there was only one to hand.

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