PHP 程序员的技术成长计划

依摸底的广大PHP/LNMP程序员的向上轨迹,结合个人经验认知,抽象出众多程序员对前景底蔓延,特别对技术上的盲目和不知所措,简单梳理了是每个阶段PHP程序员的艺要求,来拉众多PHP程序召开比设定上成才目标。

本文按照目前主流技术做了一个中坚的梳理,整个是设PHP程序员不是基础十分实在的状开展的设定,并且有着设定都生具体明确清晰,可能会见让人口认为不正,请晓仅代表一家之言。(未来技术转移不在议论范围)

率先号:基础等(基础PHP程序员)

重中之重:把LNMP搞纯(核心是安装配置基本操作)

靶:能够好中心的LNMP系统装置,简单布置维护;能够开为主的粗略系的PHP开发;能够在PHP中型系统受到支持有PHP功能模块的开。

时刻:完本等的岁月因人而异,有的成长快半年相同年就了了,成长缓慢的两三年吗发。

1.Linux:

主干命令、操作、启动、基本服务配置(包括rpm安装文件,各种劳动配置等);会写简单的shell脚本和awk/sed 脚本命令等。

2.Nginx:

完能设置配置nginx+php,知道基本的nginx核心配置选,知道 server/fastcgi_pass/access_log 等基础配置,目标是力所能及吃nginx+php_fpm顺利工作。

3.MySQL:

会见好搭建mysql,知道基本的mysql配置选;知道innodb和myisam的界别,知道针对InnoDB和MyISAM两独引擎的差
配置选;知道基本的点滴单引擎的区别和抉择方面的分;能够纯手工编译搭建一个MySQL数据库并且配备好编码等常规稳定运行;核心主旨是能够增加建筑一个可
运行的MySQL数据库。

4.PHP:

中心语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api(mysql
/mysqli/PDO),知道各种编码问题的缓解;知道健康熟练使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf
等);了解基本MVC的运行机制和胡如此做,稍微懂得不同的PHP框架中的区分;能够高效学习一个MVC框架。能够领略开工程被的文件目录组织,有核心的佳绩的代码结构与风骨,能够做到多少系统的出同中等系统受有模块的支付工作。

5.前端:

设基准时允许,可以方便学习下 HTML/CSS/JS 等有关文化,知道啊web标准,div+css的web/wap页面模式,知道
HTML5和HTML4的分;了解部分基本的前端只是与JS框架(jQuery之类的);了解一些为主的JavaScript编程知识;(本项不是须
项,如果起时光,稍微了解一下凡好的,不过不建议视作重中之重,除非个人发生众所周知兴趣)

6.系统设计:

会成功小型系的着力计划,包括简单的数据库设计,能够就中心的:浏览器 -> Nginx+PHP -> 数据库 架构的筹划出工作;能够支持每天几十万及数百万流量网站的开销保护工作;

次流:提高等 (中级PHP程序员)

重要:提高对LNMP的技能,能够再全面的对LNMP有懂行的应用。

目标:能够随时随地搭建筑好LNMP环境,快速完成正常配置;能够追查解决大部分碰面的支付及线上环境之问题;能够独立负责中型系统的构架和支出工作;能够当巨型系统受担负某个中型模块的开支工作;

1. Linux: 

于首先流的根基方面,能够通的利用Shell脚本来就很多自动化的办事;awk/sed/perl 也操作的正确性,能够一气呵成很多文本处理和勤
据统计等工作;基本会设置大部分免突出的Linux程序(包括各种库、包、第三正依等等,比如MongoDB/Redis/Sphinx
/Luncene/SVN之类的);了解基本的Linux服务,知道怎么查看Linux的性能指标数据,知道基本的Linux下面的问题跟等。

2. Nginx: 

以率先品的底蕴方面,了解复杂一些底Nginx配置;包括 多按配置、events、proxy_pass,sendfile/tcp_*配备,
知道过等息息相关配置与特性影响;知道nginx除了web server,还会负担代理服务器、反向静态服务器等配置;知道基本的nginx配置调优;
知道哪些布置权力、编译一个nginx扩展及nginx;知道基本的nginx运行规律(master/worker机制,epoll),知道干什么
nginx性能比apache性能好等学问;

3. MySQL/MongoDB:

