Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to make the technical growth of PHP programmers

2025-01-21 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/03 Report--

This article mainly explains "how to make PHP programmers grow technologically". The content of the explanation is simple and clear, and it is easy to learn and understand. Please follow the editor's train of thought to study and learn "how to make PHP programmers grow".

Phase 1: basic stage (basic PHP programmer)

Key point: be proficient in LNMP (the core is the basic operation of installation and configuration)

Goal: to be able to complete the basic LNMP system installation, simple configuration and maintenance; to be able to do basic simple system PHP development; to be able to support the development of a PHP functional module in a medium-sized PHP system.

Time: the time to complete this stage varies from person to person. Some people grow faster than half a year, and there are also two or three years of slow growth.

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:

To be able to install and configure nginx+php, know the basic nginx core configuration options, know the basic configuration such as server/fastcgi_pass/access_log, the goal is to make nginx+php_fpm work smoothly.

3.MySQL:

Be able to build your own mysql, know the basic mysql configuration options, know the difference between innodb and myisam, and know the different configuration options for InnoDB and MyISAM engines

Know the basic differences between the two engines and choose the above differences; be able to manually compile and build a MySQL database and configure the coding and other normal and stable operation; the core purpose is to build a runnable MySQL database.

4.PHP:

Basic syntax array, string, database, XML, Socket, GD/ImageMgk picture processing, etc.; familiar with all kinds of api (mysql/mysqli/PDO) linked to MySQL operation, know how to solve various coding problems; know the PHP framework (ThinkPHP, Zendframework, Yii, Yaf, etc.)

Understand how basic MVC works and why, and a little bit about the differences between different PHP frameworks; you can quickly learn a MVC framework. Be able to know 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 a module in a medium-sized system.

5. Front end:

If the conditional time permits, you can properly learn HTML/CSS/JS and other related knowledge, know what web standard, div+css 's web/wap page pattern, know the difference between HTML5 and HTML4; understand some basic front end just and JS framework (jQuery, etc.)

Know some basic knowledge of JavaScript programming

6. System design:

Able to complete the basic design of small systems, including simple database design, to complete the basic design and development of browser-> Nginx+PHP-> database architecture, and to support the development and maintenance of websites with hundreds of thousands to millions of traffic every day.

Phase 2: improvement phase (intermediate PHP programmer)

Focus: improve the skills for LNMP, can be more comprehensive proficient in the application of LNMP.

Goal: to be able to build a LNMP environment anytime, anywhere, and quickly complete routine configuration; to be able to track and solve most of the problems encountered in the development and online environment

Be able to independently undertake the architecture and development of medium-sized systems; be able to undertake the development of a medium-sized module in large-scale systems

1. Linux:

On the basis of the first stage, Shell scripts can be used fluently to accomplish 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 metrics data, know basic Linux problem tracking, and so on.

2. Nginx:

On the basis of the first phase, understand the more complex Nginx configuration; including multicore configuration, events, proxy_pass,sendfile/tcp_* configuration, know the timeout and other related configuration and performance impact

Know that in addition to web server, nginx can also undertake proxy server, reverse static server configuration, etc.; know basic nginx configuration tuning; know how to configure permissions and compile a nginx extension to nginx

Know the basic nginx operation principle (master/worker mechanism, epoll), know why nginx performance is better than apache performance, etc.

3. MySQL/MongoDB:

On the basis of the first stage, I have mastered a lot of tips in MySQL development, including conventional SQL optimization (group by/order by/rand optimization, etc.)

In addition to being able to build MySQL, you can also back up MySQL data hot and cold, know the configuration 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.), and know how appropriate these options are configured.

In addition, we also know some special configuration options, such as how to build a master-slave synchronization environment of mysql, and know the difference of each binlog_format.

Know the performance tracking of MySQL, including slow_log/explain, etc., and also know the basic knowledge of indexing processing.

Principle understanding of basic MySQL architecture (Server+ storage engine), basic InnoDB/MyISAM index storage structure and differences (clustered index, B-tree); basic InnoDB transaction mechanism

Learn how to handle most MySQL exceptions (or know where to find them).

