Learning an actual language

I'm a strange person. I have been working with unity for a long time, but I feel like unityscript just isn't giving me a whole lot of experience that I can actually use in the industry. I have learned the basics of C++ and Java, and I love unity, But I think I should go back and make some games with C++ or Java before I really get into working in some sort of engine.

What are your thoughts on this? If I do go back and start with another language, which one should it be?

I just feel like It would be better for me as a self taught student of programming to start with a language that I can apply in many places.

If you know Java, you know C#. Their similarities far outweigh their differences on the coding level (syntax, principles, keywords, etc).

I do consider Unityscript a "real language", in the sense that I can write real programs and real games with it. It's as real as it gets on that aspect.

However, if you feel it doesn't give you the options you need, or if your ego can't stand the fact that you're writing code on an API dependent language, C# is a very good alternative, given the fact that you already know Java.

Programming is not only about learning language syntax. You should learn about algorithms, data structures, software engineering etc. You can learn many languages on the way but your aim should be to use effectively.

Back in school they gave us lots of assignments which were usually known stuff. Coding them without cheating was generally difficult but very beneficial. One of them was a number class that could do the 4 basic operations instantly on very large numbers(limitless digits). You can try that kind of stuff to improve your overall skills. Language does not matter.

It often isn't that relevant to know multiple languages. The syntax between the different languages available in Unity just isn't major enough. If you are able to code in one, you should be able to shift almost effortlessly. Most of the time spent getting used to Java (not Javascript), from a C# developers perspective, for example, is a matter of getting used where the built-in functionality of the framework resides, rather than dealing with the actual programming language.

That being said, there are a LOT of programming languages I consider worth learning, if for no other reason than them providing a different approach, or take.

- Assembler is always worth learning, if you ask me. If you're serious about programming, it will teach you a lot of worthwhile lessons.
- Erlang
- Haskell
- Lua
- Scala

If you want to learn a different programming language, I'd honestly suggest you pick one that is different from your current one in some regard; whether that be abstraction level, paradigm or level of parallelism.

Edit; oh and C++ along with OpenGL or DirectX, if you have no prior experience with it. It will teach you a few lessons as well. In general, dealing with a state-driven system such as OpenGL is somewhat of a different experience.

I've delved a bit into lua and I actually like it quite a bit, but it seems more for scripting than writing an actual game.

Pretty torn between what to choose, C# and XNA are nice, and I love how C# is object oriented, but I think C++ would be nice to learn more of if I decide I want to mess with udk when UE4 comes out since that is going to be purely C++.

Unity goes above and beyond my expectations and I can do everything I want with it. But sometimes I feel like it would just be more...substantial to learn a more commonly used language and make games in openGL or directx. What are peoples thoughts on this?

Every realistic language that you'd look at is Turing Complete. You can do in C# what you can in C++ or VB or Python or LISP or Perl or Go. Eventually, every language will look pretty much the same to you and it won't really matter what you pick.

Unity goes above and beyond my expectations and I can do everything I want with it. But sometimes I feel like it would just be more...substantial to learn a more commonly used language and make games in openGL or directx. What are peoples thoughts on this?

Click to expand...

C# is a commonly used language.

As for using openGL or DirectX - What do you want to accomplish? Writing a game engine? Or writing a game? I can tell you it takes a long time to write an engine, and that's what you'd be doing before you ever got to game making.

Unity goes above and beyond my expectations and I can do everything I want with it. But sometimes I feel like it would just be more...substantial to learn a more commonly used language and make games in openGL or directx. What are peoples thoughts on this?

Click to expand...

I wouldn't ever recommend making a game from the grounds up in C++ along with DirectX / OpenGL. It is, however, worth learning if you wish to toy around with custom implementations of deferred shading and lighting, particle systems, fluid dynamics, etc. I wouldn't ever implement a full game in C++ along with DX, but I find it ever so handy to have available proof-of-concept for more tech-centred applications.

He shouldn't waste his time on low level languages unless he's writing drivers for hardware.

Click to expand...

No, I do not think it is overkill. This isn't as much related to the actual viability of writing assembly programs, as it is to the understanding of the underlying structure and interpretation of programs. Hell, if I could suggest it, I'd suggest that everyone have a decent understanding of compilers.

It isn't related to actually knowing how to code in assembly. It is more to give the general understanding of how programs are interpreted. It is highly relevant for a lot of developers. I've met plenty recently, who little clue why brancing is taxing on the CPU (more so some than others), or why square roots are expensive.

Also, yes. It would be overkill for game DESIGN. For the programming aspect of game DEVELOPMENT however, I'd find it quite relevant.

Unity goes above and beyond my expectations and I can do everything I want with it. But sometimes I feel like it would just be more...substantial to learn a more commonly used language and make games in openGL or directx. What are peoples thoughts on this?

Click to expand...