每当率先流的根基方面,在MySQL开发方,掌握很多略技巧,包括健康SQL优化(group by/order by/rand优化等);除了
能够搭建MySQL,还会冷热备份MySQL数据,还亮影响innodb/myisam性能的布选(比如key_buffer
/query_cache/sort_buffer/innodb_buffer_pool_size
/innodb_flush_log_at_trx_commit等),也了解这些选择配置成为小值合适;另外为了解有特的配置选,比如  知道
如何搭建mysql主从同步的条件,知道各个binlog_format的界别;知道MySQL的性追查,包括slow_log/explain等,还
能够解基本的目录建立处理等知识;原理方面了解基本的MySQL的架(Server+存储引擎),知道基本的InnoDB/MyISAM索引存储结构
和见仁见智(聚簇索引,B树);知道基本的InnoDB事务处理机制;了解大部分MySQL异常情况的处理方案(或者了解哪里找到处理方案)。条件允许的情
况,建议了解一下NoSQL的意味MongoDB数据库,顺便对比及MySQL的出入,同事会在当的利用场景安全谨慎的采用MongoDB,知道基本
的PHP与MongoDB的结合开发。

4. Redis/Memcached:

于大部分适中系统内部肯定会干到缓存处理,所以毫无疑问要是了解核心的缓存;知道Memcached和Redis的异同以及动用场景,能够独立安
装 Redis/Memcached,了解Memcahed的组成部分主干特色以及范围,比如最要命的value值,知道PHP跟她们之采用结合;Redis了解
基本工作规律与下,了解健康的数据类型,知道什么状况下什么类型,了解Redis的政工等等。原理部分,能够大体了解Memcached的内存结构
(slab机制),redis就询问常用数据类型底层实现存储结构(SDS/链表/SkipList/HashTable)等等,顺便了解一下Redis
的事情、RDB、AOF等体制更好

5. PHP:

除第一品级的能力,安装配备方面能自由安装PHP和各种第三方扩大的编译安装配置;了解php-fpm的大部分部署选和含义(如
max_requests/max_children/request_terminate_timeout之类的影响性的配置),知道mod_php
/fastcgi的分;在PHP方面已能熟练各种基础技术,还连各种深入些的PHP,包括针对PHP面向对象的递进理解/SPL/语法层面的奇特
性比如反射之类的;在框架方面曾经看过至少一个之上常规PHP MVC框架的代码了,知道基本PHP框架之中贯彻机制以及计划思想;在PHP开发中已能
够熟练运用正规的设计模式来
应用开发(抽象工厂/单例/观察者/命令链/策略/适配器 等模式);建议开发协调之PHP MVC框架来充分被开发自由化,让自己深刻明MVC模式,
也于祥和力所能及以工作类别支出里飞提升;熟悉PHP的各种代码优化方法,熟悉大部分PHP安全者问题的缓解处理;熟悉基本的PHP执行之机制原理
(Zend引擎/扩展基本工作体制);

6. C/C++: 

发端读一定之C/C++语言,能够写基本的C/C++代码,对骨干的C/C++语法熟悉(指针、数组操作、字符串、常规专业API)和数据结构
(链表、树、哈希、队列)有自然之熟稔下;对Linux下面的C语言开发有基本的刺探概念,会略的makefile文件编写,能够用简易的
GCC/GDB的次编译简单调试工作;对骨干的纱编程有大概了解。(本项是为为更胜层次打下基础)

7. 前端:

以率先等的功底方面,熟悉基本的HTTP协议(协议代码200/300/400/500,基本的HTTP交互头);条件允许,可以当深切写来多少
优雅的HTML+CSS+JavaScript,或者能够大体简单利用一些前端框架(jQuery/YUI/ExtJS/RequireJS/Bootstrap等等);如果基准允许,可以深深学JavaScript编程,比如闭包机制、DOM处理;再深刻些可以读读jQuery源码做深刻学习。(本项不开重要学习,除非对前者有趣味)

8. 系统规划:

能够统筹大部分不大不小系统的网站架构、数据库、基本PHP框架选型;性能测试排查处理等;能够成功接近:浏览
器 -> CDN(Squid) -> Nginx+PHP -> 缓存 -> 数据库 结构网站的骨干计划开保护;能够支撑
每天数百万顶绝对流量基本网站的开销保护工作;

老三阶段:高级阶段 (高级PHP程序员)

要:除了核心的LNMP程序,还能以某某方向要领域有深切学习。(纵深维度发展)

对象:除了能够不辱使命核心的PHP业务支出,还会缓解大部分深入复杂的技巧问题,并且可独自设计得着大型的体系规划及开支工作;自己力所能及独立hold深入某个技术趋势,在这块比较正式。(比如当MySQL、Nginx、PHP、Redis等等任一在为深入钻研)

1. Linux:

