: This article mainly introduces the principles and methods for excellent programmers to think about and learn new technologies. if you are interested in PHP tutorials, please refer to them. I recently learned about several MVC PHP frameworks, two of which are in the company. It is found that these things are similar, from processing logic to page rendering; from service to layout; Configuration Implementation is nothing more than XML, or annotation ...... I have a feeling that Xu cannot jump out of this circle of thinking?
Today's era is an age of concepts. the number of open-source software in oschina has already exceeded 20 thousand. There are an endless variety of technologies. what technologies are worth learning?
A friend said that he wanted to learn about the development technology on Android, driven by interest. A few months later, he said he was able to make many small programs. But now, in retrospect, it is good to master a technology. What else can he be interested in? He said, "If I do not use the Android platform in my work, how can I learn it ?".
Is learning technology interesting or painful? When I was reading a book, I once bought the "deep dive into MFC" translated by Hou Jie. for me at that time, it seemed a little too difficult. I forced myself to finish reading 1/3, there is no perseverance to continue reading. I was not aware of happiness in it. This book seemed to be full of life at the time.
There are too many stories like above. many times, programmers (including me) study hard, some do not have good results, and some are full of pain, some do not know what I want to learn.
The education system in China has trained such people:
They work hard, forge ahead, love technology, are willing to join the software industry, are willing to write high-quality code, they are very interested in the industry, they are willing to learn solid basic knowledge, they are eager for new technologies ......
After a few years, they have a wide field of vision, wide experience, old experience, sharp words, and a thorough understanding of the industry dynamics. Obviously, they are industry scholars.
However ......
They lack the ability to think.
Lack of thinking can easily lead to the following phenomenon:
No design
If you encounter problems, you can get the familiar frameworks, solutions, and models you have seen and learned, instead of carefully analyzing the advantages and disadvantages, just try to find a solution that is closest to the current problem.
Some do not do system design. They have been in contact with a few so-called "architects" who "only understand business and technology". the system designed in this way can only meet functional requirements; the discussion topics on some specific issues on the forum expose some followers who "only talk about technology, not about business ", for example, the "XXX large-capacity solutions" and the "ultimate architecture of the second-Kill System" attempt to design a general solution for a wide range of problems.
There is also a lack of object-oriented design and the ability to abstract and decouple. there are more such examples. My friend told me that there was an old employee in his unit who wrote Ruby. in a huge project, there was only one class of God in the code, and all the problems were solved.
Do not stick to your opinion
This is the easiest way to observe during the interview. Candidates include new students and practitioners with over 10 years of experience. After he gave a rough solution, it was difficult to give comments on the merits and demerits before the solution was refined to a certain extent. However, if you gently challenge it, he quickly gave up his original ideas, come to your ideas.
For example, in the SNS system, the server has many solutions to the problem of how to notify the client about messages, such as client polling and server holding connection push. each has its own advantages and disadvantages. Candidates should have their own opinions.
One problem solution cannot be refined
How can we distinguish between an empty talk and a real man? It is the best way to give him a specific question. When I first started my work, I once admired those who spoke openly during activities and discussions. I think they could say that. But then I gradually discovered that there were too many people to say. Refined design, or even coding, is a real test for a programmer. Of course, if you think that the developer is not familiar with coding and the architect is not a senior programmer first, then we have nothing to talk about :).
If you learn, you can grow fast. if you don't think about it, you will always be behind others.
I think we should think more about new technologies. different people have different learning motivations. My point of view on learning new technologies can be summarized as follows:
What problems does it need to solve? is it the so-called problem domain that I care about?
I didn't study the underlying implementation of the operating system, not that there is no value, but that I am not interested. this is the impact of the problem domain (but now I am interested, I want to do something in this area ).
What are the advantages of this and past solutions?
This is competition, and repeated technologies have no room for survival (unless you are Microsoft :)). just like websites of the same type on the Internet, two or three companies will compete in the end. Like Groovy, I like it very much, but with Scala, I think maybe one will die. (the Groovy founder said that if he knew Scala earlier, there is nothing about Groovy. For specific reports, go to Google to search for his blog ).
In terms of its implementation and effects, are there any interesting ideas that are worth learning and thinking about?
This is the most difficult question to address. The Node that we started to contact at the beginning of last year. js is used as an example to place backend aggregation (for example, the stream of portlet) on the front end. the backend only keeps one type of page service-page templates and several easy-to-manage API interfaces, this greatly simplifies the complexity of the backend system and disperses the pressure on the front end, which I did not see earlier.
After thinking about these three questions, I think they are valuable. Otherwise, I just don't want to go into depth and understand it.
What are the ways to learn new technologies:
Find the starting point
I like the sentence on BlueDavy's blog: "If you do not understand the theory, you will not learn the theory !".
In the end, it is best to practice it first, but it is not a bad choice if you are used to the text about those principles. In addition, there are some constraints in the actual situation, such as learning about the cloud platforms of several Internet companies (Amazon EC2, M $ Azure, etc ), unless you are an employee of these companies, it is difficult to go deep.
Find your point of interest
Learning should be an interesting thing. when your brain rejects it, I don't believe it is easy to master this new technology. If you cannot find a point of interest, you may wish to go back to my previous article on whether the new technology is worth learning. since you are not interested, what are you doing? Xi'an Software Training
Good at comparison
Comparison is a very easy way of thinking. what is comparison? Compared with similar technologies, such as the operating system and network infrastructure, and finally compared with examples in daily life (for example, JAVANIO implementation is a good example ).
Continuous feedback
What is feedback? The example of making a HelloWorld is an excellent feedback. understanding a certain implementation principle associates with other similar implementations and produces a sudden sensation and feedback. In the course of learning, continuous feedback means that you are constantly gaining a sense of accomplishment, which is one of the driving forces for your continued development.
The above introduces the principles and methods for excellent programmers to think about and learn new technologies, including content, and hope to help those who are interested in PHP tutorials.