End of 2018

I can’t believe how fast time flies. Where was I when I wrote the last blog post, and where am I now? Since we are approaching the end of 2018, I figured now would be a great time to add an entry to this seemingly-abandoned blog.

Just a note before you continue reading — this will be a long post that isn’t related to programming. In fact, my recent posts have become more personal, but I’ll try to make future posts more code-centric.

Today, I am a full-time React developer at a geolocation service company, working 100% remotely. I’ve had the opportunity to pick up NodeJS (writing proxy APIs) and Selenium (for UI and end-to-end tests), which has been a great step towards my goal of being a full-stack developer. Ironically, I had been job-hunting since more than a year ago, and failed over 30 job interviews, and this company just appeared out of nowhere, headhunted me and hired me almost immediately.

Professionally, I have learned so much over the past 7 months at this company, compared to the 1+ year I spent at my previous company. I guess, we improve better when we’re in an optimum environment, and perhaps in my case, I work better when I have a sense of ownership over my work.

I have even started thinking seriously of actively updating my Github portfolio to brush up my skills, and to help potential future employers to assess my skill better. Unfortunately, as you may notice if you clicked my Github link, I have hit a roadblock and have not been making any new commits to my first mini web project for the past few weeks. There was a good lesson to be learned from that, fortunately — In that, I should have planned my project much better on paper, before I sat down to commit to implementing the features.

Now, a little into my personal life — I don’t remember if I’ve mentioned this before, but I am most proud of one thing: I have been consistently studying Japanese every single day since May 1st 2016 (yes, I remember the exact date, because that was the day I resolved to do something about my life, no matter how small it was).

Today, I can probably read at least 3000 different kanji, and can recognise probably around 6000 different words. I even managed to pass the JLPT N3 test last December. My point is, I have been depressed for the past few years, due to various personal circumstances, and I have luckily made it a habit to study Japanese as a way to cope and forget about my depression, and I have come a long way (but I have a lot longer to go).

I’m just glad that despite zero encouragement from people around me, I managed to get where I am today (at least, in terms of learning a new language). It made me realise something: “We are not alone, but we are on our own”. That is to say, we have friends who will be there for us emotionally, and occasionally help us along the way, but there is nobody in this world, I dare say, who can help us become a better person, because the onus will always be on ourselves.

One might ask, why did I study Japanese so diligently, since it is likely not related to my career? Honestly, I don’t know. I could have been doing something else, but I just happened to pick up “studying a new language” as a habit. Of the many good things that came out of studying Japanese (besides being able to play JRPGs and read elementary-level Japanese manga now), I managed to meet my Japanese partner. The overall relationship had opened my eyes and made me think really hard about my future. I had never thought about marriage or family seriously, let alone marrying a foreigner and living abroad. I can’t say that my life has a more definite goal now (I could assume “starting a family in Japan” being a goal, but what comes after that?), but at least I have a milestone to look forward to now.

What about game development? I still think about it occasionally. With some recent news of large companies shutting down, work crunches and the various problems I’ve read on the news regarding the game industry, sometimes I breathe a sigh of relief that I now have a stable job with a good salary. Sure, life is more exciting and “free” being an indie developer, but as I’ve stepped out of the gamedev circle over the past 2 or 3 years, I’ve gained a better idea of what I feel about the whole situation — and that is, admittedly, I liked the idea of being an indie gamedev, but I am naturally an uncreative individual. I work best when I’m given a direction. In essence, I need an “idea guy”.

I wish I could still make games, though. Recently, I discovered Overcooked!, and it made me accept the fact that I can only dream of ever making a decent game. For now, my life and career takes precedence. My hobby is no longer “drawing” and “making games”, but “studying Japanese”.

I think I’ve completely changed over the past 2 years.

And it’s not as bad as I thought.

Fun with programming!

So I came across this guy’s channel,¬†Mattias Petter Johansson, who has been making a lot of videos explaining programming concepts in about 10-minute chunks, and I thought it would be worth sharing! His explanations are easy to digest (IMHO) and he speaks slowly and clearly, making it easy for non-native English speakers to pick up. Plus, he looks like a really nice guy.

He recently quit his job at Spotify and has started a Patreon page full time. And he seems to be doing well with his fans, so surely the quality of videos is somewhat assured! ūüôā

