Technical growth plan for PHP programmers_php digest
According to the understanding of the development trajectory of many PHP/LNMP programmers, combined with personal experience, I abstracted out the confusion of many programmers about the future, especially the blindness and panic about technical learning, and briefly sorted out the PHP programmers at each stage. The technical requirements are used to help many PHP programs to set learning and growth goals.
This article makes a basic summary based on the current mainstream technology. The entire setting is based on the assumption that the PHP programmer does not have a very solid foundation, and all settings are very specific and clear, which may make people feel uncomfortable. Please Understanding only represents one family's opinion. (Future technological changes are beyond the scope of discussion)
The first stage: basic stage (basic PHP programmer)
Key points: Become proficient in LNMP (the core is basic operations of installation and configuration)
Goal: Be able to complete basic LNMP system installation, simple configuration and maintenance; be able to do basic PHP development of simple systems; be able to support the development of a certain PHP function module in a medium-sized PHP system.
Time: The time it takes to complete this stage varies from person to person. Some grow faster than half a year and some grow slowly in two or three years.
1.Linux:
Basic commands, operations, startup, basic service configuration (including rpm installation files, various service configurations, etc.); can write simple shell scripts and awk/sed script commands, etc.
2.Nginx:
Be able to install and configure nginx php, know the basic nginx core configuration options, and know basic configurations such as server/fastcgi_pass/access_log. The goal is to make nginx php_fpm work smoothly.
3.MySQL:
Can build mysql by myself and know the basic mysql configuration options; know the difference between innodb and myisam, and know the different configuration options for the two engines of InnoDB and MyISAM;
Know the basic differences between the two engines and the differences between the above choices; be able to compile and build a MySQL database purely by hand and configure the encoding to run normally and stably; the core purpose is to be able to build a runnable MySQL database.
4.PHP:
Basic syntax for arrays, strings, databases, XML, Socket, GD/ImageMgk image processing, etc.; familiar with various APIs linked to MySQL operations (mysql/mysqli/PDO), knowing how to solve various coding problems; knowing how to use them routinely PHP framework (ThinkPHP, Zendframework, Yii, Yaf, etc.);
Understand the basic operating mechanism of MVC and why it is done, and know a little about the differences between different PHP frameworks; be able to quickly learn an MVC framework. Be able to understand the file directory organization in the development project, have a basic good code structure and style, and be able to complete the development of small systems and the development of a certain module in a medium-sized system.
5. Front end:
If time permits, you can properly learn HTML/CSS/JS and other related knowledge, know what web standards, div css web/wap page mode, know the difference between HTML5 and HTML4; understand some basic front-end and JS framework (jQuery etc.);
Understand some basic JavaScript programming knowledge;
6. System design:
Be able to complete the basic design of small systems, including simple database design, and be able to complete basic: browser->Nginx PHP->database architecture design and development work; be able to support the development of websites with hundreds of thousands to millions of traffic every day Maintenance work;
The second stage: improvement stage (intermediate PHP programmer)
Focus: Improve LNMP skills and be able to apply LNMP more comprehensively and proficiently.
Goal: Be able to set up an LNMP environment anytime and anywhere, and quickly complete routine configuration; be able to trace and solve most of the development and online environment problems encountered;
Able to independently undertake the architecture and development work of medium-sized systems; able to undertake the development work of a medium-sized module in a large system;
1. Linux:
On the basis of the first stage, I can smoothly use Shell scripts to complete a lot of automated work; awk/sed/perl also operates well and can complete a lot of text processing and data statistics;
Basically able to install most non-special Linux programs (including various libraries, packages, third-party dependencies, etc., such as MongoDB/Redis/Sphinx/Luncene/SVN, etc.);
Understand basic Linux services, know how to view Linux performance indicator data, and know basic problem tracking under Linux, etc.
2. Nginx:
On the basis of the first stage, understand the more complex Nginx configuration; including multi-core configuration, events, proxy_pass, sendfile/tcp_* configuration, know the timeout and other related configuration and performance impact;
Know that nginx, in addition to web server, can also undertake configurations such as proxy servers and reverse static servers; know basic nginx configuration tuning; know how to configure permissions, compile an nginx and extend it to nginx;
Know the basic operating principles of nginx (master/worker mechanism, epoll), know why nginx performance is better than apache performance, etc.;
3. MySQL/MongoDB:
On the basis of the first stage, master many tips in MySQL development, including regular SQL optimization (group by/order by/rand optimization, etc.);
In addition to being able to build MySQL, you can also hot and cold backup MySQL data. You also know the configuration options that affect the performance of innodb/myisam (such as key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit, etc.), and you also know the appropriate values for configuring these options;
In addition, I also know some special configuration options, such as knowing how to set up a mysql master-slave synchronization environment and knowing the differences between binlog_format;
Know MySQL performance tracing, including slow_log/explain, etc., and also know basic index creation and processing;
In terms of principles, understand the basic MySQL architecture (Server storage engine), know the basic InnoDB/MyISAM index storage structure and differences (clustered index, B-tree); know the basic InnoDB transaction processing mechanism;
Understand the solutions to most MySQL exceptions (or know where to find the solutions).
If conditions permit, it is recommended to learn about the MongoDB database, which is a representative of NoSQL, and compare the differences with MySQL. At the same time, you can use MongoDB safely and prudently in suitable application scenarios, and know the basic combined development of PHP and MongoDB.
4. Redis/Memcached:
Most medium-sized systems will definitely involve caching, so you must understand basic caching;
Know the similarities, differences and application scenarios between Memcached and Redis, be able to install Redis/Memcached independently, understand some basic features and limitations of Memcahed, such as the maximum value, and know how to combine PHP with their use;
Understand the basic working principles and uses of Redis, understand the conventional data types, know which types are used in what scenarios, understand Redis transactions, etc. In the principle part, you can have a rough understanding of the memory structure of Memcached (slab mechanism). Redis understands the underlying implementation storage structure of common data types (SDS/linked list/SkipList/HashTable), etc. By the way, you can learn more about Redis's transactions, RDB, AOF and other mechanisms. Good
5. PHP:
In addition to the first-stage capabilities, in terms of installation and configuration, you can freely install the compiled installation configuration of PHP and various third-party extensions;
Understand most of the configuration options and meanings of php-fpm (such as max_requests/max_children/request_terminate_timeout and other configurations that affect performance), and know the difference between mod_php/fastcgi;
In terms of PHP, I have become proficient in various basic technologies, including various more in-depth PHP, including in-depth understanding of PHP object-oriented/SPL/special features at the syntax level such as reflection;
In terms of frameworks, I have read the code of at least one conventional PHP MVC framework, and know the internal implementation mechanism and design ideas of the basic PHP framework;
In PHP development, you have been able to skillfully use conventional design patterns for application development (abstract factory/single case/observer/command chain/strategy/adapter and other patterns);
It is recommended to develop your own PHP MVC framework to fully liberalize development, let yourself deeply understand the MVC model, and also allow yourself to quickly upgrade in business project development;
Familiar with various code optimization methods of PHP, familiar with solving most PHP security issues; familiar with the basic PHP execution mechanism principles (Zend engine/extended basic working mechanism);
6. C/C:
Begin to dabble in a certain C/C language, be able to write basic C/C code, and be familiar with basic C/C syntax (pointers, array operations, strings, regular standard APIs) and data structures (linked lists, trees, hashes, Queue) have some familiarity;
Have a basic understanding of C language development under Linux, be able to write simple makefile files, and be able to compile simple debugging work using simple GCC/GDB programs;
Have a general understanding of basic network programming. (This item is to lay the foundation for a higher level)
7. Front-end:
On the basis of the first stage, be familiar with the basic HTTP protocol (protocol code 200/300/400/500, basic HTTP interaction header);
If conditions permit, you can write slightly more elegant HTML CSS JavaScript in depth, or you can simply use some front-end frameworks (jQuery/YUI/ExtJS/RequireJS/BootStrap and the like);
If conditions permit, you can study JavaScript programming in depth, such as closure mechanism and DOM processing; if you go deeper, you can read the jQuery source code for in-depth study. (This item is not a key study unless you are interested in the front-end)
8. System design:
Able to design the website architecture, database, and basic PHP framework selection of most medium-sized systems; perform performance testing and troubleshooting, etc.; be able to complete tasks such as: Browser-> CDN (Squid) -> Nginx PHP -> Cache-> Database Basic design, development and maintenance of structural websites; able to support the development and maintenance of basic websites with millions to tens of millions of traffic every day;
The third stage: Advanced stage (senior PHP programmer)
Key points: In addition to the basic LNMP program, you can also have in-depth learning in a certain direction or field. (Development in depth)
Goal: In addition to being able to complete basic PHP business development, you can also solve most in-depth and complex technical problems, and you can independently design and complete medium and large-scale system design and development work;
I am able to independently hold and go deep into a certain technical direction, and I am relatively professional in this area. (For example, in-depth research in any direction such as MySQL, Nginx, PHP, Redis, etc.)
1. Linux:
In addition to the second stage capabilities, in addition to regular operations and performance monitoring and tracking under Linux, you can also use many advanced and complex commands to complete the work (watch/tcpdump/starce/ldd/ar, etc.); in terms of shell scripts, you can already write A relatively complex shell script (more than 500 lines) to assist in completing many shell tasks including backup, automated processing, monitoring, etc.;
I have become proficient in applications such as awk/sed/perl, and can control and process text statistics and analyze data in various complex formats at will;
Have some understanding of the internal mechanisms of Linux, basic handling of kernel module loading, startup error handling, etc.; also understand some other related things, such as NFS, disk management, etc.;
2. Nginx:
On the basis of the second stage, I have been able to operate Nginx very proficiently and can perform more in-depth operation and maintenance work on Nginx, such as monitoring, performance optimization, complex problem handling, etc.;
Depending on your personal interests, you can consider focusing on in-depth study of the working principle of Nginx, mainly starting from reading the source code, such as the specific master/worker working mechanism, Nginx internal event processing, memory management, etc.; you can also learn at the same time For the development of Nginx extensions, you can customize some of your own private extensions;
At the same time, you can have a certain degree of understanding of Nginx Lua to see if it can be combined and applied to create a better model; the requirement at this stage is an in-depth understanding of Nginx principles, and you can consider becoming an in-depth professional in the Nginx direction.
3. MySQL/MongoDB:
On the basis of the second stage, in terms of MySQL applications, in addition to the previous basic SQL optimization, it can also complete some complex operations, such as importing and exporting large batches of data, changing the table structure of online large batches of data, or adding or deleting index fields, etc. Waiting for high-risk operations;
In addition to installation and configuration, I have been able to handle more complex MySQL problems, such as tracing various problems, solving master-slave synchronization delay problems, cross-machine room data synchronization solutions, MySQL high-availability architecture, etc.; I have an understanding of MySQL application level. , are familiar with the core key technologies of MySQL, such as transaction mechanisms (isolation levels, locks, etc.), and have a certain understanding and application of triggers, partitions and other technologies; in terms of MySQL performance, including disk optimization (SAS migration to SSD), Server optimization (memory, server configuration), other core performance optimization options in addition to the second stage (innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout, etc.), connection pool software selection and application, for show * (show status/show profile) type Have in-depth understanding of operation statements and be able to complete most performance problem tracing;
In-depth familiarity with MySQL backup technology, including disaster recovery and recovery, in-depth understanding of Binlog, hot and cold backup, multi-IDC backup, etc.;
In terms of MySQL principles, I have more knowledge, such as starting to read part of the source code about the working mechanism of MySQL, such as learning the source code of master-slave synchronization (replication) technology, or learning about a certain storage engine (MyISAM/Innodb/TokuDB), etc. Source code learning and understanding. If conditions permit, you can refer to the CSV engine to develop your own simple storage engine to save some data and enhance your understanding of MySQL. During this process, if you are interested, you can also consider developing in the direction of DBA.
At the MongoDB level, you can consider, for example, starting to apply MongoDB online when writing less and reading more, or doing some online data analysis and processing operations. The specific scenarios can be based on the work, but the core is to have a better and in-depth understanding of RMDBS. For applications in different scenarios from NoSQL, if conditions or interests permit, you can start to learn more about the working mechanism of MongoDB.
4. Redis/Memcached:
On the basis of the second stage, more in-depth application and learning can be achieved. Because Memcached is not particularly complicated, it is recommended to read the source code, especially the memory management part, for in-depth understanding;
In the Redis part, you can do more complex data structure applications (zset is used for ranking ranking operations/transaction processing is used to ensure atomicity in flash sale scenario applications and other operations);
For learning applications involving synchronization mechanisms such as aof, design a highly available Redis application architecture and cluster;
It is recommended that you study the source code of Redis in depth and apply the knowledge accumulated in the second stage. In particular, you can read about core event management, memory management, internal core data structure, etc. to fully understand it. If your interest allows, you can become a very professional user of Redis.
5. PHP:
As basic core skills, we need more in-depth study and application based on the second stage. In terms of basic code application, it can solve 95% of the problems encountered in PHP development and understand most of the PHP skills;
You can quickly start using most PHP frameworks within one day, and understand the advantages and disadvantages of each mainstream PHP framework, which can quickly facilitate technology selection in project development; in terms of configuration, in addition to the knowledge you will learn in the second stage, you will understand Some more obscure configuration options (php auto_prepend_file/auto_append_file), including some complex advanced configurations and principles in the extension (such as memcache.hash_strategy in the memcached extension configuration, apc.mmap_file_mask/apc.slam_defense/apc. in the apc extension configuration. file_update_protection and the like);
Have a good understanding of the working mechanism of php, including the working mechanism of php-fpm (such as the calculation and principle of the number of processes enabled by php-fpm under different configuration machines), have a basic familiarity with the zend engine (vm/gc/stream processing), and have read basic PHP kernel source code (or have read relevant articles), have an understanding of the implementation of most core data structures (basic types/Array/Object) of PHP's internal mechanisms, and have an in-depth understanding of the core infrastructure (zval/hashtable/gc); Be able to carry out basic PHP extension development, understand some intermediate and advanced knowledge of extension development (minit/rinit, etc.), and be familiar with the details of different communication and interaction methods between php and apache/nginx (mod_php/fastcgi);
In addition to developing PHP extensions, you can consider learning to develop Zend extensions to understand PHP from a lower level.
6. C/C:
On the basis of the second stage, you will be able to have a deeper understanding of the C/C language and be able to complete the development of small and medium-sized C/C systems;
In addition to the basic C/C syntax and data structures in the second stage, you can also learn some special data structures (b-tree/rb-tree/skiplist/lsm-tree/trie-tree, etc.) to facilitate your needs in special work; In terms of system programming, familiar with multi-process and multi-thread programming;
Under the multi-process situation, we understand most of the communication methods between multi-processes, and can flexibly choose the communication method (shared memory/semaphore/pipeline, etc.); multi-thread programming can solve the lock conflict problem well and can develop multi-threaded programs. Debugging work; at the same time, be familiar with network programming, understand the differences and selection of multi-process models/multi-thread models/asynchronous network IO models, and be familiar with the principles and differences of different asynchronous network IO models (select/poll/epoll/iocp, etc.), And you are familiar with common asynchronous frameworks (ACE/ICE/libev/libevent/libuv/Boost.ASIO, etc.) and their use. If you have free time, you can also look at some domestically developed libraries (such as muduo); at the same time, you can design good high-concurrency programs. Architecture (leader-follow/master-worker, etc.);
Understand most of the issues in C/C back-end server development (memory management, log printing, high concurrency, front-end and back-end communication protocols, service monitoring), and know the RPC communication issues of each back-end service (struct/http/thirft/protobuf, etc.) ; Be able to use GCC and GDB more familiarly to develop compilation and debugging programs, and quickly trace and solve problems after the online program is cored; in terms of general module development, you can accumulate or develop some general tools or libraries (such as asynchronous network framework, Log library, memory pool, thread pool, etc.), but you should be careful whether to apply it after development, so as to save yourself from chasing bugs;
7. Front-end:
In-depth understanding of the HTTP protocol (including each detailed protocol, special protocol code and the reasons behind it, such as 302 static files are cached, 502 means that php behind nginx is down, etc.); in addition to the previous front-end aspects of various framework application integration capabilities, front-end aspects If you are interested in learning, you can go deeper. You can develop some front-end frameworks like jQuery yourself, or develop a rich text editor, which is a relatively trivial test of your JavaScript skills;
8. Language learning in other fields:
Have basic accumulation in basic PHP/C/C language. It is recommended that you try to learn different programming languages at the current stage, depending on your personal interests and hobbies. For scripting languages, you can learn Python/Ruby, and for functional programming languages, you can try Try Lisp/Haskell/Scala/Erlang and the like. For static languages, try Java/Golang. For data statistical analysis, you can learn about the R language. If you want to do back-end business from a different perspective, you can try Node.js. As mentioned above Nginx_Lua combined with Nginx, etc. Learning different languages is mainly to improve your own vision and the differences in problem-solving methods. For example, you will understand that in addition to processes/threads, there are also lightweight coroutines; for example, in cross-machine communication scenarios, Erlang’s solution is surprisingly simple; for example If you don't want to choose C/C, there are also similar efficient Erlang/Golang available, etc.; mainly to improve your horizons.
9. Study in other professional directions:
At this stage, in addition to basic LNMP skills, you will also consider learning knowledge in other fields. These are all possible, depending on personal interests and long-term goals. At present, there are many fields to choose from, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, etc., applied to statistics, personalized recommendations), natural language processing ( Chinese word segmentation, etc.), search engine technology, graphics and images, speech recognition, etc. In addition to these advanced ones, there are also many areas where you can learn more about engineering, such as high-performance systems, mobile development (Android/IOS), computer security, embedded systems, hardware, etc.
10. System design:
Based on the second stage of system design, you can apply the experience and skills you have mastered to design relatively complex medium and large-scale systems, which can solve most of the problems of various online complex systems and complete tasks similar to browsers -> CDN - > Load balancing->Access layer-> Nginx PHP -> Business cache-> Database-> Various complex backend RPC interactions (storage backend, logic backend, anti-cheating backend, external services ) -> More complex back-end business; able to support the normal development and maintenance of websites with tens to hundreds of millions of traffic every day.
Phase 4: Architecture Phase (Architect)
The fifth stage: expert stage (expert in direction field)
Stage Six: Scientist Stage
Adapted from the "Night Passerby" blog.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