If conditions permit, it is recommended to know the representative MongoDB database of NoSQL, by the way, to compare the difference with MySQL, and to be able to use MongoDB safely and cautiously in appropriate application scenarios, knowing the combination of basic PHP and MongoDB development.

4. Redis/Memcached:

Caching must be involved in most medium-sized systems, so be sure to understand basic caching

Know the similarities and 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 that PHP is combined with their use

Redis understands basic working principles and usage, general data types, what types are applied in what scenarios, Redis transactions, and so on. In the principle part, you can have a general understanding of the memory structure of Memcached (slab mechanism), and redis will understand the underlying implementation storage structure of common data types (SDS/ linked list / SkipList/HashTable). By the way, it is better to understand the transaction, RDB, AOF and other mechanisms of Redis.

5. PHP:

In addition to the capabilities of the first phase, the installation configuration is free to install the compilation and installation configuration of PHP and various third-party extensions

Understand most of the configuration options and implications of php-fpm (such as configurations that affect performance, such as max_requests/max_children/request_terminate_timeout), and know the differences between mod_php/fastcgi

Already proficient in a variety of basic technologies in PHP, including a variety of in-depth PHP, including a deep understanding of PHP object-oriented / special features at the syntax level of SPL/, such as reflection

In terms of framework, I have read the code of at least one regular PHP MVC framework, and know the internal implementation mechanism and design ideas of the basic PHP framework.

Have been proficient in using conventional design patterns in PHP development (abstract factory / singleton / observer / command chain / policy / adapter, etc.)

It is recommended that you develop your own PHP MVC framework to fully liberalize development, give yourself an in-depth understanding of MVC patterns, and enable you to quickly upgrade in business project development.

Familiar with various code optimization methods of PHP, familiar with the solution of most PHP security problems; familiar with the basic mechanism of PHP execution (Zend engine / extension basic working mechanism)

6. C _ blank

Start to dabble in some Cmax Clover + language, be able to write basic Cmax codes, and be familiar with basic Cmax syntax (pointers, array operations, strings, regular standard API) and data structures (linked lists, trees, hashes, queues).

Have a basic understanding of C language development under Linux, can write simple makefile files, and can use simple GCC/GDB programs to compile and debug easily.

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 phase, familiar with the basic HTTP protocol (protocol code 200, 300, 400, 500, basic HTTP interaction header)

If conditions permit, you can write a slightly elegant HTML+CSS+JavaScript in depth, or you can roughly simply use some front-end frameworks (jQuery/YUI/ExtJS/RequireJS/BootStrap, etc.)

If conditions permit, you can learn in-depth JavaScript programming, such as closure mechanism, DOM processing; you can read the jQuery source code to do in-depth study. (this item does not focus on learning, unless you are interested in the front end)

8. System design:

Be able to design website architecture, database and basic PHP framework selection of most medium-sized systems; perform performance testing and troubleshooting; be able to complete basic design, development and maintenance of websites with similar structure: browser-> CDN (Squid)-> Nginx+PHP-> cache-> database structure; can support the development and maintenance of basic websites with millions to tens of millions of traffic every day.

Phase 3: advanced stage (Senior PHP programmer)

Important: in addition to the basic LNMP program, you can also have in-depth study in a certain direction or field. (development of depth dimension)

Goal: in addition to being able to complete the basic PHP business development, it can also solve most deep and complex technical problems, and can independently design and complete medium and large-scale system design and development work.

I can independently hold in a certain technical direction, and I am more professional in this area. (for example, in-depth research in any direction of MySQL, Nginx, PHP, Redis, etc.)

1. Linux:

In addition to the capabilities of the second phase, in Linux, in addition to regular operations and performance monitoring tracking, you can also use many advanced and complex commands (watch/tcpdump/starce/ldd/ar, etc.); in terms of shell scripts, you have been able to write more complex shell scripts (more than 500 lines) to assist in a lot of shell, including backup, automated processing, monitoring, etc.

It is already perfect for applications such as awk/sed/perl, and can operate and control text statistics and analyze data in various complex formats at will.