除次级的力,在Linux下面除了健康的操作与性能监控跟踪,还能利用群高档复杂的一声令下就工作(watch/tcpdump
/starce/ldd/ar等);在shell脚本方面,已经能够编写比较复杂的shell脚本(超过500行)来救助完成很多席卷备份、自动化处理、
监控等工作之shell;对awk/sed/perl 等应用已设火纯青,能够轻易操作控制处理公事统计分析各种复杂格式的多寡;对Linux内部机制
有部分打探,对内核模块加载,启动错误处理等等有只核心的拍卖;同时针对片其它相关的事物吧询问,比如NFS、磁盘管理等等;

2. Nginx: 

每当次路的底蕴方面,已经能够把Nginx操作的万分娴熟,能够对Nginx进行更深入的运维工作,比如监控、性能优化,复杂问题处理等等;看个人
兴趣,更多面可以设想侧重于有关Nginx工作原理部分的深切学习,主要呈现在看源码开始,比如具体的master/worker工作机
制,Nginx内部的事件处理,内存管理等等;同时可学学Nginx扩展的开支,可以定制一些协调个人的扩张;同时可本着Nginx+Lua有必然水平
的问询,看看是否可组合使用来又好模式;这个阶段的求凡本着Nginx原理的深入了解,可以设想成为Nginx方向的深切专业者。

3. MySQL/MongoDB:

当第二路的基本功方面,在MySQL应用方面,除了之前的着力SQL优化,还能当形成有苛操作,比如大批量数的导入导出,线达大批量数目的
更改表结构还是增删索引字段等等高危操作;除了安装配置,已经会处理还多复杂的MySQL的题材,比如各种题材的追查,主从同步延迟问题之缓解、跨机房
同步数据方案、MySQL高可用架构等还出涉嫌了解;对MySQL应用规模,对MySQL的为主关键技术比较熟悉,比如工作机制(隔离级别、锁等)、对触
发器、分区等技能有得了解以及动用;对MySQL性能方面,有包括磁盘优化(SAS迁移至SSD)、服务器优化(内存、服务器本身配置)、除了次路的其
他基本性能优化增选(innodb_log_buffer_size/back_log/table_open_cache
/thread_cache_size/innodb_lock_wait_timeout等)、连接池软件选择下,对show *
(show status/show profile)类的操作语词有尖锐了解,能够好大部分的性能问题追查;MySQL备份技术之中肯熟悉,包括灾备
还原、对Binlog的刻骨铭心了解,冷热备份,多IDC备份等;在MySQL原理方面,有再度多询问,比如对MySQL的行事机制开始读有源码,比如对准主
从同步(复制)技术的源码学习,或者对有存储引擎(MyISAM/Innodb/TokuDB)等等的源码学习了解,如果条件允许,可以参照CSV引擎
开发自己简单的存储引擎来保存有数据,增强针对性MySQL的明白;在这进程,如果协调产生趣味,也可考虑于DBA方向前进。MongoDB层面,可以试
虑比如说在形容少读多之情形开始在线上以MongoDB,或者是召开有丝达之多寡解析处理的操作,具体状况可以随工作来,不过基本是如更好的中肯理解
RMDBS和NoSQL的不比场景下的使,如果基准或兴趣允许,可以起深入学习一下MongoDB的劳作体制。

4. Redis/Memcached:

每当其次路的基本功方面,能够重新深刻的行使和学习。因为Memcached不是特别复杂,建议可管源码进行阅读,特别是内存管理有些,方便深入理
解;Redis部分,可以多开片扑朔迷离的数据结构的动(zset来做排行榜排序操作/事务处理用来确保原子性在秒杀类场景下之类的采取操作);多干
aof等共同机制的上用,设计一个胜可用之Redis应用架构和集群;建议足以深深之修一下Redis的源码,把在第二等级积累的学识且得以应用
上,特别好翻阅一下席卷核心事件管理、内存管理、内部基本数据结构等充分学习了解一下。如果兴趣允许,可以改为一个Redis方面十分规范的使用者。

5. PHP:

用作基础核心技术,我们在第二号的根底方面,需要有再度深入之读书及采用。从着力代码应用方面吧,能够解决在PHP开发被遇见95%之题目,了解
大部分PHP的技术;对大部分底PHP框架能够快速在同样上内及亲手使用,并且了解各个主流PHP框架的利弊,能够很快方便项目开中召开技术选型;在配备方
面,除了正规第二阶段会的知,会了解一些于偏门的部署选(php auto_prepend_file/auto_append_file),包括
扩展中的有的错综复杂高级配置和原理(比如memcached扩展配置中的memcache.hash_strategy、apc扩展配置中之
apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之类的);对php的
工作机制于了解,包括php-fpm工作体制(比如php-fpm在不同配置机器下面被进程数量计算和原理),对zend引擎有基本熟悉
(vm/gc/stream处理),阅读了主导的PHP内核源码(或者看过相关文章),对PHP内部机制的大部骨干数据结构(基础类型/Array
/Object)实现有打探,对于基本基础结构(zval/hashtable/gc)有深入上了解;能够进行基本的PHP扩展开发,了解部分恢弘开发
的遭遇高等知识(minit/rinit等),熟悉php跟apache/nginx不同之通信交互方式细节(mod_php/fastcgi);除了开发
PHP扩展,可以考虑学习开发Zend扩展,从再底层去了解PHP。

