Achieving Success in Online Learning: A Practical Guide
Tags: onlinelearning, gamedev, planning
Published: 2024-05-25 18:43:09

In my last article, I mentioned how I started my programming journey with the CS50 course. As luck would have it, in the process of going to their site so I could properly reference it, I learnt they introduced a [bunch of new interesting courses](https://www.edx.org/cs50). For me, my interest was piqued by the below courses

* [CS50's Introduction to Artificial Intelligence with Python](https://www.edx.org/learn/artificial-intelligence/harvard-university-cs50-s-introduction-to-artificial-intelligence-with-python?webview=false&campaign=CS50%27s+Introduction+to+Artificial+Intelligence+with+Python&source=edx&product_category=course&placement_url=https%3A%2F%2Fwww.edx.org%2Fcs50)
    
* [CS50's Introduction to Game Development](https://www.edx.org/learn/game-development/harvard-university-cs50-s-introduction-to-game-development?webview=false&campaign=CS50%27s+Introduction+to+Game+Development&source=edx&product_category=course&placement_url=https%3A%2F%2Fwww.edx.org%2Fcs50)
    
* [CS50's Web Programming with Python and JavaScript](https://www.edx.org/learn/web-development/harvard-university-cs50-s-web-programming-with-python-and-javascript?webview=false&campaign=CS50%27s+Web+Programming+with+Python+and+JavaScript&source=edx&product_category=course&placement_url=https%3A%2F%2Fwww.edx.org%2Fcs50)
    

Although I know all the above subjects at a surface level, I thought it'd be interesting to dive deep into one of the topics and see what new stuff I could learn.

Considering my current experience in programming, the courses I thought I'd learn the most from were the Game Programming and Artificial Intelligence courses. I also wasn't in the mood to learn Artificial Intelligence as I did two courses that dove deep into machine learning at university which gave me a good impression of what to expect from the course. Hence, intending to learn and have fun, I decided to do the Game Programming course.

With the course decided upon, I tried determining what key things I wanted to ensure I obtained so I would approach it with the right frame of mind. For this, I considered my state of being and made the following observations.

1. I'll likely only be able to allocate an average of 1 to 2 hours per day to this course
    
2. My primary goal is entertainment
    
3. I don't need the certificate
    
4. I'd like to be able to know how I can go about making my own unique exciting game that all my 3 users will fall in love with
    

With my priorities set, I skimmed through the course to get an idea of what to expect, what I might like and what I might hate about the course. From this, I set the following constraints for myself.

1. I don't just want to copy the code exactly
    
2. Where I can, I should create my game assets (e.g. sounds, music, sprites) within reason.
    

Aside from this, I noticed the 2D game section was written using the [Lua programming language](https://www.lua.org/), and the 3D game section used the [Unity Game engine](https://unity.com/). Having played around with Lua for a bit, I realised I didn't like using it. There wasn't any rational reason for my dislike. It was mostly vibes but, considering one of my primary goals was entertainment, it was a real issue I had to resolve otherwise I'd likely drop the course as time went on.

And so, I started looking into alternative tools I could use for making 2D games which would satisfy the fun factor for me. After endless Googling with a hint of Bing, Chat GPT,... and Bard, I learnt about these alternative tools I might enjoy more.

* [Unity Game engine](https://unity.com/) which uses C#
    
* [Pygame](https://www.pygame.org/news) which uses Python
    
* [Godot](https://godotengine.org/) which uses GDScript or C#
    
* [Phasor](https://phaser.io/) which uses TypeScript or JavaScript
    
* [PixiJS](https://pixijs.com/) which uses TypeScript or JavaScript
    

With my list present, it was time for the hard part, deciding what to use. From what I had seen from the initial course videos, the games were being built using a relatively low-level approach since they used [Love2D](https://www.love2d.org/). This meant things like physics, state machines, and event propagation were being built as we went and I got the impression that the only thing mostly abstracted was the rendering (showing stuff on the screen). This meant I'd need a tool that didn't hide too much stuff from me and allowed me to drown in complexity. This left me with Pygame and PixiJS since they were the most similar in functionality to Love2D as far as I could tell with the only difference being the language used.

Of the remaining two tools, I did enjoy both so ..., I flipped a coin and ended up choosing PixiJS as my tool.

With all this said, this is how I set myself up for potential success in tackling the course and I even went about finishing the first two lessons along the way. You can find the Flappy Bird game here [(Fifty Bird (stelele.github.io))](https://stelele.github.io/pixijs-flappy-bird/) and here is the link to the repo [(https://github.com/Stelele/pixijs-flappy-bird)](https://github.com/Stelele/pixijs-flappy-bird) though considering this is for fun, you're gonna need a keyboard to play it.

Making the flappy bird was quite fun and in my next article, I look forward to explaining how I went about making it and preparing the assets for it.