Advanced Java topics

Hey guys.

My name is David and I have been developing games in Libgdx for six months and I feel like my coding skills are improving every day but because this is a Java Forum, I would like to know, for your opinion, what else can improve my coding skills?

Also, I would like to learn new advanced topics in Java that may help improving my progamming a little bit. What do you think are good subjects to learn?

C++. It will change the way you think about Java. After I started programming with C++, Java became more like a scripting language for high productivity and worse performance.

If you don’t haven’t already, learn GLSL and write some shaders :point:

Well, it’s hard to tell what you should learn without knowing what you already can do, but I’d recommend some scripting language, and try to implement it in a game engine. Scripting is really useful for games.

And as @Longarmx said, learn GLSL. It’s the best thing in OpenGL since sliced bread.

And after that, once you think you know how programming works, try Haskell, a lisp, or both. Good for mind-expansion and leads to a better programmer in any language.

As for Java-specific, I wouldn’t call them ‘advanced’ but you can get a head start on functional programming by incorporating lambdas and Streams (Java 8 goodies) into your repertoire.

^
I highly disagree with this. The only thing I do agree with is that picking up a small subset of C++ or all of C or another lower level language might help your understanding in Java.

Good subjects to learn are Networking, AI, Algorithms + data structures (Linked List, Binary tree, Hash, etc.), Parsers, multi-threading (modern with executor, promises, and futures and lower level with just threads)

edit:
+Functional languages, dunno how that slipped my mind

Could you please elaborate about that? Do you mean stuff like Lua, etc?

Yeah, or if you want, you can start with languages that are built specifically for JVM (and thus easier to implement), like Groovy or Scala.

But scripting is mainly useful for big programs like games (because there’s much, MUCH less compilation time), other than that, there’s not many uses I can think of.

Could you give an example of a use of a scripting language like you mentioned in a game development?

Also, how exactly learning a new language will help me to improve my coding skills? Wouldn’t it be odd learning a new language instead of focusing and improving Java?

Scripting languages can be used for programming AIs, items, etc. Basically, only the base engine is programmed in a compiled language. That allows easier editing of the game itself without excessive compiling with every single change. Very good example is the game Don’t Starve, where only the core mechanics are written in a compiled language, everything else is in Lua.

And, knowing how to implement a scripting language into a game engine may (but doesn’t have to) help with understanding of how languages interface with each other.

Scripting languages have always been somewhat irrelevant with Java around.

Cas :slight_smile:

That doesn’t mean they can’t be used with it. I did some projects in the past in Java and Python. And I’m not talking only about Java with scripting language, I meant game development in general.

Because different languages (and more importantly, ones using different paradigms!) do things differently, and often give you better perspective/understanding of what you do in any language. This also goes for working with other people, etc.


Learn bit manipulation. It’s extraordinarily useful. And yeah learn C++. I also suggest Assembly and Lisp. They make you think in a very different manner.

I advise you to work on free software. When you release your source code, other developers can look at it and make (preferably constructive) remarks. Personally, I would read your source code for sure. I think that you can learn a lot from others.

Run some source code analysis tools like PMD and Findbugs on your own creation to evaluate its “quality”. Maybe you will learn a lot about your mistakes.

I advise you to learn how to use design patterns wisely in video games, especially the flyweight design pattern.

I advise you to improve your skill in algorithms, physics and maths. It depends on which kind of games you create. I’m very interested in spatial subdivisions.

I advise you to learn OpenGL, preferably with JOGL because I would like to find someone to help me to maintain the JOGL backend of LibGDX because Xerxes and me are already very busy. Moreover, it would give you a deeper understanding of the functioning of frameworks and libraries based on OpenGL.

Edit.: I think about state machines too and I advise you to look at the Fettle API.

Ok guys I started learning Lua. Any tips on how to adjust myself to this language?