Boilerplate React App

React-icon.svg

I started¬†learning about React from Facebook’s official tutorial page, and it was fantastic. There was zero configuration, and I got straight to developing and experimenting with React.

But I’ve always wondered what was the bare minimum I would need to get a React project up and running. So here is the result — a boilerplate project.

Of course, the boilerplate lacks the following, which I thought was important:

  • Mocha/Jasmine/Jest/etc. – no test frameworks.
  • Flux/Redux – no state management.

Returning to front-end web development

For the past 4 months or more, I was introduced to my first front-end project in the company (after working partly on Visual Studio/C# and CI/CD-related tasks), and I was really glad to be able to work on something more relevant to my skillset and interest.

The new project required us to split an existing¬†C# project (which had front-end and back-end code) into two parts — Javascript+React (SPA/single-page app) for the front-end, and C# (likely .NET, but I didn’t ask) for the back-end.

React-icon.svg

The good thing was, it was Javascript. Despite my inactiveness in web dev for the past¬†2 years, it didn’t take long for me to get back into¬†it.¬†The unfortunate thing was, I hadn’t been keeping up with the quickly-and-ever-changing web technologies.

In my previous job, I spent so much time with Bootstrap, jQuery and self-written native libraries, that I didn’t realise how much tech I had been missing out on. Thankfully, this project made me realise that I have so much more to learn, and I am glad I was given the opportunity to learn as I work.

Thankfully, I also had the opportunity to work with two experienced UI guys from the UK team, and I have a colleague sitting beside me who had started 2 months earlier on the project, to guide me through the project’s code, and explain its concepts.

I’m sure you can easily Google up articles about React, so I won’t elaborate too much about it. In a nutshell, I really enjoyed¬†using React! And the concept of Redux was pretty hard to grasp at first, but once I got it, it felt really familiar, like I was writing game code (based on the idea of immutable states).

redux-icon

Regrettably, in my previous company, my ex-boss had stressed on the importance of testing, especially for web apps, but I never got around to learning or using them. Dear Andrea, if you’re reading this, I’m really sorry I skipped around the task and focused too much on writing the application code, instead of dedicating some time to write tests. I’m sure the tests would have helped shave a lot of time off discovering and fixing bugs.

jest-logo

But, now, I have had the opportunity to write in React, Redux, Jest and Enzyme. And I see the power of frequent, automated tests. I finally understood what unit, component and integration testing means. I now (sort of) understand why some people are so concerned about test coverage. I’ve learned so much in the past 2 months and I intend to pick up more relevant tech that complement the¬†project, such as¬†Webpack, ESLint, Selenium and more.

selenium-logo

Thinking back of my life journey up until now, I think it’s been quite a strange ride. I went from C++ to Visual Basic, to PHP,¬†to Actionscript2/3, to Javascript, to C# (Unity), then to Haxe, to NodeJS, and now I’m back to Javascript (ES6/JSX).

I’ve come to realise that “programming skill” isn’t exactly about the prowess in the language, but rather, the ability to use as many complementing libraries as possible, effectively, to create¬†the end-product. Heck, even non-project related tech knowledge¬†would help a lot, e.g. Git commands, integrating CI/CD¬†into the project, or using Powershell scripts to automate¬†build and resource provisioning.

PowerShell_5.0_icon

On a side note, finally learning and writing tests for the React app made me realise that it must’ve been really difficult to write automated tests for games. Although Riot has written an article about how they tested their game (League of Legends), I imagine it must’ve taken some effort¬†to get the initial tests working.

Hello 2017!

I’m a half-year late, but here’s a quick post to show that I’m still alive.

I haven’t done anything code-heavy for this year, unfortunately. I have been picking up some non-gamedev related programming stuff lately though, specifically¬†React.¬†The sad reality is that, developing web apps for businesses is less stressful and pays better¬†(for those who genuinely enjoy web¬†development) in Malaysia.

I think I’ve already said enough in my previous post from 2016, and my sentiments still sort of ring true today. But before I end this quick post, let me share this little video which I came across, that pretty much sums up my thought of “making it big in the gamedev scene”:

I really do hope to pursue gamedev again someday, perhaps as a serious hobby. But for now, I like the idea of having a decent stable job and spending my free time on self-improvement, like learning Japanese and exercising.