Why You Should Learn to Code

Why low-code/no-code game development solutions are a waste of your time

Why You Should Learn to Code
Source: Fredrick Tendong on Unsplash.

Trust me, I get it. Learning to code is scary and hard.

I’ve worked with coding languages for over a decade now and I can confidently say that they are all taught one way and one way only and if you happen to be someone to whom that way doesn’t work for you, like me, it’s a difficult journey. Which is why I understand the appeal of low-code/no-code (LCNC) game development solutions.

In theory, you can bypass the roadblock that is learning to code and just get straight into making the game of your dreams. Unfortunately, I don’t believe that this approach is as beneficial as it sounds.

In fact, I recommend against it and believe that the best path forward is to learn to code.

This isn’t because I prescribe to some elitist ideals that you’re not a game developer if you don’t code or that I think learning to code is easy (I still struggle with coding, despite a decade of experience).

It’s because I believe that learning to build an entire game, no matter how small, with a low-code/no-code solution is, at the end of the experience, equal or more amount of work, complexity, and problem solving. At the end of the experience, you and your game will be worse off for it.

Source: Arnold Francisca on Unsplash.

The reason LCNC solutions in other parts of tech are so effective is because they augment a need for a solution at a single point in time.

If you need a website and you lack expertise in web development, then you may pay for something like Squarespace and they take care of it all. I would bet that a majority of Squarespace customers just have one website, potentially needed for a business or an event. The creation of a website is a minor hurdle in the grand scheme of things. Here are common scenarios in which the user does not have the time nor is it economical to learn how to develop a website natively.

Low-code and no-code frameworks are built on actual coding languages like PHP, Python, and Java, [in which] end users are not concerned with the specifics. Instead, they are given visual software development environments where they can drag and drop program components, link them, and watch what occurs.

National Informatics Centre

Game development is different. It’s a hobby and for some it’s a career. The only way a LCNC solution is even slightly economical is if you want to make exactly one game, of low-to-medium complexity, and never update it.

If you, however, intend to make more than one game, a game of medium-to-hard complexity, or something that requires updating, then economically it’s better to just learn to code.

The complexities of game development

Game development is insanely complicated. While I could write endlessly about why, that wouldn’t be an enjoyable read.

Besides, I need no more proof than the litany of unpolished games — bugged and broken — that are constantly being launched. Not to mention people who are at the top of their craft in coding have had a hand in creating these games.

There are endless documentaries, GDC talks, and behind-the-scenes interviews that explain just how complicated the process is and how many of the bestselling, best looking games are actually a bundle of work-arounds and quick hacks. It is a genuine miracle that any game releases at all.

This is why game development is a discipline that requires utmost flexibility, especially of its tooling. Every time you build a feature, you probably break two to three other features and then you need to change them to make all of them work again. All to repeat that process again when you make another feature.

Game development is iterative. It doesn’t matter if you make a game with perfectly working systems if it doesn’t appeal to anyone. Hence, you need to keep pushing the systems until they are working, but also are enjoyable for others.

Source: Hello Lightbulb on Unsplash.

A closer look into LCNC solutions

A LCNC solution sits on top of your game engine, and by its very nature of trying to simplify something complex, it takes all that flexibility and throws it out the window. It has to prescribe ways of doing things in order for it to be easy for an end user.

Put yourself in the shoes of someone developing a LCNC solution. I can think of at least four different ways I could move an object in Unity. Would a developer making a LCNC solution for Unity build in those four different ways into their product when there are thousands of Unity features (along with their multiple variants) on their list of things to build?

Unlikely, right? They will, at least initially, build the most common method of moving an object and then put the other three on a backlog for ‘future releases’.

This will happen across the board and what you end up with is a LCNC solution that has the ‘average’ way of doing everything. The average functionality of every feature doesn’t guarantee that each feature will work with each other.

You could easily be well into developing your game and find that things are not working right. Either they don’t work at all, despite the engine documentation saying it will, or it works, but performs horribly. Here you will need to troubleshoot and need to understand — at a technical level — what’s supposed to work in order to resolve the issue.

Troubleshooting isn’t just reading error messages and googling them. A decent chunk of it is tracking your systems through their steps using messages, different values, and objects. All of which you do with code.

Not to mention the error codes in engines are extremely technical like “null reference exception” and sometimes can be the byproduct of something else going wrong (that hasn’t generated an error code) turning the error code into a red herring.

Source: IDG Communications, Inc.