6. C/C++:

于其次等级基础方面,能够当C/C++语言方面出重透之读了解,能够成功中小型C/C++系统的付出工作;除了主导第二流的基础C/C++语
法和数据结构,也能够学习一些异常数据结构(b-tree/rb-tree/skiplist/lsm-tree/trie-tree等)方便于特种工作
中要求;在系编程方面,熟悉多进程、多线程编程;多进程情况下面了解大部分大多进程中的通信方式,能够活选择通信方式(共享内存/信号量/管道等);
多线程编程能够好好的解决锁冲突问题,并且能进行多线程程序的开销调试工作;同时针对网编程比较熟悉,了解多进程模型/多线程模型/异步网络IO模型的
差别和选型,熟悉不同异步网络IO模型的法则与出入(select/poll/epoll/iocp等),并且熟悉常见的异步框架(ACE/ICE
/libev/libevent/libuv/Boost.ASIO等)和用,如果闲暇也得以望有国好付出之库房(比如muduo);同时会如
计好之高并发程序架构(leader-follow/master-worker等);了解大部分C/C++后端Server开发被的题目(内存管理、日
志打印、高并发、前后端通信协议、服务监督),知道各个后端服务RPC通信问题(struct/http/thirft/protobuf等);能够再度熟
络的下GCC和GDB来支付编译调试程序,在线上先后core掉后能够迅速追查跟踪解决问题;通用模块出方,可以累积或者开一些通用的工具或库
(比如异步网络框架、日志库、内存池、线程池等),不过出后是否以要谨慎,省之埋坑去追bug;

7. 前端:

深深了解HTTP协议(包括各个细致协议特殊协议代码和不动声色原因,比如302静态文件缓存了,502凡nginx后面php挂了之类的);除了前面
的前端方面的各种框架下成力量,前端方面的读书要出趣味可以重深切,表现形式是,可以自己开支有像样jQuery的前端框架,或者支付一个富文本
编辑器之类的比较零碎考验JavaScript功力;

8. 其他领域语言上:

于基础的PHP/C/C++语言方面来基本攒,建议以手上等可以品尝学习不同的编程语言,看个人兴趣爱好,脚本类语言可以上 Python
/Ruby 之类的,函数式编程语言可以试试 Lisp/Haskell/Scala/Erlang 之类的,静态语言可以尝试 Java
/Golang,数据统计分析好了解了解R语言,如果想变个意做后端业务,可以试 Node.js还有前提到的跟Nginx结合的
Nginx_Lua等。学习不同的语言主要是晋升自己之视野和化解问题手段之区别,比如会询问除了进程/线程,还有轻量级协程;比如在跨机器通信场景下
面,Erlang的化解方案大概的惊人;比如以不思选C/C++的气象下,还有类似高效之Erlang/Golang可用等等;主要是晋升视野。

9. 其他标准方向上:

每当本等间,会除了核心的LNMP技能外,会设想部分外世界知识之读,这些都是好的,看个人兴趣和长久的目标方向。目前景象能挑选的领
域比较多,比如、云计算(分布式存储、分布式计算、虚拟机等),机器上(数据挖掘、模式识别等,应用及统计、个性化推荐),自然语言处理(中文分词
等),搜索引擎技术、图形图像、语音识别等等。除了这些伟人上的,也发出诸多偏工程者可学学之地方,比如高性能系统、移动开
(Android/IOS)、计算机安全、嵌入式系统、硬件等倾向。

10. 体系规划:

系统规划在次号的根底之上,能够运用掌握的经历技术,设计出比较复杂的受大型系统,能够解决大部分丝上之各种繁复系统的问题,完成接近 浏览器 -> CDN -> 负载均衡 ->
接入层 -> Nginx+PHP -> 业务缓存 -> 数据库 -> 各路复杂后端RPC交互(存储后端、逻辑后端、反作弊
后端、外部服务) -> 更多后端 酱紫的扑朔迷离工作;能够支持每天数千万至数亿流量网站的正常开支保护工作。

相关文章