I can't remember where I saw this sentence. "When you have a hammer with good hands, you will think that the whole world is a nail ". You have tried to solve all things and problems with this hammer. In many cases, this hammer often cannot solve the problem, or it has better tools to solve the problem at hand. For example, it is more efficient and easier to use nails from wood.
Programming languages, such as C #, are the hammers in our hands. The way of thinking and thinking habits formed by this language are even more invisible hammers in our minds. This is a good thing and a bad thing-the good thing is that we have at least one hammer, and the bad thing is that we often ignore other tools because we use a good hammer in our hands.
A company in Guangzhou once suggested that the manager of my department apply the AOP technology to our projects to solve a lot of problems that AOP is good at but OOP is not good at. The department manager told me that, "If AOP can be done well, oop can be done well. For example, you can add a function call to every place to be recorded, why use AOP to make things so complicated ".
I once suggested that a programmer familiar with C could try to understand C ++. The answer is like, "C ++ can do what C ++ can do, c ++ objects can be simulated using structures and function pointers, while polymorphism can be simulated using a function pointer-based table ". However, this skilled C programmer has never been so simulated. Is it possible for him to step into the object-oriented world?
I once suggested that a skilled C ++ programmer try to understand a language like C # or Java, and the answer is probably, "C # and Java can do it, both C ++ and C ++ have better control over the underlying layer and are more efficient!" I asked him again, "since it is for more control and higher efficiency, why not use assembly or C directly ?" He did not answer. In the future, he will still use MFC to create a lot of seemingly inefficient programs, and he will still be very happy. When talking to others about C # and Java, "I never use them for what they are !".
If we cannot put down our hands for the moment, it will help us a lot but limit our hammers, and we will never be able to pick up other tools (ways of thinking) to solve the problem more effectively, it is never possible to understand the subtlety of other tools (ways of thinking! Just like the manager above, I am afraid I will not go deep into the understanding of AOP in the next 10 years.
We don't want to put down the good hammer in our hands, probably because
(1) We have fallen in love with this hammer and are not interested in other tools.
Which of the following is a great battle on the Internet, such as C # And C ++? Which of the following is the future of Java and. Net? How much do you know about the Java World that supports. Net? How much do you know about C # That supports C ++? We often shut ourselves down at the bottom of the well and watched the sky as a slap in the face, and then made an argument about the invisible world, however, we have never had the courage to jump out and understand the broader world we are not familiar.
A real wise man is not about the programming languages and platforms that he has mastered, but about his way of thinking and his way of thinking, but about his open mind and undisciplined attitude towards life. At the end of kung fu training, I practiced my internal skills and personal accomplishments. A true master, flying fallen leaves can hurt people!
(2) We have no time or energy to learn new tools (new ways of thinking)
The only reason for this is our laziness and self-defense!
Go out to learn, and constantly walk out of the current well, and keep learning to have a way out. Who told you to choose a programmer career.
(2006.04.10 Appendix) I'm sorry, many people have misunderstood what I mean. I didn't mean to let everyone learn many programming languages, instead, we suggest you go out of the current thinking model and thinking method and look at the world outside! For example, you have always been a process-oriented thinking. You can understand OOP and AOP. You have always been working in static languages (such as C ++ and C #), for more information about dynamic languages (such as Python), you have been engaged in C/S development, you can learn about B/S, you have been working on Windows, you can learn about Linux, and vice versa. Broaden our horizons. In any case, it is helpful for our growth. Of course, the premise is that you have to calm down to study and understand (this is a essential basic quality for all technical staff), and know what is a simple taste, what needs to be further explored. Do not reject or dislike any technology for no reason, or pursue any technology for no reason.
In fact, what I want to emphasize most is this: "at the end of the hard work, all are internal skills and exercises.Personal Cultivation, A real master, flying fallen leaves can hurt people !" It is difficult for narrow-minded and self-disciplined people to become real masters.