<?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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ tutorial purgatory - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ tutorial purgatory - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 12 Jun 2026 23:05:41 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/tutorial-purgatory/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How I Escaped Tutorial Purgatory – and How You Can, Too ]]>
                </title>
                <description>
                    <![CDATA[ By Daniel Chae Tutorial purgatory. We've all been there. The mindless scrolling, pausing, and playing. All the copying, and pasting of the coding snippets. It's a lukewarm place to be.  You're "learning" because you're making your way through structu... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/escape-tutorial-purgatory/</link>
                <guid isPermaLink="false">66d45e00d7a4e35e38434957</guid>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ lessons learned ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial hell ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 23 Nov 2020 17:50:41 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/11/road-trip-with-raj-_cbKur5I60A-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Daniel Chae</p>
<p>Tutorial purgatory. We've all been there. The mindless scrolling, pausing, and playing. All the copying, and pasting of the coding snippets. It's a lukewarm place to be. </p>
<p>You're "learning" because you're making your way through structured content. But when you leave the tutorial, you can't code any of what you "learned". </p>
<p>The great thing is that you don't have to stay stuck in tutorial purgatory. I'm going to share with you my own experience about how I broke out of tutorial purgatory and how you can too. </p>
<p>Whatever method you decide to use, I'll share the key metrics for breaking out of the tutorial rut.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-259.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@dchuck?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Daniel Chekalov / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<h2 id="heading-painful-realizations-about-my-learning-approach">Painful Realizations About My Learning Approach</h2>
<p>When I first started learning how to code I looked forward to learning anything and everything. </p>
<p>I'd Google "easy programming projects" and browse the first few search results. I kept my eyes peeled for tutorials because I thought I could avoid failure with the tutorial's help. I also believed that the more tutorials I completed, the more I would learn. </p>
<p>I couldn't have been more incorrect in my learning approach.</p>
<p>The unfortunate aspect was that I wasn't retaining the knowledge of what I was coding. After several months of "completing" tutorials, I soon came to grips with my lack of progress. I couldn't understand the code I was writing. </p>
<p>An example of this was when I completed a Flask tutorial. I thought I knew and understand Python from completing a tutorial. I decided to take w3 school's Python quiz and was confident I would pass. Unfortunately, I failed.</p>
<p>After I discovered I wasn't learning what I thought I was, I felt pretty hopeless. I thought tutorials were the key to learning. I thought about trying projects without tutorial help, but I was too scared to fail. I was burning with desire to become a great programmer, but I was out of ideas for how to do that.</p>
<h2 id="heading-how-i-broke-free-from-tutorial-purgatory">How I Broke Free from Tutorial Purgatory</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-260.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@pabloheimplatz?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Pablo Heimplatz / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>I spent the next several months sulking, but not for long. There was a determination within me to find a way. </p>
<p>After months of not touching a single line of code I sat down and asked myself, "what is it that I want to work on? What type of programming is out there?"  </p>
<p>I sat and pondered answers to those two questions. I started researching different types of programming and various career paths. It was illuminating.</p>
<p>I found articles and forums on data science and analysis. I found helpful graphics that explained the difference between the front-end and back-end. I discovered how the front-end and back-end interact. I also found videos that explained what APIs were and how to view, receive, and write data from an API.</p>
<p>I would encourage you to ask the same questions:</p>
<blockquote>
<p>What is it that you want to work on? </p>
<p>What type of programming is out there?</p>
</blockquote>
<p>As you reflect on what it is you want to work on and explore, you'll begin to narrow down your learning path. </p>
<p>You'll feel less inclined to learn everything there is to know and more of what you are most interested in. You'll also feel less overwhelmed as you focus in on what type of programming interests you the most.</p>
<h2 id="heading-meetups-changed-my-life">Meetups Changed My Life</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-261.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@windows?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Windows / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Another thing I started doing was attending coding meetups. It's hard to imagine in-person meetups given that we're currently in a pandemic. But I remember my first coding meetup and how helpful it was.</p>
<p>Long story short, I had no idea what I was doing at the meetup. But I went with the intention to learn and open myself to different methods of programming. One of the facilitators ended up sitting me down and asked me why I was at the meetup. </p>
<p>After I told him I was there to learn more about programming, he helped me explore. He took me through different use cases for the Beautiful Soup and Selenium libraries. He ended up teaching me how to build a web scraper. After that meetup I realized data science and analysis interested me the most. </p>
<p>Throughout the next several months I had a renewed drive for programming. I had a specific vision and set of goals in mind. I began to complete small, simple projects. I built a web scraper that scraped financial data from the NASDAQ stock market. I also built a Java application that generated a random "workout of the day". </p>
<h2 id="heading-this-is-what-freedom-feels-like">This is What Freedom Feels Like</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-262.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@micahtindell?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Micah Tindell / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>Over the course of the next year I could feel my confidence grow. As I completed small, simple projects my comprehension began to grow as well. I started to recognize more and more lines of code from other people's scripts on GitHub.  </p>
<p>Given that most of us are sheltering in place, I would recommend you don't go to an in-person coding meetup. That said, there are plenty of virtual coding meetups on <a target="_blank" href="https://www.meetup.com/">Meetup.com.</a> </p>
<p>I would also encourage you to check out the <a target="_blank" href="https://www.reddit.com/r/learnprogramming/">r/learnprogramming subreddit</a>. There are some snarky individuals on Reddit who may give you a hard time for asking questions. But there are also plenty of people who are more than willing to guide, inspire, and help you. If you allow them to, they'll help you become a better programmer.</p>
<h2 id="heading-your-keys-to-success-when-learning-to-code">Your Keys to Success When Learning to Code</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/image-263.png" alt="Image" width="600" height="400" loading="lazy">
_Photo by [Unsplash](https://unsplash.com/@mlightbody?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit"&gt;Malcolm Lightbody / &lt;a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm<em>campaign=api-credit)</em></p>
<p>There are many ways to break out of tutorial purgatory. You don't have to do any of what I did. Whatever you choose to do, you should know there are a few key success metrics to guide you. </p>
<p>The most important metric is results. Are you able to complete projects without a tutorial guiding you every step of the way? Are you able to understand the problem and develop some type of approach? </p>
<p>Tutorials should help you so that you can go back and understand what you built with the tutorial's help. </p>
<p>The second metric is confidence. Do you feel like you're heading in the right direction? Do you feel like you're progressing? </p>
<p>Confidence can precede results, but it should never exist without results. Otherwise, you'll experience what I did while I was "completing" tutorials. You'll have, in essence, a false sense of confidence.</p>
<p>Tutorial purgatory is a miserable place to be. You don't know if you're heading in the right direction and learning to program can feel hopeless. </p>
<p>But take heart, you don't have to stay stuck in tutorial purgatory. Keep asking questions! Distill your vision so that you're not overwhelmed with having to learn everything. You're heading in the right direction if you're producing results and feeling confident. Time to break out of tutorial purgatory and you'll thank yourself later.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Move from Coding Tutorials to Building Projects as a Developer ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan Learning to code by following tutorials works for many people. And yet there tends to be a separate learning curve when you're trying to move out of the tutorial ecosystem and into creating your own projects. I've written elsewhere ab... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/five-tips-for-moving-from-coding-tutorials-to-making-progress-as-a-developer/</link>
                <guid isPermaLink="false">66d851e2bdc56847ac959f48</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Integrated Development Environment   ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tips ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 19 Dec 2019 17:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/12/jefferson-santos-V9sv7QrDUgc-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>Learning to code by following tutorials works for many people. And yet there tends to be a separate learning curve when you're trying to move out of the tutorial ecosystem and into creating your own projects.</p>
<p>I've <a target="_blank" href="https://www.freecodecamp.org/news/how-to-choose-a-programming-language-and-escape-tutorial-purgatory/">written elsewhere</a> about how to escape tutorial purgatory and make progress as a programmer. But to summarize here, it's a necessary step in your growth as a developer to venture out into the wild west of programming and build something. This will expose you to the ins and outs of your chosen coding ecosystem.</p>
<p>Here are five tips to help you move out of those tutorials and into making real progress as a developer by building projects.</p>
<h2 id="heading-1-choose-a-project">1. Choose a Project</h2>
<p>Whether you're coding from a book or working through online tutorials, your first step upon leaving the safety of your nest is to choose a project that is specific to your field of interest.</p>
<p>If you're an aspiring front end developer, that might mean creating a basic website. If you're learning Python, that could look like a simple web scraper. Find something that interests you, and research examples to get an idea of what your project might look like when it's complete.</p>
<h2 id="heading-2-set-up-an-ide">2. Set Up an IDE</h2>
<p>If you've been learning from online tutorials which provide a console that handles all of the back end work for you, take some time to set up an <a target="_blank" href="https://www.freecodecamp.org/news/how-to-set-up-an-integrated-development-environment-ide/">integrated development environment</a> (IDE) that is specific to your intended project and ecosystem.</p>
<p>The actual form of your IDE will vary greatly depending on your project. You could be cobbling together a workflow that includes a code editor, command line interface, version control system, and package manager. Or, on the other hand, you might install a game engine that has all of the stuff that you need built-in for you.</p>
<p>The important component of this step is to become comfortable coding in an environment that is standard for the type of work you want to do. This helps you move away from only coding in a browser or following a book.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/f-JWTicIOwI" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-3-get-comfortable-with-documentation">3. Get Comfortable with Documentation</h2>
<p>Here's a glimpse of a familiar workflow when you're beginning a new project:</p>
<ol>
<li>Set up your IDE</li>
<li>Code</li>
<li>Get stuck or forget the syntax for something</li>
<li>Google some half-formed question about the issue</li>
<li>Find the official documentation and a handful of Stack Overflow posts</li>
<li>Check social media for no reason</li>
<li>Return to the documentation and Stack Overflow to find your answer</li>
<li>Return to step 2</li>
</ol>
<p>Unless you're a super expert in your field, chances are that you'll get stuck trying to figure out a solution to some aspect of your project. The official documentation for the library or framework that you're using will likely have some sort of answer - even if it's an obscure one - for whatever's puzzling you. But if it doesn't, someone has probably asked a similar question on Stack Overflow or elsewhere.</p>
<p>Even if there are no answers out there for your specific question, there will be a breadcrumb somewhere that'll lead you to an approach for how to solve your problem.  </p>
<p>If you're trying to use ES6 classes in some obscure JavaScript framework, for example, you might not find the <em>exact</em> answer you're looking for. But there will be plenty of similar resources out there that can help you come up with a solution yourself.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/z9xz-R4iuaU" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-4-ask-for-help">4. Ask for Help</h2>
<p>One of the best things you can do for yourself as an aspiring developer is to make friends with other developers in your field. They can look at your code and provide feedback about how to make it better.</p>
<p>For some people, the idea of sharing their work and having it critiqued is an anxiety-inducing experience. I recommend working as diligently as you can to overcome this emotion as it will stagnate your growth as a programmer.</p>
<p>When you're starting out with your own projects, it can be <em>extremely</em> helpful to have someone who's already walked the path to look at your work and offer constructive criticism. Even if doing so requires you to rewrite whole sections of code.  In many cases, you might be trying to recreate the wheel while other options already exist. There, you'll benefit greatly from learning best practices from experts that have experience in the field.</p>
<h2 id="heading-5-identify-other-areas-for-growth">5. Identify Other Areas for Growth</h2>
<p>One project usually leads to another, and you'll quickly identify areas in which you're able to grow as a developer.  This might mean that you'll move from front end development to back end, or vice versa, or hop from 2D game programming into 3D.</p>
<p>It might also mean that you need to keep building your skill set just to complete the initial project that you've chosen. There's no shame in learning C#, for example, then deciding to build the back end of a web app, and having to learn all about <a target="_blank" href="https://docs.microsoft.com/en-us/aspnet/?view=aspnetcore-3.1">ASP.NET</a> and <a target="_blank" href="https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.1&amp;tabs=visual-studio">Razor Pages</a> before actually making any progress!</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/0-dUB52eEMk" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>Happy coding!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p>M. S. Farzan, Ph.D. has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.nightpathpub.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="https://twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Use GitHub and ES6 Features to Create and Structure Your Code ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan If you're moving from coding tutorials into creating your own JavaScript projects, you'll want to become familiar with using a version control system like GitHub and benefiting from ES6 features to clean up your code and streamline yo... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-use-github-and-es6-features-to-create-and-structure-your-code/</link>
                <guid isPermaLink="false">66d851f32c0761b6f5a251f3</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ES6 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Integrated Development Environment   ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 19 Dec 2019 17:00:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9e9b740569d1a4ca3e11.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>If you're moving from coding tutorials into creating your own JavaScript projects, you'll want to become familiar with using a version control system like <a target="_blank" href="https://github.com/">GitHub</a> and benefiting from <a target="_blank" href="https://www.w3schools.com/js/js_es6.asp">ES6 features</a> to clean up your code and streamline your development process.</p>
<p>In this new video, we'll walk through cloning an existing repository from GitHub, creating your own local and remote repositories, utilizing node package manager (NPM) to install dependencies, creating a streamlined code base using ES6 classes, import/export modules, and arrow functions, and adding, committing, and pushing changes to GitHub.</p>
<p>Plus, we'll talk through the basic file structure for a <a target="_blank" href="https://phaser.io/">Phaser 3</a> project!</p>
<p>Check it out (50 minute watch):</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/z9xz-R4iuaU" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p>Happy coding!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p>M. S. Farzan, Ph.D. has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.nightpathpub.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="https://twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Set Up an Integrated Development Environment (IDE) ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan If you're moving from online tutorials to building your own projects, you might be overwhelmed by the idea of setting up your own integrated development environment (IDE), or wonder why you even need one to get your work done. In this... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-set-up-an-integrated-development-environment-ide/</link>
                <guid isPermaLink="false">66d851f1afbaabf7a144aefe</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ide ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Integrated Development Environment   ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Sun, 17 Nov 2019 21:25:59 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9f42740569d1a4ca41a5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>If you're <a target="_blank" href="https://www.freecodecamp.org/news/how-to-choose-a-programming-language-and-escape-tutorial-purgatory/">moving from online tutorials to building your own projects</a>, you might be overwhelmed by the idea of setting up your own integrated development environment (IDE), or wonder why you even need one to get your work done.</p>
<p>In this article, I'll discuss what an IDE <em>is</em> and give you some ideas about what yours might look like, particularly if you're working in JavaScript, although the information will be applicable irrespective of language or project type.</p>
<p>Here's a video version of this post if you'd prefer (28 minute watch):</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/f-JWTicIOwI" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-what-is-an-integrated-development-environment">What is an Integrated Development Environment?</h2>
<p>An integrated development environment, put simply, is everything a programmer needs to get their work done.  The actual makeup of an IDE will vary between programming languages, types of projects, and even between programmers, but there are some things that are common among a lot of IDEs, which I'll cover below.</p>
<p>The simplest way to understand an IDE is to consider an "all-in-one" solution like <a target="_blank" href="https://unity.com/">Unity</a>. As a fully-featured game engine, Unity has everything you'll need to create a 2D or 3D game: a GUI that allows you to build your game world, a code editor (Visual Studio) where you can write scripts, a way to download dependencies and assets, and even GitHub integration so that you can keep track of build versions and collaborate on projects.  For smaller projects, Unity can be thought of as a fully functional integrated development environment, where everything is already set up for you after downloading the game engine.</p>
<p>Other IDEs can vary greatly in complexity, particularly if you're coming from an online tutorial that allows you to code right in the browser.  One of my gripes with common answers to the question, "what programming language should I learn?" is the notion that learning JavaScript is easier because "it just runs in your browser."</p>
<p>Tell that to anyone who's attempted to set up an IDE for Create React App, which requires several components to get up and running - none of which are apparent when you're working through online tutorials.  To actually do work as a developer, you'll need four main things to set up your integrated development environment: a code editor, command line interface (CLI), version control system, and package manager.</p>
<p>Major caveat: your IDE may vary greatly depending on programming language or type of project, but you'll likely need one or more of the following in any case!</p>
<h2 id="heading-ide-tool-1-code-editor-and-compiler">IDE Tool #1: Code Editor (and Compiler)</h2>
<p>A whole bunch of online tutorials allow you to just code in the browser, which is great for understanding basic programming concepts, but in the long run, you'll need an editor that allows you to save your code (and compile it, if you're using a language like C# or C++).</p>
<p>There are a lot of code editors out there, such as <a target="_blank" href="https://atom.io/">Atom</a> (lightweight, free, and open source), <a target="_blank" href="https://www.sublimetext.com/">Sublime</a> (super popular with tons of integrations), and <a target="_blank" href="https://visualstudio.microsoft.com/">Visual Studio / Visual Studio Code</a> (supported by Microsoft and wonderful to work with).  It would be reductive to say that they're "all the same thing," as each one provides a different approach to supporting your coding workflow, so you might try one or two before deciding which one you like best.</p>
<h2 id="heading-ide-tool-2-command-line-interface-cli">IDE Tool #2: Command Line Interface (CLI)</h2>
<p>If you have a computer, you've undoubtedly used your file explorer or some other navigational GUI to access the file system, create folders, delete files, and so on.</p>
<p>The command line interface (CLI) allows you to do the same thing...in plain text.  Which might seem super archaic or annoying at first, but once you wrap your head around chaining commands together and integrating them into your workflow, you'll begin to see the power of the CLI and how essential it is to most development environments.</p>
<p>On Mac, you might be using the Terminal.  Because I've installed GitHub for Windows (more on GitHub below) on my machine, I use Git Bash for my work.  There are several options here for you, and it might do to check out a few command line tutorials to understand some of the basic principles so that you feel comfortable using it in your IDE.</p>
<h2 id="heading-ide-tool-3-version-control-system">IDE Tool #3: Version Control System</h2>
<p>There are several <a target="_blank" href="https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control">resources</a> out there that provide overviews of what is version control and why you should use it. Suffice it to say that when you're building anything other than a simple project, you'll need a way to back up your work, share your code with collaborators, and keep track of the different build versions so that you can muck with parts of the code base and not others.</p>
<p><a target="_blank" href="https://github.com/">GitHub</a> isn't the only version control system out there, but it is the gold standard at the moment, and it would be worth your while to look up a few tutorials to learn how to take advantage of its features, even if you just wind up using it as a remote backup method.</p>
<p>Additionally, while there are several addons to integrate GitHub right into your code editor (or game engine), the standard practice for doing Git-related tasks is by using the command line interface, which provides another reason for becoming proficient with your CLI of choice.</p>
<h2 id="heading-ide-tool-4-package-manager">IDE Tool #4: Package Manager</h2>
<p>For some IDEs, like with our Unity example above, all you need to do is download and install software to get started with building your projects.  Most of the dependencies that you'll need will be included with your initial download, and if not, there will be a way to access them from within the game engine (e.g. Unity's <a target="_blank" href="https://assetstore.unity.com/">Asset Store</a>).</p>
<p>For other, more choose-your-own-adventure IDEs, you'll need to piece things together yourself, and one of the essential components will be a package manager like <a target="_blank" href="https://www.npmjs.com/">NPM</a> or <a target="_blank" href="https://docs.conda.io/en/latest/">Conda</a>.</p>
<p>Package managers do a lot of things, and at their most basic functionality, they'll help you to install all the dependencies you'll need to get your work done.  If you want to get started on a React project, for example, you'll navigate to a folder through your CLI, and, after installing NPM (which is bundled with <a target="_blank" href="https://nodejs.org/en/">Node.js</a>) type:</p>
<pre><code>npx create-react-app my-app 
cd my-app 
npm start
</code></pre><p>The first line basically says: "Hey, NPM! Download all the dependencies for Create React App, and put them in a folder called 'my-app.'"</p>
<p>The second line then tells your CLI: "Navigate to the new directory called 'my-app.'"</p>
<p>The third line gets the action going: "NPM, it's me again. Start a development server that displays my project in a browser and updates it whenever I make changes to the code."</p>
<p>Once you've installed all of the necessary dependencies using your package manager, you'll begin working in your code editor and using the command line interface to make pull requests or push code to a remote repository using your version control system.</p>
<p>In summary, an integrated development environment comprises all of the things you need to get your work done, and varies based on language, project type, and your personal preference.  Ordinarily, IDEs include a code editor (and compiler), command line interface, version control system, and package manager, but your integrated development environment might have different requirements or a combination thereof.</p>
<p>You can do it!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p><strong>M. S. Farzan, Ph.D.</strong> has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.entromancy.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="http://www.twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Choose a Programming Language and Escape Tutorial Purgatory ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan A few weeks ago, I posted about my experience attempting to learn JavaScript, C#, Python, and more from Codecademy, Udemy, and freeCodeCamp, along with escaping from tutorial purgatory and actually making progress as a developer. Deci... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-choose-a-programming-language-and-escape-tutorial-purgatory/</link>
                <guid isPermaLink="false">66d851edc1d58e16fbe2b40e</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ codecademy ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp.org ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Game Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                    <category>
                        <![CDATA[ udemy ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 04 Nov 2019 20:45:53 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9fa0740569d1a4ca43a4.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>A few weeks ago, I <a target="_blank" href="https://www.freecodecamp.org/news/i-learned-to-code-and-so-can-you/">posted about my experience</a> attempting to learn JavaScript, C#, Python, and more from Codecademy, Udemy, and freeCodeCamp, along with escaping from tutorial purgatory and actually making progress as a developer.</p>
<p>Deciding on a programming language can be extremely challenging and time-consuming as there are dozens of options out there, with a lot of conflicting information.  In this article, I'll share some options based on my own experience learning to code, with suggestions for how to choose a programming language, escape tutorial purgatory, and make progress as a developer.</p>
<p>Here's a video version of this post if you'd prefer (11 minute watch):</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/_KdyCdsIYBk" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-scenario-1-you-know-what-you-want-to-build">Scenario #1: You Know What You Want to Build</h2>
<p>Often, in articles such as these (or in the "What Coding Language Should I Learn?" infographics with which you're probably intimately familiar), you're asked to think critically about what you want to build after you've learned to code.</p>
<p>This approach is useful if you have some idea about what it is that you want to <em>do</em> with a programming language after learning it, but not so much if you just want to <em>learn to code</em>, as was my experience.  I'll cover both scenarios in this article.</p>
<p>If you do know what direction you want to take your coding career after learning a programming language, you'll most likely have an easier time figuring out which language to learn first.  Here are some suggestions in that case.</p>
<h3 id="heading-front-end-development-javascript-and-htmlcss">Front End Development: JavaScript (and HTML/CSS)</h3>
<p>If you already know that you want to work on the "front end" of websites - meaning, anything the user sees when they come to a website - you should begin your coding journey with learning JavaScript.  You'll probably start out by learning HTML and CSS, which form the backbone of just about every website, and then begin adding JavaScript to enhance functionality and interactivity to your sites.</p>
<p>JavaScript is fairly ubiquitous as a programming language, and has an easier on-ramp than other, lower level languages like C++.  It's a great jumping-off point if you don't know what you want to learn...but more on that later.</p>
<h3 id="heading-back-end-development-python-c-or-javascript-and-sql">Back End Development: Python, C#, or JavaScript (and SQL)</h3>
<p>Let's say you're more interested in learning about the guts of websites, managing the "back end" and trying your hand at database administration.  You've got a lot of options here, and the most straightforward path is Python, which is a beginner-friendly language that has mature frameworks (e.g. <a target="_blank" href="https://www.djangoproject.com/">Django</a> and <a target="_blank" href="https://www.palletsprojects.com/p/flask/">Flask</a>) for back end development.</p>
<p>You also can't go wrong with C#, which will expose you to Microsoft's <a target="_blank" href="https://dotnet.microsoft.com/learn">.NET ecosystem</a> and a programming language that, once you get into the weeds with it, is a pleasure with which to work.  And if you're thinking of going "full stack" - meaning, you want to do front end <em>and</em> back end development - you might consider learning JavaScript, which has younger but highly prized back end frameworks like <a target="_blank" href="https://expressjs.com/">Express</a> and <a target="_blank" href="https://koajs.com/">Koa</a>.  Doing so will also ease your learning process as you'll be using the same language to code both stacks.</p>
<p>Whichever language you choose for back end development, you'll most likely also wind up adding SQL to your toolbox for database management, so put that on your radar.</p>
<h3 id="heading-2d-game-development-javascript-or-c">2D Game Development: JavaScript or C</h3>
<p>I've <a target="_blank" href="https://www.freecodecamp.org/news/what-2d-game-engine-to-use-for-your-next-game/">written elsewhere</a> about what engine you should use to make 2D games, but here's the skinny.</p>
<p>There are a <em>lot</em> of 2D game engines, many of which may or may not suit your fancy as a game developer, and each with their own benefits, idiosyncrasies, and learning curve.  Some of them, like <a target="_blank" href="https://www.yoyogames.com/gamemaker">Game Maker Studio 2</a>, for example, utilize their own proprietary languages to run scripts, but I'd actually recommend you first learn JavaScript or C#, even if you're considering using a different game engine in the long run.</p>
<p>With JavaScript, you can use frameworks like <a target="_blank" href="http://phaser.io/">Phaser</a> to make 2D games, or fully-featured engines like <a target="_blank" href="https://www.construct.net/en">Construct 3</a> (which actually uses drag-and-drop development with room for custom scripts).  If you choose to learn C# instead, you'll work with <a target="_blank" href="https://unity.com/">Unity 2D</a>, or perhaps <a target="_blank" href="http://www.monogame.net/">MonoGame</a> - but I'd actually recommend starting with non-engine tutorials (e.g. <a target="_blank" href="https://dotnet.microsoft.com/learn">.NET</a>)to get a good handle on the language first.</p>
<p>Learning JavaScript or C# will give you the foundational coding knowledge you'll need to tackle another game engine, like Game Maker, while also providing you with things like programming best practices and clean code organization.</p>
<h3 id="heading-3d-game-development-c-or-c">3D Game Development: C# or C++</h3>
<p>There are a lot of options for learning to code for 3D game development, and I'd suggest you start with C# or C++.  In fact, unless you're super tech savvy or already have a background in programming, I'd recommend for you to start with C# and work your way down to C++.  You'll have an easier learning curve and will learn fundamental programming concepts without having to deal with things like memory management and lower-level code.</p>
<p>You'll probably wind up learning both in any case, but if you start with C#, you can tinker around with <a target="_blank" href="https://unity3d.com/">Unity 3D</a>, and then make your way to C++ with <a target="_blank" href="https://www.unrealengine.com/en-US/">Unreal Engine 4</a>.</p>
<h3 id="heading-data-sciencemachine-learning-python">Data Science/Machine Learning: Python</h3>
<p>Although there are options in other languages for learning data science/analysis and machine learning, Python is currently the gold standard for this realm of coding.  It's a fairly straightforward language to learn and will expose you to good programming habits and widely-used frameworks, so you can't go wrong here.</p>
<h2 id="heading-scenario-2-you-dont-know-what-you-want-to-build">Scenario #2: You Don't Know What You Want to Build</h2>
<p>There's the distinct possibility that you've spent days, weeks, or even months searching through articles, videos, reddit posts, and Stack Overflow questions reading about programming languages, and still have no idea where to invest your time because you don't know what you want to build.</p>
<p>I've been there.  It's annoying.</p>
<p>My recommendation to you, trite as it may seem, is to just pick one.  Literally any one of them, even if they're not listed here.  Go learn JavaScript.  Or Python.  Or Rust.  Or Haskell.</p>
<p>OK, maybe not Haskell.  But pick <em>something</em>, and stick with it long enough to learn the basics and see if there's a possibility that you might like using that language to build with it.  And keep in mind two things as you do so:</p>
<ol>
<li>Set a time limit for yourself.  Like, "I'm going to take the next three months to learn JavaScript using freeCodeCamp tutorials." If, at the end of that period, you feel like you're making progress and it's interesting to you, keep going!  If not, it may be time to reconsider your choice of language and see if there's something out there that might be a better fit for you.</li>
<li>Build something that's not in your tutorials. This is a <em>crucial step</em> in your growth as a developer.  I'll cover it in the next section.</li>
</ol>
<h2 id="heading-scenario-3-youre-stuck-in-tutorial-purgatory">Scenario #3: You're Stuck in Tutorial Purgatory</h2>
<p>If you've found yourself doing tutorial after tutorial, on the same or different websites, without ever actually feeling like you're making progress, you may be really frustrated with the experience of learning to code.  I've been there, and can help.</p>
<p>The first step is to consider what programming tutorials are good for, and what they are not.  Most online tutorials - particularly ones that allow you to code right in the browser - are excellent for teaching you how to program.</p>
<p>They are not, on the other hand, good for teaching you how to be a programmer.</p>
<p>The best tutorials will expose you to fundamental coding concepts and require you to apply that knowledge to solve puzzles and projects.  They're wonderful learning tools that can, if used beyond their scope, become crutches that will stifle your learning.</p>
<p>A programmer, for example, doesn't sit around all day doing tutorials.  A programmer <em>programs</em>, and that's precisely what you need to do to make progress after you've mastered the basics.</p>
<p>The best way to make progress as a developer is to pick a project in your language of choice and set out to do it.  If you're learning JavaScript, for example, you might choose to build a simple website with HTML/CSS and add some interactivity with <a target="_blank" href="https://jquery.com/">jQuery</a>.  You'll probably start out by <a target="_blank" href="https://www.freecodecamp.org/news/how-to-set-up-an-integrated-development-environment-ide/">setting up an integrated development environment</a>, immediately forgetting how to do something that you learned in your tutorials, get frustrated, head to Google, find the answer, and keep going.  Then you'll make progress, get stuck, search Stack Overflow, scratch your head at the official documentation, maybe share your code with someone, and repeat the whole process.</p>
<p>And you'll be doing exactly what programmers do when building a new project.</p>
<p>Finally, you really can't go wrong with what programming language you choose, even if it's not on this list.  If you wind up picking one, learning the basics, making a project, and deciding it's not for you, that experience will actually still help you in the long run.  The information you'll learn in the process will be useful, irrespective of whatever language you end up using for your projects.</p>
<p>You can do it!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p><strong>M. S. Farzan, Ph.D.</strong> has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.entromancy.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="http://www.twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How I escaped from tutorial purgatory and learned to code - and how you can, too. ]]>
                </title>
                <description>
                    <![CDATA[ By M. S. Farzan Context: I'm a tabletop game developer and digital marketer, and, having spent a long time around games and computers, decided I wanted to learn to code about 3 years ago. I set off as many do by searching, at great length, for what l... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/i-learned-to-code-and-so-can-you/</link>
                <guid isPermaLink="false">66d851f762a291dea89878e4</guid>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ codecademy ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp.org ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Game Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learn to code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Tutorial ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tutorial purgatory ]]>
                    </category>
                
                    <category>
                        <![CDATA[ udemy ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 14 Oct 2019 18:00:00 +0000</pubDate>
                <media:content url="https://cdn-media-2.freecodecamp.org/w1280/5f9c9ff4740569d1a4ca45b1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By M. S. Farzan</p>
<p>Context: I'm a tabletop game developer and digital marketer, and, having spent a long time around games and computers, decided I wanted to learn to code about 3 years ago.</p>
<p>I set off as many do by searching, at great length, for what language I should learn, and where from, returning to this topic several times over the course of my journey. I came across several threads suggesting one language or learning platform over another, and thought to share my particular experience in case it's helpful for someone else in the same discernment process.</p>
<p>Disclaimer: I'm not a professional programmer, and although I am using my skills to benefit my work (you can read about my search for a prototype framework <a target="_blank" href="https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/">here</a>), coding continues to be additive to my main work rather than a source of income, whatever that tells you.</p>
<p>Also disclaimer: I'm not attempting to position one language or learning platform over another, and I quite obviously haven't tried to learn every language out there, on every platform. The following is just my experience trying to figure out the most sensible way forward in an admittedly confusing environment.</p>
<p>You can also <strong>skip to the bottom for the TL;DR</strong>.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/_KdyCdsIYBk" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-prologue-c">Prologue: C++</h2>
<p>I'm not quite sure if I already knew that C++ was and continues to be a cornerstone in video game development. Maybe I saw it in one of those "What Programming Language Should I Learn" infographics that are around. But I wanted to know more about how games are made and how to talk to the computer. I'm pretty tech-friendly and have built or tinkered with my own PCs, thinking that might lend itself to the experience of learning how to code.</p>
<p>Holy smokes, was I way out of my depth. I did a few tutorials online (I think through <a target="_blank" href="https://www.learncpp.com/">learncpp</a> or similar) and soon realized that I would need more guidance to understand basic object oriented programming principles, in perhaps a more readily accessible language, than I was finding in learning C++.</p>
<h2 id="heading-html-css-javascript-and-python">HTML, CSS, JavaScript, and Python</h2>
<p>Before embarking on this adventure, I already had a little HTML experience, and came across <a target="_blank" href="https://www.codecademy.com/">Codecademy</a>. I very much liked the ability to do tutorials from within the browser and without having to set up an IDE (doing so for C++ had been a trying experience). I quickly consumed all of Codecademy's lessons on HTML and CSS. The natural path from that point was to do the JavaScript course, which I enjoyed. But I soon found myself in "tutorial purgatory" (not my reference), working through the Python course and others.</p>
<p>I should also mention that I completed Codecademy's courses as a free user, not wanting to pay a subscription fee for what they were offering at the time, which included projects and mentor support.</p>
<p>I learned a lot of basics from Codecademy and general OOP principles, but didn't wind up applying much of it without a clear path forward. I returned to my search (who am I kidding, I've spent a LOT of time concurrently researching other languages, learning platforms, and bootcamps throughout the whole process) and decided I wanted to learn more about game development through courses on Unity.</p>
<h2 id="heading-c">C</h2>
<p>I found <a target="_blank" href="https://www.udemy.com/course/unitycourse/">Ben Tristem's Unity course</a> on one of Udemy's perennial 10000% off sales, and worked diligently through the tutorials to build clones of 2D brick breaking and other games. I learned just enough C# to get by but not enough to feel confident in making anything myself.</p>
<p><a target="_blank" href="https://unity.com">Unity</a> itself was probably more of a roadblock here than Tristrem and co.'s instruction, which was actually quite good. The Unity editor is a beast of an engine, with a lot of good tools that are impenetrable to a novice user (again, you can read more about my experience with Unity <a target="_blank" href="https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/">here</a>).</p>
<p>I still feel like I learned a lot from the courses and the simple act of being exposed to C# and Unity's desired work flow, but wasn't getting enough out of the experience to continue. A friend of mine tipped me to take a look at freeCodeCamp, which is where I went next.</p>
<h2 id="heading-back-to-javascript">Back to JavaScript</h2>
<p>On first blush, <a target="_blank" href="https://www.freecodecamp.org/">freeCodeCamp</a> has the look of a less flashy Codecademy or <a target="_blank" href="https://teamtreehouse.com/">Treehouse</a>. But I liked how straightforward the tutorials were and didn't need to get past a paywall to make progress. I picked up where I left off with learning HTML and CSS, making good progress until I got to the Responsive Web Design projects that are required to finish the first section and receive a certification.</p>
<p>I can say with certainty that this was the moment (or series of moments) of my ejection from tutorial purgatory. For a novice with no real professional web design experience, and a willingness to figure out my own solutions without Googling the answer, the projects were <em>hard</em>. I eventually won out and made a couple of silly sites that satisfied the requirements, but the experience spurred me to work through several more freeCodeCamp tutorials on JavaScript front end libraries and back end frameworks.</p>
<p>More importantly, I started to work on my own web-related projects on <a target="_blank" href="https://codepen.io/">CodePen</a> and game projects using a bunch of different engines. I also started using Python to do some basic social analytics in my day job, and found it helpful.</p>
<h2 id="heading-post-tutorial-purgatory">Post-Tutorial Purgatory</h2>
<p>Fast forward much time later, and I'm now working on several game-related projects in <a target="_blank" href="http://phaser.io/">Phaser</a> and Unity (most notably, a <a target="_blank" href="https://sominator.github.io/hacker-battles/">digital prototype</a> for a <a target="_blank" href="https://www.entromancy.com/single-post/2019/09/26/Get-a-Sneak-Peek-at-Entromancy-Hacker-Battles">tabletop card game</a> I'm developing). I've spent a whole heck of a lot of time in framework documentation and Stack Overflow looking for answers and best practices for stuff (linking <a target="_blank" href="https://www.freecodecamp.org/news/how-i-made-a-2d-prototype-in-different-game-engines/">this post</a> one more time for good measure). I also have developed friendships with a few colleagues who are themselves programmers, and it's been helpful to run code by them for advice and feedback.</p>
<p>One thing that's been helpful about working on my own projects is just the basic experience of setting up a workflow. Learning to use the command line and Git in concert with setting up NPM and a code editor, for example, was eye opening (particularly coming from CodePen, which just does everything for you). For better or worse, most tutorials don't expose you to the nit and grit of the tools that you'll need to get your work done, and there's a lot to be learned.</p>
<p>If you're reading this and looking for the "and I just got my first job as a programmer!" statement, I'm sorry to disappoint! That hasn't been my objective (at least thus far), but I do have some basic TL;DR learnings to share that may be helpful for anyone who's also on the search for a programming language or how to escape from tutorial purgatory.</p>
<h2 id="heading-tldr">TL;DR</h2>
<p><strong>JavaScript:</strong></p>
<ul>
<li>Pro: A very good entry point into learning object oriented programming, particularly if you're interested in any kind of web development (front or back end). You can learn this through most platforms, but my experience was best served by freeCodeCamp.</li>
<li>Con: Many sites will tell you that it "just runs in your browser" so you "don't have to set up an IDE" and is thus easier to learn, but this mindset will only take you so far. If you're going to do any meaningful development with popular JavaScript frameworks (React, Vue, Express, etc.), you'll wind up setting up something IDE-adjacent with a code editor, package manager, dependencies, etc., <em>without</em> the kind of support you'd get from, say, setting up .NET or similar.</li>
</ul>
<p><strong>Python:</strong></p>
<ul>
<li>Pro: Super friendly for newcomers if the curly braces in other languages are intimidating at first, and a good point of entry if you're interest in getting into back end programming or data science. I had a good initial onboarding experience through Codecademy.</li>
<li>Con: Your options are a little limited if you're looking to get into front end or game development. There are frameworks, for example, that allow you to make games (<a target="_blank" href="https://www.pygame.org/">PyGame</a>, for instance), but if you're specifically looking into game development, you'd be better served elsewhere.</li>
</ul>
<p><strong>C#:</strong></p>
<ul>
<li>Pro: A very pleasant language that's well-supported by Microsoft and the open source community. With it, you can do back end development, make desktop apps, create games (mostly with Unity but there are other engines like <a target="_blank" href="http://www.monogame.net/">Monogame</a> out there). It may be an unpopular opinion, but I'd recommend first learning C# through <a target="_blank" href="https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/">Microsoft tutorials</a> or elsewhere and <em>then</em> learning Unity to ease some of the cognitive load imposed by the editor's complexity.</li>
<li>Con: Not much to speak of here, unless you really <em>don't</em> like Microsoft or really <em>do</em> want to work on front end web development (I suppose you could look into <a target="_blank" href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor">Blazor</a>, but I wouldn't recommend starting here). I could speak volumes about how Unity can improve its user experience, for example, but C# itself is great.</li>
</ul>
<p><strong>General Thoughts</strong> on Learning and Escaping Tutorial Purgatory<strong>:</strong></p>
<ul>
<li>One of my frustrations in my process of asking the question "what programming language should I learn?" was what I felt was the insufficient answer of "well, what do you want to build?" I encountered this answer a lot, and don't think it's the right way of approaching learning how to program if you don't already know what you want to do with it. A beginner doesn't have enough context to know what they <em>can</em> build, let alone the route to get there (unless they're the type of person that <em>just wants to make games</em> or <em>just wants to land a job as a web developer</em>).</li>
<li>A better answer would be to say, "try a few tutorials on different sites and in different languages, and see if something strikes you as interesting. If it does, stick with it; if it doesn't, pick one at random and see where it takes you. The stuff you'll learn will help irrespective of what you actually wind up doing."</li>
<li>Additionally, if you can force yourself to get out of the tutorial ecosystem and just <em>make anything</em> outside of the protected environment that's been set up for you, it'll help teach you things you'll need to eventually know, such as setting up an IDE, searching for answers to questions, and sharing your work.</li>
</ul>
<p>I hope this post is helpful for others out there who are searching for a programming language or a way to escape tutorial purgatory and build cool stuff. And I'd love to hear about your experiences, too!</p>
<p>If you enjoyed this article, please consider <a target="_blank" href="https://www.nightpathpub.com/">checking out my games and books</a>, <a target="_blank" href="https://www.youtube.com/msfarzan?sub_confirmation=1">subscribing to my YouTube channel</a>, or <a target="_blank" href="https://discord.gg/RF6k3nB">joining the <em>Entromancy</em> Discord</a>.</p>
<p><strong>M. S. Farzan, Ph.D.</strong> has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like <em>Dungeons &amp; Dragons Neverwinter</em> and <em>Mass Effect: Andromeda</em>. He is the Creative Director and Lead Game Designer of <em><a target="_blank" href="https://www.entromancy.com/rpg">Entromancy: A Cyberpunk Fantasy RPG</a></em> and author of <em><a target="_blank" href="http://nightpathpub.com/books">The Nightpath Trilogy</a></em>. Find M. S. Farzan on Twitter <a target="_blank" href="http://www.twitter.com/sominator">@sominator</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
