Hi there! My name is Pang Yan Han (call me Yan Han).
Professionally, I am a Software Engineer with a keen eye on infrastructure and a mindset towards engineering with operations and security as first class concerns.
This is a technical blog and dives into highly technical details. Most of my posts are “How-tos”, where I share solutions to problems I’ve encountered with computer technology, or show the reader how to do something useful that I learnt.
If you have stumbled across my How-tos and found them helpful, or better, contributed improvements, or left notes of appreciation, I sincerely thank you for your support.
Haskell: I am actively learning Haskell (again) and taking a different (and much more active) approach. It has sometimes been overwhelming, yet mind blowing and rewarding at the same time. Expect to see more Haskell oriented posts on this blog.
I will be looking to implement a non-trivial project using Haskell some time later this year. Nov 2017: I have been working on a Haskell project in my free time and massively refactoring the code. Nothing big but it has accelerated my learning tremendously. More details to come soon.
Mathematics: I have a small interest in Mathematics - although progress has been slow due to other priorities - still on the beginning undergraduate level. I have been actively working on creating PDFs which contain my solutions to the MIT 18.01 Single Variable Calculus course (Fall 2006) - source code and PDFs are available at this GitHub repo - do note that this is still a work in progress.
Systems, security, operations: Even though I am primarily a software engineer, I probably have much more experience than most engineers in system administration and operations, especially after my stint at Grab’s SysOps team, where I learnt a lot from very experienced teammates on how to run production systems and saw a very different side of things in an Internet company. Ever since I moved on from Grab, I am finding in myself a growing interest in systems, security and operations.
Any codebase should come with some documentation, at least documentation that describes what it does and gets it up and running. This is a lifesaver. I frequently find myself thanking me in the past for writing docs. And also sigh at the many codebases I see going for years without a simple and meaningful README.
Pushing for automation whenever I find myself doing something repeatedly - because this is a strong sign that a computer can do it for me - and with less likelihood of making an error. It is also why I maintain repositories such as provision-ubuntu, bin-src and dotfiles.
Static typing is mostly a good thing. A large codebase written in a dynamically typed language is going to be harder to maintain and requires a lot more tests to ensure runtime safety. You will also eventually have to write a crappy type checker. Why throw away decades of research into type systems and compilers?
Monitoring and logging are absolutely critical. If you disagree, wait till you find out that the CEO was the first one to find out that the systems were down (I’m assuming you are not the CEO). Don’t let that happen to you.
In general, it is not that great an idea to reinvent the wheel. Don’t underestimate the difficulty of the domain in question.
Tests also require maintenance. A lesson taught by one of my mentors at my final internship, which rang true over time. If you don’t believe it, just write an excessive amount of tests and see what happens when you do a major refactor to your code - you’ll probably have to update all the tests, too.
I am strongly for open source software. Having studied a few of them, I can attest that I have learnt a lot from reading code written by people who are way better than myself. It is not an exaggeration to say that the world will be very different without Linux, vim, Apache, Perl, etc and everything else that came from them.