It's been a long time, say 5 or 6 years, for me to stop writing technical articles. But recently, I have a strong feeling that I should bring this habit back and make it an essential part of all my following programmer life. So I set up this blog website to start writing again, and this preface is the first article. As you can see, I covered this preface with my HHKB's photograph to tell myself, or programmers like me, that we need to be happy hacking every day, but we should also type what we learned regularly to achieve tremendous career growth. That is because I believe that persistent technical writing is beneficial to programmers in retaining more of what they know.
According to Learning Pyramid Diagram, if you just read books or documents or heard from others, you can only retain 30% of the knowledge at most. To achieve more, you need to demonstrate what you have learned to others, discuss it with others, and then teach it. And I think writing blogs is a perfect tool to model this diagram.
Firstly, the article demonstrates what the topic is, where this new technique emerged from, what issues it can resolve, and how to code it to implement the solution. Also, you would strive to make the demonstration correct as much as possible. While you prepare all of the answers to those questions, you would summarize and revise the lessons and knowledge you had already gained. This process helps you learn quickly and gain precise understanding.
Secondly, you could have a worldwide discussion with others over the Internet if you enable a discussion plugin for your blog. I guess every blogger spends a lot of time making their blogs readable and correct as much as they can before publishing them to the public. However, we are human beings, and we would make mistakes anyway. We need others' help with pointing out what could be explained in a better way, what is not correct, or even some typos. They could also bring some more fresh ideas to you. Thus you could extend your knowledge about that topic, which means it's a Win-Win.
Last but not least, for whichever topic, you could have a workshop video to teach people how to build a solution for a particular problem and improve implementation to approach higher performance or better scalability/extensibility/maintainability. Thus you could achieve much more solid knowledge and learn more about that specific idea.
In conclusion, no matter what technology you are learning, writing blogs is extremely important for you to gain knowledge of it faster and more solid and help you build a complete overview of it.
Another thing I would like to talk about in this preface is the topics that I am aiming to discuss in this blog. The following topics are what I would focus on:
- Microservice Architecture
- Service Mesh
- Languages: Python, Rust, or Go
- Distributed System
You might think that plenty of great articles or books have been written by several experts or creators in those domains and what kind of valuable knowledge this blog can narrow down. Well, I would say I am gonna make a difference. Over the time my ten years of experience in programming, I have always been struggling to find the kind of articles or books that not only introduce a concept or technique theoretically but tell me how to implement it in practice. The devil is in the details. That is to say, if you are not aware of the details of implementation, you are not able to grasp the complex ideas of that technology and innovate on top of it. As Linus Torvalds argued,
"Talk is cheap. Show me the code."
So I would like to discuss some specific topics along with showing the relevant source code for explaining the implementation details. As you can imagine, this way is a hard one, but I believe it is worth doing. Life itself is so hard. Why do we choose an easy way to live with it?
And this is actually the reason why I name this blog as SoftWheel. Soft is for Software, and wheel means trying to implement something that existed again in the software industry. So SoftWheel means that I would talk about those above topics by showing you how to implement them, the wheels, at the source code level to show you the details. For instance, I will show you how ToyDB, TiDB, and Etcd implement Raft, a consistency algorithm of Distributed System, in Rust and Go, how Kubernetes implements Operator Pattern, or how a Service Mesh Data Plane (Envoy or Linkerd-Proxy) implements Circure Breaker and Bulk Head.
Stay tuned! And I promise I wouldn't drop this habit again! :)