PHP程序员的内卷困境:以庖丁解牛之道找回技术初心
这两年聊到PHP很多人的第一反应是“PHP是不是不行了”“还在写PHP是不是有点过时了”。每次在技术群里看到类似的讨论我都觉得有点哭笑不得。我接触PHP已经有十年左右从PHP 5.2一路写到现在经历过ThinkPHP 3.2.3那个“国产框架最热闹”的年代也看着Laravel一步步成为主流。坦率地讲PHP确实没有前些年那么“风光”这个行业也确实越来越卷——但正因为卷我才更想说清楚一件事很多PHP程序员把自己的路走窄了不是因为PHP这个语言不行而是因为他们在内卷里慢慢丢掉了一个很重要的东西——像庖丁解牛那样对技术本身纯粹的好奇心和掌控感。这篇文章想聊的不只是PHP而是所有被“内卷”裹挟的程序员。我会从PHP的具体处境出发拆解“内卷”到底卷掉了什么再用“庖丁解牛”的三重境界整理一条从“被动追框架”到“主动掌控技术”的成长路径。如果你是刚入行的PHP新人或者写了两三年代码开始有点迷茫的初级/中级开发这篇文章应该能给你一些不一样的视角。1. 卷而不进的PHP程序员到底卷在了哪里1.1 用战术上的勤奋掩盖战略上的迷茫我见过不少PHP程序员每天忙得脚不沾地但回头一看能力几乎没有长进。这种“忙碌”有一个共同特点都在追赶别人定义好的东西。框架出新版本了赶紧学某大厂面试题里出现了某个冷门概念赶紧刷看到别人写技术文章也跟着写但写来写去都是那种“ThinkPHP 3.2.3 如何实现文件上传”的搬运文。这种状态本质上是把“知识收藏”当成了“能力增长”。你收藏了一百篇教程不意味着你就懂了一百个原理你刷了三百道面试题不意味着你就能解决真实项目里那个诡异的Bug。我认识一个做PHP开发的朋友工作五年简历上写了精通ThinkPHP、精通Laravel、精通Redis、精通MySQL优化。有一次他遇到一个问题线上接口偶尔慢但数据库单独执行SQL很快。他排查了两天没头绪最后发现是PHP-FPM的进程数配置太低请求排队了。这个问题的根源其实非常基础——你只要理解PHP-FPM的工作模型看一眼pm.max_children的配置就能定位。但因为他平时只关注“怎么把接口写完”从不关心“这个进程是怎么跑起来的”所以哪怕工具链再熟也解决不了这种跨层问题。这其实就是内卷的一个典型特征做的事情很多但都是在同一个“操作层”上重复没有任何一层往下深挖。1.2 框架焦虑与技术选型的恶性循环PHP圈子里的“框架焦虑”比其他语言更明显。根本原因在于PHP的入门门槛低大量新人涌进来导致“初级开发者”这个池子极度拥挤。而框架恰恰是很多人用来证明“我高级”的一种方式。你想想看是不是经常能看到这样的情况某个项目原本是ThinkPHP 3.2.3写的运行得好好的但团队里有人提出来“这框架太老了必须升到新版/换个框架”然后整个团队花了两三个月重构中间出一堆兼容问题最后功能倒是没变稳定性反而下降了。为什么要换因为“老框架写简历上不好看”。我举这个例子不是说框架不该升级而是说很多框架层面的选择根本不是基于技术判断而是基于焦虑。当一个人把“我的价值”等同于“我用什么框架”的时候他就已经失去了对技术本身的判断力。你会发现这类人特别容易被热点牵着走——今天听说Swoole好就学Swoole明天听说Hyperf香就搞Hyperf后天看到Go语言工资高干脆想转Go。每个东西都学了个皮毛每个东西都用不深五年下来简历上能写的越来越多能拿得出手的解决方案却越来越少。1.3 “搬砖量”不等于“技术深度”还有一个很迷惑人的内卷陷阱就是用“产出量”来衡量自己的成长。比如别人一天写500行代码你一天写800行你会觉得自己更努力、更有价值。但实际上代码量的多少和技术深度之间几乎没有任何正相关关系。我有段时间带过一个新人他写代码特别快特别能加班一个模块别人要两天他半天就能给你“糊”出来。但每次review他的代码我都要花很多时间帮他改——不是风格问题而是逻辑漏洞太多了。他那个模块看起来能跑但只要输入稍微极端一点就报错。他以为自己在“高效产出”但实际上只是在快速制造问题。真正的技术深度是你能不能在写代码之前就想清楚边界条件能不能在出问题之后十分钟内定位到根因能不能在别人都在“复制粘贴改改”的时候写出一个逻辑清晰、结构合理、以后维护起来不痛苦的方案。这个东西单纯靠“多写”是练不出来的得靠“多想”。这就引出了这篇文章的核心话题——PHP程序员在内卷中丢失的初心到底去哪里找回来我后来发现古人其实早就把答案写明白了就是“庖丁解牛”这四个字。2. “庖丁解牛”对程序员而言究竟在说什么2.1 庖丁解牛不是鸡汤是一套方法论很多人听到“庖丁解牛”这四个字第一反应是哦讲的是熟能生巧。这个理解不能说错但太浅了。庖丁解牛这个故事里最核心的不是“他杀了多少头牛”而是他讲的这段话始臣之解牛之时所见无非牛者三年之后未尝见全牛也方今之时臣以神遇而不以目视。换句话说庖丁解牛经历了三个阶段第一个阶段看到的是一整头牛不知道从哪下手第二个阶段能看到牛的骨骼、肌肉、筋腱之间的缝隙知道刀该往哪里走第三个阶段根本不需要用眼睛看凭感觉就知道关节在哪里、缝隙在哪里刀进去游刃有余。这哪里是在讲杀牛分明是在讲任何一种专业技能的学习路径。程序员面对一套代码系统跟庖丁面对一头牛是一模一样的。第一阶段你看到一个项目就像看到一整头牛——控制器、模型、视图、路由、中间件、服务提供者、数据库迁移文件乱七八糟一大堆你不知道哪些是关键路径哪些是可有可无的第二阶段你开始能分辨出各部分之间的“缝隙”——你知道了请求从Nginx到PHP-FPM再走到框架路由再到业务代码的完整路径知道了框架的“骨架”和“业务逻辑”在哪里分界知道哪些代码是核心哪些代码是“肉”第三阶段你不光熟悉这套系统你还能预判它哪里会出问题哪里可以优化哪里需要重构你的刀工已经不受具体框架限制了。2.2 “初心”的本质不是怀旧而是对本质的好奇我写这篇文章时一直在想到底什么是PHP程序员的“初心”是守着老技术不动吗是用PHP写一辈子不转Go吗都不是。初心是你当初第一次写完一个页面、第一次把数据库里的数据展示到网页上时的那种“这个东西竟然真的跑起来了”的兴奋感。是你在排查一个Bug时顺着日志一层层挖下去最后找到根因的那一刻的顿悟感。是你把一段又臭又长的代码重构得清清爽爽时那种发自内心的满足感。内卷让人丧失的恰恰就是这些东西。当你的注意力全部放在“别人今年工资多少”“别人学了什么新框架”“公司会不会裁员”上的时候你的精力就被消耗干净了根本没有余力去感受技术本身带来的乐趣。你变成了一个工具人——写代码只是为了交付交付只是为了不被骂不被骂只是为了保住这份工作。但你有没有想过如果长期处在这种状态里你就算保住了工作你的能力也一直在原地踏步三年后照样被更年轻、更能拼的人取代。所以找回初心不是让你“回到过去”而是让你重新回到对技术本质的关注上。接下来我想用庖丁解牛的三重境界对应PHP程序员的成长路径把这个过程拆开讲。3. 三重境界从“见牛是牛”到“游刃有余”的PHP进阶之路3.1 境界一所见无非牛者——新手期的“背框架”阶段庖丁刚开始解牛的时候看到的是一整头牛。PHP新手也差不多刚入职或者刚学完基础语法进入一个项目看到满屏的代码最大的感受就是这玩意儿是怎么串起来的在这个阶段最正常的做法就是“背”。背框架的目录结构背路由怎么写背模型怎么调用背SQL怎么拼接。我很理解这个阶段的人因为我自己也是从这一步走过来的——当年用ThinkPHP 3.2.3写第一个项目的时候我连I(post.xxx)这个I函数为什么要用都搞不清楚只知道照着老代码抄就不会错。这个阶段有一个特别典型的“背框架”表现代码风格完全依赖框架离开框架就写不了程序。你让他用原生PHP写个简单的用户登录他能憋半天。没有Model类他就不知道数据该怎么取没有数据库类他就不知道连接该怎么建。这不是他的错这只是认知阶段的局限——他还没有从“牛是牛”的阶段走出来。在这个阶段我不建议新人急着去追新框架、看源码、谈架构。你连一头牛的整体结构都没看清呢谈什么“目无全牛”这时候最重要的事情只有一件踏踏实实把项目跑起来把功能写出来弄明白一个请求从浏览器发出到页面显示中间到底经过了哪些环节。我当时有一个实操习惯对新手特别管用——打断点跟请求。每收到一个请求就在入口文件比如ThinkPHP 3.2.3的index.php最前面加一行写日志的代码把$_SERVER、$_GET、$_POST这些原始数据打出来。然后逐步往框架内部走看路由是怎么把URL映射到控制器上的看控制器是怎么把数据交给模板的。这个过程跑两三次一个PHP项目最基本的运转逻辑就刻在你脑子里了比你看十篇框架教程都管用。3.2 境界二目无全牛——从“会写”到“懂原理”的跨越“三年之后未尝见全牛也”——这句话放在程序员身上意思就是你开始能透过代码的表象看到系统内部的“骨骼”和“缝隙”了。拿PHP来说这个阶段的典型表现是你不再把框架当成一个不可拆解的黑盒而是开始理解框架背后那些底层的东西。举个例子同样是使用ThinkPHP 3.2.3境界一的程序员只知道“模型可以查数据”境界二的程序员会开始思考Model-find(1)这行代码底层到底执行了哪些SQL框架是如何通过PDO连接MySQL的连接池是怎么回事I(post.id)这个函数是怎么对输入做过滤的它和直接访问$_POST[id]有什么区别PHP-FPM拉起PHP进程、PHP解释器初始化、然后执行脚本这个过程的时间都耗在了哪里到了这个阶段你开始隐约能看到那头“牛”的关节了。你知道控制器和模型之间应该怎么分工知道SQL查询在什么情况下会走索引、什么情况下会全表扫描知道Session和Cookie的区别不只是“一个存在服务器一个存在客户端”。你开始理解框架只是PHP的一种“组织代码的方式”而PHP本身、HTTP协议、MySQL、Linux这些才是真正的地基。怎么判断你到了这个阶段有两个很直观的指标。第一你不再害怕“脱离框架”哪怕让你用原生PHP写一个不带任何框架的API服务你也能很快理清思路。第二你开始主动读源码了——不管是框架的源码还是PHP官方文档里那些底层的说明你不觉得那是负担反而觉得有意思。这个阶段最忌讳的就是“知道了原理但不动手验证”。很多人看完源码觉得“原来是这么回事”然后就没有下文了。这不行。你要真正“看到”那条缝隙得自己把框架的代码走一遍或者干脆用原生PHP把一个控制器路由的简易版写出来——用$_SERVER[REQUEST_URI]取出URL自己写一个正则去匹配路由规则匹配上了就include对应的控制器文件。这段代码可能只有几十行但跑通那一刻你对“路由是什么”的理解绝对超过你读十篇文章。3.3 境界三游刃有余——不依赖具体框架的技术掌控力“以神遇而不以目视”说的是一种极其熟练之后的状态刀已经不需要在牛身上比划就知道从哪里下。放在PHP程序员身上就是你不依赖具体的语法和框架也能基于对原理的理解快速分析和解决问题。这个阶段的PHP程序员有以下几个特征。第一个特征技术选型有主见不盲从热点。有人问你“PHP是不是该转Go了”你不会慌你会先想清楚你当前解决的是什么问题这个语言/框架的核心优势和不可替代点在哪里你能够从业务需求出发而不是从技术潮流出发来做决策。第二个特征解决Bug的能力质变。不是靠“打日志-猜-再打日志”这种循环而是靠对系统整体运转模型的理解做推理。比如遇到一个“某个接口在高峰期偶尔超时”的问题你可能不会直接看代码而是先看PHP-FPM的进程数、看慢日志、看MySQL的锁等待时间心里已经有了一张排查路径图然后按图索骥快速定位。第三个特征有“迁移”能力。庖丁解牛解的是牛但掌握了关节规律之后解其他的牲畜虽然不完全一样也能很快上手。程序员也一样——你在这个公司用ThinkPHP去了下一家用Laravel再下一家可能完全不用PHP但你学习新框架的速度会比别人快很多因为你理解的不是“这个框架怎么用”而是“框架一般要解决什么问题、通常怎么解决”。你会知道路由、ORM、模板引擎、事件系统这些概念在哪个框架里都存在只是叫法和用法不同。我还想强调一个点这个境界不是“用PHP十年自动到达”的。它是靠持续的深度思考和规律总结才能逼近的。如果你写了十年PHP但始终停留在“接需求-写代码-上线”这个循环里那你可能还是停留在第二甚至第一境界。这就是普通程序员和顶尖程序员的真正差距——不是语言、不是公司、不是学历而是对规律的理解深度。4. 回归“解牛”的实操方法从“卷”回到“掌控”4.1 停止无效学习用“原点思维”重新规划技术路线聊完了三重境界现在的问题就来了我承认我确实有点卷那我该怎么办第一个建议是停止无效学习。把收藏夹里吃灰的教程清一清把各种“XX天精通PHP”的课程退掉从今天开始只学那些能让你更理解“系统如何工作”的东西。我给自己定过一个技术学习的原则叫“原点思维”——就是不管学什么东西都问自己一个问题这个东西解决了什么本质问题它的最初设计动机是什么拿PHP的Composer来举例。很多人用Composer只是知道“composer install能把依赖装好”但如果你用原点思维去问为什么会有Composer因为PHP项目的代码复用一直很痛苦以前大家都是手动下载第三方库、手动include版本冲突还特别严重。Composer的出现就是为了解决“包管理”和“自动加载”这两个痛点。理解了这一层你再去看Composer的autoload机制、psr-4规范就不会觉得难了因为你知道它是在解决什么问题。同样学一个新框架以前先别急着看用法先问这个框架比之前的框架好在哪它解决的是什么痛点它的作者在设计时做了哪些取舍带着这些问题去学你的理解深度会和“照着视频敲一遍”完全不在一个层次。4.2 找一个“解牛”项目不要做搬运工试着从零造一套轮子我特别建议每个PHP程序员不管工作多忙都保持一个“自己的小项目”。但这个项目不一定是为了赚钱也不一定是为了做产品而是为了让你找回“解牛”的感觉。什么叫“解牛”项目就是把别人做过的东西从零再实现一遍。比如你已经用过很多次ThinkPHP了那你能不能自己写一个“迷你版框架”也不用多复杂只需要实现一个入口文件接收所有请求一个简单的路由把URL映射到控制器方法一个Model基类封装PDO的连接和基本的CRUD方法一个模板渲染函数把PHP变量传到HTML模板里。看起来很简单等你真的写起来就会发现一个“能跑”的框架和“好用”的框架之间差了十万八千里。你会遇到各种问题路由匹配顺序怎么定参数绑定怎么处理SQL注入怎么防PDO的预处理到底怎么用才对这些问题看起来简单但每一个都会逼你去查底层文档、看PHP源码注释然后在实践中验证。我自己的体会是每写完一个这样的小项目你对PHP的理解就会“通”一次。那种感觉特别像一个厨师自己亲手从切肉开始做了一顿饭以后再吃到别人做的菜就不光是尝味道还能尝出门道来。4.3 用写作和复盘倒逼深度思考还有一点非常重要输出倒逼输入。这是我自己验证过的最有效的学习方式。你在工作里解决了一个“别人解决不了”的难题或者踩了一个很隐蔽的坑不要只是发个朋友圈“搞定”就完了把它写下来。写什么呢不是写“今天遇到了一个问题百度了一下发现是XXX改好了”这种流水账而是要把问题的背景、排查过程、可能的原因、最终方案、背后的原理一条一条捋清楚。写不出来说明你没想透。我有一次写一篇“PHP-FPM进程管理”的文章写了整整一个周末。一开始觉得自己挺理解的但真的开始组织文字的时候才发现很多细节自己其实一知半解——比如pm.max_requests到底是怎么触发重启的、跟pm的几种模式之间有什么配合关系。为了写清楚我翻了半天源码和文档还做了好几次实验最后文章写完了那个知识点我是真的“刻进骨头”里了到现在都忘不了。写作还有一个额外的好处它会倒逼你形成自己的技术判断和价值体系。当你开始定期输出你会发现你不再那么容易被他人的焦虑情绪裹挟了因为你已经有了自己的思考框架和判断标准。4.4 把“解决问题”而不是“写代码”作为成就感的来源最后一个实操建议可能有点“反直觉”重新定义成就感。很多程序员在入行前两年成就感来源于“我今天写了很多代码”三五年后成就感会逐渐变成“我解决了一个别人解决不了的问题”。这两种成就感有本质的区别。前者是“量”的思维很容易被内卷裹挟——因为总有人比你写得多后者是“质”的思维它强调的是一种“庖丁解牛”式的通透感——我对这个系统的理解比别人更深我在关键时刻能稳住局面。我工作这些年见过太多“代码写得很热闹、但系统一崩就手足无措”的程序员。他们不缺乏努力但缺乏对系统的“掌控感”。而掌控感这种东西恰恰是让你在漫长的职业生涯里保持热爱、不焦虑的“定海神针”。所以从今天开始遇到问题的时候先别急着自己“写”代码先停下来“看”代码。把系统当成一头牛来看找到关节和缝隙再决定这一刀往哪里下。相信我这种感觉比盲目卷有意义得多。5. AI时代PHP程序员的“道”在哪里5.1 AI工具不会淘汰程序员淘汰的是“不会解牛”的程序员最近两年ChatGPT、Copilot、各种AI编程工具火得一塌糊涂。很多PHP程序员开始焦虑AI都能自动写代码了我们是不是要被取代了我的观点是AI确实替代了一部分“写代码”的工作但它替代不了“解牛”的工作。AI擅长的是“根据给出的需求生成代码片段”它不擅长的是“在复杂的、有历史包袱的、缺乏文档的旧系统里定位一个隐蔽的Bug”。你想想看你自己公司的那个运行了五六年的PHP项目里面有十几个人的“历史代码风格”有些函数几百行有些变量名根本看不懂是什么意思还有一些“看起来没用但删掉就出Bug”的神奇代码。出一个奇怪的问题你把上下文贴给AIAI能帮你解决吗大概率不能。因为它不了解你这头“牛”的特殊结构——哪些地方是“骨头”哪些地方是“筋”哪些地方只是“肉”可以大刀阔斧地切掉。这些信息只掌握在真正“解过这头牛”的程序员手里。这就是AI时代的悖论越是用AI越需要你有庖丁一样的判断力。AI给你生成了一段代码你要能判断它是不是符合你的系统架构AI给你提供了一个排查思路你要能判断它适不适合你的项目场景。而判断力恰恰来自于你对底层原理的深刻理解。一个连PHP-FPM进程模型都搞不清的人用AI排查问题的时候甚至连“让AI看哪个日志”都不知道。5.2 PHP的“慢”不是劣势反而是深度思考的机会还有很多人唱衰PHP说PHP太“老”了、太“慢”了、生态太乱。我不否认PHP在某些场景下的确不如一些后起之秀但“老”和“慢”恰恰给PHP程序员提供了一个额外的红利这个语言太成熟了原理解析的资料一抓一大把只要你想深挖你几乎找不到挖不动的地方。相比之下一些很年轻的语言和框架变化太快今天学的东西明天就变了反而不利于沉淀。PHP的语法、运行时、跟Nginx和MySQL的配合方式这些底层机制早就稳定下来了它就是一头“骨架清晰”的牛特别适合用来训练你的“解牛”能力。所以我的建议是与其焦虑“PHP是不是要凉了”不如把这个阶段当成一个难得的“内功修炼期”。把PHP的底层机制研究透把从HTTP请求到数据库查询这条完整链路搞明白把架构设计的基本功打扎实。这些能力不管以后你写PHP、写Go还是写Java都是可以迁移的而且是AI时代最稀缺的部分——因为AI可以做“执行”但做不了“判断”。6. 一点个人体会在我自己的职业经历里见过一波又一波的人从PHP转到别的语言也见过不少人在PHP这个领域深耕之后成了团队里解决问题最快、话语权最重的人。他们之间的区别从来不在语言本身而在于是否真正掌握了“解牛”的思维方式。回到开头的那个问题PHP程序员为什么会在内卷中丧失初心我的答案很简单——因为我们把太多注意力放在了“别人怎么看”上而太少放在“我自己是不是真的懂”上。当我们被“框架更新”“薪酬对比”“行业唱衰”这些外界声音牵着走的时候我们就离“以神遇而不以目视”的状态越来越远了。如果你想找回那种状态我建议你不要急着学下一个框架、刷下一道面试题而是先从你手头最熟悉的那个PHP项目开始试着回答这几个问题一个请求从浏览器到数据库再返回中间每一步都发生了什么框架里那几行你最常用的代码底层到底是怎么实现的你负责的模块里哪个环节最容易出问题为什么想清楚这几个问题你其实就已经在“解牛”了。剩下的就是拿刀顺着缝隙一刀下去游刃有余。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →