PHP Programmer's technical Growth plan, PHP programmer planning
According to many PHP/LNMP programmer's development trajectory, combined with personal experience, abstract a lot of programmers on the future of the mist, especially the blind and flustered technical learning, a simple comb this each stage of the PHP Programmer's technical requirements, to help a lot of PHP programs to set learning growth goals.
This article according to 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 setting, and all the settings are very specific and clear, may make people feel uncomfortable, please understand only represents opinion. (Future technical changes are not covered)
First stage: Basic stage (basic PHP programmer)
Focus: LNMP Skilled (core is the basic operation of the installation configuration)
Objective: To complete basic LNMP system installation, simple configuration and maintenance, to be able to do basic PHP development of simple system, to support the development of a PHP function module in PHP medium-sized system .
Time: The time to complete this stage varies from person to person, and some grow up almost half a year on the past, growing slowly two or three years also have.
1.Linux:
Basic command, operation, 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 enable NGINX+PHP_FPM to work smoothly.
3.MySQL:
Will build MySQL, know the basic MySQL configuration options, know the difference between InnoDB and MyISAM, know the different configuration options for InnoDB and MyISAM two engines;
Know the difference between the basic two engines and choose the difference above; be able to build a MySQL database by hand, and configure the normal and stable operation of coding, etc. the core idea is to be able to build a running MySQL database.
4.PHP:
Basic syntax array, string, database, XML, Socket, gd/imagemgk image processing, and so on; be familiar with the various APIs (MYSQL/MYSQLI/PDO) linked to MySQL, and know the solution to various coding problems Know the regular and familiar PHP framework (thinkphp, Zendframework, Yii, YAF, etc.);
Learn how basic MVC works and why, a little bit about 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 the style, can complete the small system development and the medium system one module development work.
5. Front End:
If the condition time allows, you can properly learn the HTML/CSS/JS and other related knowledge, know what web standards, Div+css web/wap page pattern, know the difference between HTML5 and HTML4; understand some basic frontend just and JS framework (jquery and the like);
Learn some basic JavaScript programming knowledge;
6. System Design:
Can complete the basic design of the small system, including the simple database design, can complete the basic: Browser---nginx+php database architecture design and development work, can support hundreds of thousands of to millions of daily traffic website development and maintenance work;
Phase II: Improvement phase (intermediate PHP Programmer)
Focus: Improve the skills for LNMP, can be more comprehensive to the LNMP have skilled application.
Objective: To build a LNMP environment anytime, anywhere, to quickly complete the general configuration, to track down most of the problems encountered in the development and online environment;
Be able to undertake the architecture and development of the medium-sized system independently, and be able to undertake the development of a medium-sized module in a large system;
1. Linux:
On the basis of the first stage, we can use the shell script to accomplish a lot of automation work smoothly, and the Awk/sed/perl is also very good, can complete a lot of text processing and data statistics work;
Basic ability to install most 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:
In the first stage of the foundation, understand the complex nginx configuration, including multi-core configuration, events, proxy_pass,sendfile/tcp_* configuration, know the time-out and other related configuration and performance impact;
Know that Nginx in addition to Web server, can also assume the proxy server, reverse static server configuration, know the 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 is better than Apache and other knowledge;
3. Mysql/mongodb:
In the first stage of the foundation, in the MySQL development, master a lot of tips, including regular SQL optimization (group By/order by/rand optimization, etc.);
In addition to being able to build MySQL, you can back up MySQL data in 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 many values these options are configured to be appropriate;
Also know some special configuration options, such as know how to build MySQL master-slave synchronization of the environment, know the differences between the various binlog_format;
Know MySQL performance tracing, including slow_log/explain and so on, also can know the basic index establishment processing knowledge;
The principle of understanding the basic MySQL architecture (server+ storage engine), know the basic Innodb/myisam index storage structure and different (clustered index, B-tree); know the basic INNODB transaction processing mechanism;
Learn about the handling of most MySQL anomalies (or know where to find a solution).
Conditions allow, it is recommended to understand the NoSQL representative MongoDB database, by contrast with MySQL differences, while being able to safely use MongoDB in the appropriate application scenarios, know the basic PHP and MongoDB combination development.
4. Redis/memcached:
In most of the medium-sized system will be involved in the cache processing, so be sure to understand the basic cache;
Know the similarities and differences between Memcached and Redis and the application scenario, can install redis/memcached independently, understand some basic features and limitations of memcahed, such as the largest value values, know PHP and their use of the combination;
Redis understands the basics of how and how to work, understand the general data types, know what types of scenarios to use, learn about Redis transactions, and more. Principle part, can understand the memory structure of memcached (slab mechanism), Redis understand the common data type underlying implementation of the storage structure (sds/linked list/skiplist/hashtable), and so on, by the way, know the Redis transaction, RDB, AoF and other mechanisms better
5. PHP:
In addition to the first phase of the ability, installation configuration can be arbitrarily installed PHP and a variety of third-party extensions of the compilation installation configuration;
Understand most of the configuration options and meanings of php-fpm (such as max_requests/max_children/request_terminate_timeout that affect performance) and know the difference between mod_php/fastcgi;
In PHP has been able to master a variety of basic technology, but also include a variety of in-depth PHP, including the PHP object-oriented deep understanding of the/spl/grammatical aspects of the special features such as reflection and so on;
In the framework has been read at least one of the regular 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 pattern to apply the development (abstract Factory/SINGLETON/Observer/Command chain/strategy/adapter and other modes);
It is recommended that you develop your own PHP MVC framework to fully liberalize your development, allow yourself to understand the MVC pattern in depth, and allow yourself to upgrade quickly in business Project development.
Familiar with all kinds of PHP code optimization methods, familiar with most PHP security problem solving, familiar with basic PHP execution mechanism principle (Zend Engine/extension basic working mechanism);
6. C + +:
began to dabble in a certain C + + language, be able to write basic C + + code, familiar with basic C + + syntax (pointers, array operations, strings, general standard APIs) and data structures (linked lists, trees, hashes, queues) are familiar;
C language development below the Linux basic understanding concept, will be simple makefile file writing, can use simple GCC/GDB program to compile simple debugging work;
Have a rough idea of basic network programming. (This is to lay the groundwork for a higher level)
7. Front End:
On the basis of the first stage, familiarize yourself with the Basic HTTP protocol (Protocol Code 200/300/400/500, basic HTTP interaction header);
Conditions allow, can be in-depth to write a slightly elegant html+css+javascript, or can be roughly simple to use some front-end framework (jquery/yui/extjs/requirejs/bootstrap, etc.);
If conditions permit, you can learn more about JavaScript programming, such as the closure mechanism, DOM processing, and more in-depth reading of the jquery source to do in-depth learning. (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 Web site architecture, database, basic PHP framework selection, performance testing and processing, etc. can be completed similar to: browser----CDN (SQUID)------cache-------database structure of the Web site design and development maintenance , can support millions of to tens of thousands of daily traffic basic website development and maintenance work;
Phase III: Advanced stage (Advanced PHP programmer)
Emphasis: In addition to the basic LNMP program, you can also have in-depth learning in a certain direction or field. (Depth dimension development)
Objective: In addition to the basic PHP business development, but also can solve most of the deep complex technical problems, and can be independently designed to complete the large-scale system design and development work;
I can independently hold into a technical direction, in this piece of comparative professional. (such as MySQL, Nginx, PHP, Redis, and so on in any direction in-depth research)
1. Linux:
In addition to the second phase of the ability, under Linux in addition to the general operation and performance monitoring tracking, but also can use a lot of advanced complex commands to complete the work (watch/tcpdump/starce/ldd/ar, etc.); in Shell scripting, has been able to write more complex shell scripts (more than 500 lines) to assist in a number of shells including backup, automated processing, monitoring and other work of the shell;
For Awk/sed/perl and other applications such as fire pure green, able to manipulate the arbitrary control processing text statistical analysis of various complex formats of data;
There is some understanding of the internal mechanism of Linux, the kernel module loading, startup error handling and so on have a basic processing, but also some other related things, such as NFS, Disk Management and so on;
2. Nginx:
In the second stage of the foundation, has been able to operate the nginx very skilled, can be more in-depth operation of nginx, such as monitoring, performance optimization, complex problem processing and so on;
look at personal interests, More aspects can be considered to focus on the work principle of nginx in-depth study, mainly in the reading source, such as the specific master/worker work mechanism, nginx internal event processing, memory management and so on, and can learn the development of Nginx extension, You can customize some of your own private extensions,
at the same time can have a certain degree of understanding of the Nginx+lua to see if it can be combined to apply a better model, this stage of the requirements of the nginx principle of deep understanding, can be considered as the depth of the nginx direction of professional.
3. Mysql/mongodb:
In the second stage of the Foundation, in the MySQL application, in addition to the previous basic SQL optimization, but also in the completion of some complex operations, such as large quantities of data import and export, High-risk operations such as changing the table structure of large quantities of data on the line or adding or removing index fields, etc.
in addition to the installation configuration, has been able to handle more complex MySQL problems, such as the tracing of various problems, master-Slave synchronization delay problem resolution, cross-room synchronization data scheme, MySQL high-availability architecture, etc. are involved in understanding For MySQL application level, the key technology of MySQL is familiar with, such as the transaction mechanism (isolation level, lock, etc.), the trigger, partition and other technologies have a certain understanding and application; For MySQL performance, there are disk optimizations (SAS migration to SSD), Server optimizations (memory, Server itself), in addition to the other core performance tuning options in the two phase (Innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_ Timeout, etc.), connection pooling software selection application, in-depth understanding of the action statements of the show Status/show profile class, and the ability to perform most of the performance problem tracing;
MySQL backup technology in-depth familiarity, including disaster recovery, Deep understanding of Binlog, hot and cold backup, multi-IDC backup, etc.
in the MySQL principle, there is more understanding, such as the MySQL working mechanism to start reading some source code, such as the master-slave Synchronization (replication) technology source learning, or a storage engine (myisam/ INNODB/TOKUDB) and so on the source learning understanding, if the conditions allow, you can refer to the CSV engine to develop its 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 the case of writing less read more to start the online application of MongoDB, or do some online data analysis processing operations, the specific scenario can follow the work, but the core is to better understand the different scenarios of Rmdbs and NoSQL applications, If the conditions or interests allow, you can begin to learn more about MongoDB's working mechanism.
4. redis/memcached:
In the second stage of the foundation, can be more in-depth application and learning. Because memcached is not particularly complex, it is suggested that the source code can be read, especially the memory management part, to facilitate in-depth understanding; The
Redis section can do more complex data structure applications (Zset to do leaderboard sorting operations/ Transaction processing is used to ensure atomicity in the use of the second-class scene application, such as using the operation of the
more involved in synchronization mechanisms such as aof learning applications, design a highly available Redis application architecture and cluster;
suggest that you can learn more about Redis's source code, The knowledge accumulated in the second stage can be applied, especially to read the core event management, memory management, internal core data structure and so on to learn a little bit. If interest permits, you can become a very professional user of Redis.
5. PHP:
As a basic core skill, we need to have more in-depth learning and application on the basis of the second stage. From the basic code application above, can solve 95% problems in PHP development, understand most of the skills of PHP,
for most of the PHP framework can be quickly used in a day, and understand the pros and cons of various mainstream PHP framework, can quickly facilitate project development to do technology selection In the configuration, in addition to the general knowledge of the second phase, you will learn some of the more biased gate configuration options (PHP auto_prepend_file/auto_append_file), Includes some complex advanced configurations and principles in the extension (such as the memcache.hash_strategy in the memcached extension configuration, apc.mmap_file_mask/apc.slam_defense/in the APC extended configuration Apc.file_update_protection and so on); The
has a good understanding of how PHP works, including PHP-FPM working mechanisms (such as PHP-FPM to open process count and rationale under different configuration machines), and a basic familiarity with the Zend engine (VM /gc/stream processing), read the basic PHP kernel source code (or read the related article), 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) with in-depth learning, ability to perform basic PHP extension development, understanding of some advanced knowledge of extended development (minit/rinit, etc.), familiarity with PHP and apache/nginx different communication interaction details (mod_php/fastcgi);
In addition to developing PHP extensions, consider learning to develop Zend extensions to understand PHP from a lower level.
6. C + +:
On the basis of the second stage, we can have a deeper understanding of the C + + language, and be able to develop the small and medium C + + system.
In addition to the basic second stage of the base C + + syntax and data structure, you 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 multi-process, multithreaded programming;
Multi-process situation under the understanding of most of the multi-process communication mode, the flexibility to choose the means of communication (shared memory/semaphore/pipeline, etc.); Multithreaded programming can solve the problem of lock conflict, and be able to develop and debug multi-thread program, and familiar with the network programming, understand the multi-process model/multi-threading model /asynchronous Network IO Model for differentiation and selection, familiarity with the principles and differences of different asynchronous network IO models (SELECT/POLL/EPOLL/IOCP, etc.), and familiarity with common asynchronous frameworks (ace/ice/libev/libevent/libuv/ Boost.asio, etc.) and use, if leisure can also look at some of the domestic development of their own libraries (such as Muduo), but also can design a high concurrent program architecture (Leader-follow/master-worker, etc.);
Learn about the most problems in the development of the most-C + + back-end server (memory management, log printing, high concurrency, front-end communication Protocol, service monitoring), knowing the various backend services RPC communication issues (STRUCT/HTTP/THIRFT/PROTOBUF, etc.) , can be more familiar with the use of GCC and GDB to develop the compilation of debugging procedures, the online program core can be quickly traced after the tracking problem; Common module development, can accumulate or develop some common tools or libraries (such as asynchronous network framework, log library, memory pool, thread pool, etc.), However, the development of whether to use caution, the province of the buried pit to chase the bug;
7. Front End:
In-depth understanding of the HTTP protocol (including the specific protocol code and the reasons behind the detailed protocol, such as 302 static file cache, 502 is the nginx behind the PHP hang); In addition to the front-end aspects of the various framework application integration capabilities, the front-end of the study if interested can be more in-depth, the manifestation is, You can develop some kind of jquery-like front-end framework yourself, or develop a rich text editor and more trivial test JavaScript skill;
8. Other areas of language learning:
In the basic php/c/c++ language aspect has the fundamental accumulation, the suggestion in the current stage may try to learn the different programming language, sees the personal interest hobby, the script language can learn python/ruby and so on, the functional programming language may try Lisp/haskell/scala/ Erlang and the like, static language can try Java/golang, data statistical analysis can understand the R language, if you want to change perspective to do back-end business, you can try node. js and the previous mentioned with the Nginx combination of Nginx_lua and so on. Learning different languages is mainly about raising your horizons and solving the differences between the methods, such as understanding the process/thread, as well as the lightweight association, 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, look at personal interests and long-term goal direction. At present, the situation can choose more areas, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, application to statistics, personalized recommendations), Natural language processing (Chinese word segmentation, etc.), search engine technology, graphic images, speech recognition and so on. In addition to these tall, there are many partial engineering aspects can be learned, 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 mastered experience and skills, design a more complex medium and large system, can solve most of the problems of complex systems on the line, complete similar browser----CDN---load balancer, access layer, and so on nginx+php- > Business Cache--database--Complex backend RPC interaction (storage backend, logical back end, anti-cheat backend, external services)--more complex services for back-end Jiangzi, capable of supporting the normal development and maintenance of tens of millions of to hundreds of millions of traffic sites per day.
Stage Four: Architecture phase (architect)
Fifth stage: Expert stage (direction field expert)
Stage Sixth: The scientist phase
According to the "Night Passers-by" blog adaptation.
http://www.bkjia.com/PHPjc/1113692.html www.bkjia.com true http://www.bkjia.com/PHPjc/1113692.html techarticle PHP Programmer's technical Growth planning, PHP programmer planning According to understand a lot of PHP/LNMP programmer's development trajectory, combined with personal experience, abstract a lot of programmers on the future of Mist, ...