My 2019


In the retrospect last year, I wrote - "in 2019, there will be more uncertainties both at work and in my life. Many of them are out of my control. I hope I could find solutions for most of whatever comes along the way. More importantly, I can put the things that I’ve learned in 2018 and the past to use to become a bit stronger and wiser." Though I had still done poorly for lots of things, I did get bits of improvements here and there. In general, it was not the best nor the easiest year, but it was a good one.

First off, it was a good year of reading. I ended up finishing 21 books and, more importantly, reading the first three volumes of The Art of Computer Programming. It was always enjoyable to admire the masterpiece and I would revisit them soon because I only understand half of the contents at best. It felt like a must-have journey for a pilgrim. Or, one had to kiss the ring while entering the kingdom. Besides, I completed roughly an equal amount of books about system and algorithm, as I wished at the end of 2018. Several books about the operating systems gave me a better appreciation for the terrain that I’m working on. It was surprising to realize how classic knowledge holds in an ever fast-changing field - I was still dealing with issues that had been thoroughly investigated in the book The Design of the UNIX Operating System written in 1986. It reassured me that almost all of the problems were not unique. As long as one knew better and strived to keep the underlying principles straight, many issues could be resolved or avoided with little effort in coding.

Besides TAOCP, Just for Fun from Linus Torvalds becomes one of my favorite books. His dry humor is ridiculous as if he tries to make peace with himself. I guess that is one of the benefits when a person spends too much time with self. Besides, he does lots of introspections and provides plenty of insights into both programming and system designs. His thoughts are much like the nowadays computer system - all things binary - 0 or 1, right or wrong, gorgeous or disgusting. All of them make it enjoyable to read. At the end of the book, he tries hard to be a mentor for the younger generations by extending his knowledge about programming to lives at large. But the obvious stiffness makes the reading even more joyful.

Tons of things had happened at work in which the acquisition was the most impactful one. I was asked quite often during interviews about the changes and my thoughts on the acquisition. With a few exceptions, I felt it was good for the company and eventually for our customers. I’d categorize eero as a software company, but in reality all of its main products were about hardware. During almost five years I had been working here, I had seen many hardware startups rose and fell. There were a few that survived to see IPOs, but they all followed by constant struggling. Most of these cases could attribute to the differences between hardware and software, It had much longer development cycles and the end results were more of hit-or-miss rather than constantly evolving and improving. They consistently challenged the “survival mode” that a startup was in. For now, we did not have to worry about the three-month runway but had the luxury to plan for three to five years. We were finally able to get back to pay technical debts. In the long run, all of the effort we had put in today would tremendously payback in the future when we had a more performant backbone in the embedded system and a more robust framework for regression tests. For me, I was able to have the chance to dabble in diverse directions - test automation, refactoring multithreaded code, and building new modules. Every experience helped me know a bit better.

Speaking of knowing better, upgrading the kernel while switching to Yocto at work was a nice opportunity to expand my horizon. I wasted lots of time to figure out “how” to do things right. On the other hand, however, as soon as I finished the work, I knew what were the components, where to find them, what were the potential pitfalls, and what was the correct way to piece them together. But that was it - there was barely any shades of gray for it. Either one had done work related to the build/operating systems or not. If yes, one knew all aspects and it was relatively easy to do it again. If no, it is almost impossible to derive the steps from some basic concepts. My thoughts also vary a bit. When someone says “I’ve worked with four build systems,” my reply changes from “wow, that is amazing” to “okey, good for you.”

It might be the characteristics of the part of the system as opposed to theory in the realm of computer science. It feels like a checkbox and less interesting though equally challenging to climb up the learning curve. I’d rather spend more time reading math or algorithm books, or simply solving the questions from TAOCP. At the end of the day, I’d like to feel good about myself by knowing something a little bit better :) What is more, another year-long programming also gives me some new perspectives into this activity. Beauty is never a goal when I write code. It is always about solving problems. But if the outcoming is ugly or sloppy, I know for sure there must be better ways. Self-restraint and self-discipline are virtues while creating software, especially for an “omnipotent” language such as Python.

Reading New York Times has become a refreshing routine for me on Sundays, particularly everything written by Paul Krugman. The podcast is my second source of getting news as well as practicing critical thinking. The native app on the iPhone is pretty neat. It stops updating a program if I haven’t listened to its several episodes in a row. At the end of the year, I have a crystal picture about which podcasts that I truly enjoy. They are the Weeds, the Ezra Klein Show, the Daily, Political Gabfest, Stuff You Should Know, and Rationally Speaking. At some point during the middle of last year, I stopped listening to most of the shows from NPR. They sounded annoying while covering politics. In most of the cases, the topics were not about partisan talking points when there were truth and lie or even people's lives on the line. They did not achieve a balanced coverage but did a disservice to the journalism and the society at large by repeating the lies coming from the right.

In addition, there was also something happened in my life. One of them was completely unplanned. A little hairy potato bumped into my life, whom I named Kylo. I had fantasized to have a dog for about my lifetime… and he just happened to be a perfect match. He was a working dog who was intelligent and willing to be trained. Meanwhile, he did not have a crazy drive like a nut head so we did not have to go out ten times a day just to drain his energy. When I could hardly keep up with him, I’d mock my previous wish of having a Malinois. I enjoyed training with him very much. I only had five to ten minutes in a session and three to five times a day on a weekend. I had to find effective ways to communicate as well as keeping everything interesting and exciting. It was live debugging and he made me trust more on the progressions of every aspect in life. In the past nine months living with him, he had taught me so much about curiosity, trust, and perseverance. On the other hand, it felt like a parenting 101 - I learned to be persistent and resolute on every command, to become multitasking and flexible on schedule, and to keep everything as tidy and clean as I can.

In the coming year, I hope I can be more self-disciplined and organized, both at work and in life. After all, another life depends on me to survive. What's more, I wish myself to become more of a craftsman than a hacker - taking time to hone the skills and striving to be better rather than crossing the river by feeling the stones. Hello, a new decade!

I'd like to finish this post by citing some words from the Yoda, Donald Knuth:

We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak about the state of the art.

My feeling is that when we prepare a program, it can be like composing poetry or music; as Andrei Ershov has said, programming can give us both intellectual and emotional satisfaction, because it is a real achievement to master complexity and to establish a system of consistent rules. Furthermore when we read other people’s programs we can recognize some of them as genuine works of art.

It is still a pleasure to do routine jobs if we have beautiful things to work with… Therefore I want to address my closing remarks to the system programmers and the machine designers who produce the systems that the rest of us must work with. Please, give us tools that are a pleasure to use, especially for our routine assignments, instead of providing something we have to fight with.