Jobhunt

I haven’t been job hunting as actively as I did before I got my new job last year, although I admit, I was still casually looking. I am happy with my current job though. So why, you might be thinking, am I still looking for a job? Partly because I’ve been living in Malaysia for all my life, and I would like to at least work abroad once in my life before I am too old to move about.

But wait, some of my friends might ask; Isn’t my current job a remote job? Well, yes! And doesn’t that mean I can literally work out of anywhere in the world, because I am officially a digital nomad now? True. Unfortunately, my salary is still paid at a Malaysian rate. That means, unless I am a single adult with no commitments (house/car/student loans, family responsibilities), then yes, I can get by in most parts of South-East Asia if I live like a minimum-wage earner. Emphasis on “no commitments”.

So I’ve been casually looking for jobs recently, especially ones in Japan, but as you may have guessed from this post, I have been unsuccessful. Partly because my skin isn’t white (so I couldn’t find an English-teaching job), and partly because South-East Asians are generally regarded as cheap labour (so I couldn’t find a decent programming job that doesn’t pay a junior rate despite my experience and age).

That leads me to my next thought; I’ve attended over a few dozen interviews by now, that I’ve come to realise that I either have to be Really Damn Good, or I’m just no good at all. I managed to secure my current job because my employer tested me on my skills to build an app with React from ground up, and I delivered well. However, of the companies I have interviewed from Japan so far, mostly test my ability to devise algorithms or abuse Javascript’s quirks to perform something unusual (usually involving scoping and rendering flow), which I personally think is Nice To Have but not Necessary To Get The Job Done.

And predictably, I have failed all my interviews because I have been unable to solve problems within the 15-minute window I was allotted to think on my feet. Coupled with my current colleagues’ critiques of my inefficient code (I really appreciate their valuable critique and have slowly learned from), it has made me appreciate that I had been really fortunate to have even gotten my current job. And with the regular critique I received from my smarter colleagues, I tend to second-guess my skills, which makes things worse because I never had much self-confidence in the first place, whether my skills reflect it or not.

I do however, have a positive mindset about myself. Sure, I’m not smart like my colleagues, and I’m quite forgetful, but I have long accepted those as my innate traits. I realised that I learned best when I have a mentor to guide me, and I have not had a mentor since 2009 — because from 2010 onward, I had been working completely self-taught. So I thought, hey, I’m Pretty Damn Good because I’m mostly self-taught and have come pretty far in my career. To top it off, I can read some Chinese and speak Japanese now, and my painting skills have somewhat improved (despite my lack of practice) over the years. How many programmers out there have a skill set like I do?

And I still think that when it comes to professional ethics, I am still the best (self-proclaimed) in terms of proactivity and thoroughness of my code. I’m sure that despite my not-so-clever approach to writing efficient code, I still Ask The Right Questions, and have so far written code that have (I dare say) almost no bugs — compared to my colleagues, who may be smarter, but regularly write code that needs to be fixed again and again because they overlooked some edge cases or forgot to handle exceptions.

Yet, despite such a mentality I developed and carry with me, it is not considered a valuable trait during interviews, and as such, I have been unsuccessful in impressing any of my would-be employers up until now. Nevertheless, I do my best to convince myself that I am worth something, at least to the right people.

In the meantime, I can only hope that my secondary skill (drawing) is valuable enough to generate some decent side-income. Perhaps in my future posts, I will talk more about art and less about programming. Not that it makes much difference, though; This blog has become more of a diary than a technical blog.

Hello 2019

I can’t remember where I read this (probably Quora), but it was pretty recent; Some people were discussing online about how difficult web development is, despite the lowest barrier to entry.

I never actually thought about it, but it hit me real hard when I read the argument (to sum up what I could remember): Web development is ever-evolving, making learning a never-ending task. Javascript evolves over the years. We have to learn new frameworks (React, Angular) and drop old ones (jQuery, Bootstrap) if we want to stay on top of the trend and market demand. New tools come and go too (Grunt, Webpack). Customer base (when it comes to freelancing) is so diverse that it is especially difficult to find a gig if you “only know Javascript”.

The landscape of web developers is so divided, it is almost impossible to find two web developers with a similar set of knowledge even though their job title may be similarly called “Web engineer”. We are further divided in UI/UX, front-end, back-end, full-stack, dev-ops, sysadmins… and probably more. In short, being a successful web developer means we have to be at least an expert in one domain (in my case, front-end), and an above-average competency in the others. I can’t just say “I know how to convert mockups into actual websites”, as employers will also expect that I know “how to set up a server, deploy the website, write REST API”, and more. Heck, CMS’s (e.g. WordPress and Joomla) are also a subset skill of web development that I don’t have, but is sought-after by a certain group of clients.

The discussion above was compared to traditional software development — Just write desktop or mobile apps, iterate, release, and that’s it. It’s all in a closed environment. Software like painting programs, games, desktop applications, are written with languages that have matured and been around for a while, meaning there are seemingly finite amount of knowledge to be gained before they can plateau and live comfortably as an expert. An example would be C++, where the language itself never really evolves too drastically, or at least, for the companies that heavily rely on said languages, they risk a lot if they decide to rebuild their apps in a completely different language or framework. But this is not the case for web developers. We’re always expected to learn new things and forget old things over the years.

It made me realise that all this while, all my self-depreciating thoughts, thinking that I’m a terrible programmer despite my years of experience, is due to the fact that I never stopped learning — that every time I think I’ve gotten better, the web landscape decides to change, and I have to learn something new all over again. It made me realise that I’m pretty much in a situation like Sisyphus, the guy punished to eternally roll a boulder uphill that will inevitably roll back down.

I don’t know where I will be in 2019, but I really want to get back into traditional software development. Y’know, the kind of development where your past experiences in the language is still useful for at least the next 10 years. In short, making games.

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.