Finding Resources [A Moron's Journey: Part 2]
Join me as I tell you a tale so terrible that you'll lose sleep (well, maybe its not that bad). I want to learn C and eventually make games using SDL, but for that to happen I need resources. Unfortunately wanting something doesn't magically give you the knowledge (even though it sure would be cool if it did).
Starting The Search
The easiest part of trying to learn something new for me is the beginning. I'm motivated to learn and naive about the amount of time and effort it takes to do the things I'd like to do. Yes, there's nothing quite like a fresh start. So to begin this fresh start I did what I think anyone with a computer and an internet connection would do. I typed "How to Learn C" into my favorite search engine.
Here are the first three results (after the sponsored ones of course):
I only really look at the top couple of results to see if my search is any good. If it isn't then I'll type something else, but this list looked pretty solid.
The Reddit post is the obvious first place to look. Reddit to me is good to get a feel for what people in the community recommend and in this particular thread someone posted a little guide on how to learn C (what a great person). A lot of the recommended resources though were centered around building a solid foundation around computer science, and although helpful and probably the "Right" way to do things I've got video games to make. I can't be wasting time on a solid foundation. Plus my full-time grown-up job has me fixing and diagnosing computer issues constantly so I thought I already had a good handle on the computer science thing. At least enough to help me learn C.
So it was off to W3Schools. W3Schools is a site I'm already familiar with. I used it in college for a web development class and it seemed useful then so why not now. I tried out W3Schools for a couple of days, but it was tough for me to stay engaged in the material. I had to drag my brain kicking and screaming through most of the materials. They're not bad tutorials, but I just couldn't do it anymore. Something about it just didn't work for me.
Learn-C unfortunately was setup alot like W3Schools so my mind again rallied against the resource. At this point I was stuck.
Questioning Myself
After these initial failed attempts I wasn't able to make any meaningful progress. I was starting to feel defeated. Thoughts and doubts started to creep into my mind. Thoughts like "maybe you're not smart enough, you should try something easier, you should quit". These whispered poisons in my mind started to seep into and corrode my confidence.
This is the hardest part of trying to learn something on your own. There is no deadline to meet, no teacher or professor to appease, and no boss demanding results. I could simply quit and no one but me would ever know.
During this time I did look into switching over to programming in Java or C++, but that was a trap. If I switched away from C I would forever be looking for a place to start learning instead of just learning.
What motivated me to go on was thinking about my end goal. I wanted to make cool little arcade games. I had already learned a little from my first failed attempts. I knew more about programming in C then I did when I began. It was important for me to remember that.
After recommitting myself to learning C I tried looking for YouTube channels or videos to help, but I never really encountered anything useful to me. I still felt like I was flailing around not going anywhere.
Analyzing My Failure and Learning How To Learn
Clearly the way I was approaching this wasn't working. I had to switch my tactics. I took a look at what I had tried and started of thinking of ways it failed. I also started looking into my past and thinking about times I really felt like I was learning something.
What I discovered was I wasn't looking for materials that suited the way I learn best. When I looked into the past I saw that physical books are a great way for me to learn. I like that books don't require a device to boot up and I can read almost anywhere quite.
One big "Ah Ha!" moment I had was finding out there are different learning types. This may sound obvious to some put people don't all learn the same. There are four major learning types. I'll list them here:
Visual learning
Auditory learning
Kinesthetic learning
Reading/Writing
If you'd like to read more about them I'm not your guy, but I found an article to get you started in you're interested:
My Kingdom for a Book
With finding what type of learning I did best with out of the way the problem now was finding a book. So back to searching I went.
The first book I encountered was "C Programming Language, 2nd Edition" by Brian W. Kernighan and Dennis M. Ritchie. I read the sample off amazon and some reviews and honestly it felt like the go to book for learning C, but the price tag of $60 was just too much for me. The inner conflict I had deciding I wasn't going to purchase this book was immense. On one hand my thought was "am I going to let $60 dollars stand in my way of learning what I wanted", but on the other hand I didn't have the disposable income at the time. I decided to keep looking and circle back that book if I couldn't find anything else. Surely there was something more affordable.
That's when I found it, Beej's Guide to C Programming. A FREE book you can download and the author asks for donations. Which I will eventually donate to. This has been an invaluable resource and I've seen my knowledge skyrocket as a result. The guide has a casual conversational tone which I love. I'm not going to say I understand everything I've read so far, but that will come with time I feel. As of writing this blog post I'm on chapter 16.
Conclusion
After finding "Beej's Guide to C Programming" it has become significantly easier to make progress towards my ultimate goal of making video games using SDL. I feel like I'm building a solid foundation in C programming that will help me going forward, but my understanding of some concepts is still flimsy. To get a better understanding of C I plan on tackling a project to take what I've read and learn how to apply it, but that's for another post.
The goal of "A Moron's Journey" is to share the adventures I'll have trying to learning video game development in a way I haven't done before. I will stumble, fail, and get frustrated. I hope that sharing these stories will help inspire someone or let someone know that sometimes struggling is part of the process.
Discussion