工作4年的程序员渴望进阶高级渴望进大厂，非常迷茫求指点(The programmer who has worked for 4 years is eager to advance to a higher level and to enter a large factory. He is very confused and asks for guidance)
PHP 一般有两年就能干活就能应对 95% 以上的工作了，剩下不能应对的基本也属于是强行使用 PHP 来解决不适合它解决的问题（这是由 PHP 的运行时，zend engine 提供的能力决定）。PHP 在语言层面基本没多少学习深入空间。
MySQL，首先要熟悉其单机工作模式，理解索引原理，理解其查询流程，能够大致找到 SQL 的执行问题，做一些简单的诊断。
操作系统方面 LINUX 的进程 / 线程模型，以及协程。对其运行模型能够理解。
另外语言，建议学 Java，另外 Java 学起来进展很慢，不会给你像学 Go 那样的快的成就感。
别问 问就是 swoole
先广后深。 swoole、es、mq、docker、redis 都要会用，然后再学习一门语言 java 或者 golang。螺旋式上升
This article is too typical for PHP programmers. I won’t share and analyze it at the head, because many great gods comment and speak at the bottom, and the suggestions and ideas are very meaningful. Friends who want to know want you to read the text. You might as well share it after reading the comments without saying much.
As a PHP developer for nearly four years, I personally feel that after working for 3-5 years, I will enter a relatively confused state. Of course, the situation varies from person to person. Taking my personal journey as an opportunity, I will discuss and learn how to improve with you.
1. PHP is a relatively simple development language. You can get started quickly. You can basically master it in 1-2 years and independently complete the development of many basic functions. Most of the time, it is a set of framework, Baidu search, code paste and copy. If you can use it online, it is basically done. A little better is to be able to encapsulate some common functions and use more extension libraries. Based on the current situation of many small and medium-sized companies, there will not be a complete set of complex development processes, such as requirements review, prototype design, final development, etc. often the whole function will be online first, and then slowly optimized and adjusted, and PHP is often used for development, The user base and performance requirements will not be too great (the above is an analysis of the situation of small and medium-sized companies. I hope that PHPer from large factories will describe the development process of large factories). Secondly, many phpers are also responsible for the environment configuration and maintenance of the server. What’s more, even the front-end interface comes by themselves, and one person has multiple duties.
2. After becoming a primary development, it will be in an advanced stage for 2-4 years. At this time, the demand for underlying knowledge will be greatly improved. It is no longer confined to simple copy and paste, addition, deletion, modification and inspection. This time is actually a time of relative confusion. Most people will choose the following directions for further development. (1) Deep learning, to understand some underlying principles of PHP development, the underlying architecture knowledge of the framework, design patterns, network principles, and then to have an in-depth understanding of some data structures and algorithms. It can be discussed here. Most of these things seem very obscure and difficult to understand. Unlike learning grammar and framework documents, they can get the existing sense of achievement out of the box. On the contrary, these knowledge is more about deepening your understanding of programming, that is, why to use this method or what the role of these encapsulated classes is, focusing on thinking. (as far as I am concerned, many simple theories can be used, but it is unknown whether they can be integrated and applied to practice. Here I also hope the great God can give some advice) (2) breadth learning, that is, expanding from PHP to other languages, such as golang and python, which are popular at present. Knowing and mastering more languages is more like a brick, Where you need to move, it is better than directly transforming into developers of other languages. Similarly, this choice is also debatable. Many times, I think this language has reached a bottleneck period, and other languages can be replaced.
3. The most important point is development. What we are facing is the problem of career development path planning. It is the most embarrassing in 3-5 years, whether high or low. Large factories have high requirements for skills, and many still need corresponding project experience. How can these start-up companies have corresponding user and traffic practice projects? Many can only be discussed in theory and lack practical application. I feel that this is a contradiction. I don’t know how the gods who jump from small companies to large companies can solve this? What is a better choice if you choose some medium-sized companies?
4. Ask all great gods for advice. At the same time, if you have good advanced books or planning documents, you can recommend them to discuss and make progress together!
Bottom comments, very suggestive
Highly recognized comments
The following is my own understanding, which is mostly wrong. I just talk about it and exchange it
Generally, PHP can handle more than 95% of the work in two years. The remaining problems that cannot be handled are basically forced to use PHP to solve problems that are not suitable for it (this is determined by the ability provided by Zend engine when PHP is running). PHP has little room for in-depth study at the language level.
LNMP: be familiar with the operation time and process of each part, think deeply about some problems, and understand ambiguous things.
Mysql, first of all, should be familiar with its stand-alone working mode, understand the indexing principle, understand its query process, be able to roughly find the SQL execution problems and make some simple diagnosis.
Nginx understands the reasons for its stability and high performance, and some commonly used configurations
In terms of operating system, Linux Process / thread model, as well as collaboration. Be able to understand its operation model.
1. How the process runs, what role the process plays, the memory structure of the process, sub processes, process groups, frok
2. What are threads, how to run them, and how to schedule them
3. What is the collaborative process and what problems have been solved
Algorithm, I don’t have time to see, no suggestions
If you want to go deeper, these are all shortcuts without brute force (there is one. Don’t Baidu search when you encounter problems you don’t understand. Go to classic books and think more about yourself. It doesn’t matter if you think wrong. Learning is to constantly deepen yourself and correct your past cognition).
And the standard of understanding is also very simple, that is, it can simply describe the thing. For example, what I understand as a coroutine is simply: a thread in user mode, that is, it can switch without falling into the kernel. It only needs to save the registers and program counters of the running process on the current thread (if the system can complete it by providing an instruction, the performance is one level higher than thread scheduling), It solves the problems that the operating system has a large cost of scheduling threads and needs to fall into the kernel for scheduling after thread blocking. The implementation is to record the program counters and registers of the running process of the current collaboration in the form of a system process table. When it is necessary to switch the collaboration, the counters and registers of the current front-line process are saved and replaced. Once the replacement is completed, the collaboration will be executed), Of course, these are my understanding, not necessarily right.
In addition, it is recommended to learn Java. In addition, Java is slow to learn and will not give you a sense of achievement as fast as learning go.
In addition, only a large number of first books are recommended. If you don’t understand them many times (in-depth understanding of the operating system, UNIX trilogy, etc.), it’s best not to fall into a false harvest like what column seems to understand after reading
The most important thing is that you should have luck. After knowing all this, you can find a good job and apply what you have learned.
The above is my own understanding, not necessarily right, or even wrong. I just put forward my own point of view. Everyone’s road is his own, and it’s no use following suit. Welcome to communicate and learn together
Don’t ask, it’s swoole
Ask yourself, what’s the difficulty? Look at the recruitment requirements, the feedback from the interview, etc. you can find your own shortcomings in all aspects, and then improve them.
First wide and then deep. You should be able to use swoole, ES, MQ, docker and redis, and then learn a language Java or golang. Spiral rise
It’s really time to be confused. It’s impossible to become a big bull. It’s higher than the primary level and lower than the advanced level, but not the intermediate level
I came out of the training class and worked in outsourcing for more than half a year. I’m also very confused. Everyday is curd. I think I have to learn a lot, but I don’t have a direction