According to the understanding of a lot of PHP/LNMP programmer's development trajectory, combined with personal experience, abstract a lot of programmers to the future of the fog, especially the technology of blind and panic, a simple comb this phase of the PHP Programmer's technical requirements, to help a lot of PHP program to do control set learning growth goals.
This article in accordance with the current mainstream technology to do a basic comb, the whole is to assume that the PHP programmer is not a very solid foundation of the situation is set, and all settings are very specific and clear, may be uncomfortable, please understand that only represent opinion. (Future technical changes are not in the discussion area)
Phase One: Base stage (PHP programmer)
Focus: To LNMP skilled (the core is the installation configuration basic operation)
Objective: To be able to complete the basic LNMP system installation, simple configuration and maintenance, be able to do basic simple system of PHP development, be able to support the development of a PHP function module in the PHP medium system .
Time: Complete this phase of the time varies from person to person, some grow fast six months a year, the growth of two or three years also have a slow.
1.Linux:
Basic commands, operations, startup, basic service configuration (including RPM installation files, various service configurations, etc.); write simple shell scripts and awk/sed script commands.
2.Nginx:
To be able to install configuration nginx+php, know the basic nginx core configuration options, know Server/fastcgi_pass/access_log and other basic configuration, the goal is to make NGINX+PHP_FPM work smoothly.
3.MySQL:
Will build MySQL yourself, know the basic MySQL configuration options; know the difference between InnoDB and MyISAM and know the different configuration options for the InnoDB and MyISAM two engines;
Know the difference between the basic two engines and choose the above difference; be able to build a MySQL database by hand and configure the code and so on normal stable operation; The core thrust is the ability to build a MySQL database that can be run.
4.PHP:
Basic syntax array, string, database, XML, Socket, gd/imagemgk image processing and so on, familiar with the various links with the MySQL operation of the API (MYSQL/MYSQLI/PDO), know the resolution of various coding problems Familiar with the PHP framework of conventional proficiency (thinkphp, Zendframework, Yii, YAF, etc.);
Learn about the mechanics of basic MVC and why, slightly aware of the differences between different PHP frameworks, and the ability to quickly learn an MVC framework. Be able to know the file directory organization in the development project, have the basic good code structure and style, can complete the development of small system and the development work of a module in medium system.
5. Front End:
If the conditional time allows, can be appropriate to learn the HTML/CSS/JS and other related knowledge, know what the Web standards, Div+css web/wap page pattern, know the difference between HTML5 and HTML4; understand some basic front-end just and JS framework (jquery, etc.);
Learn some basic JavaScript programming knowledge;
6. System Design:
Able to complete the basic design of small system, including simple database design, can complete basic: Browser-> nginx+php-> database Architecture design and development work, can support daily hundreds of thousands of to millions of traffic site development and maintenance work;
Phase II: Improvement phase (intermediate PHP Programmer)
Emphasis: Improve the skills for LNMP, and be able to have a more comprehensive and skilled use of LNMP.
Objective: To be able to build a LNMP environment anytime and anywhere, quickly complete routine configuration, and be able to trace and solve most of the problems encountered in the development and online environment;
Be able to undertake the architecture and development of the medium system independently, and be able to undertake the development of a medium-sized module in a large scale system;
1. Linux:
In the first phase of the foundation, the smooth use of the shell script to do a lot of automation work, Awk/sed/perl also operate well, can complete a lot of text processing and data statistics, and other work;
The basic ability to install most of the non-special Linux programs (including various libraries, packages, third-party dependencies, etc., such as MONGODB/REDIS/SPHINX/LUNCENE/SVN);
Learn about basic Linux services, know how to view Linux performance metrics data, know basic Linux problem tracking, and more.
2. Nginx:
On the basis of the first stage, understand the complex nginx configuration, including multi-core configuration, events, proxy_pass,sendfile/tcp_* configuration, know the relevant configuration and performance impact of timeout;
Know nginx Besides Web server, can also assume proxy server, reverse static server configuration, know basic Nginx configuration tuning, know how to configure permissions, compile a nginx extension to nginx;
Know the basic Nginx operating principle (Master/worker mechanism, epoll), know why Nginx performance than Apache performance and so on knowledge;
3. Mysql/mongodb:
In the first phase of the foundation, in the MySQL development, master a lot of tips, including conventional SQL optimization (group By/order by/rand optimization, etc.);
In addition to being able to build MySQL, it is also possible to back up MySQL data with hot and cold, as well as configure options that affect Innodb/myisam performance (such as Key_buffer/query_cache/sort_buffer/innodb_buffer_pool_ Size/innodb_flush_log_at_trx_commit etc.), also know how these options are configured to be of the appropriate value;
Also know some special configuration options, such as knowing how to build MySQL master-slave synchronization environment, know the difference between the Binlog_format;
Knowledge of MySQL's performance tracing, including slow_log/explain, etc., and can also know basic index establishment processing and so on;
Principle of understanding basic MySQL architecture (server+ storage engine), know basic Innodb/myisam index storage structure and different (clustered index, B-tree); Know basic INNODB transaction processing mechanism;
Learn most of the MySQL exception-handling scenarios (or know where to find the solution).
Conditions allow the situation, we recommend to understand the NoSQL representative of the MongoDB database, by the way compared with MySQL differences, at the same time be able to use security in the appropriate application of the MongoDB, know the basic PHP and MongoDB the combination of development.
4. Redis/memcached:
In most medium-sized systems will be involved in caching processing, so be sure to understand the basic cache;
Know the similarities and differences between Memcached and Redis and the application scene, can install the redis/memcached independently, understand some of the basic features and limitations of memcahed, such as the maximum value, know PHP and their use combination;
Redis Understand the basics and usage, understand the general data types, know what types of scenarios to apply, understand Redis transactions, and so on. The principle part, can probably understand memcached memory structure (slab mechanism), redis to understand commonly used data type bottom implementation storage structure (sds/chain list/skiplist/hashtable) and so on, by the way to understand Redis's affairs, RDB, AoF and other mechanisms are better
5. PHP:
In addition to the first phase of the capacity, installation configuration can be installed at random PHP and a variety of third-party extensions of the compiler installation configuration;
Learn about most of the configuration options and implications of PHP-FPM (such as max_requests/max_children/request_terminate_timeout configurations that affect performance), and know the difference between mod_php/fastcgi;
In PHP has been able to proficiency in a variety of basic technology, but also includes a variety of in-depth PHP, including a deep understanding of the PHP object-oriented/spl/grammatical aspects of the special features such as reflection;
The framework has read at least one of the general PHP MVC Framework Code, know the basic PHP framework internal implementation mechanism and design ideas;
In PHP development has been able to skillfully use the conventional design patterns to apply the development (abstract factory/single case/observer/command chain/strategy/adapter, etc. mode);
It is recommended that you develop your own PHP MVC framework to fully liberalize your development, deepen your understanding of the MVC pattern, and enable you to quickly upgrade your Business Project development.
Familiar with PHP's various code optimization methods, familiar with most of the PHP security aspects of the solution to deal with, familiar with the basic principles of PHP implementation of the mechanism (Zend Engine/extended basic work mechanism);
6. C + +:
began to dabble in a certain C + + language, be able to write basic C + + code, familiar with the basic C + + syntax (pointers, array operations, strings, general standard API) and data structure (linked list, tree, hash, queue) have a certain familiarity;
Linux under the C language development has a basic understanding of the concept, will be simple makefile file writing, can use a simple gcc/gdb program to compile simple debugging work;
Basic network programming is probably understood. (This is to lay the groundwork for a higher level)
7. Front End:
In the first phase of the foundation, familiar with the basic HTTP protocol (Protocol Code 200/300/400/500, basic HTTP interaction header);
Conditions allow you to write a slightly elegant html+css+javascript in depth, or you can roughly use some of the front-end frames (jquery/yui/extjs/requirejs/bootstrap, etc.);
If conditions permit, you can drill down into JavaScript programming, such as closure mechanisms, DOM processing, and further reading the jquery source for further study. (This item does not focus on learning unless it is interested in the front end)
8. System Design:
Able to design most of the medium-sized system of Web site architecture, database, basic PHP framework selection, performance test and troubleshooting, etc. to accomplish similar: Browser-> CDN (Squid)-> nginx+php-> Cache-> Database structure the basic design and development of Web site maintenance can support the development and maintenance of millions of to tens of millions of daily traffic basic website;
Phase III: Advanced stage (Advanced PHP programmer)
Emphasis: In addition to the basic LNMP procedures, can also be in a certain direction or field of in-depth study. (Depth dimension development)
Objectives: In addition to the completion of the basic PHP business development, but also to solve most of the in-depth and complex technical issues, and can independently design and complete the large-scale system design and development work;
Can independently hold into a certain technical direction, in this piece more professional. (for example, in MySQL, Nginx, PHP, Redis, and so on in any direction in-depth study)
1. Linux:
In addition to the second phase of the ability, under Linux in addition to the regular operation and performance monitoring tracking, but also the use of many advanced complex command to complete the work (watch/tcpdump/starce/ldd/ar, etc.), in the shell script, have been able to write more complex shell scripts (more than 500 lines) to help complete a lot of shell including backup, automated processing, monitoring and so on;
For Awk/sed/perl applications such as fire pure green, can operate control processing text statistical analysis of a variety of complex format data;
Some understanding of the Linux internal mechanism, the kernel module loading, startup error handling, and so there is a basic treatment, and some other related things also know, such as NFS, Disk Management, etc.;
2. Nginx:
In the second phase of the foundation, has been able to Nginx operation is very skilled, to Nginx more in-depth operations, such as monitoring, performance optimization, complex problem-handling, etc.
See personal interests, More aspects can be considered focus on the Nginx working principle part of the in-depth study, mainly in reading the source of the beginning, such as the specific master/worker work mechanism, nginx internal event processing, memory management and so on, and can learn nginx expansion of the development, You can customize some of your own private extensions;
at the same time you can have a certain degree of understanding of Nginx+lua, see if you can combine to apply a better model; this stage requires a deep understanding of the nginx principle and can be considered as an in-depth professional in nginx direction.
3. Mysql/mongodb:
On the basis of the second phase, in the MySQL application, in addition to the previous basic SQL optimization, but also in the completion of a number of complex operations, such as the import and export of large quantities of data, On-line mass data changes table structure or additions and deletions of index fields, etc. high-risk operations;
In addition to the installation configuration, has been able to deal with more complex MySQL problems, such as the tracking of various issues, master-Slave synchronization delay problem resolution, the inter-computer synchronization data program, MySQL high availability architecture, etc. To MySQL application level, the key technology of MySQL is familiar, such as transaction mechanism (isolation level, lock, etc.), the trigger, zoning and other technologies have a certain understanding and application; For MySQL performance, there are disk optimizations (SAS migrate to SSDs), Server optimizations (memory, Server itself configuration), other core performance tuning options in addition to phase two (Innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_ Timeout etc.), the connection pool software selection application, the show * (Show Status/show Profile) class of the operational statements have in-depth understanding, to complete most of the performance problem tracking;
MySQL Backup technology in-depth knowledge, including disaster recovery, Deep understanding of Binlog, hot and cold backup, multiple IDC backup, etc.
in the MySQL principle, there is more understanding, such as the working mechanism of MySQL began to read some of the source code, such as the master-slave Synchronization (replication) Technology source code learning, or to a storage engine (myisam/ INNODB/TOKUDB) and so on the source of learning to understand, if the conditions allow, you can refer to the CSV engine to develop their own simple storage engine to save some data, enhance the understanding of MySQL; In this process, if you are interested, you can also consider the direction of the DBA.
MongoDB level, you can consider, for example, in writing less read the situation began to apply MongoDB online, or to do some of the data analysis processing operations, the specific scene can follow the work, but the core is to better understand the Rmdbs and NoSQL different scenarios below the application, If conditions or interests permit, you can begin to learn more about MongoDB's working mechanism.
4. redis/memcached:
In the second phase of the foundation, can be more in-depth application and learning. Because memcached is not particularly complex, it is recommended to read the source code, especially the Memory Management section, to facilitate in-depth understanding; The
Redis part, can do some more complex data structure application (Zset to do leaderboard sort operation/ Transactions are used to ensure that atomicity is used in the case of a second kill scenario.
More involving AOF synchronization mechanism of learning applications, design a highly available Redis application architecture and clustering;
It is recommended to learn more about the Redis source code, The accumulation of knowledge in the second phase can be applied, especially can read the core event management, memory management, internal core data structure, such as adequate learning to understand. If you are interested in permitting, you can become a very professional user in Redis.
5. PHP:
As the basic core skills, we need to have more in-depth learning and application on the basis of the second phase. From the basic code application above, can solve in PHP development encountered 95% of problems, understand most of the PHP skills;
to most of the PHP framework can be quickly used in a day, and understand the pros and cons of the mainstream PHP framework, can quickly facilitate the development of the project to do technology selection In configuration, in addition to the regular second phase of knowledge, will understand some of the comparison of the partial door configuration options (php auto_prepend_file/auto_append_file), Includes some of the complex advanced configurations and principles in the extensions (such as the Memcache.hash_strategy in the memcached extended configuration, apc.mmap_file_mask/apc.slam_defense/in the APC extended configuration) Apc.file_update_protection or something like that.
The working mechanism of PHP is better understood, including php-fpm work mechanism (such as php-fpm to open process number calculation and principle under different configuration machines), and have a basic familiarity with Zend engine (VM /gc/stream processing), read the basic PHP kernel source code (or read related articles), the PHP internal mechanism of most of the core data structure (basic type/array/object) implementation of understanding, for the core infrastructure (zval/hashtable/ GC) has in-depth learning, can carry out basic PHP expansion development, understand some of the advanced knowledge of extended development (minit/rinit, etc.), familiar with PHP and Apache/nginx different ways of communication interaction details (mod_php/fastcgi);
In addition to developing PHP extensions, you can consider learning to develop Zend extensions and learn about PHP from the bottom up.
6. C + +:
On the basis of the second phase, can have more in-depth learning and understanding of C/n + + language, can complete the development of small and medium C/a system;
In addition to the basic second phase of the basis of C + + syntax and data structure, can also learn some special data structures (B-tree/rb-tree/skiplist/lsm-tree/trie-tree, etc.) to facilitate the needs of special work; in system programming, familiar with multiple processes, Multithreading programming;
Multi-process scenarios to understand how most processes communicate with each other, flexible choice of communication mode (shared memory/semaphore/pipeline, etc.); multithreading can solve the problem of lock conflict, and can do the development and debugging of multithreaded programs; be familiar with the network programming, understand the multi-process model/multithreading model /asynchronous Network IO Model, familiar with the principles and differences of different asynchronous network IO models (SELECT/POLL/EPOLL/IOCP, etc.), and familiar with the common asynchronous framework (ace/ice/libev/libevent/libuv/ Boost.asio, etc.) and use, if leisure can also look at some domestic development of their own libraries (such as Muduo), and can design a high concurrent program architecture (Leader-follow/master-worker, etc.);
Understand the problems in most of the C + + back-end server development (memory management, log printing, high concurrency, front-end communication Protocol, service monitoring), knowing all backend service RPC communication problems (STRUCT/HTTP/THIRFT/PROTOBUF, etc.) ; can be more familiar with GCC and gdb to develop the compiler debug program, after the core of the online program can quickly trace the tracking problem; Common module development, you can accumulate or develop some common tools or libraries (such as asynchronous network framework, log library, memory pool, thread pool, etc.), However, after the development of the use of caution, the province of the buried pit to chase bugs;
7. Front End:
Get an in-depth understanding of the HTTP protocol, including the specific protocol code for each detail protocol and the underlying reason, for example 302 static file cache, 502 is nginx behind PHP hang up and so on; In addition to the previous front-end aspects of the various framework application integration capabilities, the front-end aspects of learning if interested can be more in-depth, the expression form is, You can develop your own front-end frameworks like jquery, or develop a more trivial test of JavaScript, such as a rich text editor;
8. Other areas of language learning:
On the basis of the php/c/c++ language has a basic accumulation, suggest at the current stage can try to learn different programming languages, see personal interests, scripting language can learn Python/ruby and so on, functional programming language can try Lisp/haskell/scala/ Erlang and so on, static language can try Java/golang, statistical analysis can understand the R language, if you want to change the perspective of the back-end business, you can try Node.js and the previous mentioned with the Nginx Nginx_lua. Learning different languages is mainly to improve their horizons and solve the problem of differences in means, for example, you will understand that in addition to process/thread, there is a lightweight coprocessor, for example, under the Cross machine communication scenario, Erlang's solution is surprisingly simple, for example, if you do not want to choose C + +, there are similar efficient erlang/ Golang can be used, etc., mainly to enhance the field of vision.
9. Other Professional Direction study:
In this stage, in addition to the basic LNMP skills, will consider a number of other areas of knowledge learning, these are available, to see personal interests and long-term goal direction. There are many areas where the situation can be selected, for example, cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, etc., applied to statistics, personalized recommendation), Natural language processing (Chinese participle, etc.), search engine technology, graphic images, speech recognition and so on. In addition to these tall, there are many partial engineering can learn places, such as high-performance systems, mobile development (Android/ios), computer security, embedded systems, hardware and other directions.
10. System Design:
System design on the basis of the second stage, can apply the master of experience skills, design a more complex medium and large system, can solve most of the various complex system problems, complete similar browser-> CDN-> load balanced-> Access layer-> nginx+php- > Business Cache-> Database-> complex back-end RPC interactions (storage backend, logical backend, back-end of cheat, external service)-> more complex business of back-end purple, can support the normal development and maintenance of tens of millions of to hundreds of millions of traffic websites every day.
Phase IV: Architecture phase (architect)
Phase Fifth: Expert stage (direction field expert)
Phase sixth: The stage of the scientists
According to "Night Passers-by" blog adaptation.