PHP 程序员危机

感谢有这样的机会,能和大家一起来聊聊开发者的那些事儿。

其实程序员危机是一个真实存在的问题。也有人说是互联网行业的下滑或者互联网行业已过了风口等等。我在这儿主要谈的是 PHP 程序员的危机,而这种危机多半来自于丰富的语言种类和公司对语言的选择上。

尤其是近几年非常火热的人工智能,机器学习等等,还有推上风口的 python。这多少会带动一些人盲目跟风。其实开发工程师对自己知识体系的扩充和转型都需要有一个明确的目标。跟风是一件比较危险的事情,转型也不同于丢掉自己所有的东西。我想通过程序员的诞生和程序员的成长来讨论,究竟该如何选择。

我将从以下几个方面来说明:

  • PHP 程序员的现状;
  • 什么导致了程序员的分层;
  • 高级工程师需要达到的要求;
  • 程序员如何快速成长;
  • PHP 程序员渴望的蜕变;
  • 干货,你需要的转型路线;
  • 总结。

PHP 程序员的现状

现阶段大部分 PHP 程序员都比较迷茫,初级 PHPer 觉得这个行业难,中级 PHPer 大都想通过学习来提升自己,但往往会陷入今天追这个技术明天追那个技术的一种情况,高级 PHPer 大都有了自己的知识体系,部分在架构的位置。

程序员对自己的行业认识是非常重要的,也就是职业生涯规划。这是一个比较难的问题,因为要对自己的职业有所规划,首先要充分了解行业。这一点和当初为什么选择做程序员有很大的关系。

一般来说,如果你很难熬过开发生涯的入门期,可能说明你不适合这个行业;如果你无法通过蜕变期,你可能就不会有太大的成就。

每个人开发生涯的入门各有不同,一部分人是对于这个行业感兴趣自己心中也有一个目标,虽然没有清晰的职业规划,但至少会有一个该领域的偶像。还有一部分人是经过三、四个月的培训进入这个行业的。

我之前用重庆互联网学院中某家培训机构(YMSD)的数据分析过,在这部分培训进入行业的学生中 2 年后还在这个岗位继续发展的学生仅仅占有 20%。也就是说 80% 的学生花钱花时间只是做了回陪跑员。这也从侧面说明,如果我们进入这个行业,除了期望让自己能够挣到很多钱,也必须对以后的发展有个预期。

一般来说,通过培训入行的开发人员在工作中会走得非常艰难,因为他们没有技术路线的体系目标,而在线下培训机构中接受的是一味地模仿,非常缺乏创新能力。而且据我所知,大部分线下培训机构的课程体系至少和企业场景脱节 5 年。所以这部分程序员更应该努力改变自己的现状,明确自己的处境。

什么导致了程序员分层

程序员分层是一个非常明显的问题,在公司里直接的体现就是同一类程序员的职位差别非常大或者薪资待遇非常大。

导致这种分层的原因是什么?

第一类原因就是程序开发者的工作年限。

其实工作年限也不是一个非常重要的因素,确实在之前的面试中,我们遇到过工作年限只有一年但是非常优秀的开发者。但凡是使用求职软件时就会发现,几乎所有的职位描述里都有一个指标——工作经验年限。

为什么有这个东西呢?因为公司招聘人员与众多求职者逐一沟通是非常耗时间、精力的,所以工作年限就是第一道门槛。

  • 一般 1-3 年工作经验是一个层次,在北京一般薪资范围是 10-20k 之间;
  • 3-5 年又是一个层次,在北京薪资范围是 15-25k;
  • 5 年及以上又是多个层次。

当然,1-3 年的工作经验也可能获得 3-5 年工作经验一样的薪资待遇,这个主要看实力,我们的 Chat 也主要是讨论这一部分的因素。

在之前的小节我已经说了程序员大概分为科班出身和半路出家的两类,我并不是说科班出身的就一定会比半路出家的优秀,这完全是两回事。只是科班出身表示他的知识面更广一些,所以其他人也应该注重知识面和基础功。

在这次 Chat 中我并没有把问题指向到某一个语言,因为作为开发工程师太注重语言往往会成为自己的绊脚石。

追语言的人