Sounds like what you should do is play around with an open source game engine like ogre (or whatever the hot open source engine is these days) and maybe make contributions to it.

Sounds like what you should do is play around with an open source game engine like ogre (or whatever the hot open source engine is these days) and maybe make contributions to it.

Click to expand...

I wouldn't necesarily recommend this. The complexity of opensource projects can often be a daunting task to deal with, in itself. This might just be my personal, weird take on it, but it often feels rewarding to implement something, whether real-time or not, from the scratch. If you haven't ever done a raytracer, a basic radiosity implementation, a take on deferred rendering, or something of the sort, it can honestly be a worthwhile investment of your time... if you have the time to spare, and wish to do something simply for the sake of learning, that is.

It sounds like what you want is to learn the nitty gritty at a foundation level. If so C++ and DirectX and or OpenGL is the way to go. As suggested assembly is good to learn for the sake of learning, nobody uses that anymore for the most part that I am aware of, perhaps some AAA games highly optimize small functions that are called thousands of times a second, but other than that I don't think so. Also for the sake of learning you should look into hardware, understand what all GPU's do.

Well, if you get a job using Unity then why not UnityScript? I think the differences are so small it is better off just learning one and learning another if you need but become good at the actual writing of programs and not just syntax.

It sounds like what you want is to learn the nitty gritty at a foundation level. If so C++ and DirectX and or OpenGL is the way to go. As suggested assembly is good to learn for the sake of learning, nobody uses that anymore for the most part that I am aware of, perhaps some AAA games highly optimize small functions that are called thousands of times a second, but other than that I don't think so. Also for the sake of learning you should look into hardware, understand what all GPU's do.

Click to expand...

Yeah, this is pretty much it.

After watching Indie Game: The Movie, I noticed everyone was using some sort of raw programming language. And it seems like it would be better for my learning and just feel more substantial to learn how to program in C++ or C# ( still deciding ) and even though I wouldn't be able to make advanced games like unity, I would still feel like I was doing stuff that matters in my education.

I'm not dissing unityscript but as I've said many times it doesnt feel substantial enough.

Don't learn one learn both! Once you learn C++ thoroughly C# is a snap. I learned C++ when I was a teenager then C# last year when I picked up Unity. I didn't really need to learn C#, just figure out the differences, I did however spend too much time trying to get a global variable to work in C# (there isn't any unlike C++), so you might run into funny stuff like that but both languages are extensively used so its good to know them both. Unreal Engine 4 is supposed to be purely C++ and Unity with C# is great so... they're both relevant.

I went from GML (game maker language) which is similar to the C languages to using Javascript in unity. The transition was painless. It didn't take long to grasp the concept of functions, where game maker tried to dictate what functions I would work with (create, step, draw, alarm event...) In javascript you make your own functions though there are some defaults (start, update, late update ..etc).

The cool thing is I actually went back to game maker and made a game (space orphans) and I used pretty much the same syntax as java script. I also made my own functions in GML the same way it's done in javascript and it helped me organize my code in a much more functional and clear way.

The bottom line is, you will learn from each language you delv into, there will be some learning curve when adopting a new language but you still take tons of learned goodness with you from your past languages.

Having a basic grasp of java will get you started in c# no problem. I suggest that you stick to c# and if you want to learn something substantial then dive into algorithms and data structures, maybe roll your own A* or something. Good luck in whatever you choose.

I looking into learning a language like c sharp alot.. and I found if you wanna develop games for a game company or make your own software its a must but if you want to develop games using a game engine not soo much

But heck where I live there are jobs with Unity and way more with c# in particular though not necessarily game development programming jobs, but then again we have Microsoft here so there are lots of C# jobs with xna.

Well C++ is close to the metal and a mile away from Java/C# in terms of memory management etc. It's a great language and a good challenge to learn.

I guess it depends what games you want to write though - C++ gives you the best native performance but the cost to produce the game is high - there's a lot of manual work to do that, and hard issues around testing that just reduces significantly with things like C# and so it's going to be the big companies that are producing big high performance titles that are going to use C++.

Given the native performance of C# these days - things will slowly move that way I reckon. If you want the job skills though, C++ is probably the way to go.

The Javascript > C# question is more difficult - JS is much more tightly integrated with Unity than C#. C# is a more powerful and expressive language which makes it faster to write games with less code.

I am looking into C++ and OpenGL ( for its mac capabilities ) or DirectX.

Still not sure. I want to keep working with unity but also learning C++ would be fun and I think I would enjoy the challenge of making a simple 2D game engine or maybe a tiled level editor.

Click to expand...

Sorry to insist, but if anyone wants to work for a game company as a coder, it's not C#, it's C++.

Click to expand...

Yeah thats what i meant. I was in a rush when i posted earlier this is what my post was supposed to say

I was looking into learning a language like c++ alot.. and I found if you wanna develop games for a game company or make your own software its a must but if you want to develop games using a game engine not soo much

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 ).

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"