记得之前在某个论坛上看到别人说php程序员土,作为一名php程序员内心当然是不乐意的。不过别人这么说也不是完全没有道理,其实他说php程序员土应该指的就是php程序员不懂得与时俱进。

当然,这也不全是我们php程序员本身的锅。相信我们的队伍中至少也有三分之一的人员来自各大培训机构吧?在网上随便搜下各大培训机构的视频教程或者文字教程,讲的东西都还是几年前的东西。比如连接mysql的一水是用mysql扩展,但是这个扩展在php 5.5中就被标记为deprecated了,并且在php 7.0版本被完全移除。还有一个深有感触的就是在各种php群中,会有人贴出一段拼接的sql,然后问别人自己哪里写错了,为什么查不出来数据?让我来说,这些都属于典型的过时培训课程受害者。另外还有一些就是问现在从头做一个网站,选用哪个php版本?然后当别人推荐php7或者7.1的时候,他会当然的说php7和php7.1太新了,不稳定,问下用php 5.4怎么样? wtf……

所以你看,按照上面这些实例来说,别人说我们php程序员土是不是也有点道理?如果有的话,那我们要怎么改变现状,变得modern起来呢?我觉得可以从以下几个方面着手。

首先,要多关注语言层面的发展。比如php7早在15年底就已经released了,而且官方做了大量的测试工作,无论是功能上还是性能上的。php开发团队对php的向向前兼容做了很好的处理,除了移除了一些早已经deprecated的类和接口,其他行为几乎没有改动。并且被移出的这些类库和接口还有专门的文档:http://php.net/manual/en/migration70.php来说明,只要稍费点心,在自己项目中做些检索就能知道会不会影响已有功能。就算线上项目不敢轻易做版本迁移,新开发的项目总也没有理由去用过时的php5了吧?对于这总不做任何调查,稳定性全靠感觉的开发者,鸟哥不知道会不会气到吐血。再说扩展,用的最多的两种:图片处理和数据库访问。图片处理尽量用Imagick去替代GD,前者无论是功能还是处理速度或者是图片处理的质量都远胜于后者;数据库访问务必用PDO或mysqli去替代mysql扩展,前者(PDO)提供一套针对多种流行数据库的统一接口,让你无痛把程序部署在不同的数据库服务上,同时提供的预处理和参数绑定特性,能确保不会发生sql注入,你实在是没有冒着风险去拼sql了。

其次,作为一名与时俱进的程序员还要关注社区的动向。比如关注和实践下近两年比较火的laravel框架,号称为艺术家设计的框架,深入进去你会发现这个框架不仅用起来优雅,设计和实现的也很优雅;试下可以让php异步方式执行的swoole扩展和框架,按照作者自己的评测,性能比nginx还高(笑);还有workerman这种php socket服务框架,除了http协议外,还支持websocket,同时传输层的udp和tcp协议也都支持;尝试着在自己的项目中使用composer来管理依赖,省去了include来require去;在自己的项目和开发团队中践行社区推荐编码规范psr,搭配phpcs,约束团队内编码风格更统一;使用RESTFul架构模式来开始自己的下一个项目;还可以蹭个热点,去尝试下机器学习,可以预想在不远的将来会有很多相关职位和需求,这方面虽然不是php的强项,不过还是有类似php-ml这种优秀的机器学习库供你学习和研究。其实只要保持着对技术的热情,我觉得这些都不是很难做到的事情。做技术很重要的一点就是跟着大公司走和跟着社区走,还有一点就是记得github是你永远的好朋友,时不时的上去瞄两眼,相信偶尔会有惊喜发现。

然后,就是工具的运用了。这里的工具很广泛,从开发工具到调试工具,再到代码管理等。先说开发工具,在我实习的时候,组长让我用editplus去写代码,理由是没有太多代码提示,方便记住更多的函数。当时深以为然,后来随着学习的深入和知识面的扩展,才发现这是邪道。php有一个饱受大家诟病的问题就是混乱的函数名和参数设计,你想记住每个函数名和参数列表几乎是不可能的,我也奉劝各位想要靠背住函数名提升开发水平的还是考虑换条路。所以各位还是尽量使用phpstorm这种all in one的IDE或者vscode这种扩展性很强的编辑器。再说到调试工具,我注意到周围同事大部分时候调试还都是var_dump然后exit,很多时候这是没问题的。不过还是有必要了解一下xdebug的使用,采用单步调试能更方便的掌握任何阶段内存中变量的状态;还有类似kint和debugbar这种调试辅助工具,能大大提高你的调试效率。除了这种本地化的工具外,还有一些很cool的服务你值得关注。比如实时错误报告服务,sentry,能够让你很简单的分析自己的服务哪里出了问题,帮助你快速定位并解决问题;再比如性能监控服务new relic或者blackfire,通过简单的部署,就能分析出来自己线上服务的瓶颈所在,从而提升服务质量。代码管理的话现在应该没有理由不采git了,无论是更轻量的分支、本地版本库还是更多样化的协作方式,都是你值得拥有的原因! 当然了,还有很多更有趣和强大的工具在诞生,我们需要做的就是关注社区,保持进取。

