I recently learned about several MVC PHPframeworks, two of which are internal to the company. I found that these things are similar, from processing logic to page rendering; from service to layout; the implementation of configuration is nothing more than XML, or annotation... I have a feeling I feel like maybe I can’t get out of this thinking circle anymore?
Today’s era is an era of exciting concepts. The number of open source software in oschina has exceeded 20,000. Various technologies are emerging in endlessly. What technologies are worth learning?
A friend said that he wanted to learn some development technologies on Android, driven by interest. A few months have passed, and he said that he has been able to make many small programs. But now that he thinks about it, it is good to master a technology, but what else is there besides hobbies? He said, "If I don't use the Android platform in my work, what's the use of learning it?".
Is learning technology an interesting thing or a painful thing? When I was studying, I once bought "Speaking in Simple and Easy WaysMFC" translated by Hou Jie. It seemed a little too difficult for me at that time. I forced myself to read a third of it, but I really didn't have the willpower to continue. Read on. I could detect no joy in it, and the book seemed full of rawness at the time.
There are too many stories like the above. Many times, programmers (including me) study hard, but some have no good results, some are full of pain, and some even don’t know the purpose of learning it. What.
The domestic education system has cultivated a group of people like this:
They are hardworking and enterprising, love technology, are willing to join the software industry, and are willing to write high-quality code. They are very interested in things in the industry, they are willing to learn solid basic knowledge, and they are eager for hot new technologies...
After a few years, they have a broad vision, broad experience, sophisticated experience, sharp words, and a good understanding of industry trends. Obviously, they are industry experts.
However...
They lack such an ability - thinking.
Lack of thinking can easily lead to this phenomenon:
Can’t do design
When you encounter a problem, you apply familiar frameworks, solutions, and models that you have seen and learned without carefully analyzing the pros and cons. You just try to find the closest solution to the current problem as much as possible.
Some people don’t know how to do system design. I have been in contact with a few so-called "architects" who "only understand business and do not understand technology". The system designed in this way can only meet functional requirements; and the discussion topics of some specific issues on the forum reveal some underlying issues. The discussant of the post "only talks about technology, not business", such as "XXXlarge-capacity solution" and "the ultimate architecture of flash sale system", trying to design a set of solutions for a certain type of broad problems. A universal solution that works everywhere.
There are even more examples that do not know how to do object-oriented design and lack the ability to abstract and decouple. A friend told me that there was an old employee in his unit who wrote Ruby. For a huge project, there was only one God class in the code, which solved all the problems.
Can’t stick to your own point of view
This is most easily observed during interviews. Applicants include fresh graduates and experienced practitioners who have worked for more than 10 years. After he gives a rough plan, it is difficult to comment on the pros and cons until the plan is refined to a certain extent. However, if you gently challenge him, he will quickly give up the original idea. Run to your thoughts. For example, in the
SNSsystem, how should the server notify the client of messages? There are many solutions to this problem, such as client polling, server holdhold connection push, etc. ,Pros and cons. Candidates should have their own opinions. Cannot refine a solution to a problem
How to distinguish a talker from a doer? Giving him a specific question is the best way. When I first started working, I used to admire those who spoke loudly at events and discussions. I thought they were very talkative. But later I gradually discovered that there are too many people who can speak. Refining the design, even down to coding, is the true test of a programmer. Of course, if you think that people who do software design need not be familiar with coding and architects need not be a senior programmer first, then we have nothing to talk about
:).
If you can learn, you can grow very fast; if you can’t think, you can always just lag behind others.
I think we should think more about learning new technologies. Different people have different motivations for learning. Unless forced by the outside world, my views on learning new technologies can be summarized as:
What problem does it solve, which is the so-called problem domain? Is that what I care about?
I didn’t study the underlying implementation of the operating system. It’s not that it has no value, but I’m not interested. This is the impact of the problem domain (but now that I am interested, I want to do something in this area).
What are its advantages compared to previous solutions, and are they significant?
This is competition. There is no room for repeated technologies (except, of course, if you are Microsoft :)). Just like the same type of website on the Internet, there will only be two or three companies competing in the end. Like Groovy, I like it very much, but with Scala, I think maybe one of them is going to die (Groovy founder said, if he knew earlierScala If that’s the case, there’s nothing wrong with Groovy. For specific reports, please Googlesearch his blog).
Looking at its implementation and effects, are there any interesting ideas that are worth learning from and thinking about?
This is the most difficult question to answer. Take Node.js, which I started contacting at the beginning of last year, as an example. It can put back-end aggregation (such as portlet and the like) into the front-end, and the back-end only retains one type of page service - —Page templates, as well as several easy-to-manage APIinterfaces, greatly simplify the complexity of the back-end system, and can also spread the pressure to the front-end, which I have not seen in earlier years.
After thinking about these three questions, I felt they were valuable, so I started to study. Otherwise, for me, it’s something I don’t want to go deep into, and I just want to understand it.
As for the way to learn new technologies, I would like to say the following points:
Find the entry point
I like the sentence on BlueDavy’s blog very much: “If you don’t understand theory, just practice it. If you don’t understand practice, just learn theory!”.
In the end, it is best to get down to hands-on practice, but if you are used to starting with texts introducing principles, it might not be a bad choice. Moreover, the reality will have some constraints, such as when understanding the cloud platforms of several Internet companies (Amazon’s EC2, M$’s Azure, etc.), Unless you are an employee of one of these companies, it is difficult to get into it.
Find your own points of interest
Learning should be an interesting thing. I don’t believe it’s easy to master this new technology when your brain rejects it. If you can't find the point of interest, then you might as well go back to my previous point about whether new technologies are worth learning. Since you have no interest in it, why would you learn it? Xi'an software training
Good at comparing
Comparison is a very easy way of thinking. What to compare with? Compare with similar technologies, compare with examples of infrastructure such as operating systems and networks, and finally, compare with examples in life (for example, the implementation of JAVANIO is a good example).
Continuously get feedback
What is feedback? Making an example of HelloWorld is an excellent feedback; understanding a certain implementation principle, thinking of other similar implementations, and having a feeling of enlightenment is also a kind of feedback. In the process of learning, continuous feedback means that you continue to gain a sense of accomplishment, which is one of the motivations to continue.
The above has introduced the principles and methods for excellent programmers to think and learn new technologies, including aspects of it. I hope it will be helpful to friends who are interested in PHP tutorials.