Home  >  Article  >  The growth path of PHP programmers

The growth path of PHP programmers

小云云
小云云Original
2017-11-18 14:00:442148browse

As a PHP programmer, I believe I have learned a lot since you started. However, some PHP programmers are still in the first stage. So how should we make up for it as junior PHP programmers? Will my shortcomings develop towards the intermediate or advanced stage? The editor below has sorted out a good growth route for PHP programmers.

The first stage: basic stage (basic PHP programmer)

Focus: become proficient in LNMP (the core is basic operations of installation and configuration)

Goal: be able Complete basic LNMP system installation and 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 to complete this stage varies from person to person. Some grow faster and it takes half a year, while others 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 scripts Orders etc.

2.Nginx:

Be able to install and configure nginx+php, know the basic nginx core configuration options, know basic configurations such as server/fastcgi_pass/access_log, and the goal is to be able to use nginx+php_fpm Work smoothly.

3.MySQL:

Be able to build mysql by yourself, 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 The differences between the two engines and the differences in the selection above; being 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 array, string, database, XML, Socket, GD/ImageMgk image processing, etc.; familiar with various APIs linked to MySQL operations (mysql /mysqli /PDO), know how to solve various coding problems; know the commonly used PHP frameworks (ThinkPHP, Zendframework, Yii, Yaf, etc.); understand the basic MVC operating mechanism and why it is done, and know a little about the differences between different PHP frameworks The difference; being 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 and conditions permit, 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 frameworks (jQuery and the like); understand some basic JavaScript programming knowledge; (This item is not required. If you have time, it is okay to learn a little bit about it, but it is not necessary. Recommended as the focus, unless the individual has strong interest)

6. System design:

Be able to complete the basic design of a small system, including simple database design, and be able to complete the basic: browser -> ; Nginx+PHP -> Design and development of database architecture; able to support the development and maintenance of websites with hundreds of thousands to millions of traffic every day;

Second stage: improvement stage (intermediate PHP programmer)

Key points: Improve LNMP skills and be able to apply LNMP more comprehensively and proficiently.

Goals: Be able to set up an LNMP environment anytime and anywhere and quickly complete routine configurations; be able to trace and solve most of the development and online environment problems encountered; be able to independently undertake the architecture and development work of medium-sized systems; be able to Undertake the development work of a medium-sized module in a large system;

1. Linux:

Based on the first stage, you 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; it can basically install most non-special Linux programs (including various libraries, packages, third-party dependencies, etc., such as MongoDB/Redis/Sphinx /Luncene/SVN and the like); understand basic Linux services, know how to view Linux performance indicator data, and know basic issue tracking under Linux, etc.

2. Nginx:

Based on 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 configurations and performance impacts; know that nginx can also assume the role of web server in addition to web server. Proxy server, reverse static server and other configurations; know basic nginx configuration tuning; know how to configure permissions, compile an nginx extension to nginx; know the basic nginx operating principle (master/worker mechanism, epoll), know why nginx performance is higher than Knowledge such as good apache performance;

3. MySQL/MongoDB:

Based on 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, and you also 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 also know the configuration of these options What value is appropriate? In addition, you also know some special configuration options, such as knowing how to build a mysql master-slave synchronization environment, knowing the differences between various binlog_format; knowing MySQL performance tracking, including slow_log/explain, etc., and also knowing basic index creation Processing and other knowledge; understand the basic MySQL architecture (Server + storage engine) in terms of principles, know the basic InnoDB/MyISAM index storage structure and differences (clustered index, B-tree); know the basic InnoDB transaction processing mechanism; understand most of MySQL A solution to the abnormal situation (or know where to find a solution). If conditions permit, it is recommended to learn about the MongoDB database, which is a representative of NoSQL, and compare the differences with MySQL. Colleagues can use MongoDB safely and prudently in suitable application scenarios, and know the basic combined development of PHP and MongoDB.

4. Redis/Memcached:

In most medium-sized systems, cache processing will definitely be involved, so you must understand the basic cache; know the similarities, differences and application scenarios of Memcached and Redis, and 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 usage of Redis, understand regular data types, and know which types are used in what scenarios. Understand Redis transactions and more. In the principle part, you can have a general 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 compilation and installation configuration of PHP and various third-party extensions; understand most of the configuration of php-fpm Options and meanings (such as max_requests/max_children/request_terminate_timeout and other configurations that affect performance), know the difference between mod_php/fastcgi; have become proficient in various basic technologies in PHP, including various more in-depth PHP, including PHP-oriented In-depth understanding of objects/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 Already 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 and allow yourself to deeply understand MVC mode, which also allows you to quickly upgrade in business project development; be familiar with various code optimization methods of PHP, and be familiar with solving most PHP security issues; be 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, arrays operations, strings, general standard API) and data structures (linked lists, trees, hashes, queues); have a basic understanding of C language development concepts under Linux, be able to write simple makefile files, and be able to use Simple GCC/GDB program compilation and simple debugging work; 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 use some front-end frameworks (jQuery/YUI/ExtJS/RequireJS/BootStrap and the like) simply; if 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:

Be able to design the website architecture, database, and basic PHP framework selection for most medium-sized systems; perform performance testing and troubleshooting, etc.; be able to complete similar tasks: Browser -> CDN (Squid) -> Nginx+PHP -> Cache -> Basic design, development and maintenance of database structure 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 study in a certain direction or field. (Depth Dimension Development)

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; you can independently Hold goes deep into a certain technical direction and is 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 under Linux For monitoring and tracking, 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 write more complex shell scripts (more than 500 lines) to assist in completing many tasks, including backups. , automated processing, monitoring and other tasks; have become proficient in applications such as awk/sed/perl, and can freely operate, control, process, text statistics and analyze data in various complex formats; have some understanding of the internal mechanisms of Linux and kernel modules There is basic processing for loading, startup error handling, etc.; at the same time, I also understand some other related things, such as NFS, disk management, etc.;

