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 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.
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 here), coding continues to be additive to my main work rather than a source of income, whatever that tells you.
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.
You can also skip to the bottom for the TL;DR.
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.
Holy smokes, was I way out of my depth. I did a few tutorials online (I think through learncpp 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++.
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.
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.
I found Ben Tristem's Unity course 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.
Unity 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 here).
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.
On first blush, freeCodeCamp has the look of a less flashy Codecademy or Treehouse. 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.
More importantly, I started to work on my own web-related projects on CodePen 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.
Fast forward much time later, and I'm now working on several game-related projects in Phaser and Unity (most notably, a digital prototype for a tabletop card game 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 this post 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.
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.
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.
- 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.
- 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.
- 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 (PyGame, for instance), but if you're specifically looking into game development, you'd be better served elsewhere.
- 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 Monogame out there). It may be an unpopular opinion, but I'd recommend first learning C# through Microsoft tutorials or elsewhere and then learning Unity to ease some of the cognitive load imposed by the editor's complexity.
- Con: Not much to speak of here, unless you really don't like Microsoft or really do want to work on front end web development (I suppose you could look into Blazor, 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.
General Thoughts on Learning and Escaping Tutorial Purgatory:
- 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 can build, let alone the route to get there (unless they're the type of person that just wants to make games or just wants to land a job as a web developer).
- 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."
- Additionally, if you can force yourself to get out of the tutorial ecosystem and just make anything 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.
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!
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 Dungeons & Dragons Neverwinter and Mass Effect: Andromeda. He is the Creative Director and Lead Game Designer of Entromancy: A Cyberpunk Fantasy RPG and author of Entromancy: Book One of the Nightpath Trilogy. Find M. S. Farzan on Twitter @sominator.