经常遇见这样的问题:和开发的朋友一起聊天,上回见面说在学习前端技术,一个月后见面又说在学习 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 的引擎又有什么问题呢?所以我觉得脱离场景谈知识点往往是程序员被归为底端序列的最直接原因。

以上只是一个例子,只是说明学习也需要分场景。学习语言也是一样的,我们要想想为什么不用当前的语言而要再选择一种新的语言。比如为什么不用 PHP 做机器学习?可能说到这个问题很多人就想笑,‘PHP 是世界上最好的语言’(因为喜爱所以容我自黑一下)。

但是我们再来严肃的思考这个问题,请你思考一下。很多学习机器学习的人也是被潮流推着走,别人都学习 python 来做及其学习那我也要学习 python。当然人生苦短,你学习 python 的选择是没有错的。在追着 python 跑中不乏有一些 c、c++、java 程序员。

引用别人经常说的一句话 “几年前一帮人叫苦连天的说 java 要死了但是 java 死了吗?” 别再看着语言杞人忧天了,你更应该学会的是选择语言。

当然招聘网站上,企业所需的程序员需掌握的语言种类,也是一部分程序员学习的方向。企业在选择一个语言的时候考虑的因素非常多,包括了之前项目所使用的语言情况、迁移的成本、人员培训成本、语言所耗费的硬件成本、人员沟通成本,最主要的是能否解决当前遇到问题的,以及解决问题需要耗费的时间。

所以快速成长需要我们自己有主见地分场景来仔细探究技术细节,需要有极强的学习能力。

PHP 程序员渴望的蜕变

我同事的观点是这样的:PHP 程序员转型发展有两个方向,一个是更深层次的后端开发,可以熟悉 go 或者 java 语言然后找家这些语言相关的公司。例如在做 PHP 开发时很少有人去了解异步,协程,多线程等问题。另一个是转向前端,前端也是一个竞争非常大的区域,而且前端需要学习的东西并不比后端少。

可能有些人说我要做全栈工程师,我和同事一致的观点是,别做一个样样都会,但样样都理解不深刻的全栈工程师。

当然在这儿要给那些非常缺乏安全感的程序员说一声。PHP 并不会死。

当前新浪、神马搜索、百度等公司都有使用 PHP 的场景而且设置了 PHP 的职位时,小公司就更不必说了。在中小型、短平快的业务中,PHP 依旧是首选。因为 PHP 刚开始的特性就是快速的开发网络应用。你要追逐其他的语言也不是不可,但是基础一定要别忘了慢慢打牢靠。别让自己的知识体系成为一个虚胖的胖子。

另外,可能每个程序员都想赶快投入到人工智能和机器学习中。如果你还是想当这个领域的码农,那你可以看网上的各种文档教程来学习,像 TensorFlow 这种向外提供的 api 也比较多。如果你想在这个领域发展,还是得首先把那些经典算法搞清楚。

干货,你需要的转型路线

根据程序员开发工作所处的产品层面,程序员分为两类,分别是前端工程师和后端工程师。现在对开发工程师的分类更繁多了。我就从前端和后端这两类中给大家分享。

其实 PHP 处于一个奇特的位置也是一件好事。有人说 PHP 是前端语言,有人说 PHP 是后端语言。这个界限也不是那么明显,解决表现层工作的语言我们一般说是前端语言,主要看用 PHP 来处理什么层面的问题。

在你考虑转型之前,PHP 应该已经让你具有这些知识。

首先是 MVC 模式的理解,这个不难,但是要懂得从这一出发点去扩展。例如 MVVM、MVP 模式等等,要能够明白它们之间的区别,但是理论往往是比较单一的东西,记得要结合项目区理解。

还有一个需要掌握的知识就是 http 请求和响应,其实这个知识是我们一直在用的但是很多人都搞不明白,例如我们经常用浏览器的开发者模式在 Network 中点击某个请求就可以查看请求的 header。

如下图:

然后就是面向对象的思想,对面向对象,大家褒贬不一,尤其是越来越多的人对于函数式编程的推崇。其实两者各有优点,我们需要的是真正的理解面向对象所带来的优势和不足。希望 PHP 能让你理解各种类型的变量以及使用方法。

PHP 中有四种标量类型,分别为 boolean、integer、float、string;三种复合类型,分别为 array、object、callable; 两种特殊类型,分别为:resource、NULL,当然还提供了一些伪类型。