Have some understanding of the internal mechanism of Linux, basic handling of kernel module loading, startup error handling, etc., as well as some other related things, such as NFS, disk management, etc.

2. Nginx:

On the basis of the second stage, we have been able to operate Nginx very skillfully, and can carry out more in-depth operation and maintenance of Nginx, such as monitoring, performance optimization, complex problem handling, and so on.

If you look at your personal interests, you can consider focusing on the in-depth study of how Nginx works, mainly at the beginning of reading the source code, such as specific master/worker working mechanism, Nginx internal event handling, memory management, etc. At the same time, you can learn the development of Nginx extensions and 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 with the application of a better model; the requirement of this stage is an in-depth understanding of the principles of Nginx, you can consider becoming an in-depth professional in the direction of Nginx.

3. MySQL/MongoDB:

On the basis of the second stage, in MySQL applications, in addition to the previous basic SQL optimization, we can also complete some complex operations, such as import and export of large quantities of data, changing table structure of online large quantities of data, adding and deleting index fields, and other high-risk operations.

In addition to installation and configuration, it has been able to handle more complex MySQL problems, such as tracing of various problems, master-slave synchronization delay solution, cross-room synchronization data solution, MySQL high availability architecture, etc.; at the application level of MySQL, I am familiar with the core key technologies of MySQL, such as transaction mechanism (isolation level, lock, etc.), trigger, partition, etc. In terms of MySQL performance, there are disk optimization (SAS migration to SSD), server optimization (memory, server configuration), other core performance optimization options (innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout, etc.), connection pooling software selection and application, and in-depth understanding of show * (show status/show profile) operation statements. Be able to trace most of the performance problems

In-depth knowledge of MySQL backup technology, including disaster recovery, in-depth understanding of Binlog, hot and cold backup, multi-IDC backup, etc.

Learn more about the principle of MySQL, 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 and understanding the source code of a storage engine (MyISAM/Innodb/TokuDB), etc. If conditions permit, you can refer to CSV engine to develop your own simple storage engine to save some data and enhance your understanding of MySQL. In this process, if you are interested, you can also consider developing towards DBA.

At the MongoDB level, you can consider, for example, to start using MongoDB online when writing less and reading more, or to do some online data analysis and processing operations. Specific scenarios can be done according to the work, but the core is to better understand the applications under different scenarios of RMDBS and 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, we can apply and learn more deeply. Because Memcached is not particularly complex, it is recommended that you can read the source code, especially the memory management part, to facilitate in-depth understanding

In the Redis part, you can do more applications with complex data structures (zset to do ranking operations / transactions to ensure atomicity in second-kill scenarios, etc.)

It mostly involves the learning and application of synchronization mechanisms such as aof, and designs a highly available Redis application architecture and cluster.

It is suggested that you can take an in-depth study of the Redis source code, the knowledge accumulated in the second phase can be applied, especially you can read, including core event management, memory management, internal core data structure and so on. If your interest permits, you can become a very professional user of Redis.

5. PHP:

As the basic core skills, we need to have more in-depth study and application on the basis of 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 skills of PHP.

Can quickly get started with most of the PHP frameworks within a day, and understand the advantages and disadvantages of various mainstream PHP frameworks, which can quickly and easily make technology selection in project development. In terms of configuration, in addition to the general knowledge of the second phase, you will learn about some partial configuration options (php auto_prepend_file/auto_append_file), including some complex advanced configurations and principles in extensions (such as memcache.hash_strategy in memcached extension configuration, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection in apc extension configuration, etc.)

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 started by php-fpm under different configuration machines), basic familiarity with zend engine (vm/gc/stream processing), basic PHP kernel source code (or related articles), and understanding of most of the core data structures (basic types / Array/Object) of PHP internal mechanisms. In-depth knowledge of core infrastructure (zval/hashtable/gc) Be able to do basic PHP extension development, understand some intermediate and advanced knowledge of extension development (minit/rinit, etc.), be familiar with the details of different communication and interaction between php and apache/nginx (mod_php/fastcgi)

