Where to learn meaningful programming


Hello everyone,

I have been working on GM for about a year now on and off and I have almost no programming experience aside from a class I took in college. As my game increases in size I have been introduced to concepts that I am totally ignorant to. Data structures, algorithms, infinite loops, I've also realized that code is not always straight forward and sometimes you have to be clever in order to find a solution - such as hit scans detecting the collision THEN drawing the line or an invisible path finder that follows the player object. Do I start with GM? Do I begin elsewhere?

My question is, as someone who is trying to be self taught - where do I start? To me it seems that Game maker simplifies code in a way that everyone can do it but I feel doing anything challenging requires a lot of context that I would learn somewhere else. In other words, how would you recommend I give this learning experience more structure and understanding for more advanced code? Thank you for your time


I am going to say this as a borderline advanced programmer, GMS, or GML to be exact, has a moderate learning curve, and is similar to other languages. However, if you were to come from another programming language such as C, you would find it easier to understand since its similar in a few ways like C. However, as a C programmer, knowing C does NOT substitue the practice of learning how to use GML, at all. I can understand most of the concepts of GML only because my second programming language that I learned was C, but I have to rely on the manual that describes the syntax and usage of GML. The other thing about GML, is that it also integrates networking with the internet in its language for online games, which is another learning curve by itself. Programming off line games is not the same as programming online games. If I did not know the programming language C, I would be completely clueless as to what is happening in GML. I would recommend C or C++ as your first programming language aside with GML, only because of the small similarity of those two languages with GML.

Now, dont get me wrong on GML, you can learn it as your first programming language. To understand GML, just like C, or any other programming language, you have to learn it by playing with the language. Depending on how well you understand learning programming concepts, will determine how well you program and progress. Dont expect to build your, "epic" game that you want to create as you do this. Your going to be building games only to learn how to use the language in your first year ( and possibly your second year ) of becoming familiar with the language. As one programmer said on a newsgroup forum many years ago, learning a programming language is not something that you master in a decade, it is lifetime involvement. As technology changes and advances so do the programming languages that use them in their design, so you always have to update your skill in that programming language ( or adapt to learning another programming language ).

In addition, if you want to get into programming advanced graphics such as manipulating and animating rotating 3D objects, you need to know linear algebra and also know how to apply it in GML ( this is true for any other programming language that do advanced graphics ). So its not just the programming language that you need to know, its also math. I highly recommend knowing Algebra for GML, for basic expression syntax using variables, since math expressions are used in most programming languages.

Dont expect this to be easy, at all. The success of how well you program is dependent on how well you plan and design your game in the first place, before you do any coding, which falls back on how well you understand GML. This is true for all programming and scripting languages that I have come across ( especially bash shell scripting ).


šŸ§ *penguin noises*
GMC Elder
It's hard to know what you don't know, because you don't know it. This makes it pretty much impossible to know what you need to learn, because that requires you to know what things from the massive set of things you don't know would be useful to do know about. This is what we have teachers for, they're supposed to know what things are good to know for a given field.

There's one way you could keep being mostly self-taught (if you don't feel like learning about random stuff hoping it'll be useful some day), which is organized iterative seeking of information (OISI, a term I just made up because I like abbreviations). The idea is the following:

  1. You are faced with a task you don't know how to solve
  2. Google the task, e.g. "how to pathfind in 4-dimensional space"
  3. You should find some results. Look at some results from a reputable source, e.g. StackOverflow or the GMC
  4. Identify key concept names and buzzwords, like "A* algorithm", "state machines", "blockchains"
  5. Google those, ignoring the suggested solutions in step 3
  6. Find a beginner's guide for the concept and study that a bit
  7. Now you know the concept and can use it to solve your problems
Sometimes a solution found in 3) can be used at once, but often you'll just find someone mentioning a concept without explaining how it's supposed to be used. By having a first step to just find what methods are relevant for the problem you're facing, you can search for solutions much more effectively rather than treating anything that's not a copypastable step by step tutorial as a dead end.


I would recommend learning another language. There are a lot of advantages to this, primarily there are a lot of more standard educational resources written for other languages.

Personally, I think javascript is a fun one to learn. There's lots of resources for it and it is pretty similar to GML. The Coding Train channel on youtube is a great place to start. It has a fair amount of courses for both Java and Javascript (fairly different languages despite the name similarity). Also, man came adjacent or related thing. For Java, I highly recommend his nature of code series. If you're okay with spending the smallest amount of money, check out sites like Udemy.

Also see the end of this link for some additional resources.
Yeah, I'm with samspade, I'd suggest learning another language such as modern Javascript: Lots of good reasons for picking JS, another being it is so incredibly accessible, and versitle. You need a web-browser, and a notepad, and that's it. Good example: Making a snake game in 4 minutes using only notepad.

That's speed coding: For a longer format, Meth Meth Method's video's are very good: Making a Pong game in an hour, and you'll see how the programming ideas are fleshed out as he goes:
. He does a few other games from the ground up, too, such as Mario and Tetris.

Javascript also touches on different programming paradigms: It's kind of Object Oriented, and you can kind of do Functional Programming in it: So you can dip your toes in either poison.
And the other benefit at making games in 'Vanilla' JS is you get to see how some fundamentals are implemented: Things like the Game Loop, how collisions are done, etc.

One thing that might help you a lot is this (free) book: https://gameprogrammingpatterns.com/ .
Patterns, and other such software architecture ideas are not really emphasized in GML, but are a big part of 'meaningful' programming.

For some game-orientated algorithms, https://www.redblobgames.com/ has some good reading.

It does leave the question: What type of meaningful programming are you really wanting to learn? Are we talking game related only (so algorithms, mapping, graphical programming) or more pure, programming concepts? (Patterns, software architecture/design, info-development, etc)

Because for pure programming concepts GM/GML is rather bad at teaching you. For game programming concepts, GM is actually pretty good, and you can continue to just make games, following the steps Yal outlined above, and you'll get pretty good at learning those concepts.