How to write a perfect PHP programmer resume In a highly competitive job market, an excellent resume is crucial for job seekers. For PHP programmers, writing a perfect resume is particularly important, because the resume is not only a window to showcase your skills and experience, but also the key to attracting the employer's attention. This article will explain in detail how to write a perfect PHP programmer job resume from beginning to end. Step One: Choose a Concise and Attractive Resume Template Choosing a concise and attractive resume template is the first step in writing your resume.

Improve job search success rate: Tips for writing an excellent PHP programmer job resume In modern society, job hunting has become an important task faced by every graduate. When it comes to applying for a job, your resume is the most important piece. An excellent resume can win you an interview and even determine whether you can successfully get a job. Especially for a highly competitive position like PHP programmer, how to write an outstanding resume has become a key issue for every job seeker. Below I will share some tips for writing an excellent PHP programmer job resume.

How to write a PHP programmer resume that will impress employers. In the highly competitive job market, it is particularly important to write an excellent resume. As a PHP programmer, in addition to your impressive work experience and skills, a resume also needs to reflect your love for programming and solid professional knowledge. This article will introduce some tips and code examples to help you write a PHP programmer resume that will shine in the eyes of employers. Concise and clear personal information The personal information section of your resume should include your name, contact information and personal website

Don't be ignored anymore! Learn How to Design an Impressive PHP Programmer Resume In today's competitive job market, having an impressive resume is key to landing your dream job. Especially for technical positions such as PHP programmers, resumes are a window to showcase your skills and experience. This article will teach you how to design an impressive PHP programmer resume, complete with code examples. First, a good resume will attract the reader's attention. The title should succinctly describe your