You could sink hours upon hours into troubleshooting. Since this requires an understanding of code and how the engine interacts with code, you’ll be trying to solve a puzzle missing half the pieces.

The only way past this problem is to either deal with it, change your game to work without it, or get under the hood and refactor the code the LCNC solution has built… except you’ve never learnt to code.

It becomes statistically improbable to make a good game without code. It’s not impossible, and there have been some relatively successful games that have claimed to have made a full game without code. However, a part of me wonders if they got lucky and made the sort of game in which a LCNC solution was perfect for the making or, along the way, got stuck and needed to get under the hood (did they call a friend?).

Learn to embrace the challenge

Few game developers, especially hobbyist ones, finish and ship a game. It saddens me to know that people are bringing their amazing ideas to the table and are potentially being prevented from executing on them because they went down the wrong route.

At the end of the day, game development is hard and everyone else knows that. That’s why there are a plethora of snappy YouTube videos and articles with headlines like “Make a Game Even if You Hate to Code.” These videos prey on those insecure with their coding ability or coding-shy in order to snag views. But game development isn’t about shying away from what makes you insecure, it requires constant learning of concepts that sound – at first – horrible and anxiety inducing.

Raycasting, quaternions, and kinematics are all scary, but you will learn them and a hundred other scary terms and concepts along the way.

Every time I sit down and work on game development, I am learning something new in that session. As someone who has been coding for years across multiple languages and disciplines, even when you are great at coding something, there are still new techniques to learn.

There is no bypassing the hard part of game development, the hard part is game development.

Bypassing the coding part of game development by using some other tool is just wasting your time. You are just swapping the learning of code, for the learning of the LCNC tool and how it does and doesn’t work. This might set yourself and your game up for scenarios where you will be forced to compromise, which is not what you set out to do when you began the journey.

Hackathon
Source: Alex Kotliarskyi on Unsplash.

It’s not that I don’t believe in LCNC solutions, I just think they have their time and place, and that time and place is not for hobbyists or career game developers.

I genuinely fear that people who approach game dev — rightfully afraid of coding — who start going down the LCNC route will either quickly fail (having learned nothing because the real learning was hidden under this overlay) or will invest double to triple the hours for a quarter of the return. This may lead to muddling through to a solution that is filled with compromises or giving up.

Even if they ship one game, they would have still missed out on a heap of learning, which could make the next game harder and longer to develop. In my potentially very privileged eyes, it is less work and complexity to bite the bullet and get your head around coding.

To avoid coding because it’s scary is understandable, but to succeed in game dev as a hobby or career requires you to become comfortable with that scary. The fundamental loop of game dev is “Oh, I want this gameplay mechanic”, “I want it to look like that” or “I want it to do this” and then going ahead and figuring out how to make it work. That’s 99% of how I learn something new, when it’s needed.

Final thoughts and recommendations

Now I don’t want this very cynical article to leave you high and dry, so I have some pointers on how to learn to code from someone who has struggled for a decade.

First, understand that when we say “learn to code” there’s two distinct parts to that. The first is to understand what coding is, void of a game development context. Whilst there are thousands of different coding languages out there, they all overlap with similar core concepts. So the first goal is to get familiar with how coding — agnostic of game development — works.

So my recommendation is Python. Learn Python and build some non-game related scripts. It’s one of the most popular and versatile languages in the world and it’s considered ‘easy’ compared to the others, primarily because of its almost infinite flexibility (which can be a blessing or a curse sometimes).

Use it to automate tasks on your computer like renaming a thousand files or telling you the weather, then you can go on and make a full text-adventure game in Python with nothing more than Python, command line, and a notepad — no engine required.

This should get you familiar with the core concepts, such as variables, data types, methods, classes, inheritance, etc.

Source: YouTube.

Now it’s time to learn what coding means in the context of a game engine.

I recommend you download Godot, which is a popular open source game engine. Whilst It isn’t as popular as Unity, it uses a python-like coding language called GDScript, so it’s a great stepping stone. From here, follow Godot’s own tutorials on how to make basic games, which should teach you the core concepts of coding in game development like objects, world space, scenes, timing, and coroutines.

From here, the choice is yours! You can remain using GDScript and Godot, but if you want to push yourself, know that Unity uses C#, which Godot also uses. You could use Godot as a training ground to get familiar with C# before jumping over.

And as I mentioned in my previous article, Game Jams is the fastest way to learn game development. So jump on Itch.io and sign up to some Game Jams to get your development journey going!