{"id":56987,"date":"2024-01-12T00:00:41","date_gmt":"2024-01-12T05:00:41","guid":{"rendered":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=56987"},"modified":"2024-01-11T21:59:06","modified_gmt":"2024-01-12T02:59:06","slug":"code-monkey-beta-part-2","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=56987","title":{"rendered":"Code Monkey Beta: Part 2"},"content":{"rendered":"<p>While the visual code being translated to script won\u2019t solve any social issues, it does have its uses.<\/p>\n<p>The exchange provides a very important bridge between the colorful stimulus loving meat brain and the needed rigidity to instruct the box to do what you need. With the neat side effect of looking a lot more interesting to play with than the code itself, while taking some of the harshness out of trying to stare down a big wall of code. Which, while undeniably one of the best ways to do it, definitely doesn\u2019t give it many points in \u2018looking interesting and fun to do\u2019<\/p>\n<p><!--more--><\/p>\n<p>The walls of text make it easy to misrepresent coding as a boring technical skill, without a real appreciation of the kind of work it is once you get into the meat of it. The second biggest hurdle I encountered with the idea of learning to program was that it would be <i>boring<\/i>. Once the bubbles were gone there would be nothing but staring at a screen and typing until something broke, changed, or I finally had something good enough I could<em> stop<\/em> typing and go reward myself with something more interesting. Like watching paint dry.<\/p>\n<p>Instead I was presented with something significantly more interesting. Sure there was still a very pronounced aspect of rattling away at a keyboard. But it was rattling away at a keyboard with a clear and identifiable purpose. Aspirational keyboard-rattling if you will.<\/p>\n<p>It started as a series of small goals, accompanied by a problem to solve to achieve them. Each solution either led to another problem, or paved the way to the next goal. When what I wanted to do ended up beyond my skill level I had my choice of places to go for solutions. Beyond the manual itself, usually there\u2019s a million other idiots asking the same questions I&#8217;ve got. Or questions close enough I could hash out what&#8217;s right and left and move on to the next problem. Sometimes the forums wouldn\u2019t be enough, at which point I turned to improvisation. If you can\u2019t get something to work the way it should, you sure can make it <i>look<\/i> like it\u2019s working right. Which feels like cheating, but as long as nobody is looking at the back-end it doesn\u2019t matter that some parts are made of metaphorical paper mache<span class='snote' title='1'>You\u2019d be surprised how sturdy that stuff can be if you make it right.<\/span> instead of metaphorical bricks. Or that what you did definitely took way, way longer than it should have had to.<\/p>\n<p>Sometimes if I get lucky<span class='snote' title='2'>Or unlucky depending on how much time I poured into it.<\/span> I\u2019d find an easier, more efficient way to do something I already did. And when I go back to rework it I&#8217;d find it opened up more solutions. Or, alternatively, made everything worse. Resulting in chunks of the old code duct taped to the new to keep it alive like some inefficient Frankenstein&#8217;s monster. But hey, pros of working alone is nobody is around to curse me out for my poorly marked chimera coding except for future me. And fuck that guy.<\/p>\n<p>Each problem solved, poorly or otherwise, led me forward until issues that started as complex became regular stepping stones on the path to the next goal. By the time I understood enough to reliably use the scripting half of the program I was far past the point of believing it would be boring busywork. It was a puzzle. And I was hooked. Even after I left the colorful bubbles of visual behind.<\/p>\n<p>This was a bit of whiplash for me. I&#8217;m a creative guy, I pick up pretty much anything that captures my interest for more than ten minutes. So I&#8217;m not unfamiliar with the itch to make things. But this was somewhere to the left of what I normally latch onto. The programming up until this point was a means to an end, the main goal was to build a foundation for everything else that I was actually interested in. But somewhere along the way the code itself found itself into the &#8216;creative&#8217; section of my head.<\/p>\n<p>It felt weird to me at the time. Programming is definitely a method of making things, but to me the overlap ended there. Code had no relation to art, writing, or music. Aside from being a tool to display those things. It took a bit for me to come to a conclusion I was happy with besides &#8216;it&#8217;s making things&#8217;.<\/p>\n<p>Like programming, traditional art mediums operate as a series of different patterns meant to create a reaction. A set of rules to be followed to get the correct response or interpretation, with a near infinite series of paths to go down to get there. <em>Unlike<\/em> programming, these all rely on color, shape, texture, and sound, in order to elicit specific responses. Which are varied based on who\u2019s looking or otherwise interacting with a work. Meanwhile a program uses a combination of all or none of those things.\u00a0 All words, visuals, or patterns are filtered through the lens of a computer to draw a user to interact with it in certain ways. Whether that be purely functional or as a toy. The art itself focuses less on eliciting a reaction and more on interaction. Creating something that can stand up to completing its purpose, while still allowing the user to recognize how it&#8217;s meant to be used. A lot like pottery now that I think about it. And much like pottery, if you put it in the oven it might explode<span class='snote' title='3'>Always make sure your hard-drive is dried completely before you bake it to prevent cracks.<\/span>.<\/p>\n<p>An additional fun level to coding is that in filtering your intentions through a computer before it gets to the user, you\u2019re working with two levels of interpretation. Both cause their own complications, requiring different resources to be available that may occasionally conflict if you fuck up hard enough. On the user side, unless you\u2019re coding something entirely for your own use you have to consider the best patterns to place things in to create an intuitive interface that won\u2019t make users want to strangle you through their computer screen. Which means either you need to run through a bunch of menus and interfaces to get a proper reference for how they work for best ease of use, followed by taking a few minutes to imagine the dumbest person you possibly can, and trying to find some happy medium between too complicated and just plain insulting<span class='snote' title='4'>Park rangers have stated that bear-proof garbage cans are a big challenge, the overlap between the smartest bear and the dumbest tourist is a sandwich.<\/span>. Or you just run through whatever looks right and hope nobody gets angry enough to track you down and egg your house.<\/p>\n<p>Arguably the computer side is a lot easier, once you understand how to talk to it, it\u2019s a matter of telling it what to do, and when it has to stop doing it. The sheer amount of things a program holds onto if you don\u2019t tell it not to is incredible, at least from the perspective of someone who\u2019d never dealt with it before.<\/p>\n<p>The key there being understanding how to talk to the computer. Like I said before, it\u2019s a full box versus an empty one. The computer is more receptive to commands. It listens to everything you tell it to do<span class='snote' title='5'>Provided it\u2019s within its capacity to do so.<\/span>, not a step more. Or less. It doesn\u2019t know if you want it to skip a line of code unless you tell it, because it can\u2019t work off of implications of previous interactions. It will always move forward at the same pace until it\u2019s told otherwise. At which point it will follow that string of command until you tell it to go back.<\/p>\n<p>I made that mistake a lot in the first few months. There&#8217;s a mindset to coding that very few educational resources for coding go through the time and effort to actually explain to the full extent right out of the gate. The idea of plotting out what commands the computer will look at first, and where the information will go from there. Understanding that the computer doesn\u2019t understand what you consider a different object that needs different information sent to and from unless you specifically line up all your intentions and lay them out. I said before, the human brain comes with preconceptions, when I put two enemy objects down on a map my mind instinctively categorizes them as \u2018different\u2019. While the computer sees two identical pieces of data that need to behave the same way. Meaning if I don\u2019t provide the computer with my intent to make them both independent of one another, when one is shot the other will also die. Because to the program they are both \u2018enemy.obj\u2019 and when enemy.obj runs out of hit points, it runs the death animation and is deleted. It doesn\u2019t matter which enemy.obj runs out of hit-points. In the eyes of the code they are all identical, and will all suffer the exact same fate unless marked otherwise.<\/p>\n<p>That right there is what I consider the real hump to be when learning to code. Memorization is certainly part of it. Learning what functions work best in various situations and where your limitations are within a given language and program is important. But out of all of that the most frustration and confusion I dealt with in the first few months were a result of not understanding the language I was trying to speak. A solid chunk of my time was always dedicated to cursing at the program for not being able to interpret my instructions like a person. It took me a lot of time to understand where the miscommunication was coming from. A lot longer than I think it would have if I\u2019d had it explained what I needed to look for. Not that I can really begrudge anyone for that, it\u2019s not an easy thing to explain without hands-on experience to go with it. It&#8217;s one of those things where, you can hear someone talk about it but you don\u2019t truly get it until it clicks. It\u2019s easier to find it if you\u2019re looking, but there\u2019s no way to understand without some experience first.<\/p>\n<p>By now I&#8217;ve hit a point where I&#8217;ve jumped the major entry hurdles. It\u2019s been a fun couple years. The shift from the random artificial limits I had before are well worth the work I have to put in to make real progress. All that\u2019s really left is to keep going. Learning is a process, and programming is a skill like any other. It just takes time to get where you want to be.<\/p>\n<p>Despite how important it\u2019s been for me as a learning tool, I don\u2019t want to pretend this is a ringing endorsement for GMS2. It\u2019s definitely a good program, that provides an important step for folks looking to wiggle their way into coding like I was. But it isn\u2019t beyond its faults, nothing really deal breaking, but faults. Subscription<span class='snote' title='6'>I respect that money needs made, and they did it in a relatively unobtrusive way. I\u2019m just biased.<\/span> aspect aside. It forces you to make an Opera account and download the browser in order to actually get GMS2 to run without throwing a big temper tantrum.<\/p>\n<p>I\u2019m not a fan of anything that makes me make an account for a different service than the one I\u2019m trying to use. It feels unnecessary. Plus, I use Firefox, Opera is far, far too pushy for my tastes<span class='snote' title='7'>Presumptuous little bastard even set itself to my default browser, and pinned itself to my task bar without asking.<\/span>. It tries to bully me into using it as my default browser every time I need to login to GMS2 to work on something. And since it is thoroughly dedicated to make itself even more unappealing, there are toolbars that come bloated with a dozen apps I don&#8217;t use, popup tabs with advertisements for various garbage like credit checks<span class='snote' title='8'>Right after it brags about all its built-in ad-blocker of course.<\/span>. All that paired with a bunch of ugly visual clutter and gaming stuff I really don&#8217;t want. No thank you. If I didn&#8217;t need it to reliably log in to my programming setup I would take it out back behind the shed like Ol&#8217; Yeller and never think about it again.<\/p>\n<p>On top of that general inconvenience there are some major stability issues. Unless you\u2019re using the aptly titled long-term-stable build in lieu of the inexplicably default \u2018experimental\u2019 builds. You risk the program imploding in various ways when it updates, you update something, or it just gets scared, rendering it unusable until they patch it or you figure out why it&#8217;s losing its shit. And maybe lose a project or three in the process<span class='snote' title='9'>Sigh&#8230;<\/span>. Overall, the experimental builds<span class='snote' title='10'>Which once again are the default versions they offer when you first download it. The LTS is in a separate drop-down menu underneath it.<\/span> can\u2019t really be trusted. I ended up finding out about the LTS build from someone calling someone else an idiot for not using it when they started having a similar crash I was having when they tried to open it.<\/p>\n<p>My only genuine endorsement is that it&#8217;s more intuitive than a good amount of other programs I&#8217;ve tried, there\u2019s some hiccups but it&#8217;s not too overwhelming to get the hang of. And in the end it has served its purpose for me as a well-needed bridge between the beginner stages of coding and the real deal. While providing a good setup for me to get comfortable understanding the tools at my disposal and good ways to use them.<\/p>\n<p>As of a few months ago I got to the \u2018functional enough to share\u2019 stage in one of my first projects. A tracking tool for a TTRPG I play with friends called Ten Candles. It\u2019s gone through a few iterations over the past few years, and counts as my first real project as well as being a solid timeline of my progress.<\/p>\n<p>The next time you hear from me, we\u2019ll talk more about it. Ideally with some images prepared to break up the text this time.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While the visual code being translated to script won\u2019t solve any social issues, it does have its uses. The exchange provides a very important bridge between the colorful stimulus loving meat brain and the needed rigidity to instruct the box to do what you need. With the neat side effect of looking a lot more [&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,4],"tags":[],"class_list":["post-56987","post","type-post","status-publish","format-standard","hentry","category-epilogue","category-general"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56987","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=56987"}],"version-history":[{"count":12,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56987\/revisions"}],"predecessor-version":[{"id":57006,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/56987\/revisions\/57006"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=56987"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=56987"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=56987"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}