In addition to developing PHP extensions, consider learning to develop Zend extensions to learn about PHP from a lower level.

6. C _ blank

On the basis of the second stage, we will be able to have a more in-depth study and understanding of the Cpicket + language, and be able to complete the development of the small and medium-sized Cpicket + system.

In addition to the basic second phase of the basic 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, multi-thread programming

Under the multi-process situation, we can understand the communication mode between most multi-processes, and can flexibly choose the communication mode (shared memory / semaphore / pipeline, etc.); multithreaded programming can solve the problem of lock conflict well, and can carry on the development and debugging of multithreaded programs. At the same time, I am familiar with network programming, understand the differences and selection of multi-process model / multi-thread model / asynchronous network IO model, be familiar with the principles and differences of different asynchronous network IO models (select/poll/epoll/iocp, etc.), and be familiar with common asynchronous frameworks (ACE/ICE/libev/libevent/libuv/Boost.ASIO, etc.) and their use. If you have spare time, you can also take a look at some domestic libraries (such as muduo). At the same time, it can design a high concurrency program architecture (leader-follow/master-worker, etc.)

Understand most of the problems in Server development (memory management, log printing, high concurrency, front and back end communication protocols, service monitoring), and know the RPC communication problems of various back-end services (struct/http/thirft/protobuf, etc.); can be more familiar with the use of GCC and GDB to develop compiling and debugging programs, and can quickly trace and solve problems when the online program core is dropped 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.). However, you should be careful whether to apply it after development, so as to save the burial hole to chase bug.

7. Front end:

In-depth understanding of the HTTP protocol (including the special protocol codes of various detailed protocols and the reasons behind them, such as 302 static files are cached, 502 is the failure of php behind nginx, etc.) In addition to the previous front-end application integration capabilities of various frameworks, front-end learning can be more in-depth if you are interested, in the form of developing some front-end frameworks like jQuery or developing a rich text editor to test JavaScript skills.

8. Other areas of language learning:

There is a basic accumulation in the basic PHP/C/C++ language. It is suggested that at the current stage, you can try to learn different programming languages, depending on your personal interests, scripting languages can learn Python/Ruby, functional programming languages can try Lisp/Haskell/Scala/Erlang, static languages can try Java/Golang, data statistical analysis can understand R language, if you want to do back-end business from a different perspective. You can try Node.js and Nginx_Lua combined with Nginx mentioned earlier. Learning different languages is mainly to improve your vision and differences in problem-solving methods, such as understanding that there are lightweight collaborations in addition to processes / threads; for example, in cross-machine communication scenarios, the Erlang solution is surprisingly simple; for example, if you do not want to choose C _ Erlang/Golang +, there are similar efficient Erlang/Golang available, etc.; mainly to improve your horizons.

9. Study in other majors:

In this stage, in addition to the basic LNMP skills, will consider some other areas of knowledge learning, these are OK, depending on personal interests and long-term goal direction. At present, there are many areas 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 recommendation), natural language processing (Chinese word segmentation, etc.), search engine technology, graphics and images, speech recognition and so on. In addition to these high-end, there are also a lot of partial engineering aspects to learn, such as high-performance systems, mobile development (Android/IOS), computer security, embedded systems, hardware and so on.

10. System design:

On the basis of the second stage, the system design can apply the experience and skills mastered to design more complex medium-and large-scale systems, which can solve the problems of most of the complex systems online. Complete complex business such as browser-> CDN-> load balance-> access layer-> Nginx+PHP-> Business Cache-> Database-> various complex backend RPC interactions (storage backend, logical backend, anti-cheating backend, external services)-> more complex backend services. It can support the normal development and maintenance of tens of millions to hundreds of millions of traffic websites every day.

Phase IV: architecture phase (architect)

Phase V: expert stage (direction domain experts)

The sixth stage: the scientist stage

Thank you for your reading, the above is the content of "how to make PHP programmers' technology grow". After the study of this article, I believe you have a deeper understanding of how to let PHP programmers' technology grow up, and the specific use needs to be verified in practice. Here is, the editor will push for you more related knowledge points of the article, welcome to follow!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report