Completed Learn TypeScript Course on Codecademy

Back in December, I completed the C# course on Codecademy. This was mainly in order to be able to broaden the scope of my contribution to the project I was involved with at Unity and take a step outside the Python bubble I had for so long limited myself to. This was shortly before I went on paternity leave. On returning from my leave, however, I found that a lot had changed. Most relevant to this post, the team had decided to move away from the Unity-oriented C# implementation of the product to one in TypeScript.

I, for one, had never programmed before in TypeScript but this was not going to deter me from giving it a shot. Having had a positive experience in learning C# on Codecademy, I was pleased to see that they had a course on TypeScript as well and signed up for it immediately. What was different this time was that I wasn’t learning TypeScript solely from the course. I already had a team implementing a product with this language, and this served as a very valuable means to get hands-on experience with it while I got myself familiar with the fundamentals and features of the language through the course. I noticed quite a few similarities to Python (focus on scripting, pyenv versus nvm for managing language versions and packages, similarity between npm / npx commands and the python command), and this helped me hit the ground running. What unexpectedly helped me a lot was my use of mypy in making my Python code type-safe over the past year or so thanks to my colleague Matti’s insistence. I felt totally at home in adding and manipulating the types of variables in TypeScript, which is something that would’ve taken me a while to get used to otherwise. Anyway, now I’m actively contributing to our new codebase thanks to the kind feedback and review of my colleagues and it feels good to be getting better at a new way of expressing myself in code :-).

Over the past three years, I have (and might I add, serendipitously) ended up programming in Standard ML, Racket (both as part of an excellent series of courses on functional programming offered on Coursera), C# and now TypeScript. It’s hard to measure how better a programmer this has made me, but it has certainly broadened my perspective to what one can do across programming languages and how it’s only a matter of getting used to some basic (often superficial) differences in how one reads and writes code before being able to apply what one has learnt or used in a previous language. The theoretical concepts, of course, are very similar. It’s just that some languages make it easier to do certain things than others. And this was one of the things that was emphasised in the Coursera courses on Programming Languages. Over the past year I have worked with some excellent programmers at Unity, some of whom have been academically involved with Programming Languages, and I bet any wisdom I have to offer in this little post would only scratch the surface of what they might have to say on the subject. Anyway, I really look forward to see where things go from here for me!

Oh, and of course, I did get a shiny new certificate of completion from Codecademy!

Completed Learn C# Course on Codecademy

It’s been just over a year since I started working at Unity, and it might come as a surprise to some that I haven’t coded in C# during all this time. Why? Because Unity is written in C# and so is much of what is created using Unity. To be fair, I was able to get on with my work using just Python given that it was mostly research and prototyping. I did try learning to code in C# through some Unity tutorials back in December 2020, but those turned out to be more advanced than I could handle and didn’t cover the absolute basics well enough (at least what I had come across) so I shelved that effort then.

Fast-forward to a year later in December 2021, and I found myself having to go on a month long leave to be in India while my wife and I expect our first child. Other than taking care of her and catching up with my parents who I hadn’t visited since around two years owing to the pandemic, I had quite a bit of free time on my hands. So I decided to take up the task of learning C# once again. This time, I came across Codecademy, where I found introductory courses for different programming languages including C#. And I’m talking real beginner stuff – how to declare variables, conditionals, loops, etc. This was great because, although I could understand these basics well enough without a course, it seemed to gracefully lead on to more advanced concepts such as classes, interfaces, inheritance, LINQ, etc.

So I got started with the course. Codecademy provides one with a browser-based editor and terminal to write and compile one’s code for convenience. I actually found it annoying because it was quite sluggish, didn’t have auto-completion and gave me no idea of how I would write the code on my own machine having set up everything I need to run C# code locally. So I took some time to research how this is done – installing the Mono Compiler and the necessary Dotnet libraries for Linux to write and compile C# and Dotnet projects respectively. Not just that, it took a while to then install the necessary Omnisharp libraries in order to make auto-completion work in my editor of choice – Vim! I’ll try to write a more detailed post on this sometime later, but no promises – the baby is here now ;-).

Once all that was done, I was ready to go! I got done with the course in about a month, at my own steady pace. Repetition was the key – I made sure to write every piece of code myself in my local machine although a lot of it was the same, such as imports, base class and main function declarations and so on. That really helped with developing fluency and also getting a sense of what is needed and not needed in different scenarios. The course, I must say, is very well-designed. The first few chapters were bordering boring for me because I was already familiar with much of what was there, having programmed in C / C++ in the long past but once I got to the chapter on Classes and Objects, things started to get more interesting! What helped was that over the past year, I maintained some discipline in writing typed Python code with the help of MyPy and also using abstract classes via the ABC Python module. C# being strongly typed, the practice of using types in Python obviously helped. But working with abstract classes in Python certainly made it easier to understand interfaces and inheritance in C# better! Same when it came to references, because I did read up quite a bit on mutability in Python. And finally, the section on LINQ was a lot of fun, and bore resemblance to the kind of step-by-step data-processing code I wrote about a year ago in PySpark.

So, now that I’m done with this course, I have this shiny certificate acknowledging my effort!

No alternative text description for this image

Next, my plan is to head over to CodeWars and get started with a few Katas to further consolidate what I have learned so far! And perhaps think of an idea that would help me better understand how to organise my C# code into a larger project. Still a long, exciting way to go!

New Guitar Video – Man in the Box (Acoustic) by Alice in Chains

