A fun way to learn programming languages
A fun way to learn programming is to start learning is with a simple project. You can learn new languages and have fun by building a simple game. With each language you’ll find similar patterns and appreciate how scripting languages simplify, while languages “closer to the metal” give us the power to create highly optimized programs.
Choosing a language to learn should fit your future goals. You should consider the size of the community, available open source projects, and the documentation for your language of choice.
Difficulty Levels
Beginner Friendly
At this level, you should expect rapid feedback as you build your game. Typically you’ll use a scripting language that abstracts or hides all the complex bits. The framework must have thorough documentation explaining how to work with each component it has available. Bonus points if they also have complete example projects to review and learn from.
Intermediate
We’re leveling up here, which means you have some experience writing code but you’re mostly a hobbyist. At this level, you’ll most likely need help from the engine authors themselves or members of their community. The framework should have a place to ask questions or even contribute updates, i.e. their github page.
Advanced
Now you’re playing with power! These engines give you the raw power of your device, from highly optimized physics engines to pixel shader effects. At this level, you should have a good grasp of memory management, algorithms, and 3D mathematics (Linear Algebra).
Simple Game Ideas
- Tic tac toe
- Tetris
- Pacman
- Break out
- Asteroids
- snake
Lua
Overview
Difficulty level – Beginner friendly
Lua is a fun way to learn programming. Lua is not just used in games. It’s designed as an embeddable scripting language. While you can embed other scripting languages such as python or javascript, Lua has proven that itself with its performance and small size.
Solar 2D
Overview
Solar 2D, formerly Corona SDK, is an open source project that uses the Lua language. It gives you the option to build for multiple platforms from mobile phones to desktop operating systems.
Out of the box you’ll also get components such as:
- 2D physics engine
- Graphics effects
- Monetization options
- Social Media plugins
- Analytics
- And so much more
Platforms
- Mobile (Android / iOS)
- Desktop
- Connected TV devices
- Web sites
Roblox Studio
Overview
Roblox Studio is another Lua game engine and platform that allows you to create 3D games and experiences. Roblox has over 50 million monthly players and is growing each day. It comes with its own toolkit that allows you to build and play your 3D world in one program hence being a Studio.
Platforms
- Desktop (Windows / MacOS / Linux)
- Mobile (iOS / Android)
- VR
Python
Overview
Difficulty level – Intermediate
Python strives for simplicity in its code. This simplicity is partly enforced by indentation in its syntax. Like all other scripting languages, it uses components built in C/C++ for performance.
Ursina engine
Overview
Ursina engine gives you the power to build 2D and 3D games. Most everything in Ursina is focused on Entities. Entities describe the properties and logic for all objects in your game world. Ursina is a less opinionated framework, leaving it up to you to structure your code how you like.
Platforms
- Desktop
Pygame
Overview
Pygame offers a standard set of functionality for graphics, audio, and input handling from various devices including game controllers. The documentation is not for complete beginners and you will need to know what you’re looking for. Luckily, since Pygame is a mature library you’ll find tons of tutorials and examples to help.
Platforms
- Desktop
Kivy
Overview
Kivy is a modern framework and is built with the future in mind. This future includes mobile devices with multi-touch input and not just mouse/pointer interactions you find only on Desktop. Another great benefit is that Kivy is a well-funded project with professional developers actively maintaining and updating functionality while also being a free open source project.
Platforms
- Desktop
- Mobile (Android / iOS)
- Raspberry Pi
Licensing
- MIT
Javascript
Overview
Difficulty level – Intermediate
Javascript is mostly found in your web browser powering interactive elements that standard HTML/CSS can not handle. Building your game with javascript allows you to reach a wide audience by publishing on your own site. Since it’s a scripting language, you can rapidly develop with quick feedback without having to wait for a compiler to finish.
Phaser
Overview
PhaserJS is a 2D engine that gives you tools for graphics, audio, physics, and a lot more with plugins. You’ll also find that it has well organized documentation and tutorials to get you started.
Platforms
- Web
- Mobile Web
PixiJS
Overview
Pixi is the HTML5 creation engine and focuses mainly on 2D graphics. If you’re looking for a standalone graphics library, look no further.
Platforms
- Desktop Web
- Mobile Web
Boardgame.io
Overview
Thinking of making a turn-based game, boardgame.io has what you need. It has functionality that covers game state management, multiplayer, and player matchmaking.
Platforms
- Desktop Web
- Mobile Web
BabylonJS
Overview
BabylonJS is a physics based web rendering and 3D game engine and has everything you’d need to craft 3D animations and games. Babylon is also a build once / deploy anywhere solution that works for web, desktop, mobile using its native frameworks.
Platforms
- Web
- Mobile (iOS / Android)
Rust
Overview
Difficulty level – Intermediate
Rust is a system level language similar to C++ that also includes memory safety features without a garbage collector. Rust also works well with WebAssembly to give more power to your javascript projects. Similar to Lua, you’ll also get a small footprint that helps with resource constrained devices.
Bevy
Overview
Bevy is an open source data driven 2D/3D game engine that gives you quick feedback for rapid development. Bevy also includes ECS (Entity – Component – System) objects to help you build composable games.
Platforms
- Desktop (MacOS / Linux / Windows)
- Mobile (Android / iOS)
- Web
Amethyst
Overview
Similar to Bevy, Amethyst gives you an ECS based game engine that also has a massively parallel architecture. You’ll also get rapid prototyping for your prefab assets and lots of documentation describing all details of their core architecture.
Platforms
Android – Kotlin
Overview
Difficulty level – Intermediate
Kotlin is a general purpose programming language that is most popular with Android mobile development and former Java developers. Kotlin eliminates a lot of the boilerplate code that was needed in Java. Similar to Ruby or Python, Kotlin code style ignores the need for extraneous syntax such as semicolons and gives you a lot of utility with its core data types.
libGDX
Overview
Craft 2D / 3D games with libGDX that gives you a mature (10 years in development) framework and a lot of features out of the box. With a large community you also get an assortment of third party libraries to fit your needs.
Platforms
- Desktop (Windows / Linux / macOS0
- Mobile (Android / iOS)
- Web
KorGE
Overview
A 100% kotlin based engine, KorGE gives you a visual editor embedded into your IDE. KorGE gives you the power to build your own bundles through GitHub or use community bundles to include additional assets and features. You can also debug your game in real-time with its embedded debugger.
Platforms
Go
Overview
Difficulty – Intermediate
Go was developed by Google in response to current technologies in 2007 (i.e. C++) that did not fit their needs for global scale applications. Those aspiring to work with such massive scale systems may have heard of Go but not in the context of building games.
Pixel
Overview
Pixel is a 2D game engine using Go that’s under active development (pre 1.0 release). Pixel gives you all the essentials for graphics, audio, and input handling with more coming for its 1.0 release. Contributors are welcome to join their discord and submit code updates.
Platforms
- Desktop (Windows / Linux / macOS)
- Mobile (coming soon)
g3n
Overview
g3n is a 3D engine using the Go language. It uses a scene graph design to render the world and process events. Contributors are welcome to join their discord and submit code updates.
Platforms
- Desktop (Windows / Linux / macOS)
- Web (using WebAssembly)
C / C++
Overview
Difficulty level – Advanced
C / C++ is the core language of most other scripting languages and has a long history used in all software from operating systems to games. C / C++ requires specialized knowledge and care to build a solid framework that accounts for memory management, efficient algorithms and API design.
SDL
Overview
Simple DirectMedia Layer aka SDL gives you low level access to your device’s graphics, audio, and input hardware. You can include code from other languages such as Go, Python, Lua, and Rust through SDL’s bindings.
Platforms
- Desktop (Windows / Linux / macOS)
- Mobile (Android / iOS)
Oxygine
Overview
Oxygine is a pure C++ game engine that uses a scene graph design. Built on top of SDL and Marmalade, it also includes an embedded profiling tool to inspect your scene graph and performance.
Platforms
- Desktop (Windows / Linux / macOS)
- Mobile (iOS / Android)
- Web
Unreal Engine
Overview
Unreal Engine is one of the most widely known and used engines for games. It includes a 160 hour video training program for free to learn along with a massive community forum. Licensing is free until your project has reached $1 million in revenue. Funding for noteworthy projects is also available through Epic MegaGrants.
Platforms
- Desktop (Windows / Linux / macOS)
- Consoles (Xbox / Playstation / Nintendo Switch)
- Mobile (Android / iOS)
Godot
Overview
What are you waiting for, use Godot! Godot is free and open source through the MIT license. With it’s studio you can build 2D & 3D projects that includes an animation editor, scripting, and a multi-platform deploy system. You’ll also get tools to collaborate together with your team.
Platforms
- Desktop (Windows / Linux / macOS)
- Mobile (Android / iOS)
- Console (Nintendo Switch / Xbox One / Playstation)
- Web
Frameworks I’ve used
- libGDX
- SDL
- Pixijs
Frameworks I want to learn
- Unreal Engine
- Kivy
- Bevy
- Pixel
- Roblox Studio
Stay Curious
Stay tuned for some of my own examples using these frameworks as well as future posts diving into essential building blocks used in all games. If you found this helpful or I missed a framework, please let me know in the comments.
Continue on your journey and learn how to think like a programmer!