I have recently encountered CodinGame a platform where you can code and deepen your knowledge — and this with a gaming environment.
Some of the training tasks are game based, which means that you see the results of your code as movements in the game. And this makes the site very good in my eyes.
The main aim in my eyes are trainings. There are several options to train your brain and coding skills: different levels of classic puzzles and community puzzles.
Community puzzles are like those tasks at various other sites you can find like exercism.io or CodeWars. Here is no game engine involved so this is a bit boring but there are nice tasks which can give you hints on further coding.
The classic puzzles are the ones where you get a user interface and the output of your code triggers movement on the screen. The best thing about the site is that you get this at the beginning with the onboarding puzzle and this catches you for a long time, I promise.
Naturally there are some training exercises which do not have graphical UIs but they are fun to do and you can learn a lot of different topics when you approach solving them. Each of the puzzles describes which topics you can take a deeper look if you cannot come up with an algorithm on-the-fly.
Here is no ranking, you only get badges if you solve puzzles.
If you fill your coding skills good enough (and I think every time is a good time) you can join multiplayer games.
Here the story is a bit different from trainings: you code algorithms for games and compete with other players on the platform. However each of these games give you a description which topics you should be familiar with to come-up with a competitive algorithm but you can start coding just for fun!
I did the same: after some trainings I started to write basic code (I call it Artificial Unintelligence) to see what I am capable of. And as I have seen, some people do not care about their code: they just push a basic version (the default code you get when you join a multiplayer game) and are in. They can be easily outperformed.
As you might think: multiplayer games are ranked. This means, you compete against the code of others and depending on your results you are ranked. Some games are divided into leagues which make thinks more interesting. To advance a league you have to beat the league’s CodinGame-provided artificial intelligence and it is harder every time.
Another way of multiplayer games are optimisation puzzles. Here your task is to maximise your score or minimise fuel usage. I like these type of puzzles too because you not only need to provide code but to make good algorithms to rank among the good developers.
Clash of Code
A real-time multiplayer competition is Clash of Code Flash. Here you have 15 minutes to solve a programming task out of 3 categories:
- Reverse engineering
- Shortest code
These names already suggest what you need to do. Fastest requires you to implement a valid algorithm which passes all tests in the shortest amount of time — and it does not matter how ugly your code is. Reverse engineering is about shortest solution time too but here you get only the inputs and outputs and you have to figure out the algorithm all by yourself — the code can be ugly here too. Shortest code takes up the most time because here you have to provide the right solution with as few characters as possible — here your code will be ugly too because if you want to win you have to use 1 character long variables and remove spaces where you can.
This is the main highlight of CodinGame. Contests are 1 week long multiplayer competitions where you can attend and write your algorithm and match with other developers. Games, you see in the multiplayer section started out as contests and include the feedback from developers.
My first contest was fantastic bits and I finished 492 of 2399. As I went through the forum I have seen that many of the fellow developers used AI algorithms to rank in the top 10. For me this knowledge is missing but I am happy that I finished so well with my Artificial Unintelligence. And this gives me pushing to learn more, do more training, write more code for multiplayer puzzles and get ready for my next contest.
As a side-effect you can win prizes if you finish in the top N — this depends always on the contest itself. I have no plans on winning but I like it when I get something in return for my efforts.
One drawback is that the language updates are slow. I do not know how it is with other languages but with Rust and Swift (my current toy programming languages) there are old versions available, which lack some features I would love to use (because my solutions in Python/Java rely on them and I am too lazy to re-think).
The second drawback in my eyes is with clashes and code golf. Here is a difference between programming languages which lessens the joy.
Code golf is about short code. Some languages are not about shortness, for example Java, where you need a lot of boilerplate code (imports, class definitions) just to read the input. And with this you cannot rank in the top 1000.
Clashes share some similarity because in every mode in some languages you have to type more to have the results and this can take some ranks in the end. So if you clash, do not get upset if you do not win because your programming language. See it as an experience and learning opportunity to see how you can solve a problem and how did others.
Beside the drawbacks I can only suggest you to join CodinGame. It is free and you can win things with different contests and perhaps jobs (but as mentioned most of them are based in France and require French but if you do not mind, go for it).
Perhaps we will clash or our algorithms will meet at a contest or multiplayer games. Feel free to keep in touch with me there too!