As of real language - C# > Java. End of Story. I'm a C# fan who said so ( still 2 years in Java ).
Anyway - C++ is roughly the same thing. And by roughly I mean - you do the same stuff for any game, with the exception of memory management ( the biggie ) and a few other things. This comes with the appropriate reward also - you performance could get a hell lot faster with C++.
The actual thing I needs special attention is not the tedious C++, and writing memory managers and file headers ( yuck! ), but something else.
I've seen many Unity developers so used to unity that they actually forget many of the things that Unity does for them ( rendering, physics, everything ). So getting to know how those work in general will be of great use. Most of those ideas could be applied and will be useful even in Unity, besides the gain of knowing wtf is happening.
PS : I'm a self taught student, too.
PS1.5 : I'm just guessing you actual skill level ( based on that I wrote the whole thing ).
Learn programming, not languages.
Learn concepts, algorithms, data structures, etc
Sure, it's okay to have a favorite language, but you should be able to pick up any language with similar programming paradigms fairly fast.
There is no "real" language, the real language is what gets the job done. You don't get a magic programmer badge because you made the program in C with hand optimized assembly.
Also, just for funsies, you should be able to use any mono 2.6(or is it 2.8?) compatible language with unity. I haven't tried it - so I may be wrong.
If you're interested in learning more about the nitty gritty details of game making, there's directX/openGL bindings in nearly every language.
Last edited by echtolion; 06-15-2012 at 02:51 AM.
Thanks for all the input guys, this is great.
I have started actually learning Java, which people will probably react strangely to. I have heard bad things everywhere about java but I love it and think I will stick with it for a while. Of course that's on the side of working with unity.
I didn't choose C# because I have a macbook and I will be traveling alot so I wont be able to program C# on a macbook, not going to bootcamp it. C++ is doable on a macbook and I am interested in learning that, but I have read in many places that for a first nitty gritty language that C++ isn't a good choice, at least for starters.
Things like " In C++ you would have to do 10 lines of code where in other languages you would have to do 2 lines"
On a side note, anybody here ever learned Brainfuck?
Probably pretty useless but fun otherwise.
This is not true, you can(should be able to?) run mono + monodevelop just fine on mac unless someone wants to correct me(I'm not a mac user)
Also, java and C# are very similar because they're basically brothers.
Last edited by echtolion; 06-15-2012 at 07:26 AM.
C#, while created by MS, has an ECMA standard, and will run on Mac and Linux.
Says the guy using Unity. You know the engine that uses C# on Windows, Mac, Flash, NaCL, Wii, Xbox360, PS3, iOS, Android etc.
C# is just a language, it has an implementation nearly everywhere thanks to mono.
Also, there's a very good mono port of XNA http://monogame.codeplex.com/
There are a couple of great ways to run the whole thing ( Visual Studio ) on Mac. Some friends of mine even prefer it over Windows, because it were faster ( They're just overcompensating for the money they've spent on the Mac ).
Anyway with the proper virtualization software you can get your windows stuff on Mac including visual studio - virtualization software technology on the CPU ( 2006 + ) and newer Mac ( 10. + or smthing ) are the things you need. It can leech a bit more ram, but with the laptop capacities these days I don't consider it much of a problem.
If you're in for the free stuff you can go with :
A virtual Windows == Excellent VS
Great one - I think it even supports seamlessly integrating the other OSs windows as regular applications.
Besides that there is a Wine application which works perfectly fine on Macs too ( even though it might be a lot more trouble )
And the 2 ultimate solutions which aren't that free, but I would buy them if I were to develop on a Mac:
Basically the same thing - you run windows apps as Mac apps without too much hassle.
PS : Java isn't bad, the syntax is nice and smooth and it's pretty easy. But C# is faster and has a handful of stuff over it, take that and they'll look the same.
if you want to work in the industry, C++ is the language to know. Even if you wont use C++ for your actual job, you will prob need it for your interview tests. However, this is for the bigger companies who do console and PC gaming. You will need C++ to make the game or be a tools programmer. If you work for a smaller team/company, they will more likely have a game engine to use since they don't have the time (not enough money to pay employees for longer dev cycle) or the experience to make a nice game from the ground up. But also, that lack of money may force them to make things from the ground up as well...no funds to license tech...or maybe they like doing things themselves since they have complete control.
Also, on a personal note, making a game from the ground up is very rewarding. I def dont get the same feeling when using unity. I dont get why people said not to do it...a short while ago, that was the only way to make games. Who cares if you never finish a personal-made-for-fun game if the goal is to learn and improve your skillset. I also feel like I'm losing skill when I let an engine or a managed language do everything for me..its just so easy to forget or stop caring about details. I also do get to learn how to implement certain systems if the game engine does it for me. Any technician can learn how to use a system, but an engineer designs the system!
With that said, Unity (as well as any game engine) does save me time to get right to making games, and that's why they are important. also, I cant do graphics as well as the guys who make unity, unreal, cry engine, etc, so its good to leverage their know-how. But, if these things don't matter to you, then who cares, I just giving my opinion since I'm more of a programmer than a "games programmer" so YMMV. IMO, making a game from the ground up is like teaching a man to fish, as opposed to giving him one.
Well it's all about convenience for me actually.
In Java the input class I've had, had me to create a ton of classes to handle all kinds of inputs, even the simplest ones.
In C# I just use a function pointer aka delegate and implement the functions wherever I need them.
My networking thread in Unity is pretty cool, but It can't actually use anything from Unity. That's why I use coroutines. They're cool and all ( and probably could be achieved in java, too with some work ).
The thing is that my coroutines usually wrap up just a function call or two-three lines of code. I use lamba expressions or anonymous functions - simple.
In Java I would've had to create a separate function for each of these calls, that's a hundred or more 2-3 lined functions.
Dictionary<uint, List<string>> urls = new Dictionary<uint, List<string>>();
I say the exact same thing twice on the same row.
In C# I go:
var urls = new Dictionary<uint, List<string>>();
The compiler fills the rest for me ( which isn't that hard actually ).
Another fancy thing is LINQ - with lambda expressions and LINQ syntax I could easily sort, find or manage any amount of data. It will even look nice and tidy in my code. And as it turns out it's rather fast.
Structs, outs and refs - those give you way better control over your code.
In Java you basically pass everything by reference, besides base types, but there are some other rules that apply and the whole thing might be a little confusing if you're not used to it.
In C# you have 2 rules - structs - passed by value, classes - by reference ( a bit more to that but that's roughly it ).
Unsafe code. Java has it's virtual machine, C# has the CLR. Both are funky, manage your memory and save you the headache. Big time.
But sometimes you may need the additional bit of speed. Unsafe code gives you that - you can basically mess up everything, manage your memory and be a C++ coder for a moment, while still using the C# language to automate pretty much everything else besides that bit.
Nullable types are pretty awesome, but I've never used those too much ( neither needed anything similar in Java ), so I don't take it as a big red dot on the C# board.
Those are the primary reasons I've chosen C# over Java ( even though I could've went with the python-like Boo or js even easier ). Take those and a couple of other things away and C# and Java are the same thing.
Don't spend a lot of time learning the standard c++ or Java.
Instead you should expose yourself to Haskell, Scala and Boo.
Richer programming concepts and you get exposed to modern seperation of concern with traits and proper implemented aspects instead of the old static oo inheritance chain of doom.
Typeclasses for example frees up a lot of inherit chains which you can implement via interfaces.
Last edited by Sirex; 06-17-2012 at 03:56 PM.
Who the hell makes games in Java? I know.. there is a market, but why not go after the big fish?
I do! My very first playable game was in java. In the 10th grade.
Spoiler : It's TOO awesome.