PHP程序员应当如何保持与时俱进?
记得之前在某个论坛上看到别人说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进行讨论和学习。