Continuing with the Grunge nostalgia, here’s a song by one of my top bands from the whole Seattle Grunge scene – Alice in Chains! I’d uploaded a cover of this song a long time ago on YouTube, but this one is special. I spent some time coming up with an acoustic arrangement for the song, and did a proper recording on GarageBand with some video editing help from my wife, Nina. And I’m uploading it as a tribute to this amazing band on the 21st Anniversary of the release of their debut album Facelift.

Happy anniversary, Alice in Chains!

Completed Practical Reinforcement Learning on Coursera

It didn’t surprise me a few weeks into starting work at Unity that Reinforcement Learning would be a useful thing to know at least a little about. So I started studying the fundamentals of Reinforcement Learning from what seemed to be the most recommended reference on the subject – Reinforcement Learning: An Introduction by Sutton & Barto. I must acknowledge that this is a fantastic read and so thoroughly explained. It did take me several revisions of certain topics to read what is implied between the lines, which happens to be quite a lot of useful insights and information, but overall this textbook covers RL theory very very well!

After having spent a few weeks going through the chapters on the Dynamic Programming, Markov-Chain Monte-Carlo and Temporal Difference methods, I felt that I could use some hands-on practice to take the message home and, as always, I looked up Coursera to find the course Practical Reinforcement Learning. It took me more than a month (nearly two) to get through this course. This was partly because I was making sure to review the same material covered in the course in the reference textbook as well, which was very useful. And partly because the course material itself didn’t feel very up to the mark. I felt that in wanting to cover a vast amount of topics in the span of a single course, things got quite rushed. And the assignments were also not very well explained, and offered very little feedback in terms of what was wrong, which made it incredibly frustrating to get through them. To be honest, about half-way into the course I was no longer enjoying it, and was eager to just be done with it ASAP. And that’s exactly what happened. I can’t say I’m very thorough with any of the material covered in weeks 5 and 6, which I would definitely like to revisit in the future.

That being said, Reinforcement Learning is actually one of the most interesting topics in Computer Science / Machine Learning that I have done and I really do hope I have the opportunity to do something interesting using it in the future. And, of course, here’s the certificate that I completed the Coursera course (phew!).

New Guitar Video – Rusty Cage by Soundgarden

This is the second, and in fact my favourite, track by Soundgarden from the Road Rash soundtrack. I’ve already gone over how I came across this and Outshined in my last post, so I’ll go straight to the video here. I skipped the somewhat longish intro, unfortunately, because it was tricky to align it with the backing track which had not metronome ticks. I’d been practising it alongside that other track, and so here it is!

New Guitar Video – Outshined by Soundgarden

My connection to this song goes back way before I even knew what Soundgarden and Grunge music were. Back when I was in school, I’d go play video games at a little kiosk in my neighbourhood and one of the games there was Road Rash. I was hooked, not just to the game but also its awesome soundtrack which featured great bands like Therapy?, Monster Magnet and of course, Soundgarden. And Outshined was one of the two Soundgarden tracks contained in the soundtrack, the other one being Rusty Cage.

So here’s a fond look back at those days that introduced me to some great music, with a cover of Outshined by Soundgarden! Once again, tuned down for a more badass effect :-).

New Guitar Video – Superunknown by Soundgarden

I’m going through a bit of a Grunge nostalgia these days. Back in college, I went through a phase when I was really into this genre of music and went to great lengths to get my hands of music by bands from the 90s Grunge era. And I also enjoyed learning to play many of these songs but never got down to recording them in any form.

I recently realised that although Soundgarden was one of my favourite bands from that time, I never really learned to play any of their music, which brings me to this video. The title track for this legendary album – Superunknown! This is hopefully the first of a few Soundgarden tracks I’ll be uploading. There’s also an in-progress version of this track I uploaded with my two little buddies flying about as I recorded the video if you go to my channel :-).

I’m also playing this song in a drop-tuning with my PRS, and the backing track also tuned down.

New Guitar Video – Americana by the Offspring

Here’s another one from my early teens! I’m not such a massive fan of The Offspring otherwise, but this album holds a very special significance to me given when I bought it and all the special memories I associate listening to it with. And this song, while not necessarily one of the more popular ones from this album, is definitely one of the most fun and energetic ones when it comes to play! The last video of the year, with hopefully more to come in the next year. Merry Christmas and happy New Year everyone!

Completed Game Design Foundations on LinkedIn Learning

One of the best things about starting afresh in a new domain of work, is learning about the domain itself – its goals and significance, the various terms and jargon that describe it and where my own work and contributions fit within it. This is something I have the opportunity to do these days having recently made the switch from Music Technology to Gaming. Until now, my exposure to computer / video games had been only as a consumer hooked onto some awesome and engaging games, much to the concern of my parents and leading to a few not-so-impressive grades in my school and university progress reports. I then sort of drifted away from gaming and devoted much of my attention to Machine Learning and Music Technology. But now gaming has assumed a professional significance in my life through my current role at Unity. Specifically the field of Game Design to which my current research project is related.

So, I did a bit of looking around for an introductory resources on Game Design. I found a few books, blog posts and articles online but what really caught my attention was a three-part course on Game Design Foundations offered by Brenda Romero on LinkedIn Learning. After quickly skimming over the course material, I had no hesitation to sign up and get started with it. And now, after about two-and-a-half weeks, I’m done with the material thoroughly enough to understand what my colleagues in the project are talking about and some exciting thoughts on how my role as an ML expert could fit into the overall project! Now I know what someone means when they say “Core Loop” or “Lootbox”, or what it is a designer has in mind when aiming to design a fun and engaging game. I’m only getting started, and it’s all very exciting!