如果你掌握了以上的内容,那你在转型的道路上可能更为轻松一些。

首先来说说向前端的转型。

如果要向前端转型,js 是必须要学习的。但是学习到什么程度呢?js 要学到什么程度也是大家最迷茫的一个问题。很多人可能会不断地啃 js 的语法。但是对于 js 这种知识点非常繁杂的东西,如果一直陷在语法中就得不偿失了。

其实最主要的还是前端的思维。在掌握了 js 的一些基本类型操作,包括字符串、数组、对象、json 的处理后,就可以去看看 vue.js 或者 react 这样的框架。推荐大家从 vuejs 开始,比较简单,容易入门。当然 html 和 css 的基本用法还是需要了解的。在学习的过程中看别人的项目非常重要,可以去 github 搜索 vue.js 的一些项目,看看别人是怎么实现的。

另一种转型方向是转向服务端开发。

你需要选定一种比较常用的服务端开发语言。java 也好,go 也好,其他选择也非常多。从入门开始,如果有基础的程序员一定不要从厚厚的语法基础开始学习,因为这个过程非常浪费时间。在了解了最基本的语法后就可以开始选定一个框架来学习,在学习中发现问题,再回过头来学习语法。

在这儿选择非常多,我不具体说明了,只给大家一个建议。

很多程序员比较看好的是 go 语言,确实 go 语言相对其他语言来说简单,工程化中可靠,而且有着天然的开发标准,goroutine 给服务器开发带来好处。在国内,七牛云很早就使用 go 语言了,现在很多大的公司也开始使用 go 语言解决部分问题。

由于人工智能和 python 的优势,很多人是走 python 路线的,但是如果走 python 路线,就请做好向数据挖掘、处理和计算的方向走。语言的选择见仁见智,最简单的依据就是看公司的需求程度。

在深入服务端开发的路上需要了解的知识非常非常多,比如性能优化。很多人提到 redis 就是一句话,当做缓存来使用。这就是我前面提到的业务场景的问题,说明你所理解的业务场景太单一了,导致对于知识的认知不够。

当然还有通讯机制的问题,相信很多人都非常陌生这些技术 MQ、Cron、RMI、RPC。我列举这些不是让大家马上买几本书去学习。记住,在你想要去学习某个技术之前,一定要先创造一个场景。

程序员最需要的,也是每个程序员最缺乏的,就是交流。大家需要和其他程序员多交流、多交换意见,这样很有利于自己的成长。

原文文章由博悦平台发布 www.hongshulin001.com 原创发布转载请注明出处

时间: 2024-09-29 07:12:58

PHP 程序员危机的相关文章

PHP 程序员危机:如何快速成长为不可或缺的技术人才?

感谢有这样的机会,能和大家一起来聊聊开发者的那些事儿. 其实程序员危机是一个真实存在的问题.也有人说是互联网行业的下滑或者互联网行业已过了风口等等.我在这儿主要谈的是 PHP 程序员的危机,而这种危机多半来自于丰富的语言种类和公司对语言的选择上. 尤其是近几年非常火热的人工智能,机器学习等等,还有推上风口的 python.这多少会带动一些人盲目跟风.其实开发工程师对自己知识体系的扩充和转型都需要有一个明确的目标.跟风是一件比较危险的事情,转型也不同于丢掉自己所有的东西.我想通过程序员的诞生和程序

想成为优秀的程序员这些码德不能缺

我把这些看成是作为一个程序员的基本素质,多数是编码之外的事情: ●代码每天备份:(预防意外导致的任何损失) ●上传代码时写清楚log信息:(为维护这个模块的人着想,有可能是你自己) ●提供接口时不要把问题抛给使用接口的人,升级或者变更接口时不要删掉原来的接口:(为使用你接口的同事着想) ●变量命名要见名知意:(起码不能误导别人) ●在工程中新建一个doc文件夹将项目相关的文档放在该目录下,方便后面维护的人员理解项目和代码:(为维护这个模块的人着想,有可能是你自己) ●签署bug或者转办bug时写

写给程序员的职业生涯规划

