做php已经5年多了,想往架构级phper发展。请问,架构级需要掌握哪些知识,循序渐进的过程怎么走?麻烦说的细一点
回复内容:
记得 Laruence 说过,修炼的路大概如下:
PHP -> C -> PHP扩展 -> Linux 编程 -> 网络编程 -> 成了
然后我就开始努力学习C,扩展,linux.....
直到有天发现,尼玛,这还是phper么?
=========我是一条分割线==============
补充一下:
没有只限于php的架构师存在,放下php的标签。
把方向改为 web 架构师,道路就清晰多了。
PHP请求来了处理一下,请求结束就销毁。作为仅仅掌控一层生命周期的程序。何来架构师,无非就是配置一下Nginx,PHP-fpm,Memcache,HaProxy ,MySQL 等软件。
PHP程序员应该掌握系统底层和网络通信的知识,比如多进程、多线程、Socket、Epoll等。PHP内核,扩展开发,C/C++都需要去学习。网络通信方面建议看一下 swoole。Swoole: PHP的异步、并行、分布式扩展
正在朝架构师的方向努力,个人意见,仅供参考:
架构师最基本的职责是将一个大系统分解为一些列程序员可以处理小模块,并在他们遇到技术难点时给予帮助。由此而来,php架构师必须要掌握的东西有:
1. 数据结构、算法。至少要做到会用,知道什么时候用集合,什么时候用队列,什么时候用排序队列,每种数据结构支持哪些操作,每个操作的时间复杂度是多少;能够将实际问题用适合的数据结构描述。
2. 数据存储: Mysql Redis 等;主从分离后并发数据一致性;关系数据库和非关系数据库的理论;数据库范式,什么时候需要反范式;SQL查询优化;能够将实际问题表述为合适数据库结构。可阅读《SQL查询烦人入门》《Redis入门指南》《MySql技术内幕》
3. webserver:Nginx, Lighttpd。可阅读《深入理解Nginx》
4. 缓存:浏览器,前端服务器,后端服务器的多级缓存。可阅读《构建高性能web站点》
5. 消息队列:数据异步写入的实现方案。
6. 设计理论:面向对象,面向对象基本原则,对耦合的深入理解;设计模式,重构,代码坏味道;架构模式。推荐:《设计模式》《大话设计模式》《重构》《敏捷软件开发:原则、模式与实践》。
7. 设计文档编写:架构师需要把自己想法清楚的传达给每个团队成员,除了基本文档撰写能力,UML必知必会,visio等绘图工具必须。
8. 软件工程:架构师必须有能力为自己负责的项目选择合适的开发流程,瀑布方式、螺旋迭代方式、敏捷,没有好坏之分,只有适合于不适合;
对于只需要的php的项目,有以上能力就可以坐在架构师的位置上了。总结一下,想做架构,就不要把自己定位为phper,php只是一种的服务端脚本语言。
但是,还有但是:
只需要php项目规模不会很大,价值也不会很大。php只是一个脚本语言,适合做业务和快速构建产品原型。产品规模大了以后,后端很定是要迁移到Java、C++等静态语言的。如果你不会Java、C++这类语言。那恐怕永远也无法成为一个牛B的架构师。
所以这是一个让人很纠结的问题,写php多年的人,是否应该转移到Java或C++阵营。我见过的架构师确实,php,C++,Java随便写的。
就会一门语言就想做架构,那也只是想想的。
现在很多框架都是各个语言之间在互相学习的,何况是 框架,很多语言也是。
但这些对于架构师来说也并非是重要的。
我们要有什么技能,首先来看看架构师要达成的目标有哪些。
既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案
确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点。主要着眼于系统的“技术实现”。因此他/她应该是
特定的开发平台、语言、工具的大师,对常见应用场景能马上给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能
需求需要的代价。
系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。
百度百科抄的。
上面的在把要点提炼出来,就是:
- 了解“业务场景”的情况下给出解决方案。
- 对所属开发团队有足够的了解。
- 对于项目风险的控制。
- 对于开发流程,和系统架构的设计、把控与实施。
懂技术,可以不精,但一定要广,可以根据需求正确的设计架构,规范开发流程,把控开发上的技术风险。
懂业务,对于业务场景有大概了解,至少需要在与专业的业务人员沟通时不会有障碍,并且能对于场景做正确的需求分析。
懂管理,主要是对于团队的了解,任务分解中的风险,正确传达需求。
话说回来,做架构,不懂业务行不行?不行!
如果真有通用的架构,那就不需要那么多架构师了,所有业务领域都找个通用的架构来就好了。可能不是通用,但是大同小异啊?是的,这个“小异”弄不好是会死人的。
当然,互联网时代很多业务模式都是创新的,根本没人懂这个业务怎么玩,那对于架构师的要求也就不一样了,玩法变了,变出什么呢?所谓的“敏捷开发”,迭代更新。这就意味着架构师不需要懂业务么?不是的,这个只是一个摸着石头过河,然后,有经验了,遇到瓶颈之前加紧重构。
本屌经验不多,刚毕业,半年经验,但是发现如果把php作为纯粹地技术研究,而不是为了赚钱,那就继续深入,研究源码,作为一项追求。本it狗钱还没赚够,只能学学其他东西,多掌握几项技能,而把专心研究php这个伟大工程留给我赚够钱之后了
你职业生涯何必和php绑定呢,php工作几年马上转:
c/c++ ->服务端架构设计 -> java 系列框架 -> jvm系列语言
c/c++ 优秀开源服务端有:
nginx 性能卓越,
ace 设计无人匹敌,
traffic server 设计和性能都不错
java的也很有很多,推荐你看看
,你就知道 外面的世界多精彩了。
jvm系列语言也有很多选择,scala语言的kafka 卓越的消息队列,storm等等。
如果还继续深入php不想转的话,hhvm是个好选择。
见多识广比抱死一颗烂树强多了,花时间学习 zend php如何写扩展还不如去睡觉
说点我的看法。属于只看过猪跑的。
我理解的架构师职责就是提供整体的解决方案,就是负责给出功能实现的具体方案,从阅读需求到功能设计到技术选型、优化重构、测试发布回滚,甚至代码风格都要给出。
这一切都以一个至多个文档来体现,所以文档能力对架构师而言是必须的,而决定输出文档质量的,就是架构师的核心能力,这包括对需求的阅读理解能力、设计能力和技术广度及深度。
对架构师而言,理解需求和抽象设计,应该是硬实力,这两者达不到一定程度,是无法胜任架构师的。
除此之外,技术选型是个很重要的环节,这决定整个团队之后所依赖的技术走向,需要权衡很多东西。
workflow的设计也很重要,好的workflow能极大提高团队效率,如何配合技术选型来引入更多的自动化,也是架构师需要考虑的问题。
单纯的phper很难成为架构师,除非是那么两三个人的破公司顶个架构师的名头而已。
因为视野太窄了。
架构师的知识面要求很广,光会一门语言是不行的。