<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Chad Johnson on Medium]]></title>
        <description><![CDATA[Stories by Chad Johnson on Medium]]></description>
        <link>https://medium.com/@ChadJohnsonOfficial?source=rss-6295d9d3964e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*FPdKzIiNzel-eblrh_wWFw.png</url>
            <title>Stories by Chad Johnson on Medium</title>
            <link>https://medium.com/@ChadJohnsonOfficial?source=rss-6295d9d3964e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 11:21:32 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@ChadJohnsonOfficial/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Multiplayer Games are Superior to Single-Player ones.]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/multiplayer-games-are-superior-to-single-player-ones-9ecd548be12e?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/9ecd548be12e</guid>
            <category><![CDATA[gaming]]></category>
            <category><![CDATA[social]]></category>
            <category><![CDATA[games]]></category>
            <category><![CDATA[friends]]></category>
            <category><![CDATA[multiplayer]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Fri, 13 Oct 2023 01:09:15 GMT</pubDate>
            <atom:updated>2023-10-13T17:04:38.761Z</atom:updated>
            <content:encoded><![CDATA[<h3>Multiplayer Games are Superior to Single-Player Ones.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GmRDBUJAgBKnVvX7T-0MCA.png" /><figcaption>Two different worlds of gaming.</figcaption></figure><h3>Introduction</h3><p>Ah, the age-old debate that’s likely sparked more online wars than any political topic: multiplayer vs single-player games. Well, guess what? <strong>Multiplayer wins</strong>, and it’s not even close. Buckle up, because we’re diving into the nitty-gritty of why you should be yelling at real people online instead of scripted NPCs.</p><h3>The Social Factor</h3><p>Multiplayer gaming is like hanging out, but online, a place to chill with friends or even put those friendships to the test — especially when you find out who’s been hoarding all the loot.</p><p>Let’s cut to the chase. Half the fun in gaming is the social interaction. That’s right, I said it. Playing games alone? Might as well be the kid sitting alone in the cafeteria. Who wants to be that loner? Certainly not me.</p><ul><li><strong>Real Talk:</strong> Playing alone is a one-man echo chamber. You win, you lose, but there’s no one there to share it with. Kind of empty, isn’t it?</li></ul><h3>Dynamic Gameplay</h3><p>In a single-player game, you’re up against AI. Predictable, boring, AI. Once you figure out the patterns, you’re golden. Multiplayer? Throw all that out the window. You’re playing against unpredictable, irrational, and sometimes overly aggressive human beings. Each match is like a new flavour of chaos.</p><ul><li><strong>Face it:</strong> Without the unpredictable nature of human opponents, gaming would be as bland as unsalted popcorn.</li></ul><h3>Skill Progression and Competition</h3><p>For those of us who have a competitive edge — which should be everyone because competition breeds excellence — multiplayer is where the real skill progression happens. It’s the digital Colosseum, where you either rise as a champion or get smacked down and learn from it.</p><ul><li><strong>In Game:</strong> Sometimes losing is the best way to win. Each loss is a lesson, and each win is proof of your growing skill.</li></ul><h3>Economic Advantages</h3><p>Single-player games with their “expansive storylines” and “emotional rollercoasters” might seem cool, but let’s get real about the dough.</p><p>Multiplayer games are a goldmine for devs and a never-ending party for players. Developers cash in with skins, battle passes, you name it, which lets them keep the game alive with new content. Players? They get a game that stays fresh, with new stuff to enjoy or hate on. It’s a win-win.</p><ul><li><strong>Reality Check</strong>: Head over to <a href="https://steamcharts.com/">Steam Charts</a> and look at the top 10 games. Notice something?<strong> Almost all of them have a multiplayer mode.</strong> Games that are practically ancient in internet years, like Rust, Team Fortress 2, and GTA (Online came out in 2013), are still holding their ground at the top. If that doesn’t say anything, I don’t know what does.</li></ul><h3>Collaborative Learning</h3><p>You ever try to learn all the tricks and tips of a single-player game from a forum? Cute. Multiplayer games offer the advantage of real-time knowledge sharing. Translation: You see someone pull off a sick move, and now you have a new trick up your sleeve.</p><ul><li><strong>Try it: </strong>Don’t take my word for it; hop into a multiplayer game and watch how quickly you pick up new strategies. (Assuming you keep an open mind)</li></ul><h3>Content Longevity</h3><p>Let’s face it, once you beat that single-player game, it’s over. Onto the shelf it goes, to collect digital or physical dust. Multiplayer games, on the other hand, are in a constant state of evolution. They get seasonal updates, events, and new content drops that keep the game fresh and engaging for the long haul.</p><ul><li><strong>Be Real:</strong> Who wants to play the same thing over and over?</li></ul><h3>Scrap Mechanic Multiplayer: A Case Study</h3><p>Here’s a gem for you: Scrap Mechanic. A fun game in single-player, sure. But multiplayer? Holy hell, it’s a whole new level of awesome. Building ridiculous contraptions with your friends, limited only by your imagination and perhaps your engineering skills. There was this one time we built a flying machine that was more of a death trap than an aircraft. But hey, we failed together, and that’s what counts.</p><ul><li><strong>At the End of the Day</strong>: It doesn’t matter if you win or lose; it’s all about the fun. Whether your contraption soars or crashes, if you’re having a blast with your friends, that’s the real win.</li></ul><h3>The High Bar for Single-Player Games</h3><p>For a single-player game to pull me away from my friends, it has to be more entertaining than a barrel of monkeys on espresso. Guess what? That’s a high bar, and so far, no game has cleared it.</p><ul><li><strong>Think about it: </strong>Why would you ditch your friends to listen to an NPC drone on about their missing cat.</li></ul><h3>Challenges and Solutions</h3><p>Now, I know what you’re thinking: “But, what about server issues, or toxic players?” Look, no castle was built without a few stumbling blocks. These are challenges to be met and conquered, not excuses to crawl back into the safe, cocoon of single-player gaming.</p><h3>Conclusion</h3><p>So, you still think single-player games are better? Fine, go back to your digital storytelling sessions.</p><ul><li><strong>Final Word: </strong>Don’t come crying to me when you realize you’ve spent hundreds of hours in a fictional world with fictional characters while the rest of us have been having a blast with real people.</li></ul><h3>We Are Done Here</h3><p>You’ve read the rest, now <strong>follow </strong>the best. You’ll get more no-BS deep-dives here on Medium. Don’t miss out.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9ecd548be12e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[PC Gaming: The Truth About Your Expensive, Time-Wasting Habit]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/pc-gaming-the-truth-about-your-expensive-time-wasting-habit-b66662919746?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/b66662919746</guid>
            <category><![CDATA[gaming]]></category>
            <category><![CDATA[games]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[lifestyle]]></category>
            <category><![CDATA[opinion]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Wed, 11 Oct 2023 20:39:00 GMT</pubDate>
            <atom:updated>2023-10-11T20:39:00.613Z</atom:updated>
            <content:encoded><![CDATA[<p>Hey, you! Yeah, you — the one with the RGB shrine that could light up a small village. Pause that 100-hour RPG, quit arguing about frame rates on Reddit, and listen up. We’re diving into the dark abyss of PC gaming, and spoiler alert: it’s not the escapist utopia you think it is.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e7HkjUrTpRFmxAQL0w_TQA.png" /><figcaption>Food-stained gamer in chair with messy desk, multiple game screens, and cluttered room with bills and food.</figcaption></figure><h3>1. The Cost of Entry is Absurd</h3><h4><strong>The Hardware Circus</strong></h4><p>You’ve shelled out the cost of a used car for a gaming rig that looks like it’s ready for a rave. Congrats, you can now run a game at 4K resolution, 120 FPS. But let’s be real, are those extra pixels helping you level up in life? No, they’re not.</p><h4>It’s Not Just the Rig</h4><p>So you’ve got the rig, but oh wait, you also need the “gaming chair,” the mechanical keyboard with keys you never knew existed, and a mouse that looks like a Transformer. All of this so you can have the “ultimate gaming experience,” which basically amounts to sitting in the same spot for so long, you forget what the sun looks like.</p><h4>The Environmental Cost</h4><p>Oh, did I forget to mention how energy-consuming these RGB monsters are? Yeah, you’re basically melting polar ice caps with every raid you complete. Saving the planet, one RGB light at a time, huh?</p><h3>2. The Time Suck is Real</h3><h4>Reality &gt; Virtual Reality</h4><p>You say you don’t have time to hit the gym or learn a new skill, yet you’ve logged 500 hours on a single game? Sure, in-game you might be a level 99 wizard, but in the real world, you’re not levelling up at all.</p><h4>Updates, Patches, More Updates</h4><p>Ah, the endless cycle of updates. “Just one more minute, it’s updating!” That minute turns into hours, and boom, you’ve wasted an evening staring at loading bars. Truly, the stuff of legends.</p><h3>3. It’s a Social Cop-out</h3><h4>Online “Friends” Are Just Usernames</h4><p>You’ve got 300 friends online? Cool story, bro. How many of those have you met? How many would show up to your birthday party if you had one that wasn’t virtual? Better yet, how many would help you move furniture or lend a hand when your car breaks down on the side of the road?</p><h4>Real Relationships? What’s That?</h4><p>So your Discord server is popping, and you’re the admin. That must make you the king of social interactions, right? Wrong. Last time I checked, Discord doesn’t replace family dinners or a night out with actual friends.</p><h4>The Niche Community</h4><p>The PC gaming community is like that exclusive club where everyone knows your name, as long as you’ve mastered every Easter egg in the latest patch. Inclusive? Yeah right.</p><h3>4. Escapism at Its Worst</h3><h4>Facing Reality is for Chumps</h4><p>Got problems? Who cares! Dive into a game and forget all about them. That rent isn’t going to pay itself, but who needs a roof when you’ve got a virtual castle, right?</p><h4>A Never-Ending Cycle of Denial</h4><p>You’re stuck in a loop, my friend. Escape from life’s problems, neglect said problems, escape some more. It’s like your own personal Groundhog Day, only worse, because Bill Murray isn’t here to save you.</p><h4>Addiction and Health Risks</h4><p>Meet the new smoking: gaming marathons. Bet you didn’t see that one coming. Your lungs might be clean, but what about that back hunch and eye strain?</p><h3>5. The Illusion of Achievement</h3><h4>Virtual Medals Don’t Pay Real Bills</h4><p>Wow, you completed a quest or scored the ultimate weapon. That’s going straight on your resume, right? Oh wait, it’s utterly useless in the real world.</p><h4>The “E-Sports Dream”</h4><p>Oh boy, here we go. So, you think you’re an athlete because you can maneuver your fingers quickly? Join the 0.01% that actually make a living off gaming?</p><p>E-sports might be gaining traction, but let’s not forget that the ‘E’ stands for ‘Electronic.’ It’s a game, not a 100-meter dash. The only thing you’re sprinting towards is carpal tunnel syndrome.</p><h4>The Illusion of Skill</h4><p>You can execute a 12-button combo with your eyes closed? Fascinating. But can you even catch a ball in real life?</p><h3>Conclusion.</h3><p>So there you have it. You can go back to your RGB palace now and slay some more dragons or whatever. Just remember, while you’re “pwning noobs,” the rest of us are out here, you know, living actual lives. Enjoy your loot crates!</p><h3>We are done here.</h3><p>You’ve read the rest, now <strong>follow </strong>the best. You’ll get more no-BS deep-dives here on Medium. Don’t miss out.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b66662919746" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[You’re Doomed to Fail: The Sad Truth About GDScript in Godot]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/youre-doomed-to-fail-the-sad-truth-about-gdscript-in-godot-d6c5bd14ff44?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6c5bd14ff44</guid>
            <category><![CDATA[game-development]]></category>
            <category><![CDATA[unity]]></category>
            <category><![CDATA[godot]]></category>
            <category><![CDATA[csharp]]></category>
            <category><![CDATA[gdscript]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Thu, 05 Oct 2023 23:56:00 GMT</pubDate>
            <atom:updated>2023-10-06T01:55:56.288Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9sTxrlYRcmVT9Sn9ZL304A.png" /><figcaption>Letters “GD”, with a small red cross underneath them.</figcaption></figure><h3>TLDR / Summary</h3><p>Unless you’re sticking to simple editor tools or isolated nodes, GDScript isn’t your friend.</p><p>You’ll face minor annoyances and huge roadblocks that will seriously mess up your game development</p><p>Ultimately, you’ll either abandon your project out of frustration or switch to a more reliable language. Make the smart choice.</p><h3>Introduction</h3><p>After a year of wrestling with GDScript, I was hesitant to switch to C#.</p><p>Having never coded in C# before, I wrongly assumed it was the problem, not the solution.</p><p>I was wrong — very wrong. Once I switched, the majority of my coding headaches vanished. Now, I regret not making the move sooner.</p><h3>The Static Typing Circus</h3><p>Starting with GDScript’s problematic static typing. Got a parsing issue in one script? Brace for impact — if it’s a dependency for others, the whole system implodes.</p><p>Sometimes, there’s<strong> not even a real error</strong>. Yet,<strong> you are forced </strong>to manually <strong>open and save each affected script</strong>, trudging down the dependency chain until things resolve. It’s not just an annoyance; it<strong> annihilates productivity</strong>. Got circular dependencies? That’s a whole new level of hell.</p><h3>The Indentation Issues in GDScript</h3><p>Mixed tabs and spaces in GDScript, maybe from copying code online or from a chat? Prepare for a parsing nightmare.</p><p>Auto-format to fix it? Ha, good luck. Godot might just jumble your indents further, effectively <strong>destroying your script’s logic</strong>.</p><p>Now, you’re left sifting through each line to fix what should’ve been a <strong>non-issue. </strong>Not only is it wasting your precious coding time, it’s downright infuriating.</p><h3>Public, Private, What Now?</h3><p>GDScript lacks access modifiers. You’re stuck prefixing private members with an underscore — a using workaround, instead of a language feature.</p><h3>OOP Limitations</h3><p>No abstract classes or methods, no interfaces, and you can’t even make structs. Plus, you can’t override properties in subclasses.</p><p>You’re basically handcuffed if you want to do any serious OOP.</p><h3>The Debugging Black Hole</h3><p>Need to debug multithreaded code? In GDScript? Not a chance. It becomes a pain to deal with errors on another thread.</p><p>Want to use Hot Reloading and async code together? Think again. Use await on signals or functions, and you&#39;re inviting a ton of crashes. GDScript isn’t just unstable in these scenarios — it’s downright unreliable.</p><h3>Tuple and Error-Handling Troubles</h3><p>Need to return multiple values? GDScript’s lack of tuples will have you either sacrificing static typing with arrays or eating performance costs with custom objects (which can’t even be generic!).</p><p>Godot’s “keep running” philosophy isn’t an excuse to skip on even basic error handling. If try-catch is too hard to implement and maintain, maybe don’t make a programming language?</p><p>The real part? <strong>Errors are inconsistent </strong>— sometimes it’s a Godot error, other times a GDScript one. The docs are silent on a function’s failure behaviour. It might continue, might return null; you’re left guessing.</p><h3>Iteration? More Like Irritation</h3><p>With GitHub Copilot, Powerful IDEs and language features like method extensions, C# offers speed and reliability that makes GDScript’s <em>“quick iteration”</em> claims look misleading.</p><p>You’ll not only code faster, but also skip repeated work in other languages.</p><p>GDScript lacks method extensions, complicating even simple tasks. For instance, fetching nodes of a given type becomes a mess due to poor function importing (untyped) and no method extension syntax.</p><p>Below is an example of how method extensions can be used, and their “alternative” in GDScript.</p><pre>// A class that contains all your extenstion methods, you can add as many as you like.<br>public static class NodeExtensions {<br>   public static IEnumerable&lt;T&gt; GetDescendantsWhichAreA&lt;T&gt;(this Node node) where T : class {<br>      foreach (Node child in node.GetChildren()) {<br>         if (child is T t)<br>            yield return t; // Yield is because of IEnumerable.<br>      <br>         foreach (T descendant in child.GetDescendantsWhichAreA&lt;T&gt;())<br>            yield return descendant;<br>      }<br>   }<br>}<br><br>public partial class World : Node3D {<br>    public override void _Ready() {<br>        foreach (Character c in this.GetDescendantsWhichAreA&lt;Character&gt;())<br>          c.Kill(); // Pretend that we have a character class, with a kill method.<br>    }<br>}</pre><pre># World.gd<br>extends Node3D<br><br># Alternative import function way. You have to do this on every script you want to use it in.<br># Untyped, you can pass any number of incorrect parameters in,<br># or use the output incorrectly, and parser wont warn you.<br># we use .bind to get something similar to a method extenstion.<br>var get_descendants_which_are_a := NodeExtensions.get_descendants_which_are_a.bind(self);<br><br>func _ready() -&gt; void:<br>   # Via class name<br>   for c in NodeExtensions.get_descendants_which_are_a(self, Character):<br>      var character: Character = c as Character<br>      character.kill() # Type casting for safety. Matters when you have warnings on.<br>    <br>  # Via untyped imported function.<br>   for c in get_descendants_which_are_a.call(Character): <br>      var character: Character = c as Character<br>      character.kill() # Type casting for safety. Matters when you have warnings on. <br>  <br># NodeExtensions.gd<br># Required to access from World.gd, without preloading it as a constant.<br>class_name NodeExtensions <br>static func get_descendants_which_are_a(node: Node, clazz) -&gt; Array[Node]:<br>   var nodes: Array[Node] = []<br>     for child in node.get_children():<br>        if (is_instance_of(child, clazz)):<br>           nodes.append(child)<br>        <br>        # Recursive<br>        for decendant in child.get_children():<br>           nodes += get_descendants_which_are_a(child, clazz)<br>       <br>   return nodes</pre><h3>Namespace Negligence and Syntax Limitations</h3><p>No namespaces. No typed for-loops. You’re also missing out on convenient C# syntax, like type-checking within an if statement that also handles casting. It&#39;s not just about missing out on syntactical sugar; these limitations slow down development and make your code less robust and readable.</p><pre>// ---- C# Type check and cast example ----------<br>var someNode = GetChild(0); <br><br>if (someNode is Player player) <br>    player.PerformAction();<br><br># ----- GDScript equivalent ---------------------<br>var some_node: Node = get_child(0)<br>if (some_node is Player):<br>  var player: Player = some_node as Player<br>  player.perform_action()</pre><h3>Boilerplate Myths in C#</h3><p>People who label C# as boilerplate-heavy are often just looking for an excuse to avoid learning something new.</p><p>In reality, its syntax is flexible. You can drop the braces for single-line loops and if-statements. Plus, you don’t have to explicitly declare variables as private.</p><pre>// C#<br><br>// Partial keyword required for godot code generation.<br>public partial class SomeClass {<br>    bool somePrivateBool = true;<br>    List&lt;string&gt; names = new();    <br><br>    public void PrintNames() {<br>      // No braces required.<br>      for (string name in names)<br>        if (somePrivateBool)<br>            SomePrivatePrintMethod(names);<br>    }<br><br>    // Using expression syntax.<br>    void SomePrivatePrintMethod(string message) =&gt; GD.Print(message);<br>}</pre><h3>Async Await and The Absence of Tasks</h3><p>Using await in GDScript is a disappointment. There’s no native support or classes for Taskor TaskCompletionSource, forcing you to hack together your own untyped, makeshift solutions.</p><p>Want to await multiple asynchronous functions for whatever reason? Too bad, GDScript doesn&#39;t make it easy for you.</p><h3>IDE Problems: Navigation.</h3><p>In good C# IDEs like Rider, Ctrl+Click code navigation is seamless. However, with GDScript in VS Code or the Built-In editor, it’s a different story. Here, it’s unreliable, often forcing you to resort to manual searches (Ctrl+Shift+F anyone?) and wasting a ton of valuable time.</p><h3>IDE Problems: The VS Code Debacle</h3><p>If you’re thinking of using VS Code with the official Godot plugin, think again, especially for decently-large projects. It’s so unstable that<strong> it</strong> <strong>crashes the entire Godot Editor every time you save a GDScript file.</strong> I even had to write a Python script to automate restarting the editor because of these constant crashes. And don’t forget, <strong>you have to save</strong> to get accurate autocomplete and syntax checks. So, you’re essentially forced to save, crash, and restart. It’s a vicious cycle: save, crash<strong>, </strong>restart<strong>,</strong> <strong>lose unsaved in-editor work.</strong></p><h3>IDE Problems: The Built-In Text Editor</h3><p>Don’t expect the built-in text editor to be your saviour. It’s laggy, stutters, and frequently freezes. While you might argue that it has plugin support, let’s be real — no one is developing text-editor plugins for it. So, you’re coding in what essentially feels like a glitchy notepad.</p><h3>UGC/Mods? Just Don’t allow GDScript?</h3><p>Thinking about GDScript for mods or UGC? You can’t, its lack of sandboxing makes it a <strong>security ri</strong>sk, opening the door for bad actors to<strong> execute shell code and install malware</strong> on another player’s system.</p><p>Instead, this forces you to rely on and integrate with third-party languages like Luau for anything safe.</p><p>And just to clarify, <strong>this isn’t a C# vs GDScript argument</strong>. Even if your core game is in any other language, if you were hoping to allow modding through GDScript, it’s just not a viable option.</p><h3>Scalability: The Refactor Hell</h3><p>Imagine you’ve got hundreds of scripts, and you want to refactor a core functionality, like a commonly used variable, method, or class. In GDScript, without strong typing or advanced IDE features, you’ll find yourself manually hunting down every reference, risking a cascade of errors with every change.</p><p>In contrast, C# provides powerful refactoring tools integrated into IDEs like Rider or Visual Studio. With just a shortcut, you can rename variables, methods, or classes across all your files, without breaking a sweat.</p><h3>Scalability: Lack of Interfaces and Duck Typing</h3><p>GDScript skips on interfaces, pushing you towards duck typing with has_method based on string names. It’s a rigid system, especially for large projects. Misspell a method name, and you’re in for runtime errors. It adds unnecessary complexity and risk, making GDScript less than ideal for scalable, robust applications. Good luck refactoring it as well.</p><h3>Cross-Language Scripting: Why not?</h3><p>It’s a workaround, sure, but type safety goes out the window.</p><p>It’s manageable with primitive types but becomes a nightmare when you deal with custom objects. At that point, it’s just not worth the hassle.</p><h3>We are done here.</h3><p>You’ve read the rest, now <strong>follow </strong>the best. You’ll get more no-BS deep-dives here on Medium. Don’t miss out.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d6c5bd14ff44" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[You Can’t Afford To Ignore Microtransactions in Game Development]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/you-cant-afford-to-ignore-microtransactions-in-game-development-5ce3c1c9f63f?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/5ce3c1c9f63f</guid>
            <category><![CDATA[game-development]]></category>
            <category><![CDATA[indie]]></category>
            <category><![CDATA[money]]></category>
            <category><![CDATA[monitization]]></category>
            <category><![CDATA[ethics]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Wed, 04 Oct 2023 16:08:06 GMT</pubDate>
            <atom:updated>2023-10-04T16:08:06.965Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JHvTZr7b9oc5_9KiSARO9g.png" /><figcaption>Purchase screen for in game currency in Genshin Impact.</figcaption></figure><p><em>Welcome to game development, where your creativity can shine. But if you’re not adding microtransactions, your financials won’t.</em> Here’s why.</p><h3>The Real Cost of “Free”</h3><p>So your game is free. Great, but what’s the plan now? Think donations will keep the lights on? That’s a nice thought, but let’s get real for a second.</p><p>Depending on the kindness of strangers isn’t a viable long-term strategy, take a look at the open-source world — most projects are barely scraping by on sporadic donations. That’s not enough to cover ongoing costs like server maintenance, updates, and bug fixes. Donations are a bonus, not a business plan.</p><h3>The Harsh Reality of Online Servers</h3><p>Let’s kick things off with the glaringly obvious: servers aren’t free. If your game has any sort of online component, you’ve got <em>recurring costs</em>. Server maintenance, bandwidth, and security measures eat up a chunk of change. Think you can just eat that cost? Think again. If you’re not a gaming giant like EA or Ubisoft, good luck sustaining those servers without a steady income.</p><h3>The “Pure Gaming Experience” Myth</h3><p>Many developers and players advocate for a “pure” gaming experience — no ads, no in-app purchases, just the game. Noble? Maybe. Sustainable? <em>Not a chance.</em> The reality is that development and maintenance costs are always there, lurking in the background. Without a way to cover these ongoing costs, that “pure” game you love so much will either become outdated or, worse, go offline.</p><h3>The Ethical Debate</h3><p>Look, there’s talk about microtransactions manipulating players or encouraging bad habits. But you don’t need a psychology degree to get this right. Done ethically, you can skip the flashy rewards and happy sounds aimed to condition players. The point isn’t to trick people into spending; it’s about adding real value to the game. Keep it balanced, and you’re golden.</p><h3>The Player’s Willingness to Pay</h3><p>Contrary to popular belief, players aren’t universally against microtransactions. In fact, a lot of players are more than willing to pay for that shiny new skin or time-saving power-up. The key is to offer value — something that enhances the game without breaking it. Do it right, and not only will you sustain your game, but you’ll also turn a profit.</p><h3>The Pitfalls of One-Time Purchases</h3><p>Considering one-time purchases as your primary revenue stream? Think again. If your game is online, those one-time purchases will quickly be dwarfed by recurring server costs, let alone the manpower needed for regular updates and bug squashing. And if your game isn’t online? Once players have bought all the DLC or in-game items, you’re back to square one. Churning out new content to keep the one-time purchases rolling in is a tall order, especially for solo or indie devs who don’t have an AAA studio’s resources.</p><h3>Flexibility for the Developer</h3><p>Microtransactions provide you with financial flexibility. If your game isn’t doing as well as you’d hoped, you can easily introduce new items or features as microtransactions to boost income. This gives you room to experiment and adapt, rather than just watching your game — and all your hard work — wither away.</p><h3>Conclusion</h3><p>You might be hesitant about integrating microtransactions, but the fact remains:<strong> it’s a necessity, especially for smaller developers.</strong> The costs of keeping a game alive, particularly online games, make it almost suicidal for a developer to avoid this revenue stream. So, next time you’re debating whether to add that extra skin or power-up for $0.99, just do it. Your game’s lifespan might depend on it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ce3c1c9f63f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Rust is Making You Fail.]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/why-rust-is-stopping-your-success-use-c-and-c-instead-586dc7e2edbc?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/586dc7e2edbc</guid>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[prototyping]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[rustlang]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Tue, 03 Oct 2023 16:13:00 GMT</pubDate>
            <atom:updated>2023-10-14T21:35:43.844Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kPIzthXvhTzxhlMVBRS1ig.png" /><figcaption>A Ferris with a cross overlaid on it.</figcaption></figure><p>Programming languages are tools, not religions, but you wouldn’t know that from talking to some Rust propagandists. Sure, Rust has its merits — memory safety without garbage collection, yada yada — but let’s talk about getting actual, market-ready products out the door. That’s where garbage-collected languages like C#, JavaScript, and Python shine. Here’s why.</p><h3>The Borrow Checker: A Double-Edged Sword</h3><p>Ah, the borrow checker, Rust’s claim to fame. It’s like that overly cautious friend who won’t let you climb a tree because you might fall and break a leg. It’s supposed to enforce strict rules to avoid pitfalls.</p><ul><li><strong>In Practice: </strong>It makes you wrestle with it just to get your code to compile. Every minute spent doing that is a minute not spent developing features, fixing other kinds of bugs, or doing literally anything else productive.</li></ul><h3>The Learning Curve Fallacy</h3><p>Rust proponents claim you’ll get the hang of the borrow checker, eventually.</p><ul><li><strong>Hard Truth</strong>: The upfront time isn’t worth the so-called long-term gains, especially if you’re in a rapid development cycle.</li></ul><h3>Striving for Perfection at the Cost of Progress</h3><p>Here’s the kicker with Rust — you’re expected to write perfect code right from the start. Sounds ideal, doesn’t it? Except, what if you’re in startup mode or another fast-paced development environment?</p><ul><li><strong>Reality Check</strong>: You need to ship products fast to even know if they’re worth refining. Wrestling with the borrow checker to produce “perfect” code is just burning time that could’ve been better spent actually testing your product in the market.</li></ul><h3>The Myth of Future Time-Saving</h3><p>Ah, the old “it’ll save you debugging time in the long run” argument. That’s not completely bogus, but if you’re racing against the clock, that future time saved is purely theoretical.</p><ul><li><strong>Hard Truth</strong>: What’s the point of crafting “perfect,” bug-free code if you haven’t even validated the product’s market fit? You could spend all that time fine-tuning, only to find out nobody wants what you’re selling.</li></ul><h3>Productivity over Perfection</h3><p>Garbage collection? Yeah, it might be sneered at by hardcore systems programmers. But let’s get real.</p><ul><li><strong>The Deal</strong>: Speed trumps perfection in the business world. If the product freezes for a few milliseconds to collect garbage but ships six months faster, most businesses will pay that price gladly.</li></ul><h3>Time is Money, and Compilers Don’t Pay Bills</h3><p>Your boss couldn’t care less about the theoretical benefits of zero-cost abstractions if the product’s late.</p><ul><li><strong>The Reality</strong>: With languages like C#, JavaScript, and Python, you’re writing code that actually brings in revenue. These languages come packed with rich libraries that let you do more with less. Rust? Not so much.</li></ul><h3>Ecosystem Support</h3><p>Sure, Rust’s ecosystem is growing, but let’s not kid ourselves. It’s nowhere near as extensive as that of languages like C#, JavaScript, and Python.</p><ul><li><strong>The Fact</strong>: Massive user bases, extensive libraries, and heaps of resources. Got a problem? A quick Google search usually has you covered. Rust? Not quite there yet.</li></ul><h3>The “It Works” Factor</h3><p>At the end of the day, the market wants something that works. Languages like C#, JavaScript and Python have a long track record of working well in a variety of domains, from game development to backends and to user interfaces.</p><ul><li><strong>The Truth</strong>: Rust might catch up one day, but for now, it’s more of a gamble.</li></ul><h3>Conclusion</h3><p>Look, if you’re not building low-level stuff like drivers, embedded systems, or operating systems, and you don’t have a laser-focused goal, do not use Rust.</p><p>In scenarios where time-to-market is king, garbage-collected languages like C#, JavaScript, and Python are the real MVPs. Why? Because they get you across the finish line when it really counts.</p><ul><li><strong>The Verdict</strong>: In the real world, a so-called “perfect” product that’s collecting dust on the shelf is worthless. On the other hand, a good-enough product that actually makes it into users’ hands? That’s where the money is.</li></ul><p>So, the next time you’re in a rapid development cycle, think twice before hopping on the Rust train.</p><h3>Special Thanks</h3><p>Thank you to all contributors and those who engaged in the comments, leading to revisions in this article in a more balanced perspective.</p><h3>We are done here.</h3><p>You’ve read the rest, now <strong>follow </strong>the best. You’ll get more no-BS deep-dives here on Medium. Don’t miss out.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=586dc7e2edbc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OpenAI’s Double Standard: ChatGPT’s “New” Internet Browsing is Old News]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/openais-double-standard-chatgpt-s-new-internet-browsing-is-old-news-9d9df936cb71?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/9d9df936cb71</guid>
            <category><![CDATA[hypocrisy]]></category>
            <category><![CDATA[openai]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[ethics]]></category>
            <category><![CDATA[chatgpt]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Mon, 02 Oct 2023 15:58:10 GMT</pubDate>
            <atom:updated>2023-10-02T15:58:10.387Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZjX1pqT9DW2ddp4jMJPR2w.png" /><figcaption>OpenAI logo with Devil horns.</figcaption></figure><p>Ah, the latest buzz: ChatGPT can browse the internet — again! Hold the applause, folks. OpenAI’s acting like it just reinvented the wheel, conveniently forgetting they first took it away because of “ethical concerns” over paywalls. Funny, considering OpenAI had zero problems scraping the entire internet to train ChatGPT. It’s like a bank robber lecturing you on the immorality of jaywalking.</p><h3>The “Groundbreaking” Revival</h3><p>OpenAI’s drumroll for this “Browse with Bing” feature is laughable. It’s not a groundbreaking invention; it’s reheated leftovers. And let’s not act like users haven’t been outsmarting this limitation for ages. Ever heard of WebPilot plugins? Yeah, they’ve been the unsung heroes of internet browsing with ChatGPT all along.</p><h3>Privacy Concerns or Convenient Excuses?</h3><p>Oh, and now OpenAI’s suddenly a champion of privacy? Please. ChatGPT was always a risk for picking up harmful content and misinformation, given it’s trained on the Wild West that is the internet. But now that users can do the browsing themselves, suddenly it’s a red flag? Cute.</p><h3>In Conclusion</h3><p>This whole “new feature” spiel is less about innovation and more about optics and double standards. OpenAI’s playing a game of do-as-I-say-not-as-I-do, and it’s getting old. Next time you hear about ChatGPT’s so-called “new” capabilities, remember it’s mostly smoke and mirrors — and don’t forget to season it with a healthy dose of skepticism.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9d9df936cb71" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[If You’re Not Using ChatGPT for Work and Life, You’re Basically a Dinosaur]]></title>
            <link>https://medium.com/@ChadJohnsonOfficial/if-youre-not-using-chatgpt-for-work-and-life-you-re-basically-a-dinosaur-2208e45673a9?source=rss-6295d9d3964e------2</link>
            <guid isPermaLink="false">https://medium.com/p/2208e45673a9</guid>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[future]]></category>
            <category><![CDATA[modernization]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[efficiency]]></category>
            <dc:creator><![CDATA[Chad Johnson]]></dc:creator>
            <pubDate>Fri, 29 Sep 2023 15:39:26 GMT</pubDate>
            <atom:updated>2023-09-29T15:39:26.873Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mqHg7UV0mA3_ymnFiShuJQ.jpeg" /><figcaption>3D Render of the ChatGPT logo.</figcaption></figure><h3>Introduction</h3><p>Ah, <strong>2023</strong>. A time when AI is not just a buzzword but a staple in our day-to-day lives. We’ve got AI for virtually everything — <em>from microwaving popcorn to predicting the next big stock market crash</em>. But let’s focus on the real MVP here: <strong>ChatGPT</strong>. If you’re not leveraging this marvel of modern tech to handle your work, schedule your day, or even remind you to breathe, then let me extend a warm welcome to the digital age, my Luddite amigo.</p><h3>ChatGPT: Your Personal Assistant and Therapist Rolled Into One</h3><p>Still using sticky notes and alarms to remind you of meetings and deadlines? <strong>How archaic!</strong> ChatGPT can be your hyper-efficient secretary, reminding you of all your appointments and even drafting your emails. Imagine having your entire day planned out with machine-precision, leaving you free to tackle the <em>real challenges</em>, like deciding what to binge-watch next. But of course, you wouldn’t know what that kind of efficiency feels like, would you?</p><h3>Automate the Drudgery, Enjoy the Creativity</h3><p>Manual work is so 20th-century. Why spend hours crafting reports, analyzing data, or even composing tweets when ChatGPT can do it for you? It’s like having a <strong>creative genius</strong> at your fingertips, generating anything from business proposals to soul-stirring poetry. If you’re still doing all that manually, it’s no wonder you’re falling behind. It’s the digital age, buddy; manual labor is for robots, and creative thinking is for AI.</p><h3>ChatGPT: The Master of Time Management</h3><p>Are you still manually setting reminders or using outdated calendar apps? <strong>Adorable.</strong> ChatGPT can manage your entire schedule, down to the second. We’re talking about a machine that knows you better than you know yourself. It’ll tell you when to work, when to rest, and even when to call it a day and crack open a cold one. You’re not just missing out; you’re <em>actively sabotaging</em> your own productivity by not using ChatGPT.</p><h3>Conclusion</h3><p>So there you have it. If you’re not integrating ChatGPT into your work and life, you’re not just a relic — you’re a museum piece. While the rest of us are jet-setting into a future of unparalleled efficiency and creativity, you’re chipping away at a monolith of outdated methods. But hey, it’s not too late to join the 21st century. The future is <strong>ChatGPT</strong>, and <em>that future is now</em>. Don’t be <em>that person</em> still living in the past. <em>Hop on the ChatGPT train; you won’t regret it</em>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2208e45673a9" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>