Programmer's growth path - thinking about Taoism and technique

foreword

Invited to share in the expert circle community of station C, the following is the full text of this sharing.

Self introduction

My name is Zheng Haohua, and I am a full-stack engineer. csdn name is Siege Lion Baiyu.

Because my professional experience and experience are not as rich as the experts in the group. Today, starting from my own experience, I bring you an open question to discuss with you. What I want to discuss with you experts today is - "Programmer's Growth Path-Thoughts on Taoism and Technique".

Before starting, I want to define a few nouns, one is a coder and the other is a programmer. A code farmer is someone who writes codes. Programmers are coders who can think. This discussion borrows two concepts from Taoism, Dao and Art. Dao is used to solve theoretical problems and is a methodology, and art is used to solve technical problems and is a method.

path to maturity

I only started to get in touch with programming when I was in university. From the beginning of C language, single-chip microcomputer, embedded, to the server development of the Internet of Things, single web service development, micro service development, and then to the company's saas platform development. In the middle, I also participated in the company's project architecture design, and dabbled in some cloud-native related knowledge during the work process. This process is actually a process of continuous learning of various technologies, that is, the process of accumulating skills.

After so many years of study, I found that the more you go to the upper level (the upper level here refers to the layering of computer service applications), the faster the technology update iteration, you need to maintain your learning ability and curiosity in order to accept fresh thing.

Slowly, I found that these new things, in the final analysis, are tools that serve people and computers, and are proposed for people's cost reduction and efficiency increase. Since it is a tool, it is what we use. Tools are neutral, there is no distinction between good and bad, some are just weapons that are not suitable for the hand. These are arts. That is, tools. In addition, we also need to have instrumental thinking. Just like in "The Distant Savior", Ding Yuanying said in his discussion of Taoism and art: " If there is Tao but no art, art can still be sought. If there is art but no way, stop at art ."

techniques and tools

Art is a method, and it is something that can be learned repeatedly and improved. Therefore, art refers to the appropriate tool. In the early days of reform, Grandpa Deng Xiaoping proposed that no matter whether a cat is black or white, a cat that can catch mice is a good cat. It just embodies the fact that art changes with time, place, people and things.

Before I saw someone arguing about the quality of the programming language, I just smiled and said nothing. Wow, the front-end js is very low, but the back-end java is a bit more high-end. Python is just a toy, there is no way to use it for big projects, or java is stable, and so on. They all use their own strengths to attack others' weaknesses. There is no very objective understanding.

There are also programmers who are bound by the programming language because of this. I think it has to be a language to realize all the scenarios. Or it is bound by the framework. After learning the distributed framework, I feel that the spring cloud system is the best, and the original single application is low. and so on. These are all the walls I built in my mind, which bound me. I didn't see myself as a tool person. Tool man A tool man is a person who uses a tool, not a person who is kidnapped by a tool.

But they forget that each tool was invented to solve a specific problem. Forget the original intention of the tool was invented.

As a programmer, everyone will more or less experience some repetitive work scenarios. At this time, do you think of using tools to solve your own repetitive work? For example, find some existing tools to improve your efficiency. Or relieve yourself of some repetitive work by writing some scripts. When I was in college, I couldn’t take the initiative to receive notifications of the results of the school’s academic administration system for the final exams, so I had to go and see them every day. When I was a freshman, I foolishly went to the academic affairs system to check every few days. After I learned programming, I wrote a python script to crawl the data of the educational administration system every day, and whenever the data was updated, I actively pushed the information to my WeChat through my official account. From then on, he became the first student in the class to know the results.

Tao and thinking

Discussing the relationship between techniques and tools, we look at the essence through phenomena. There is something in common behind the tools, and the commonality behind them is Tao. Tao is a thing and realm that must be comprehended to be improved, and it is abstract, regular and relatively stable. Here, I think Tao is a kind of tool thinking.

For example, programming languages, they all conform to computer principles, can be used to implement algorithms and data structures, and can be embedded in various programming architectures. Whether it's c/c++, golang, python, or java, they essentially use a grammar that humans can understand to describe a language that allows machines to understand and execute the behavior you want. After completing one thing, for example, doing a server backend. All four can be achieved, but the degree of difficulty of realization is not the same. The usage is also different. c/c++, the servers of most online game companies are implemented with c/c++, because the real-time service realized by c/c++ is unmatched by other languages. Of course, some companies are slowly turning to golang now, because golang is a server language designed by Google for high concurrency. But this does not mean that the complete back-end of the game is C/C++, because a completed back-end service, in fact, in addition to real-time games, there are also game social things. For game social back-end services, you need to use java OK, so does python. In fact, they are just tools.

Give another example in the same way, such as domain-driven design DDD. A considerable number of programmers will think that DDD is a kind of pretentious approach. Using DDD has no effect except to increase the complexity of the code. There are also some views that DDD It is immature, without a mature framework, and is a very virtual design pattern.

But DDD (Domain Driven Design) is actually a way of design thinking. The problem it wants to solve is the problem caused by communication ambiguity in traditional software design methods.

Domain Driven Design (DDD) teaches us how to make software well, and it also teaches us how to better use object-oriented technology . It is precisely because DDD is a way of design thinking, that is, Tao , so it provides a whole set of software design and implementation methodology, and there is no so-called "standard" at all. This is why there is no related software framework, because everyone thinks differently about the implementation of DDD, and the division of code is also different. As long as it conforms to the design concept of DDD. The specific method of each person's landing is the embodiment of the technique. That is to say, everyone has a different understanding of the Tao, and the skills displayed are also different. At the same time, the DDD methodology requires us to follow its specifications for tracking and code review when landing. This enables the team to collaborate better and build a stronger system.

postscript

Tao is thought, way of thinking, and methodology. In the programming world, it is an algorithm, an architecture, and a design pattern. Tao guides art, and art is the carrier of Tao and the specific implementation method of methodology. At the very beginning, I mentioned that the more I learn, the more I find that technology updates are iteratively fast, and I need to keep learning by myself. This is because art is a specific method, which will change from time to time, place, person and event. In fact, the design patterns behind it, etc., are not so easily outdated.

Therefore, in the process of programming, when faced with a requirement, we should spend more time on design and think about how to do this requirement. It is convenient for subsequent expansion and high availability. Instead of writing code by hand as soon as you come up. Some people will say, isn't this something that architects should consider? But I think there is no harm in thinking more. At least you are not a coder when you are thinking, but a programmer.

The above is just the humble opinion of Xiaosheng, and it is used to attract others. Experts are also invited to criticize and correct.

written in the back

If you find it useful, please support Siege Lion Baiyu with one button and three consecutive links , and share this article with more friends. Your simple support, my infinite creative power

Guess you like

Origin blog.csdn.net/zhh763984017/article/details/126888846