全面解析PHP程序员现状、分层、成长及转型等要点
我将从以下几个方面来说明:

PHP 程序员的现状;
什么导致了程序员的分层;
高级工程师需要达到的要求;
程序员如何快速成长;
PHP 程序员渴望的蜕变;
干货,你需要的转型路线;
总结。
PHP 程序员的现状
目前,众多PHP开发者感到困惑,初学者对行业感到挑战重重,而中级开发者普遍希望通过学习来增强自身能力,却常常陷入追逐新技术泥潭,无法自拔。相较之下,高级开发者大多已构建起自己的知识框架,其中一些甚至处于架构设计的关键岗位。
程序员对自身行业的深入理解至关重要,这实则关乎其职业规划。这一过程颇具挑战性,因为若想对职业生涯进行合理规划,便需对行业有全面的认识。而这,与当初选择成为程序员的原因密切相关。
通常而言,若你在职业生涯的起步阶段感到难以坚持,这或许暗示你并不适合这一领域;而若你无法顺利度过转型期,那么你很可能在事业上难以取得显著成就。
在开启职业生涯的起点上,每个人的路径各不相同。有些人是因为对这一行业充满热情,内心怀揣着明确的目标,尽管他们尚未制定出详尽的职业规划,但至少在心中有一个领域的榜样。而另一些人则是通过三到四个月的培训,踏入了这个行业的大门。
我此前曾对重庆互联网学院旗下某培训机构(YMSD)的数据进行了分析,发现那些参加该培训并进入行业的学员中,仅有20%在两年后依然坚守在原岗位持续发展。换言之,高达80%的学员投入了金钱和时间,最终却只是充当了陪跑者的角色。这一现象也从侧面反映出,当我们踏入这个行业时,除了追求经济收益,还必须对未来的职业发展有所规划和预期。
通常情况下,那些通过培训进入开发行业的从业者,在职业生涯中会面临诸多挑战,这主要是因为他们缺乏一个明确的技术发展路径和体系目标。此外,他们在线下培训机构所接受的教育往往局限于简单的模仿,创新意识严重不足。据我所了解,众多线下培训机构的课程体系与企业实际应用场景至少存在5年的差距。因此,这些程序员亟需努力改善自身的处境,并清晰认识到自己的现状。
什么导致了程序员分层
程序员在职业层级上的划分是一个显而易见的状况,这种差异在公司内部直接反映为相同类别程序员在职位级别或薪酬福利上的显著不同。
导致这种分层的原因是什么?
第一类原因就是程序开发者的工作年限。
实际上,工作经历的长短并非决定性因素,我们确实在过往的面试中遇到过那些尽管工作年限仅有短短一年却表现出色的开发者。然而,当浏览求职平台时,不难发现几乎每一份职位要求中都会设定一个标准——那就是所需的工作经验年限。
这东西的存在有何意义?毕竟,公司若要逐个与众多求职者进行交流,无疑会耗费大量时间和精力,因此,工作年限便成为了筛选的第一重标准。
通常情况下,具备1至3年的工作经验属于一个级别,而在北京,这样的薪资水平大致介于每月10千至20千人民币。
3-5 年又是一个层次,在北京薪资范围是 15-25k;
5 年及以上又是多个层次。
自然,即便只有1至3年的工作经历,也有可能获得与3至5年经验相当的薪酬水平,这主要取决于个人能力,而我们的讨论重点也正是这一方面的因素。
在先前章节中,我曾提及程序员大致可分为两类:一类是科班培养的,另一类则是半路转行的。我并非断言科班培养的程序员就必定优于半路出家的,这两者实为截然不同的概念。但科班培养的程序员通常具备更宽广的知识面,因此,其他人也应重视知识的广度和基础技能的培养。
在本次对话中,我并未将问题聚焦于特定语言,这是因为过分专注于编程语言可能会对开发工程师构成阻碍。
追语言的人
常遇到这类情况:与开发界的伙伴闲谈时,上回见面时提及正在学习前端技术,而一个月后再聚,话题又转向了 Python,纷纷表示 Python 的实用性。再过一个月,话题又变成了对 Go 语言的探讨,大家预言 Go 语言将成为未来的趋势。对于这类人,我习惯称他们为“追逐语言潮流者”。
切记,切勿盲目跟从某种语言,因为一旦你精通一门高级语言,对语法基础的掌握便会变得迅速而高效。此外,当前的语言在语义表达上极为友好,使得学习和接触变得异常简便。实际上,我们最关键的是要深入理解语言的本质特性。
众多人士投身于机器学习领域时,普遍倾向于学习 Python 等编程语言,然而,我们有必要深入探讨为何 Python 会成为首选,以及 R 语言、Java、JavaScript、C、C++、Scala 等其他语言各自具备哪些独特优势。
以这种方式进行思考,一旦公司面临比目前更为繁杂的情境,你便能洞悉应对此类特点情境所需采取的编程语言和技能组合。通过这样的实践,你对编程的理解将实现质的飞跃。
自娱自乐的人
有些人总是反复进行同一项活动,并从中获得满足感,尽管这并无大碍,但这样的行为可能会让我们陷入停滞不前的困境。
常常能听到这样的说法:我们公司的工作不多,一旦完成就没有其他事情可做,显得相当单调。实际上,这反映出他错失了成为更卓越程序员的机会,因为学习正是提升自我的阶梯。即便目前公司并未采用这项技术,你们也应当把握空闲时间进行学习。
程序员之间的分层现象,其根本原因在于学习习惯的差异。何以见得?直接导致分层的因素是知识广度,而这一广度的拓展依赖于持续的学习,同时学习效率亦至关重要。我常听闻一些程序员对技术主管的技术能力表示不满。这或许正是不同层次程序员之间差异的体现,由于他们看待问题的视角各异,未能充分理解解决问题与提出方案之间的内在联系。
程序员如何快速成长
我们主要是探讨,抛砖引玉。
首先我们要看到的字眼是成长。
我曾指导过一位程序员,他同样从事了一年的开发工作。我指导他利用 User-Agent 来辨别用户是否在微信上浏览,他却询问我 User-Agent 是什么。别觉得这很荒谬,实际上对这类知识一无所知的人并不少见,原因在于他们过分专注于自己的 CURD 技能。我并非认为 CURD 存在缺陷,但实则 CURD 的价值仅相当于掌握 User-Agent 的知识那样,仅是基础知识。
对于从事软件开发的人员而言,掌握计算机网络的相关知识至关重要;无论是计算机专业出身还是其他专业背景,计算机网络课程都是必学内容。即便不是计算机专业的学生,也应当对基础的HTTP请求报文及其响应报文的结构有所了解,这些知识构成了计算机科学的基础。
在培训机构授课期间,我常要求学生记忆面试题目中关于MySQL的InnoDb与MyISAM引擎的差异。每当学生回答出InnoDb支持事务而MyISAM不支持时,看到领导脸上露出愉悦的笑容,我心中也忍不住泛起笑意。
支持事务与不支持事务构成了一个差异,若我不追求事务支持,仅采用InnoDb引擎,又何来问题呢?因此,我认为脱离实际应用场景去讨论技术点,往往是导致程序员被归类为低层次人才的最直接因素。
这仅仅是一个示例,旨在阐述学习确实需要根据不同情境来调整。在学习语言的过程中,我们应当思考为何不继续使用现有的语言,而是要转而学习一门新的语言。以机器学习为例,为何不采用 PHP 来进行?提及这个问题,或许很多人会感到好笑,“PHP 是全球最优秀的编程语言”(在此我允许自己开个小玩笑,因为我对它情有独钟)。
我们再次认真审视这个问题,请您深入思考。众多投身于机器学习领域的人士,往往随波逐流,看到他人纷纷学习 Python 进行编程,便也跟风学习。诚然,人生短暂,选择学习 Python 并非错误之举。在这股追逐 Python 的热潮中,我们也不难发现,许多原本从事 C、C++、Java 编程的程序员也加入了这个行列。初涉足Web开发领域,面对众多编程语言,对于初学者而言,究竟应该优先学习php、python还是ruby,这无疑是一个值得深思的问题。
引用了那句常被提及的话语:“几年前,一群人哀叹着声称Java即将走向末路,然而Java真的走向末路了吗?” 请别再徒然担忧语言的命运,你更应学会的是如何明智地挑选编程语言。
招聘网站上的企业对于所需程序员应掌握的语言种类,构成了众多程序员的学习目标。企业在挑选编程语言时,会权衡众多因素,比如过往项目所用的语言、迁移成本、人员培训的开销、语言对硬件的消耗、沟通成本等,而最关键的是该语言能否有效解决现有问题,以及解决问题的效率。
因此,我们需独立判断,针对不同情境深入挖掘技术层面的具体问题,并且必须具备非凡的吸收新知识的能力。
PHP 程序员渴望的蜕变
我的同事持有这样的看法:PHP程序员在转型发展上主要有两个路径可供选择,一是深入后端开发领域,通过学习Go或Java等语言,进而加入使用这些语言的公司。比如,在从事PHP开发的过程中,鲜少有人会去关注异步、协程以及多线程等技术点。二是转向前端领域,前端同样是一个竞争激烈的领域,而且所需掌握的知识点并不亚于后端。
或许有人会提及我立志成为全栈工程师,然而我和我的同事们持有相同的看法,那就是不要仅仅成为一个通晓各种技能却对每一项技能都缺乏深入理解的所谓全栈工程师。
当然,这里需要特别提醒那些极度缺乏安全感的程序员,PHP 并不会走向消亡。
新浪、神马搜索、百度等知名企业均在使用 PHP 进行开发,并设立了相应的职位。对于小型公司而言,这种情况更是普遍。在业务流程简单、周期短的项目中,PHP 依然是首选技术。PHP 的初衷便是快速构建网络应用。当然,你也可以选择其他编程语言,但基础知识的扎实积累是不可或缺的。切勿让自身的知识体系变得过于浮夸。
或许众多程序员都渴望迅速投身于人工智能与机器学习的领域。若你立志成为该领域的编程者,不妨浏览网络上的各类文档教程进行学习,诸如 TensorFlow 等平台提供的 API 也相当丰富。然而,若你希望在此领域有所建树,首要任务是深入理解那些经典的算法。
干货,你需要的转型路线
依据程序员所从事的开发产品层次,我们可以将他们划分为两大类:前端工程师与后端工程师。然而,目前对于开发工程师的分类已经变得更加复杂多样。接下来,我将从前端和后端这两个主要类别入手,与大家进行探讨。
PHP 实际上占据了一个独特的位置,这本身也是一件乐事。有人认为 PHP 属于前端技术范畴,而另一些人则将其归类为后端技术。这两者之间的分界线并不那么清晰。通常,我们所说的前端语言是指那些负责处理表现层工作的编程语言,而 PHP 在处理哪些层面的问题上,决定了它的定位。
在你考虑转型之前,PHP 应该已经让你具有这些知识。
首先是对 MVC 模式的认识,这并不复杂,但关键在于要懂得以此为基点进行拓展。比如 MVVM、MVP 等模式,需要搞清楚它们之间的差异。然而,理论通常较为单一,因此务必记得将之与实际项目相结合来深入理解。
此外,还需熟悉 HTTP 请求与响应的相关知识,实际上这一领域的内容我们日常都在运用,然而许多人对它仍感困惑,比如,我们常借助浏览器开发者模式中的 Network 部分点击特定请求来查看其头部信息。
如下图:
面向对象的理念,在业界评价参差不齐,尤其是面对函数式编程的日益流行,众说纷纭。实际上,这两种编程范式各有千秋,我们真正需要做的是深入理解面向对象的利弊所在。期待 PHP 能够帮助大家掌握不同类型变量的概念及其应用技巧。
PHP包含四种标量数据类型,即布尔型、整型、浮点型和字符串;另外,它还拥有三种复合数据类型,分别是数组、对象和可调用类型;此外,还设有两种特殊类型:资源类型和空值NULL,并且还额外提供了一些伪类型。
若你对上述知识有了深入理解,那么你在实现转变的过程中可能会感到更加顺畅。
首先来说说向前端的转型。
若想实现前端技术的转型,JavaScript 是一项不可或缺的技能。然而,究竟需要掌握到何种程度呢?这无疑是大家普遍感到困惑的一个难题。许多人可能会持续深入钻研 JavaScript 的语法。然而,面对 JavaScript 这门涉及众多复杂知识点的学科,若一味地沉迷于语法学习,恐怕会事倍功半。
实际上,关键在于前端的设计理念。一旦熟悉了 JavaScript 的基础操作,诸如字符串、数组、对象以及 JSON 的处理,便可以开始探索如 vue.js 或 react 这样的框架。我建议初学者从 vue.js 入手,因为它相对简单,易于上手。当然,对 HTML 和 CSS 的基本应用也必须掌握。在学习阶段,观察他人的项目成果极为关键;我们可以在 github 上查找与 vue.js 相关的项目,从而了解他人是如何进行实现的。
另一种转型方向是转向服务端开发。
在众多服务端开发语言中,Java和Go只是其中的两种,可供选择的语言种类繁多。对于有基础的程序员来说,入门阶段不宜直接从厚重的语法基础入手,因为这样会耗费大量时间。掌握基础语法后,便可以挑选一个框架进行学习,在学习过程中遇到问题,再回头去深入研究语法。
在这儿选择非常多,我不具体说明了,只给大家一个建议。
众多程序员对其青睐有加的 go 语言,实则相较于其他编程语言而言,操作简便,在工程项目中表现稳定,且自带一套开发规范,goroutine 还为服务器开发提供了便利。在我国,七牛云公司很早就采纳了 go 语言,目前众多大型企业亦开始利用 go 语言来应对一些技术挑战。
众多人士因人工智能与Python的强大功能而倾向于选择Python作为学习路径,然而,若选择此路径,务必准备投身于数据挖掘、处理及计算等领域。对于编程语言的选择,各人见解不一,一个基本的标准则是观察企业对特定语言的依赖程度。
在投身于服务端开发领域的过程中,所需掌握的知识点极其繁杂,例如性能提升的相关知识。许多人提及redis时,往往仅用一句话带过,将其视为一种缓存工具。这便是我之前所提及的业务场景问题所在,它反映出你对业务场景的理解过于狭隘,进而导致你对所需知识的掌握不够全面。
当然,通信方式的相关问题也不容忽视,许多人对MQ、Cron、RMI、RPC等这些技术可能感到相当陌生。在此,我并非要求大家立刻购买书籍进行学习。请记住,在决定学习某一技术之前,务必先构建一个实际的应用场景。
程序员最为渴求的,同时也是他们普遍感到不足的,便是沟通。他们亟需与其他程序员进行频繁的交流,广泛地交换观点,这对他们的个人发展极为有利。
总结
互联网领域并非踏入便能安享太平的行业,你必须持续学习,不断进步。
即将踏入该领域的编程新手们不必灰心,应当探寻适合自己的学习和进阶之道。众多线下培训机构质量参差不齐,务必谨慎挑选。若你在网络资源检索上遇到困难,那可能意味着你需要反思自己的学习方法。毕竟,当前网络上的资源如此丰富,获取资料本应相对便捷。
PHP 程序员不需要有太大的语言本身的危机感。
迅速发展的核心在于对自身有一个准确的理解,避免盲目追随潮流。需关注不同情境下的学习,具备分析并处理所遇问题的能力,攻克或改善遇到的难题。这一过程同样是一个宝贵的学习经历。
最后,再次感谢PHP大牛魏永强带来的分享!
1. 少走弯路,一个老程序猿谈PHP职业发展规划
2. 程序猿34岁是一个坎?再谈大龄程序员的出路