2. Nginx:

In the second Based on the above 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 processing, etc.; depending on personal interests, you can consider focusing on Nginx in more aspects. In-depth study of the working principle is mainly reflected in reading the source code, such as the specific master/worker working mechanism, Nginx internal event processing, 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 a better model can be combined and applied; 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:

Based on 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 large batches of data Import and export, high-risk operations such as changing table structures or adding or deleting index fields for online large batches of data; in addition to installation and configuration, it has been able to handle more complex MySQL problems, such as tracing various problems and master-slave synchronization delay issues. Solutions, cross-machine room synchronization data solutions, MySQL high-availability architecture, etc. are all involved; for the MySQL application level, I am familiar with the core key technologies of MySQL, such as transaction mechanisms (isolation levels, locks, etc.), triggers, partitions and other technologies Have a certain understanding and application; for 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 application, have in-depth understanding of operation statements such as show * (show status/show profile), and be able to complete most performance problem tracing; in-depth familiarity with MySQL backup technology, including disaster recovery and restoration, In-depth understanding of Binlog, hot and cold backup, multi-IDC backup, etc.; have a better understanding of MySQL principles, such as starting to read some source codes for the working mechanism of MySQL, such as learning the source code of master-slave synchronization (replication) technology, or learning about the source code of MySQL. Learn and understand the source code of a certain storage engine (MyISAM/Innodb/TokuDB), etc. 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 have 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 complex, it is recommended to read the source code, especially the memory management part, to facilitate in-depth understanding; in the Redis part, you can do more complex data structure applications (zset is used for ranking ranking operations/transaction processing to ensure Atomicity is used in flash sale scenario applications); it mostly involves learning applications of synchronization mechanisms such as aof, and designing a highly available Redis application architecture and cluster; it is recommended that you study the source code of Redis in depth and put it into the second stage The accumulated knowledge can be applied. 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 a basic core skill, we need more in-depth study and application based on the second stage. In terms of basic code application, you can solve 95% of the problems encountered in PHP development and understand most PHP techniques; you can quickly start using most PHP frameworks within a day, and understand the advantages of each mainstream PHP framework. Disadvantages: It can quickly and conveniently make technology selection during project development; in terms of configuration, in addition to the knowledge of the regular second stage, you will also understand some more obscure configuration options (php auto_prepend_file/auto_append_file), including some complex advanced configurations in extensions and principles (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 php-fpm working mechanism (such as php-fpm enables process number calculation and principle under different configuration machines), has basic familiarity with the zend engine (vm/gc/stream processing), has read the basic PHP kernel source code (or read related articles), and has an understanding of the internal mechanism of PHP Have an understanding of the implementation of most core data structures (basic types/Array/Object), and have an in-depth understanding of the core infrastructure (zval/hashtable/gc); be able to carry out basic PHP extension development, and understand some intermediate and advanced knowledge of extension development (minit/rinit, etc.), 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 can 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, be familiar with multi-process and multi-thread programming; understand most of the communication methods between multi-processes in multi-process situations, and be able to flexibly choose communication methods (shared memory/semaphore/pipeline, etc.); be good at multi-thread programming Solve lock conflict problems and be able to develop and debug multi-threaded programs; 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 of different asynchronous network IO models and differences (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 free time, you can also take a look at some domestically developed libraries. (such as muduo); at the same time, be able to design a good high-concurrency program architecture (leader-follow/master-worker, etc.); understand most of the problems in C/C++ back-end server development (memory management, log printing, high concurrency, front-end and back-end Communication protocol, service monitoring), know the RPC communication problems of each back-end service (struct/http/thirft/protobuf, etc.); be more familiar with using GCC and GDB to develop compilation and debugging programs, and be able to quickly trace after the online program core is lost Track and solve problems; in terms of general module development, you can accumulate or develop some general tools or libraries (such as asynchronous network frameworks, log libraries, memory pools, thread pools, etc.), but you should be careful whether to apply them after development to save yourself from chasing after them. bug;

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 integration capabilities of various framework applications in the front-end, if you are interested in learning the front-end, you can go deeper. In the form of developing some front-end frameworks like jQuery yourself, or developing a rich text editor, etc. A relatively trivial test of 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 other functional programming. For languages, you can try Lisp/Haskell/Scala/Erlang. For static languages, you can 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. The aforementioned Nginx_Lua combined with Nginx, etc. Learning different languages ​​is mainly about improving 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. Learning in other professional directions:

In this stage, in addition to basic LNMP skills, you will also consider learning knowledge in other fields. These are all possible, depending on the individual. 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 places 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, system design can apply the experience and skills mastered to design relatively complex medium and large-scale systems, which can solve most online problems. Various complex system problems, such as browser -> CDN -> Load balancing -> Access layer -> Nginx+PHP -> Business cache -> Database -> Various complex backends RPC interaction (storage backend, logic backend, anti-cheating backend, external services) -> More backends Jiangzi’s complex business; able to support the normal development and maintenance of websites with tens to hundreds of millions of traffic every day.

In addition to letting you grow up, this route can also let you understand what stage you are at as a PHP programmer. If you find that you are still far away from your goal, then you can follow the above route. Improve yourself.

Related recommendations:

A brief discussion on the future of PHP programmers

Some pitfalls that programmers should avoid

Be a different programmer

Essentials for becoming a successful programmer

An openness Discussion on sex issues: How can programmers improve their programming skills?

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:PHP latest learning routeNext article:PHP latest learning route