很久没有写博客了,不知不觉就马上过年了,都2020年了。回首这一年想想自己收获了哪些,有哪些不足,又有哪些没来得及实现的。就今天吧,总结下自己对自己职业生涯的理解和规划,也是本文的主题“一个高级PHP开发工程师应具备的职业素养与专项技能”。下面分别从两职业素养和专项技能两方面阐述。

一、工程师应具备的职业素养

首页问下什么是素养,百科是这样介绍的:素养一指修习涵养,二指平素所供养。素养是由训练和实践而获得的一种道德修养,那么程序员的职业素养,我理解为职场多年形成的职场技能,处事的态度及原则。那么一个优秀的程序员,他所具备哪些素养呢。

1.1 领域专家

优秀的程序员在某个领域一定是专家级别的。他在某个领域一定是让其他同事无可挑剔的,因为他的那么专业和经验告诉你他是团队中最权威的。他可以直接用经验碾压团队伙伴,用行动让你无话可说。这是一种魅力,一种程序员独特的素养魅力。

1.2 产品思维

曾经有看到这么一句话,不懂产品的程序员不是好程序员,不懂开发的产品也不是好产品。一个优秀的程序员应该是有产品思维的,懂产品使用的用户,知道怎么开发能给用户带来更好的体验。从需求洞察产品的原型,从原型思考产品的上线体验度。

1.3 学习能力

很多人说35岁是程序员的一道坎,有人35岁转换送外卖,有人35岁被公司辞退,还是35岁摇身一变成为某某公司架构师。其实这个世界是公平的,一分耕耘一份收获。时刻让自己保持学习的习惯,时刻提醒自己现在的这份工作失去了,我是否还能找到比这更好的工作,让自己走出舒适区。趁着年轻,多折腾自己总没错,时刻让自己对新技术保存好奇心。35年这道坎为什么我们迈步过去?多想想自己的核心竞争力是什么?

1.3 代码洁癖

优秀的程序员应该对自己的代码负责,尽量不要去写你自己都无法预知结果的代码,我们可以不解决bug,但千万不要去生产bug。码代码的时候,不仅要考虑业务逻辑没有问题,还要考虑后面的人维护你代码问题。要让自己对代码有洁癖,绝不写垃圾代码,对自己要求高点,提示自己代码的质量。

二、高级PHP公司应具备的专项技能

2.1 mysql优化

做php开发,离不开与mysql打交道。mysql优化及索引的使用基本上每家公司比面试题。具体的比如mysql的索引种类、使用场景,索引的数据结构及优缺点。还有事务的使用,锁机制的处理等等。更深入一点的比如,数据库从横扩展设计,线上数据平滑迁移等技术。

2.2 noSql使用nosql相对传统的sql关系型数据,非关系型的数据库明显搜索的速度会快很多,为什么?拿redis来说:

(1)完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);

(2)数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;

(3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

(4)使用多路I/O复用模型,非阻塞IO;

(5)使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;当然出redis之外,你还需要了解memcache和MongoDB等

2.3 swoole

swoole是什么?swoole 是面向生产环境的 PHP 异步网络通信引擎。使用纯 C 语言编写,提供了 PHP 语言的异步多线程服务器、异步 TCP/UDP 网络客户端、异步 MySQL、异步 Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写、异步 DNS 查询。除了异步 IO 的支持之外,Swoole 为 PHP 多进程的模式设计了多个并发数据结构和 IPC 通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发 HashTable、Channel、Lock、进程间通信 IPC 等丰富的功能特性。之前 PHP 一直被诟病的一个原因就是它是同步阻塞式语言,这在 Web 应用这种 IO 密集型的领域对于编写高并发高性能的应用而言,是一个重大阻碍。有了 Swoole 之后,PHP 开发人员可以轻松编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP 以及 WebSocket 服务,从而使得 PHP 语言在异步 IO 和网络通信领域开疆拓土,并且有望在工业级技术方面与 Node.js 和 Go 语言展开角逐。从某种角度上说,Swoole 让 PHP 插上了异步的翅膀,让它飞得更高。当然swoole目前的资料并不是很完善,学习成本不亚于一门新语言,如果有条件建议学习go来替代。

2.4 架构设计可以说懂架构设计的程序员已经是一名合格的高级工程师了,同时也标志着你在从高级工程师到架构师转变,那么作为一个架构师,你需要懂哪些。其实,这是一个非常泛的话题,短短的一片文章是无法概述的。这里就简单提下高并发系统的架构,在一些大型企业项目中,都会有一套完备的高并发系统架构。高并发的系统架构都会采用分布式集群部署,服务上层有着层层负载均衡,并提供各种容灾手段(双火机房,节点容错,服务器灾备等)保证系统的高可用,流量也会根据不同的负载能力和配置策略均衡到不同的服务器上。比如经典的三层负载设计(Lvs层,接入层,服务层),当然架构远不止此,你要了解还有很多,比如异步处理,消息中间件,负载均衡算法,IO等。

2.5 前端全栈程序员,就一个标准,有独立开发项目的能力,有前后端整合的能力。能把各方面的各种框架应用整合到一起,所以懂前段也是一个优秀程序员的标准。

2.6 其它语言一个好程序员不仅要对本职语言有纵向深度,还要对其他的语言横向广度。java,go、python是不错的选择,php程序员学会其中一名语言,让你如虎添翼。