最后,虽然我们在写php,但是眼光不应局限于语言本身。我们还需要了解诸如容器技术,像是docker、lxc,并且在生产和开发环境中尝试使用这些技术提高我们的环境搭建和服务部署效率。再比如持续集成,在敏捷开发的团队中一定对这个概念不会陌生,持续集成的主要意义在于快速发现错误和防止多人开发环境下分支大幅度偏离主干,比较出名的持续集成服务比如jenkins、travis或者是用php开发的PHPCI,如果你还没试过,可以挑选一个在自己的团队中尝试,附上一个总结的脑图给大家

所以,最关键的一点就是要时刻关注社区动向,保持对技术的热情和一颗折腾的心!如果觉得所讲的东西能够帮助到你,并且希望进行更详细的深入的学习,欢迎加群632109190进行讨论和学习。

PHP程序员应当如何保持与时俱进?的更多相关文章

  1. Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路

    http://blog.jobbole.com/111422 Java 生态圈 Java 的生态环境开放.自由,在Sun/Oracle.Google.Apache.Eclipse基金会等各大厂商,还有 ...

  2. Java程序员的发展前景

    不知道什么时候开始,IT业初级程序员的工作性质与进城打工的"农民工"变得如此惊人的相似.很多IT公司的高管认为"人便宜,就是要用到坏掉,然后再找更便宜.更年轻的" ...

  3. 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good

    浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...

  4. Efficient&Elegant:Java程序员入门Cpp

    最近项目急需C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 老特工我还需保持敬畏(内容太多),本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ . Java是为了 ...

  5. 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络

    程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...

  6. 2018年,Java程序员转型大数据开发,是不是一个好选择?

    近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更加激烈的竞争. 不得 ...

  7. 在Java大环境下.NET程序员如何夺得一线生机

    先来看一组数据,从某招聘网站直接检索3-4w的岗位,会看到Java与.NET社会需求量的巨大差异,这里就不再对比高薪的岗位了,.NET的高薪岗位更是少的可怜:   笔者从业十余年,一直是在.NET圈子 ...

  8. 如何成为一名成功的iOS程序员,挑战年薪50万?

    编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域.你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识.只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子. 编程是一个没有极限的职业,所 ...

  9. 大龄IT程序员的救赎之道

    不知道从什么时候开始,中年危机持续刷屏,遍布整个职场,横跨各个行业,对各个细分工种的中年男女或者即将步入中年的青年男女几乎形成了垂直打击,而且中年这个年龄分界线从40岁滑落到35岁,甚至到30岁.笔者 ...

随机推荐

  1. HDU_1846 Brave Game 【巴什博弈】

    题目: 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻. 今天, ...

  2. 建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237

    该逻辑对于删除第一个元素不适用. 这样的代码不优美 /** * Definition for singly-linked list. * struct ListNode { * int val; * ...

  3. AttackEnemy人物攻击判断

    AttackEnemy人物攻击判断 /// <param name="attackArea">攻击范围</param> /// <param name ...

  4. 使用JavaFX打开fxml,找不到打开的图形界面

    解决方案: 将 HKEY_CURRENT_USER\Software\JavaSoft\Prefs\com\oracle\javafx\scenebuilder\app\preferences\/S/ ...

  5. cloudermanager安装过程中出现W:GPG error错误 http://ppa.launchpad.net.trusty Release **** 4DF9B28CA252A784(图文详解)

    不多说,直接上干货! 问题详情  解决办法 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4DF9B28CA252A784 ...

  6. oracle中的exists理解

    select * from EB where exists (select * from BB where Code=EB.Code) 把select 外层表EB看成是循环的,把每一个值eb.code ...

  7. Linux 下安装 Memcached 和 PHP 开启 Memcached 扩展 及 LAMP 环境的安装

    http://blog.csdn.net/liruxing1715/article/details/8269563

  8. 用ECMAscript5中的forEach函数遍历数组

    1 var a = [1,2,3]; 2 a.forEach(function(value,index,arr){ 3 arr[index] = value + index; 4 }) 5 conso ...

  9. Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name

    添加一下依赖 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...

  10. CheckBox 样式

    .cb td {             width: 100px;         } .cb label {             display: inline-block;          ...