{"id":56960,"date":"2024-01-05T00:00:21","date_gmt":"2024-01-05T05:00:21","guid":{"rendered":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=56960"},"modified":"2024-01-04T16:56:02","modified_gmt":"2024-01-04T21:56:02","slug":"code-monkey-beta-part-1","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=56960","title":{"rendered":"Code Monkey Beta: Part 1"},"content":{"rendered":"<p>This week Bay has once again found themself laid up. This time it\u2019s with a fun combination of strep, two ear infections that the good doctor referred to as \u2018acute\u2019, which is a fun way to say \u2018very bad\u2019. and a fun flare-up as a result of not being able to keep anything down for a few days, including the modern miracle of arthritis medication. Currently I&#8217;m on the lookout for any more of the universe&#8217;s wayward attempts to off them this week; such as spontaneous combustion, or a piano falling through the ceiling. But in the meantime I figured i\u2019d fill the content gap with a project i&#8217;ve wanted to talk about for a while now.<\/p>\n<p>I\u2019ve always kind-of wanted to learn to code.<\/p>\n<p>I say kind-of because my interest had always been something of a nervous fascination. A bit like learning a second language. It was a hypothetical years-long commitment that requires me to be bad at something in an embarrassingly public way before I got to the impressive point where I could confidently say \u2018I know how to speak another language\u2019 and not fumble the bag as soon as someone asked me something more complex than how to ask where the bathroom is. And ultimately, it was more of an ends to a means of what I really wanted to do.<\/p>\n<p>I\u2019ve always really wanted to make games.<\/p>\n<p><!--more--><\/p>\n<p>It comes with the territory of who I grew up with I imagine. One of my most notable childhood memories are of my dad plopping me in his big chair in front of his computer to let me throw bottles in the alley in half life 2. Along with that is a fuzzy memory of a very long, confusing explanation of what a physics engine was, and why this one was impressive<span class='snote' title='1'>Which has probably resulted in a lifelong fascination with physics simulations. I\u2019ll always get excited when I realize I can toss something and it breaks, or breaks something else<\/span>. it was a little beyond me at the time. Seeing as it was 2004 and I still used a sippy cup. But I had fun.<\/p>\n<p>I used to sit and watch my dad code sometimes, very rarely<span class='snote' title='2'>he didn\u2019t like when I did, as I always had \u2018suggestions\u2019.<\/span>. It was intimidating. A screen of nonsense text that somehow magically transformed random numbers, letters and symbols into moving parts. Occasionally my dad would try to explain what his project was, how it worked, or what he was doing to accomplish it. Which was somehow more confusing than actually watching him do it.<\/p>\n<p>In 2009, when I was nine years old and realized I could read and do math to a reasonable enough degree. <a href=\"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=3871\">I went to my dad to ask him how coding worked<\/a>. I vaguely remember the excitement of having a chance to do something like he did, followed by a lot of frustration when I\u00a0 started to struggle with my admittedly ambitious ideas. I wanted to do it all right away, without all the boring stuff in between. It\u2019s a very human pitfall to run into, especially when you\u2019re a kid who doesn\u2019t really have a concept of skills as a long term investment.<\/p>\n<p>So I dropped it. And then came back, and dropped it again. And I found other coding \u2018toys\u2019 that I played with. And dropped. And then my parents got me RPGmaker, which touts itself as a \u2018code free\u2019 option for game creation. Which I tried. And then dropped, and tried again. From there I tried plenty of other options, picking them up and tossing them away as I realized their limitations wouldn\u2019t match what I was hoping for. Constantly skirting around the elephant in the room.<\/p>\n<p>Which brings us back to code.<\/p>\n<p>I largely avoided diving into actual coding, anything beyond the scratch-style drag and drop format was largely too intimidating for me to dive in. And the few occasions I actually tried I was either overwhelmed by the amount of information being presented all at once, or underwhelmed by the glacial pace of the lesson plan.<\/p>\n<p>So I largely avoided it. Sometimes i\u2019d find scraps of code or scripts made for the \u2018code free\u2019 programs that theoretically did what I wanted, but as soon as I couldn\u2019t strong-arm it into functioning exactly as I&#8217;d hoped I&#8217;d scrap the project and sulk off to go be a teenager somewhere else. Or hunt for another \u2018code free\u2019 tool to mess with until the problem showed up again and I started back in the same circle i\u2019d been stuck in for years.<\/p>\n<p>This pattern continued until somewhere around 2021.<\/p>\n<p>Gamemaker Studio 2 is one of many \u201c\u201dfree\u201d\u201d tools available to creators. I say \u201c\u201dFree\u201d\u201d because it makes use of one of my least favorite inventions of the 21st century. Subscriptions<span class='snote' title='3'>do me a favor and envision as much disdain as you can in that word<\/span>. I\u2019m old fashioned, I miss the days when I could buy things to own them instead of renting everything I use for the rest of my life.<\/p>\n<p>But credit where credit is due, It tricked me into learning to code.<\/p>\n<p>Well, &#8220;tricked&#8221; . It provided a very important progression stage that i\u2019ve been missing in all the \u2018learn to code\u2019 programs i\u2019ve tripped on until now.<\/p>\n<p>GMS2 makes use of two styles of coding in the system, both using its own language. GML code, and GML visual. When you create an event, it asks you whether you want to use code or visual. Code is what it says on the tin, code. Visual is a series of drag-and-drop events, a bit like scratch with a bit more depth to it. It has explanations on the little bubbles that explain what to write in each box. All color coded by purpose to make sure you don\u2019t get lost. It lacks some flexibility, you\u2019re restricted by what the bubbles know how to write out which means it\u2019s harder to implement some more complicated ideas. But that leads into the trick. Because <i>unlike<\/i> scratch, GMS2 has one interesting feature where you can, at any time, convert all your \u2018visual\u2019 code entirely into script.<\/p>\n<p>This is a one way conversion, but the fact it can be done at all is important. A long-term problem i\u2019ve had with programs like scratch is the lack of a bridge between the beginner-friendly visual style and the cold hard walls of text that make up the \u2018real deal\u2019. With nothing\u00a0 leading to the intermediate stage the change in difficulty was always too abrupt. I understood the bulk of how the computer might interpret certain directions, but I couldn\u2019t write out the directions myself in a way the computer would understand. Actually sitting down and learning the language itself was always too big of a hurdle, especially since most beginner lesson plans are horrifically, condescendingly snail-paced. Or, worse. A <i>video<span class='snote' title='4'>I have nothing against the people who put their time and energy into creating videos explaining their code and how to use it. But nothing is more infuriating than having a problem and sitting through someone very slowly ramble about everything except the one command you need explained only to hear them say &#8216;but thats basic so I don&#8217;t need to explain it&#8217; when they get there<\/span><\/i>.<\/p>\n<p>So, first it tricked me into getting familiar with the terminology. And then when the drag and drop wasn\u2019t flexible enough it dropped a user manual in my lap and a magic button that let me see how all the things I was doing in the visual mode translated into the script itself. And boom, I wasn\u2019t dragging and dropping anymore, I was writing out lines of code. When I got stuck, or forgot something, or broke my own code, I just hit the button to swap it back and remake it in the visual section to figure out what I did wrong.<\/p>\n<p>It was a bit of a shock to the system to realize it had been that easy for so long. All I was missing was the ability to see <i>underneath<\/i> the friendly bubbles to understand what was happening. It almost makes you wonder why it\u2019s taken so long. There\u2019s been hundreds of learning to code games, programs, and classes created in the past ten plus years with the same problem. I imagine at least<i> some <\/i>people were aware they were locking most beginners into the box with the kindergarten kids and putting the key out behind a complex wall of loony toons style traps. So why did it take so long for someone to find a good way to bridge the gap?<\/p>\n<p>The answer is it probably didn\u2019t. I imagine there\u2019s been a few folks who\u2019ve gotten it, and either didn\u2019t have the skillset to implement it or the money to make sure enough people found the program. Or it existed for years but was just too expensive for me to pick up.<\/p>\n<p>Beyond that, there\u2019s another problem with the whole system. The same reason so many open source programs have ui interfaces that need a three year degree to operate.<\/p>\n<p>Making something accessible is a skill. A skill that&#8217;s not particularly valued in a lot of coding circles. Function over fashion is a common policy, but it\u2019s often taken to the extreme of forgetting what function means to someone who isn\u2019t you. My dad used to tell me that a good programmer is a bad teacher, and a good teacher is a bad programmer. Which tracks. Like programming, teaching is the act of sending signals from point A to point B in order to prompt a response or reaction.<\/p>\n<p>Unlike programming the reaction is being communicated to a human mind, not a computer. And human brains are weird, by default we interpret patterns in a very tactile way. Light, scent, soundwaves, and texture. We have a large swath of instructions and variables to pull from to interpret different things, hot and cold, happy and sad, hungry and full. A negative response in the past has potential to permanently alter the reaction someone has in the future. We\u2019re machines constantly intaking and interpreting stimulus and information.<\/p>\n<p>A computer in comparison has a very limited set of information. Even the most complex AI is working off trained datasets, it lacks the complexity to interpret a new piece of information on the fly and make decisions the same way a human can, or the ability to understand itself in order to expand its own well of information. At least not in the way humans can. It\u2019s limited to what we tell it to look at and the information we give it.<\/p>\n<p>It\u2019s the difference between working with a full box versus an empty one. A person will look at something and apply preexisting knowledge and inputs to it. A computer will look at it and have no response unless its been explicitly programmed to do so. Someone who\u2019s been taught to teach humans is going to have a harder time with this than someone who\u2019s been taught to teach computers and vice versa. Making coding inherently harder to teach as a skill..<\/p>\n<p>An additional side effect of this issue is that interactions between people learning to code for the first time and folks who already know how is the sort of confused, frustrated air of someone who doesn\u2019t interact with children very often watching a toddler throw the fork at the ground and start crying because they can\u2019t reach it anymore. Which is annoying for them. Because there\u2019s a crying toddler who won\u2019t stop throwing things, and frustrating for the toddler who wants to hear the sound of the fork hitting the ground again and doesn\u2019t understand why they can\u2019t have it back.<\/p>\n<p>The lack of understanding and inability to communicate between the two sides leads to unnecessary tension. Veterans chanting for the newbies to read the instructions while the newbies don\u2019t even know what the commands they want are called let alone where in the book to look. Or are too intimidated by the descriptions, and are hoping for a simplified breakdown but don\u2019t know how to ask for it.<\/p>\n<p>Forums are a shining example of this problem. GMS2 is no exception. There\u2019s a not-so-subtle expectation that the visual users drop it for the real deal sooner rather than later. As it\u2019s easier to troubleshoot, and more flexible to work with. If you want help, for the convenience of the community, you have to leave your comfort zone whether you\u2019re ready or not.<\/p>\n<p>Which is understandable, but a pretty bad way to actually get people into coding.<\/p>\n<p>&nbsp;<\/p>\n<p>This isn&#8217;t the end of the conversation just yet, but I had to split this thing in half, lest it qualify as a novella. I&#8217;ll see you guys next week!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week Bay has once again found themself laid up. This time it\u2019s with a fun combination of strep, two ear infections that the good doctor referred to as \u2018acute\u2019, which is a fun way to say \u2018very bad\u2019. and a fun flare-up as a result of not being able to keep anything down for [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[618],"tags":[],"class_list":["post-56960","post","type-post","status-publish","format-standard","hentry","category-epilogue"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=56960"}],"version-history":[{"count":6,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56960\/revisions"}],"predecessor-version":[{"id":56966,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56960\/revisions\/56966"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=56960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=56960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=56960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}