Zareh Garapetian (he/him) is a guest author and game developer of 6+ years.
To me, it doesn’t matter if you’ve gone to school or you’re currently employed. Every successful developer should consider themselves self-taught. No matter how many years you get into your career, you always need to teach yourself as a developer to keep up with the times.
In my view, getting a formal education isn’t necessary to get into the tech industry. This isn’t to understate the value of college – it’s more of a fortunate thing for this field. I know many first-year college dropouts who now run their own companies.
What this means is that you can still excel without a formal education. But even if you do get a formal education – like I did – you need to put in the work to actively learn yourself. Your professors won’t load the information into your brain. You’ll need to figure out your own learning strategies. And in the end, most of your breakthroughs will happen outside of your coursework.
In my learning journey, there are definitely some things I did right, and others I would do differently. Today, I’ll be reflecting on my experience to share 7 learning and career tips for you and your self-taught journey. But first, I’ll tell you a bit about what being self-taught means to me.
I consider myself self-taught – and I have a Master’s degree in Computer Science.
To explain to you how I’m self-taught, I’ll paint you a picture of my undergraduate experience. I didn’t feel ready for the workforce when I came out of my program. After I completed my degree, I knew a little bit of Flash and Scratch. Flash is no longer used today, and Scratch is a visual programming language for kids. We also learned languages like Pascal and Turbo Pascal, which are basically obsolete as far as industry use goes. While we did have a C++ course, we only learned the bare basics of the language. Worse yet, all of our undergraduate books were in Russian, and I don’t know Russian. When I asked my teacher if we had English or Armenian versions, she wasn’t able to help.
For my part, I’ll admit this: It wasn’t just the school’s shortcomings, but I’m also not that good at being a student in a formal education system. And I didn’t really start to learn effectively until I took my education into my own hands outside of the classroom.
My self-teaching skills began to develop after my undergraduate years. For the most part, this was where my self-taught journey began. I took a year off before starting graduate school, during which I taught myself several subjects, including C++, linear algebra, physics programming, and graphics programming (the latter two are quite complex, so I continued studying those on my own time during my graduate program). And instead of just learning things at a high level, I finally hunkered down and started doing what I wanted to: making games. I researched and used all the resources I could to guide me.
Because of everything I learned, I walked into my graduate program and waived several program requirements, including computer organization, beginner C++, and the first level of algorithms.
The truth is that you just can’t rely on a school program to teach you everything you need to know. The second time around, I was ready to own my education for myself even though I was enrolled in a university.
Once I figured out how to do it, teaching myself was in fact the most effective method with which I learned game programming. So even though I have degrees in my hand, I’m proud to say that I’ve taught myself.
Being self-taught doesn’t make me unique. When I look around at my peers in the gaming industry, the bulk of our knowledge, regardless of our educational background, came from self-teaching and constant learning. Many of my peers were learning game development at a time where there weren’t so many development tools or learning resources out there. That kind of scarcity leaves you with no option but to figure things out yourself.
My situation was also quite DIY out of necessity. I learned game programming in Armenia, at a time when there was no active industry where I could consult with professionals. Today’s popular game engines, like Unity and Unreal Engine, weren’t very accessible either. I remember when I went to a game conference in Texas in 2011, Unity had nothing but a tiny fold-out table in the back of the conference. Nobody knew who they were yet. Today, Unity and Unreal are some of the biggest tools to streamline game development. By now, I’ve learned both. But before I had access to them, I had to learn how to make a game from A to Z (which included building the engine, doing the graphics, and the physics programming).
At the end of the day, as long as we’re teaching ourselves in our own time, we’re all self-taught.
I don’t like giving tips without specifying the importance of having a list of your own privileges and things you’re lacking. No one has the same starting cards that you have. That’s usually both a good and a bad thing.
You want to use your privileges as much as you can, and work to compensate for your shortcomings.
In my ways I was privileged and in other ways I wasn’t. I was fortunate to have housing with my mom while I studied, so I could afford to work less and commit time to learning instead. I also knew English better than my classmates, which meant I could use even more learning resources online. But I didn’t have a library, so I read books on my phone instead. And since I didn’t have anyone to talk to in-person about my career, I had to be very proactive on forums.
I definitely missed the mark on applying this strategy in other parts of my undergraduate experience. While we didn’t have many functional computers in my undergrad, I did have a computer at home. I just used it to play video games instead of learning. Part of that was because I was only 15 years old. But still, if I’d known that I had to compensate for my shortcomings myself, I would’ve brought all my coursework home to do it there instead.
If you’re looking to break into a new specialization or programming in general, you may be ready to apply to jobs earlier than you think.
In my case, I think I overshot my goal and spent too much time self-teaching. Overshooting my goal is a bit of a talent of mine, but in this case, it was largely due to self-doubt. I spent an extra two or three years in Armenia before I decided I was ready to come to the US and look for a job. I was trying to learn everything I could. Game programming just felt so intimidating, and I didn’t know if I was good enough for a professional role.
But the thing is, a lot of your most valuable learning experiences will come from your work experience. So don’t be too shy and hold yourself back like I did, or you could risk delaying your growth. Besides, the interviewing and application process are their own skill set that you’ll want to get good at too.
If you connect the dots and understand why you need to learn each topic, you’ll be better able to retain that knowledge. For example, if you’re learning math concepts and you don’t know how it’ll apply to your development process - find out. If your current resources can’t provide clarity, ask around on forums. Knowing why you need to know something will help make it stick. If you miss that point, you may need to re-learn things because they simply didn’t stick.
My next tips are inspired by some of the biggest challenges I faced when teaching myself to code: not knowing where to start, when to move on to a new topic, or whether I was doing things right.
Personally, I knew my goal was to make games. But for the longest time, I didn’t know where to start, and I didn’t know how to learn it. Sometimes I would get stuck for a week or two just Googling things, thinking, “Am I supposed to know this, how about this?”
Really I just had to start learning – and be okay with doing it wrong or failing.
Even if you do have someone more experienced to take a look at your work, you’ll need to be okay with doing things wrong. Failing is the greatest teacher. And it’s better to try and be wrong than to do nothing at all.
When you’re teaching yourself, it can be hard to know when to close the book on one topic and move on to another. You might not know if you know a topic well enough to justify moving to something new.
Most people I know who are knowledgeable and good at what they do are the first to admit that they don’t know something.
The more you learn, the more the fog clears and you see, there’s no way you’re going to know everything. Letting go of the desire to understand everything can help you be more effective with your studies. It helps you get unstuck and keep your momentum. Besides, you can always move back and forth between topics if you find a gap in your knowledge along the way.
Once you accept that you won’t master everything, you give yourself the freedom to keep moving in your learning process, as well as focus on particular areas and do them well.
In my case, I had to accept that I can’t know everything about game development, like the animations, music, graphics, and physics. It wasn’t a realistic or effective use of my time to try to learn it all.
A less philosophical challenge I faced was how to tell if I did something the right way. If I figured out how to draw a triangle on the screen, I could maybe see the triangle and that it’s been done… But how would I know if this is the best way of doing it?
One of the upsides of having a professor or a teacher is that they can look at it and say, “Oh, wait, you can do it much faster, or much cleaner, if you do it this way.” But when you’re on your own, there’s no one to talk to about this.
I was very shy about posting my code on Stack Overflow. But eventually, I realized I had to in order to get feedback and grow. So it’s important to share your work.
On that note, sharing your work on GitHub is also incredibly important. Especially if you don’t feel your credentials are going to make you stand out among your competition, your GitHub portfolio can. I’ve had several job interviewers comment about my code in GitHub. Giving that visibility to your work shows others that you’re capable of building tangible things with what you’ve learned.
A lot of the challenges I faced in my self-teaching journey really boiled down to questions of fear and uncertainty, like:
Overcoming fear or uncertainty isn’t about getting rid of it. It’s about learning to live with it.
It’s something a lot of people say, that unless you’ve really done it – living with fear – you might not understand that it’s doable. But it’s definitely doable. And it can be highly motivating at times too.
Other than having a computer and an internet connection, I’d say the other ingredients you’ll need to effectively teach yourself are:
Regardless of what type of programming you’re learning, you ultimately just need to put in the time. Some people simply don’t have the free time because of other obligations. But many people – myself included – just struggle with the self-discipline that’s needed to commit that time.
Self-discipline was the last ingredient I’d cultivated on my coding journey. Once I unlocked this part of the puzzle, I was able to learn at a rate faster than I did doing any coursework. You won’t be able to teach yourself if you don’t have self-discipline. You need to come home and say, “I’m sitting down at the computer. I’m not playing the game (or whatever else I want to do). I’m going to put in the work instead.”
Whether you’re an aspiring or experienced developer, we all need to know how to be self-taught in our industry. I was a self-taught developer at 15, and I still am in my 30s. I never plan to stop self-teaching.
I hope you never stop teaching yourself either, and that you found these tips helpful for your own coding journey.
Learn to code today.
Try one of our courses on programming fundamentals:
Join a community of more than 1.4 million readers. A free, bi-monthly email with a roundup of Educative's top articles and coding tips.