Development Suggestions for php programmers and Development of php programmers
The path to improving PHP programmers is another year's graduation season. There may be a lot of graduates coming into the development circle. According to the development trajectory of LNMP programmers summarized in the development circle over the years, combined with personal experience, many programmers are confused about the future, especially the blindness and Chaos of technology learning, the technical requirements of PHP programmers at each stage are summarized to help many PHP programmers compare and set learning and growth goals. In this article, we have made a basic arrangement based on the current mainstream technologies, and assume that PHP programmers are not very well-founded, and all the settings are very specific and clear. Stage 1: elementary PHP programmers focus on LNMP proficiency (the core is the basic installation and configuration operations). Objective: To complete the basic LNMP environment installation and simple configuration and maintenance; be able to develop PHP in basic simple systems; be able to support the development of a certain PHP function module in PHP medium-sized systems. Time: the time needed to complete this phase varies from person to person. Some of them have grown over half a year, and some have grown slowly for two or three years. 1. Linux: Basic commands, operations, startup, and basic service configurations (including rpm installation files and various service configurations); write simple shell scripts and awk/sed script commands. 2. Nginx: install and configure nginx + php, know the basic nginx core configuration options, and know the basic configurations such as server/fastcgi_pass/access_log. The goal is to make nginx + php_fpm work smoothly. 3. mySQL: You can set up mysql by yourself and know the basic mysql configuration options; know the differences between innodb and myisam, and know the different configuration options for the InnoDB and MyISAM engines; know the differences between the two basic engines and select the above differences; Be able to manually build a MySQL database and configure the encoding to run normally and stably; the core objective is to build a runable MySQL database. 4. PHP: basic syntax array, String, database, XML, Socket, GD/ImageMgk image processing, etc. Familiar with various APIs connected to MySQL (mysql/mysqli/PDO ), know how to solve various coding problems; know the common PHP frameworks (ThinkPHP, Zendframework, Yii, Yaf, etc.); understand the basic MVC operating mechanism and why, know the differences between different PHP frameworks; be able to quickly learn an MVC framework. Be aware of the file directory organization in the development project, have a basic good code structure and style, and can complete the development of a small system and a module in a medium-sized system. Qianfeng PHP's hand-written MVC framework is well known in the industry and is a good reference for PHP learning. 5. web Front-end: You must be familiar with DIV + CSS + JavaScript. Now, the front-end is becoming heavier and heavier, and various frameworks are born after rain. Vue. js, React. js, and Angular. js are very popular among enterprises. If you have a solid Development Foundation, you can learn this easily. 6. development System Design: it is best to independently complete the basic design of a small system, including a simple database design to achieve the basic: browser-> Nginx + PHP-> database architecture design and development; Supports the development and maintenance of hundreds of thousands to millions of websites every day; Stage 1: Intermediate PHP programmers focus on: improve LNMP-specific skills and be able to apply LNMP more comprehensively. Objective: To build an LNMP environment anytime, anywhere, and quickly complete routine configuration; to trace and solve most of the problems encountered in development and online environments; to independently undertake the architecture and development of medium-sized systems; ability to develop a medium-sized module in a large system; 1. linux: On the basis of the first stage, you can smoothly use Shell scripts to complete a lot of automated work. awk/sed/perl is also a good operation, able to 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, for example, Redis/Sphinx/xunsearch/SVN/Git). Learn about basic Linux services, how to view Linux performance metrics, and how to track issues under Linux. 2. nginx: On the basis of the first stage, learn more about the complex Nginx configurations, including multi-core configurations, events, proxy_pass, sendfile/tcp _ * configurations, and the related configurations and performance impact such as timeout; know that nginx not only has webserver, but also can undertake proxy server, reverse static server, and other configurations; know basic nginx configuration optimization; Know how to configure permissions, compile a nginx extension to nginx; understand the basic operating principles of nginx (master/worker mechanism, epoll), and know why nginx has better performance than apache. 3. mySQL/redis: On the basis of the first stage, Master many tips in MySQL development, including regular SQL optimization (groupby/orderby/rand optimization). Apart from setting up MySQL, you can also hot and cold backup MySQL Data and know the configuration options that affect innodb/myisam performance (such as key_buffer/query_cache/sort_ B Uffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit). You also know the value of these options. You also know some special configuration options, such as how to build a mysql master-slave synchronization environment, know the differences between binlog_format and MySQL performance tracing, including slow_log/explain, and basic indexing and processing knowledge; in terms of principles, understand the basic MySQL architecture (Server + storage engine) and the Basic InnoDB/MyISAM index Storage Structure and differences (clustered index and B-tree ); understand the basic InnoDB Transaction Processing Mechanism, and understand the solutions for most MySQL exceptions (or know where to find the solutions ). 4. redis/Memcached, understand some basic features and restrictions of Memcahed, such as the maximum value, and know how PHP works with them. Redis understands basic working principles and usage, and understands common data types, know what scenarios and types of applications, understand Redis transactions, and so on. In principle, we can get a rough idea of Memcached's memory structure (slab mechanism), and redis will understand the underlying storage structure (SDS/linked list/SkipList/HashTable) of common data types, by the way, let's take a look at Redis's transaction, RDB, AOF, and other mechanisms. 5.php: apart from the first-stage capabilities, PHP and various third-party extended compilation and installation configurations can be installed at will; understand most of the configuration options and meanings of php-fpm (such as max_requests/max_children/request_terminate_timeout and other factors that affect performance), and know the differences between mod_php and fastcgi; I have already been familiar with various basic technologies in PHP, as well as a variety of in-depth PHP, including in-depth understanding of PHP object-oriented/SPL/special features at the syntax level, such as reflection; I have read at least one common PHPMVC framework code in the framework and understand the internal implementation mechanism and Design Concept of the basic PHP framework. I have been proficient in PHP development. We recommend that you develop your own PHPMVC framework to free up development, it allows you to deeply understand the MVC mode and quickly upgrade your business project development. You are familiar with various PHP code optimization methods and most PHP security issues; familiar with basic PHP Execution mechanism principles (Zend engine/basic Extension Working mechanism); 6.C/ C ++: start to explore certain C/C ++ languages, ability to write basic C/C ++ code, familiar with basic C/C ++ syntax (pointer, array operation, String, standard API) and data structures (linked list, tree, hash, queue) have a certain degree of familiarity; Linux C language development has a basic understanding of the concept, will be simple makefile file writing, able to use a simple GCC/GDB program for compilation and debugging; have a general understanding of basic network programming. (This project aims to lay the foundation for a higher level) 7. web Front-end (this project does not focus on learning, unless you are interested in the front-end): On the basis of the first stage, you are familiar with basic HTTP protocols (protocol code 200/300/400/500, basic HTTP interaction headers). if conditions permit, you can write a slightly elegant HTML, CSS, and JavaScript code in depth, alternatively, you can simply use some front-end frameworks (such as jQuery/YUI/ExtJS/RequireJS/BootStrap). if conditions permit, you can learn JavaScript programming in depth, such as the closure mechanism and DOM processing; for more details, read the jQuery source code for further study. 8. system design: design the website architecture, database, and basic PHP framework selection of most medium-sized systems, and perform performance testing and troubleshooting. The system can be similar to: browser-> CDN (Squid) -> Nginx + PHP-> cache-> basic design, development, and maintenance of database structure websites; supporting the development and maintenance of basic websites with millions to tens of millions of traffic per day; Stage 3: advanced PHP programmers focus on: in addition to the basic LNMP program, they can also have in-depth learning in a certain direction or field. (In-depth Development) Objective: In addition to basic PHP business development, it can also solve most in-depth and complex technical problems and independently design medium and large scale system design and development; I am able to independently hold a certain technical direction, which is relatively professional. (For example, in-depth research on MySQL, Nginx, PHP, Redis, etc.) 1. linux: in addition to the capabilities of the second stage, in addition to routine operations and performance monitoring tracking, you can also use a lot of advanced and complex commands to complete the work (watch/tcpdump/starce/ldd/ar). In terms of shell scripts, it has been able to write more complex shell scripts (more than 500 lines) to assist with a lot of shells including backup, automated processing, monitoring, and other work; awk, sed, perl, and other applications have been very popular, allowing you to control and process text statistics and analyze data in various complex formats at will. You have some knowledge about Linux internal mechanisms and load kernel modules, start error handling and so on. At the same time, you can understand other related things, such as NFS and disk management. 2. nginx: On the basis of the second stage, you have already been able to skillfully operate Nginx and perform more in-depth O & M work on Nginx, such as monitoring, performance optimization, and complex problem handling; focus on more aspects of personal interests An in-depth study of the working principles of Nginx mainly begins with reading the source code, such as the specific master/worker working mechanism, Nginx internal event processing, and memory management; at the same time, you can learn about Nginx extension development and customize some of your own private extensions. At the same time, you can have a certain degree of understanding about Nginx + Lua to see if a better mode can be combined with applications; this stage requires an in-depth understanding of Nginx principles and can be considered as an in-depth professional in the Nginx field. 3. mySQL/Redis: On the basis of the second stage, in terms of MySQL applications, in addition to the basic SQL optimization, it can also complete some complex operations, such as importing and exporting large volumes of data, high-risk operations such as modifying the table structure or adding or deleting index fields of a large volume of online data. In addition to the installation and configuration, the system has been able to handle more complicated MySQL problems, such as tracing of various problems, master-slave synchronization latency, data synchronization across data centers, MySQL high-availability architecture, etc. Familiar with MySQL applications and key MySQL technologies, for example, the transaction mechanism (isolation level, lock, etc.), the trigger, partition and other technologies have a certain understanding and application, MySQL performance, including 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) ), Application selection for the connection pool software, in-depth understanding of the show * (showstatus/showprofile) Class operation statements, can trace most of the performance issues; in-depth understanding of MySQL backup technology, including disaster recovery and recovery, deep understanding of Binlog, cold/hot backup, and multi-IDC backup. Learn more about MySQL principles, such as reading some source code about the working mechanism of MySQL, for example, you can learn the source code of the master-slave synchronization (replication) technology or the source code of a storage engine (MyISAM/Innodb/TokuDB). 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. In this process, if you are interested, you can also consider developing towards DBA. 4. Redis/Memcached: On the basis of the second stage, it can be used and learned more deeply. Because Memcached is not very complex, it is recommended that you read the source code, especially the memory management part, to facilitate in-depth understanding; Redis part, you can do more complex data structure applications (zset is used for ranking and sorting operations/transaction processing to ensure atomicity in scenarios such as seckilling ); design a highly available Redis application architecture and cluster for learning applications that involve synchronization mechanisms such as aof. It is recommended that you have a deep understanding of the Redis source code, the knowledge accumulated in the second stage can be applied. For more information, see core event management, memory management, and internal core data structure. If you are interested, you can become a very professional Redis user. 5. PHP: as the basic core skills, we need to have more in-depth learning and application on the basis of the second stage. From the basic code application, it can solve 95% of the problems encountered in PHP development and understand most PHP skills. For most PHP frameworks, it can be quickly used within one day, understand the advantages and disadvantages of various mainstream PHP frameworks, and quickly facilitate technical selection in project development. In terms of configuration, besides the knowledge of the second stage, you will learn about some of the configuration options (phpauto_prepend_file/auto_append_file), including some complex advanced configurations and principles of extensions (such as memcache in memcached extension configuration. apc in hash_strategy and apc extension configuration. mmap_file_mask/apc. slam_defense/apc. file_update_protection). I have a better understanding of the working mechanism of php, including the working mechanism of php-fpm (for example, php-fpm enables the calculation of the number of processes under different configuration machines and the principle ), familiar with zend engine (vm/gc/stream processing), read The basic PHP kernel source code (or read related articles) provides an understanding of the implementation of most of the core data structures (basic types/Array/Object) in the PHP internal mechanism, have an in-depth understanding of the core infrastructure (zval, hashtable, and gc), be able to perform basic PHP extension development, and learn about some advanced extensions (minit, rinit, and so on ), familiar with the details of different communication and interaction modes (mod_php/fastcgi) between php and apache/nginx. In addition to developing PHP extensions, you can consider learning to develop Zend extensions to learn more about PHP at the lower layer. 6. c/C ++: On the basis of the second stage, you can have a deeper understanding of the C/C ++ language, able to develop small and medium C/C ++ systems. Besides the basic C/C ++ syntax and data structure in the second stage, you can also learn some special data structures (B-tree/rb-tree/skiplist/lsm-tree/trie-tree) to meet your needs in special work. In terms of system programming, be familiar with multi-process and multi-thread programming. In the multi-process scenario, we will learn about the communication modes among most of the multi-process processes, and be able to flexibly select the communication modes (shared memory, semaphores, and pipelines ); multi-threaded programming can effectively solve lock conflicts and debug multi-threaded programs. It is also familiar with network programming, understand the differences and selection of multi-process model, multi-thread model, and Asynchronous Network I/O model. Be familiar with the principles and differences of different Asynchronous Network I/O models (select/poll/epoll/iocp ), familiar with common asynchronous frameworks (ACE/ICE/libev/libevent/libuv/Boost. ASIO) and usage, such If you are at your leisure, you can also look at some self-developed libraries (such as muduo) in China. At the same time, you can design a high-concurrency program architecture (such as leader-follow/master-worker ); measure the test taker's understanding about most of the problems (memory management, log printing, high concurrency, frontend and backend communication protocols, and service monitoring) in C/C ++ backend Server development ), understand the RPC communication problems of various backend services (struct/http/thirft/protobuf, etc.); Be familiar with using GCC and GDB to develop compilation and debugging programs, after the core of the online program is lost, it can quickly trace and solve the problem. In terms of general module development, you can accumulate or develop some common tools or libraries (such as Asynchronous Network Framework, logstore, memory pool, thread pool, etc.). However, you should be cautious when using the tools or libraries after development, provincial pitfalls to catch bugs; 7. web Front-end (more understanding): in-depth understanding of the HTTP protocol (including detailed protocol code and the reasons behind the special protocol, such as 302 static File Cache, in addition to the front-end framework and application integration capabilities If you are interested, you can go deeper. in the form of learning, you can develop some front-end frameworks similar to jQuery, or develop a Rich Text Editor, which is a trivial test of JavaScript skill; in the industry, qianfeng PHP is widely used to encapsulate interactive plug-ins with students handwriting. 8. language learning in other fields: the Basic PHP/C ++ language has a basic accumulation. We recommend that you try to learn different programming languages and look at your hobbies at the current stage, you can learn Python, Ruby, and other script languages. For functional programming languages, try Lisp, Haskell, Scala, and Erlang. For static languages, try Java or Golang, data Statistics and analysis can help you understand the R language. If you want to use backend services from another perspective, try Node. js also includes Nginx_Lua, Which is used with Nginx. To learn different languages, you can improve your horizons and solve the problems. For example, you can learn about the lightweight coroutine in addition to processes/Threads. For example, in cross-machine communication scenarios, the Erlang solution is simple and amazing. For example, if you don't want to select C/C ++, there are also highly efficient Erlang/Golang availability and so on. The main purpose is to improve your vision. 9. other major directions: in this phase, apart from the basic LNMP skills, some other fields of knowledge can be considered, view personal interests and long-term goals. Currently, many fields can be selected, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, etc, applied to statistics and personalized recommendations, Natural Language Processing (Chinese word segmentation, etc.), search engine technology, graphic images, speech recognition, and so on. In addition to these high-performance systems, there are also many engineering aspects to learn from, such as high-performance systems, mobile development (Android/IOS), computer security, embedded systems, hardware and other directions. 10. system design: On the basis of the second stage, the system design can be applied to master experience and skills to design complicated medium and large systems, which can solve various online complex system problems, complete similar browser-> CDN-> Server Load balancer-> access layer-> Nginx + PHP-> service cache-> database-> various complex backend RPC interactions (storage backend, logical backend, anti-cheating) backend and external services) -> more complex backend services with soy sauce; support normal development and maintenance of websites with tens of millions to hundreds of millions of traffic per day. 11. Self-expression the actual development time of Internet companies is not very large. A large proportion is the communication between colleagues in different departments and between customers. Even if you are a good technical engineer, poor communication will inevitably affect the progress of the project. It is imperative to strengthen this project. On weekends, you can join more technical salons and expand your circle. This will be very helpful for your communication. When complaining about a low salary, ask how much you have done with the above capabilities. The most unfortunate thing in your life is that you feel as hard as you get used to occasional efforts. There is no end to learning PHP. The road is long but bright. Note: Reproduced in https://baijiahao.baidu.com/po/feed/share? Wfr = spider & for = pc & context = % 7B % 22 sourceFrom % 22% 3A % 22bjh % 22% 2C % 22nid % 22% 3A % 22news_3011399481235370912% 22% 7D