Why You Should Learn to Code
Why low-code/no-code game development solutions are a waste of your time
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.
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.
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.
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.
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.
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!