Write good code

The first step to write good code is to define a clear boundary between systems. A boundary that allows you to freely explore the problem without breaking existing functionalities. The second step to write good code is to explore the problem thoroughly via iteration. Your first 2~3 solutions will be bad because you don’t understand the problem yet. Kick-off a feedback-loop as early as possible. Good code, just like good design, need iteration and learning....

<span title='2023-12-05 00:00:00 +0800 CST'>December 5, 2023</span>&nbsp;·&nbsp;poga

Dealing with Tech Debts

Here’s the rough transcript of a talk I’ve given at my $DayJob. On Dealing with Tech Debts Tech debts has been a sin of software engineers since the dawn of the computer. Today I will talk about concrete methods I’ve been using for many years. I will not talk about high-level ideas since we already have way too many on the internet. So the method is simple: You want to constantly dealing with tech debts during your development process, not just after finished a task, not arranging a special sprint for debts....

<span title='2023-04-01 00:00:00 +0800 CST'>April 1, 2023</span>&nbsp;·&nbsp;poga

Hacking is a Lost Art

What’s hacking? It is the practice of aggressively refining the problem statement in order to identify find the problem that is actually worth solving. It is the art of focusing on solving a problem in the most impactful and economical way possible while minimizing accidental complexity. It is the art of not getting attached to a solution and iterating quickly. It’s the art of having fun while doing it.

<span title='2023-02-19 00:00:00 +0800 CST'>February 19, 2023</span>&nbsp;·&nbsp;poga

Start with the Least Malleable

Always start with the least malleable whenever you’re onboarding to a new job, switching careers, or just joining a new project. Resources you’re going to encounter in your career, from least malleable to most malleable: People Process Code Always start with the people. People are shaped by their life. It’s impossible to rapidly change a person without some crazy stuff happen. Run if people make you feel uncomfortable. Since It’s not worthy to spend your life to change some other people just to have an okay career....

<span title='2023-01-02 00:00:00 +0800 CST'>January 2, 2023</span>&nbsp;·&nbsp;poga

Cheap Complexity and Cybersecurity

A recurrent theme of modern security is the importance of complexity and the difficulty of containing it. With GPUs, NICs, basebands, and specialized hardware such as TPUs, things are objectively getting more complicated at a superlinear rate. In a world where complexity continues to grow, it is hard to provide security guarantees. The problem of escalating complexity becomes an escalated security problem. What’s driving the complexity? “How does one design an electric motor?...

<span title='2022-08-28 00:00:00 +0800 CST'>August 28, 2022</span>&nbsp;·&nbsp;poga

gRPC status codes

gRPC defined 18 status codes for returning different types of errors. I think they’re a pretty good reference if you want to design clear error handling for API. ...

<span title='2022-01-03 00:56:00 +0800 CST'>January 3, 2022</span>&nbsp;·&nbsp;poga

Pipelines and Glue Systems

Context: Machine Learning Projects are mainly just a complex interdependent pipeline. We desperately need a better abstraction for them. ...

<span title='2021-12-12 00:00:00 +0800 CST'>December 12, 2021</span>&nbsp;·&nbsp;poga

On Building Glue Systems

I spent most of my life building glue systems. Sometimes, I got to work on a deep, sparkling project. But most of the time, my work is about gluing things together. ...

<span title='2021-09-18 00:00:00 +0800 CST'>September 18, 2021</span>&nbsp;·&nbsp;poga

Learning Julia, Line by Line

Cardsjl is a simple Julia package which demonstrate many interesting bits of the Julia Programming Language. Reading it is an enjoyable experience. The note I’ve writtend down is here: ...

<span title='2021-08-04 00:00:00 +0800 CST'>August 4, 2021</span>&nbsp;·&nbsp;poga

Haxe and Programming for Many Machines

The title sounds obvious. We always program for a machine! A program won’t run itself! ...

<span title='2021-05-11 00:00:00 +0800 CST'>May 11, 2021</span>&nbsp;·&nbsp;poga