PHPer 请停下来好好想一想,你到底想要什么样的出路(下篇)(转)
(如果你没有阅读上篇,请先阅读上篇)
PHP 从诞生起就是自由职业者的最爱,时至今日依旧是。早期阶段 Java 在后台系统并没发力,没有特别好的框架和支撑体系,那个阶段 PHP 风光无两,因为生态有较大的优势,甚至最早期人们玩 Wodpress,Drupal 等 CMS 系统,一群没什么技术基础的人做站长也能风生水起,当然现在这样的人也有不少。那个阶段全世界范围来讲,互联网的基础设施和用户使用的网络访问终端工具也相对较少。彼时手机根本是不怎么上网的,更别说网络应用了,即便到了 3G 时代,大部分手机依旧是功能机,除了内置的小应用以外没有什么企业开发手机端应用。因为网速龟爬,毫无用户体验可言。开发成本也超级高,一般的企业想都不敢想,也基本不会去想。在这个阶段,Java 在后端也开始发力了,有了成熟的框架,生态却不成形。
4G 是一个全新的时代,同时也是智能手机的爆发期,企业发现随着软硬件基础设施的完善,企业可以通过手机端的应用直接触达终端用户。不管是网站还是应用所面对的庞大流量是往日所不敢想象的。单机应用越来越少,几乎所有的软件都成为了网络应用,手机也从电话短信手机变成了纯网络服务对接用户的终端。此时智能手机端的头一批上架的应用必须面对庞大的用户群所带来的高并发访问量。由于应用太少,再烂的应用都有庞大的用户下载和使用。这个时候出现了全新的转折点,这涉及到了两门语言的转折点。一门是 PHP,另外一门就是 Java。PHP 的团队当时还满足于彼时的现状,并未发觉新时代已然悄然到来,并未对 PHP 的执行效率方面下功夫,面向对象以及模块化等诸多适宜团队协作和功能复用的机制也并未推出,这让它无法满足企业对于后端语言在团队协作以及运行效率的需求,PHP 开始正式进入下滑通道。
Java 则完全是另外一番场景,Java 已然摆脱了 “磨蹭先生” 的标签(曾经大家都鄙视它,觉得它没技术含量)。早期安卓应用必须得用 Java 开发,仅凭这一点,Java 应用端开发开发的需求就造就了 Java 工程师的高需求量,而最初阶段除了头部公司之外,大部分还都是单机应用。在 Java 开发者内部也开始分流,转向服务器后端开发,这个时候是 Struct 框架兴盛期,虽然它臃肿、开发的复杂度也高,但是至少服务运行效率、团队协作、开发效率方面能够非常均衡得满足公司们的需求,微软体系又过于封闭,只想自己赚钱,它的整个后端体系也没能及时转变适应企业的实际需求,C++ 等语言的开发效率又实在太低,这导致 Java 基本成了大中型项目的唯一 “明智选择”。这个时候我们不得不感概一句:“同行的衬托和自己的努力真的太重要了,当机遇到了,你也到了一定程度的时候,赵匡胤式的黄袍加身似乎成了必然的结果”。
大公司代表着技术圈的风向标,这进一步巩固了 Java 语言的江湖地位,后来 SprinBoot 体系的崛起更是让后端的开发效率如火箭般窜升,Java 圈直接是爆了粗口:“Struct 就是个垃圾”,当年花前月下的小甜甜不但没能变成牛夫人,竟然直接被 Java 圈扫地出门。江湖代有人才出,一代新人胜旧人,公司对待技术人员,又何尝不是。
当然 Java 由于在 C 和 C++ 之后推出,它的很多语言特性天生就适合企业团队协作,它极为均衡,既满足公司项目对于项目执行效率的需求,其开发效率也足够,虽然它也有繁琐的地方,但在团队协作的企业项目中,它绝对是首选。而且 Java 工程师有明确的学习提升线路图,不管是个人提升还是企业选人,都有比较清晰参考坐标。Java 开发者在这种情况下,不管在技术上还是技术发展规划上,有明确的努力方向,从技术层面讲能较好的衡量自己大致到了哪个阶段,对自身以及所在公司都能做出良好的定位和评判,以决定自己的下一步如何去走。Java 虽然也有很多让人诟病的地方,但是它的业内生态确实是无出其右,这个生态不光包含了开发资源的生态,同样还包含了职场生态。
Java 作为梗圈 “宇宙第一开发语言” 对于企业来说太好了,但是对于开发者来说存在一个很大的隐患,那就是可替代性太强了。原因就在于上述的种种优势,开发者像是流水线上的一个个标准件一样,而且你必须保持更高的水准才能在最卷的 Java 圈长期生存发展。同时由于人太多,而移动互联网资本大潮已过,开发者的流向逐步会成为问题。Java 也成了最卷的编程语言,对于新人入行提出了更高的要求,对于旧人则更甚。对于 Java 工程师来说,你的后程想走得好,要么在这家公司迅速占据核心位置,要么早点争取到大公司工作几年增加自己的后程筹码,不然后半程也会很尴尬,你很难抵挡住后来者的强烈冲击。
技术发展的同时,用户也变了,除了主流应用之外,用户面对海量的应用早已没了曾经的热情,用来用去每个人基本就是那几款应用。于是绝大部分项目的流量大幅度下降,后台所需的并发也不需要那么高了。
PHP 重新开始恢复元气源于基于 Composer 体系的 Symfony,Laravel, ThinkPHP 等现代化专业高效开发框架的崛起,PHP 不但可以满足中小企业的要求,自由职业者使用它们也可以以超高效率构建灵活而强大的项目。学习成本极低,只要你学过别的语言,PHP 在语法层面基本不需要学习成本。开发所需的生态资源非常完善,开发效率相比以往更是得到极大提升,项目部署也非常简单易操作,这些都是 PHP 能够一直生存下来的核心竞争力。
只是在大中企业中,它的就业职场生态相对狭窄。它的执行效率完全能满足中小项目的需求,这也是为什么小公司、自由职业者喜欢用它为客户做项目,它能最大限度保证交付的时间。PHP 确实不可能拥有往日在企业圈的辉煌,但是在自由职业的圈子里依旧是犀利无比。对于开发者来说,入行门槛相对比较低,面试的时候没那么多变态问题,真的有不少人就是通过 PHP 入 的技术行当,后来慢慢由于要在企业里寻找工作和发展机会,转而以其他编程语言为主。当我们在招聘网站搜索 PHP 相关职位时,我们会发现,它的职位数量和待遇跟 Java 比是比不了的,企业的知名度也比不了,这太正常了,通过以上的分析咱们就可以得出这个结论。好处也有,PHP 不那么卷,找工作,换工作反而容易。
但是还是上一篇博客我说过的那些话:“PHPer 实在太懒了,不少人的技术水准又太烂,愿意下功夫打磨的人不是很多,不管你为公司打工还是自己干,技术水平都得过关过硬才行,养老型公司基本都是养死型公司”。不得不说的是 PHP 能恢复元气,但绝不可能恢复往日的地位,这一点没什么悬念,尤其在国内。在国外很多国家,PHP 还是挺滋润的,不同的人口基数决定了不同的发展道路。
PHPer 相比于 Javer 大都没有明确的努力方向,这是个挺致命的问题。你公司的技术老大可能没有获得下一份工作的机会了,可你还年轻,你未来职业生涯的变数还很大,即便不为现在,也必须为以后做筹划。如果真的没有明确的努力方向,就好好朝着自由职业的方向发展,让自己的活性激发出来,不要像死鱼一样了。PHP 的学习和使用都超级高效节省时间,这些节省下来的时间你可以比别人更早的成为一名技术上的全栈和业务上的熟手。如果你后面这些工作都没做,没有去努力的话,那真的是辜负了这门语言的业务特性。对于 PHPer 来说,只要是正常的努力程度都不会被这个圈子淘汰。只可惜,后边是耐人寻味的省略号……
“业务特性” 算是我发明的词汇吧,这也是我想告诉 Coding10 用户的一句忠告,开发者平时关注最多的是语言的 “技术特性” ,而 “业务特性” 对于开发者和企业的重要程度同等重要。C 和 C++ 语言为什么选择的人少?因为光是技术细节,哪怕是内存分配和释放问题很新人两三年都搞不定,根本就没足够的精力去接触公司的业务问题。这类语言都是系统层级的语言,大部分开发者一段时间内基本都只在自己管辖的功能模块中工作,对于其他协作的模块基本不会深入研究。
应用层的编程语言,不管是前端还是后端,开发者可以在非常短的时间内把这个那个业务链条梳理清楚,甚至可以上手进行工作。使用这类语言,哪怕你技术水平不过关也是可以工作的,复制粘贴就能帮你解决相当一部分问题,甚至说真正工作的是谷歌度娘背后的那些人,你的薪水更应感谢的是这些无名朋友们。
PHP 和 Java 我们表面上说的是语言,但其实我们在日常使用中,更多的是框架及其生态,SpringBoot 体系对于 Java 来说是救世主,Laravel 对于 PHP 来说也是。这像极了相声圈的情况,不是相声火了,而是郭德纲火了。开发者更多的时间也是研究框架的用法和发展。可以说在开发语言的基础之上又封装一层。而它们自身又依赖特别多第三方的开发包,第三方开发包的质量以及是否能够长期高质量的持久维护对于框架来说至关重要。一些核心开发者离开这个圈子之后,就会产生很大的影响和破坏。而这也将引出另外一个话题,就是 Go 语言。Go 语言自带的支撑让开发者即便不采取框架也能做很多事,这让它的学习曲线相对简单,学习的体验也更好,由于是官方自带的支持,所以相比于第三方,能得到更持久、更高质量的延续性,当不能满足需求时,官方也就推出更好的替代方案。
Go 语言,被奉为未来 10 年最有前途的编程语言。它的团队也希望它能重现昔日 C 语言的辉煌。这是一门基因里都在飙车的高并发编程语言,执行效率超高,轻松击败其他主流后端编程语言。Go 语言通常不是大家学习的第一门编程语言,它也并非想象中的简单易学,而是跟 C,C++ 这些语言比,它更易学。目前不少公司会用 Go 重构一部分业务,而非全部。公司用它处理高并发,可以向用户提供更稳定可靠的连接和通信服务,同时可以节约不少的服务器成本,对于大公司来说,这非常有现实意义。Go 目前在大部分业务型公司中起到是辅助作用,距离主流后端业务编程语言还有很长的路要走。它追求简单直接,但是不代表所有方面都简单易用,开发者需要付出足够的时间成本做好足够的技术积累才能用好它。
不少 PHPer 或其他语言开发者都开始学习 Go,目前阶段它的就业面没有那么宽广,它通常会结合其他的后端体系以完成整体业务目标。Go 除了做 Web,更重要的应用就是 “构建基础设施层”,如果你有机会的话,好好关注一下这个方向。互联网应用行业太动荡了,互联网的新创公司连两年的平均存活期都没有,大部分人还是希望有个安稳些的环境。如果想在基础设施层求生存的话,你必须付出更大的努力和汗水,一切都是用代价换来的。
至于 Go 团队如何让 Go 语言恢复往日 C 的江湖地位,目前我的视野和解决能力所限,没有看到它的可行性路线。云原生时代 Java 虽然有不少困难要克服,但我相信它绝不会坐以待毙,应该是能一步步搞定这些问题。Go 在基础设施层的发力也算是为侵蚀 Web 领域做准备,如今 Go 也开始官方推荐 Gin 框架,这其实是个蛮值得玩味的事情,这代表 Go 开始向 Web 端倾斜和发力。
目前移动互联网的癫狂期早已过去,正是行业的淘汰和清洗阶段中后段。这个阶段,技术能力出色,年富力强的开发者基本不会受影响。但是技术薄弱,没有自己突出优势的开发者会遇到严重的职场危机。
我们通过以上这些话,希望你我都能更慎重理性地思考自己未来的路和当下的每一步。我不会说去评判语言的优劣,每一门语言都养活了不小的群体,编程语言优劣的争论你也要看清立足点,不同的立足点,不同的人结论是完全不同的,所以陷入到编程语言的争论是没有太大意义的。每一门语言都有其产生的特定背景,发展趋势和衰落过程。我们不光要关心现在它能给企业带来什么价值,能够给个人带来什么价值,同样要关心它的未来价值。我们更没有必要去探究语言的技术含量,而是探索和提升自己的技术含量。编程语言越靠近应用层,它的使用就越简单,就越显得没有技术含量。
Java 最初也被各种鄙视,在 C 和 C++ 开发者眼中就是个玩具。对于绝大部分所谓技术人员来说,日常做的就是没有什么 “技术含量” 工作,目前所面对的问题基本都有成熟而广被应用的解决方案。不管是代码层面还是架构层面,99% 的开发者们做的都是复制粘贴或者模仿、改造的工作,所以为什么各类机构培训内容基本一致,解决方案也基本雷同的原因。CRUD 不光存在于数据处理的逻辑层面,大部分公司的架构不也是 查、增、删、改 做出来的吗。