Tools
The ability of humans to create and use tools has propelled our development far beyond that of other species, establishing us as the dominants of Earth. A famous observation highlights that despite humans being far less energy-efficient in running compared to other animals, the introduction of the bicycle significantly surpassed the energy efficiency of any animal. This example profoundly illustrates the concept that tools equal efficiency: the appropriate use of tools within our limited time and energy determines the heights we can reach.
Tools come in a vast array, primarily designed around the needs of humans as the operators, emphasizing our leading role in their usage. Therefore, perception towards tools is crucial. For instance, dining habits vary across cultures—from chopsticks and spoons in some regions to forks, knives, and direct hand use in others. This variety shows that our hands are not just crucial tools for interacting with the world but also play a key role in writing this piece.
As software developers, we are faced with a plethora of tool choices, from editors like Vim, Emacs, VSCode, to programming languages like Java, Python, JavaScript, and various frameworks, algorithms, coding standards, and testing metrics. With each project completed through a series of selections, we invariably question: Are these tools truly the best choice?
I personally lean towards learning fundamental yet versatile tools to achieve as many development goals as possible, seemingly the optimal choice. Take chopsticks, for example, whose design principle is simple yet highly practical. They can perform a multitude of tasks beyond just picking up food, such as cutting fish or picking difficult-to-grab items, showcasing the ingenuity of tool design. However, even such a tool requires proper technique for effective use. This epitomizes the idea of a one-time investment for lifelong benefits, with a single pair of chopsticks catering to a wide array of East Asian dishes. Nevertheless, for certain foods, specialized utensils like a fork and steak knife are obviously better suited.
Faced with an ever-increasing array of programming languages, frameworks, and tools, the root of choice paralysis lies in our difficulty digesting such a vast amount of information. But as individuals, do we really need to master all these tools? Without them, are we incapable of developing excellent software? I believe not. Often, a computer and a suitable editor like VSCode are sufficient. What's needed can be learned as required. This approach, though possibly myopic, allowing for rapid learning and adaptation, may lead to regrets about not choosing a better architecture sooner, as I've experienced through restructuring my personal website three times. However, what did I learn from this? Are these experiences truly beneficial? These are questions I often reflect upon, yet they still hold value as mental exercises.
Let us, within the confines of our limited time and life, rapidly iterate products and continuously ascend in a spiral manner, possibly the correct path to reaching higher realms.