工作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程序员太典型了,我就不在头部分享浅析了,因为很多大神纷纷在底部评论发言,建议想法都很有意义,想了解的朋友希望你看完正文,不妨在看完评论,话不多说直接分享。

  正文

  作为一个将近4年的php开发者,个人觉得工作3-5年后就会进入一个相对迷茫的状态,当然情况因人而异,以我个人的心路历程为契机,跟大家讨论并学习下应当如何进阶。

  1.php是属于相对简单的开发语言,入门上手很快,1-2年基本就能掌握上手,独立完成很多基本功能的开发,而且大部分时候是框架一套用,百度一搜索,代码一粘贴复制,上线能使用基本就算完事。稍微好一点的情况就是能自己封装一些常用功能,多使用一些扩展库,基于很多中小型公司的现状,也不会有一整套复杂的开发流程,什么需求评审,原型设计,定稿开发等等,往往都是需求一出来先整个功能上线后再慢慢优化调整,而且很多时候用php来开发,用户基数以及性能要求也不会有太大要求(以上都是对中小型公司的情况进行分析,希望有大厂的phper讲述下大厂的开发流程)。其次很多phper同时还兼任着服务器的环境配置及维护,更有甚者连前端界面都是自己来,一人任多职。

  2.成为初级开发后,2-4年处于一个进阶的阶段,这个时候对底层知识的需求就大大提升,不再拘泥于简单的复制粘贴、增删改查这些东西了。这个时候其实也就是相对迷茫的时候了,大多数人会选择以下的方向去进一步发展。(1)深度学习,去了解php开发的一些底层原理,框架的底层架构知识,设计模式,网络原理等,再到一些数据结构与算法的深入了解。这里可以展开讨论下,这些东西大部分看起来都很晦涩难懂,不像学习语法以及框架文档一样,开箱即用,能获得现有的成就感,相反这些知识更多的是加深你对编程的理解,即主要是为什么去用这个方法或者说这些封装好的类的作用是啥,着重于思考。(就我个人而言,很多简单的理论看了能用,但能不能融会并应用到实际中来,是一个未知数,这里也希望大神指点一二)(2)广度学习,即从php扩展到其他语言,比如当下较为火热的golang、python等,对更多的语言有了解以及能掌握使用,更像是一块砖,哪里需要哪里搬,更甚于直接转型成为其他语言的开发者。同样这种选择其实也值得商榷,很多时候是觉得这门语言达到了一个瓶颈期,其他语言可以进行一个替代。

  3.最为重要的一点就是发展,大家面临的都是职业发展路径规划的问题了,3-5年最为尴尬,高不成低不就。大厂对技能方面要求颇高,很多还需要相应的项目经历,而这些创业型公司怎么可能会有相应的用户以及流量的实践项目呢,很多就只能从理论上去探讨,缺乏实际应用,感觉这就是一个矛盾点,不知在小公司跳大公司的各路大神如何破解这一点?而退而求其次选择一些中型公司的话怎样的选择又是比较好的呢?

  4.求各路大神进行指教,同时如果有好的进阶书籍或者规划文档等可以推荐下,共同探讨,共同进步!

  底部评论,很有建议意义

  高度认可度评论

  以下是我自己的理解,多半不对,只是说出来交流探讨

  PHP 一般有两年就能干活就能应对 95% 以上的工作了,剩下不能应对的基本也属于是强行使用 PHP 来解决不适合它解决的问题(这是由 PHP 的运行时,zend engine 提供的能力决定)。PHP 在语言层面基本没多少学习深入空间。

  提升的话:

  LNMP 方面:对其各个部分的运行时与流程能够烂熟于胸,对一些问题能想深入些,模棱两可的东西千万要想明白。

  MySQL,首先要熟悉其单机工作模式,理解索引原理,理解其查询流程,能够大致找到 SQL 的执行问题,做一些简单的诊断。

  NGINX 的话理解其稳定与高性能的原因,一些常用的配置

  底层知识:

  操作系统方面 LINUX 的进程 / 线程模型,以及协程。对其运行模型能够理解。

  1. 进程是如何运行的,进程有什么作用,进程的内存结构,子进程,进程组,frok

  2. 线程是什么,如何运行的,调度的

  3. 协程是什么,解决了什么问题

  算法,我没时间看,没啥建议

  要深入的话,这些都是蛮力,没的捷径(有一条,遇到不懂的问题,不要百度搜索,多去经典的书里找找,多去自己想,想错了也不要紧,学习就是不断加深自己和纠正自己以往的认知)。

  而且理解的标准也很简单,就是对该事物能简单的描述。比如我理解的协程是什么,简单的说就是:用户态的线程,即不需要陷入内核就可以进行切换,只需要在当前线程上保存正在运行的过程的寄存器、程序计数器(如果系统提供了一条指令就可以完成的话,性能比线程调度高一个数量级别),解决了操作系统调度线程开销大,线程阻塞后需要陷入内核进行调度等问题,实现是采用类似系统进程表的形式,记录当前协程正在运行过程的程序计数器、寄存器,需要切换协程时,将当前线程的计数器和寄存器进行保存和替换,一旦替换完成,协程就会执行),当然这些是我的理解,不一定对。

  另外语言,建议学 Java,另外 Java 学起来进展很慢,不会给你像学 Go 那样的快的成就感。

  另外只推荐大部头书,一遍不懂就多遍(深入理解操作系统、UNIX 三部曲等),最好不要陷入像什么专栏这种读了之后看似懂了的虚假收获里

  最最重要的是,你要有运气,这些都了解了之后能找到一个好工作,能学以致用。

  以上都是自己理解,不一定对,甚至都是错的,只是提出一种自己的观点,每个人的路都是自己走出来的,亦步亦趋是不行的。欢迎一起交流与学习

  评论者1

  别问 问就是 swoole

  评论者2

  多问问自己,难在哪里?看看招聘要求,面试得到的反馈等等,各方面都可以找到自己的不足然后针对性提升。

  评论者3

  先广后深。 swoole、es、mq、docker、redis 都要会用,然后再学习一门语言 java 或者 golang。螺旋式上升

  评论者4

  确实该迷茫,成为大牛是不可能了,就是比初级高,比高级低,但不是中级

  评论者5

  从培训班出来,在外包干了大半年,也很迷茫,日常就是 CURD,觉得很多东西都还得学,但是没有方向

————————

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.

Text

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.

Promotion:

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

Underlying knowledge:

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

Commentator 1

Don’t ask, it’s swoole

Commentator 2

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.

Commentator 3

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

Commentator 4

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

Commentator 5

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