Eye-catching resume tips for PHP programmers: How to stand out from other candidates With the rapid development of the Internet industry, PHP programmers have also become one of the popular positions in the job market. However, more and more people are choosing PHP as their career development direction, which makes the competition more intense. Under such circumstances, how to make your resume stand out and become popular in the eyes of employers is a question that every PHP programmer needs to think about. First, a good resume should clearly and concisely demonstrate your skills.

The road to high-paying counterattack for PHP programmers. With the rapid development of the Internet, the demand in the field of computer science continues to increase. In this era, people who need programming skills are most in demand. As a commonly used programming language, PHP provides programmers with a high-paying counterattack path. This article will introduce how PHP programmers can move towards a high-paying counterattack by learning PHP and related technologies, and attach some code examples. 1. Master the basic knowledge of PHP. To become an excellent PHP programmer, you first need to master the basic knowledge of PHP.

Explore Writing Tips: How to Write a Compelling PHP Programmer Resume In today's competitive job market, a compelling resume is especially important for PHP programmers. A good resume not only catches the employer's eye but also showcases your skills and experience. This article will explore some writing tips to help you craft a great PHP programmer resume, complete with code examples that highlight your professional abilities. Concise and clear format The format of your resume should be concise and clear, allowing employers to quickly scan your relevant information.

In today's highly competitive job market, how to stand out from the crowd of job seekers has become a very important issue. Especially for PHP programmers, a good resume can directly affect whether you can get an interview. This article will give you a detailed introduction to how to write a PHP programmer resume that makes you stand out. First of all, a good job resume should contain the following important parts: personal information, job intention, educational background, work experience, skills and expertise, and personal project experience. We will go part by part
