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进行讨论和学习。
PHP程序员应当如何保持与时俱进?的更多相关文章
- Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
http://blog.jobbole.com/111422 Java 生态圈 Java 的生态环境开放.自由,在Sun/Oracle.Google.Apache.Eclipse基金会等各大厂商,还有 ...
- Java程序员的发展前景
不知道什么时候开始,IT业初级程序员的工作性质与进城打工的"农民工"变得如此惊人的相似.很多IT公司的高管认为"人便宜,就是要用到坏掉,然后再找更便宜.更年轻的" ...
- 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good
浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...
- Efficient&Elegant:Java程序员入门Cpp
最近项目急需C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 老特工我还需保持敬畏(内容太多),本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ . Java是为了 ...
- 极客时间-左耳听风-程序员攻略-Linux系统、内存和网络
程序员练级攻略:Linux系统.内存和网络 Linux 系统相关 Red Hat Enterprise Linux 文档 . Linux Insides ,GitHub 上的一个开源电子书,其中讲述了 ...
- 2018年,Java程序员转型大数据开发,是不是一个好选择?
近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更加激烈的竞争. 不得 ...
- 在Java大环境下.NET程序员如何夺得一线生机
先来看一组数据,从某招聘网站直接检索3-4w的岗位,会看到Java与.NET社会需求量的巨大差异,这里就不再对比高薪的岗位了,.NET的高薪岗位更是少的可怜: 笔者从业十余年,一直是在.NET圈子 ...
- 如何成为一名成功的iOS程序员,挑战年薪50万?
编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域.你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识.只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子. 编程是一个没有极限的职业,所 ...
- 大龄IT程序员的救赎之道
不知道从什么时候开始,中年危机持续刷屏,遍布整个职场,横跨各个行业,对各个细分工种的中年男女或者即将步入中年的青年男女几乎形成了垂直打击,而且中年这个年龄分界线从40岁滑落到35岁,甚至到30岁.笔者 ...
随机推荐
- ansys14.0 从入门到精通
凌桂龙 李战分 2013.2 清华大学 FLUENT流体计算应用教程 索书号:TB126-39 ZW2.1 单元 结点 和 自由度 载荷 与 边界条件 : 关系 就是约束 , 边界条件是 结构 ...
- 【研究】Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)
影响范围: Oracle WebLogic Server 10.3.6.0.0版本 Oracle WebLogic Server 12.1.3.0.0版本 Oracle WebLogic Server ...
- 使用 .NET Core CLI 创建 .NET Core 全局工具
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&ch=&tn=baiduhome_pg& ...
- 利用httpClient发起https请求
HttpClientBuilder b = HttpClientBuilder.create();// setup a Trust Strategy that allows all certifica ...
- (转) 来自: http://man.linuxde.net/tee
tee命令文件过滤分割与合并 tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin.简单的说就是把数据重定向到给定文件和屏幕上. 存在缓存机制,每1024个 ...
- Linux下MySQL数据库主从同步配置
说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...
- Whu 1603——Minimum Sum——————【单个元素贡献、滑窗】
Problem 1603 - Minimum Sum Time Limit: 2000MS Memory Limit: 65536KB Total Submit: 623 Accepted: ...
- jquery获取元素与屏幕高度距离
a. onscroll事件 scroll是css样式中overflow的一个值,意思是显示滚动条;当一个元素的实际高度超过他的最大高度是,只要设置了overflow为scroll b. $(..).s ...
- Javascript模块化编程详解
在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代 ...
- Javascript 5种设计风格
1.过程式的程序设计 <script> /*Start and Stop animations using functions.*/ function startAnimation() { ...