When I was reading SICP, I followed the book to create a Lisp dialect that compiles to a virtual machine with garbage collection. It was my first experience of the magic 🪄 within computers.
SICP was just the beginning, and after finishing it, I felt a sense of unfinished exploration. So, I decided to dive deeper into the study of compiler design, hoping to learn about the complete process of programming languages, from compilation to execution. However, compiler design covers a vast and intricate field, and I couldn't delve into every detail. Therefore, I chose a few concepts that I was already familiar with before studying compiler design, such as closure conversion, SSA (Static Single Assignment), register allocation, garbage collection (especially tri-color marking garbage collection, which I often hear about as I mainly work with Golang), pattern matching (generics/macros), and more.
Due to my busy work schedule, I could only learn and work on these topics in my spare time. I envisioned it as a hobby for my retirement at the age of 35. This hobby brings me a lot of joy, especially when all the modules I previously wrote can be linked together and successfully output "hello world" 🎉.🎉
For a long period of time before assembly and linking were completed, I could only output debugging information and couldn't receive satisfying coding feedback.
Originally, with this slow learning and development process, it would take a long time for me to release Nature (if it can even be released). However, two recent events have influenced my decision:
- Reflections on How to Create a Good Product
Over the past year, I have been developing a new product for my company. I did everything—I became the product manager when there was no product manager, the front-end developer when the previous one resigned, and even the DevOps engineer when the operations team was short-staffed. Of course, I still had my primary role as a backend developer. I thought I had put in a lot of effort, and surely I could make this product great, right? But as the new product gained more devices and customers, I started hearing complaints: "Why is the interface so rudimentary? The details are lacking! Why didn't we plan everything properly from the beginning instead of making constant changes?" and so on.
Initially, I made excuses for myself, thinking that with limited resources, just being able to create the product was already good enough, and I could improve the details later!️ However, when I seriously reflected on this issue, I realized for the first time that my introverted and self-centered personality made me believe that I could handle everything on my own. I never wanted or felt comfortable seeking help from others.
In reality, if I could harness just 10% of the power of my team members and coordinate effectively, I might have a 1% greater chance of creating a successful product. But if I don't do it, I'm giving up that 1% chance ❗️
- Thoughts on ChatGPT
❌ Fake compiler
✅ Real compiler
question the purpose and meaning of everything I had learned and done ❓️❗
However, I have come to realize that, just as Go was dominated by AlphaGo in the game of Go, everyone should still continue playing Go. What I can do now is to complete Nature.
This led me to decide to wrap up and release the initial version of Nature, even though not all planned features have been implemented yet, and many essential functionalities are still under development. But I no longer have the time. Regardless
Let's set sail with Nature!