提示:本文适合有2年及以上工作经验的程序员,对于刚入职或者即将职的程序,建议阅读涂雅写的另一篇文章:写给岁入IT的新人们 程序员职业生涯发展到一定程度都会面临一个选择,是走业务+技术方向,还是选择纯钻研技术.程序员职业生涯发展的问题,这是所有程序员都在关心的问题,未来究竟要怎么走,30岁之后还能不能再做程序员. 绝大多数程序员最终的职业目标可能都是CTO,做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都不在这行做了,自然没什么好说的

《程序员的修炼——从优秀到卓越》一一1.8 管理中要有信任

1.8 管理中要有信任 程序员的修炼--从优秀到卓越 Marco Dorantes在2005年的一篇博文中提到了另外一篇极好的文章,名为"Why Big Software Projects Fail"(为什么大型软件项目会失败).这篇文章的作者是Watts Humphrey,他曾经参与过IBM OS/360项目.在文章的一开始,Watts即对自2001年以来软件项目完成情况的数据作出了分析. 上图展示了按照项目的规模统计的Standish1数据.当以这种方式查看的时候,我们会发现:一半

一个程序员的运气有多重要

先说两个真实的故事: 第一个故事有点悲凉,2011年3月,我的同学老 A 和我一同进入茁壮网络,2012 年公司战略变动,整个部门端掉了,我提前离了职另谋出路,老 A 一直赖到了最后拿到了N+1,后来和当时的部门经理一同进入一家创业公司,没日没夜的干了两年,最后公司工资都发不起,直到我这位同学离开,还有两个月的工资没拿到. 第二个故事有点刺激,发生在我呆过的第三家公司:博雅互动.2011年我的另一位同学老 Z 进入这家公司,当时这家公司规模不到100人,公司正在由页游向手游转型,当时我同学是公司

程序员的自我修养(2)——计算机网络(转) good

相关文章:程序员的自我修养--操作系统篇 几乎所有的计算机程序,都会牵涉到网络通信.因此,了解计算机基础网络知识,对每一个程序员来说都是异常重要的. 本文在介绍一些基础网络知识的同时,给出了一些高质量的系列文章链接,以方便大家随时参考学习.相信通过本文的学习,你能对计算机网络有全面的认识! 在阅读本文之前,建议阅读以下两遍文章,以便对"计算机网络是如何工作"的有个大概的了解. 互联网协议入门(一) 互联网协议入门(二) 接下来,我们介绍一些基础网络知识. OSI参考模型 一上来就是OS

什么原因成就了一位优秀的程序员?

这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸.不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的程序员那么糟糕?简而言之,什么原因成就了一位优秀的程序员呢? 根据我的经验,成为一个优秀程序员同年龄,教育程度,还有和你赚多少钱没有任何关系.关键在于你的做法,更深入地说,就是你的想法.我注意到我所钦佩的程序员都有一些相似习惯.不是他们所选语言的知识,也不是对数据结构和算法的深入理解,甚至不是

谦卑的程序员(The Humble Programmer) by E.W.Dijkstra,1972

谦逊的长者--Edsger Wybe Dijkstra,1930年出生于荷兰阿姆斯特丹,2002年逝世于荷兰纽南.他在祖国荷兰获得数据和物理学学士,理论物理博士学位,2000年退休前 一直是美国Texas大学的计算机科学和数学教授.以发现了图论中的最短路径算法(Dijkstra算法)而闻名于世,1972年因为ALGOL第二代编 程语言而获得图灵奖."Go To Statement Considered Harmful"(EWD215)也是被广为传颂的经典之作.除了科学研究之外,他最喜欢

程序员可以兼任项目经理吗?

人们的有些尝试从来没有成功过:接到一个小项目,项目小,完全不需要一个全职的项目经理.于是就决定让一个程序员兼任项目经理.毕竟,还能有谁比程序员更清楚应该写出一个什么样的程序? 的确,很多程序员能做好项目经理的职位.好的程序员和好的项目经理的之间没有本质的冲突.这两个职位都是面向细节和面向结果的.但是一个人不可能同时做好这两个工作. 为了理解这种不兼容性,必须认识程序员和项目经理工作任务的类型. 开发软件需要进入一种沉浸状态,为了更加有效率,程序员必须完全进入代码世界,来专注于操作算式和变量,预见