开发工程师技能提升规划

引言:

技术人是一门需要不断学习、不断成长的人生,对于一名新的开发同学还是工作多年的开发同学而言,一个清晰的职业规划能帮助其明确学习目标与学习方向,以助在未来走得更远。

在技术发展中,从一名初级技术人,不断积累经验、掌握越来越多技能,慢慢晋升到高级开发工程师后,面临的职业规则分叉点,每个人都有不同的选择:晋升架构师?转型管理?技术经理?

这里的技术提升规划,主要是针对从初级、中级到高级这三个过程中需要掌握的哪些技能树以及掌握的程度要求做一个明确叙述。

职业规则发展规划图:

开发工程师职业发展规划图

第一阶段:初级开发工程师

  • 适用人群:实习生、应届校招生
  • 技能目标:至少掌握熟练的一门开发语言,有产出,能在指导下实现简单功能,代码质量较稳定,能满足业务需求
  • 技术掌握:
# 开发语言  
基本掌握项目使用的开发语言(PHP/Java/C/C++/Python等) 
理解开发语言的基本特点按照编码规范编写代码,保证代码的可读性、风格的一致性和关键注释。
使用惯用法来规范开发,提升开发效率。
背景知识:
*了解多进程模型
*了解常用数据结构和算法,可单独开发一般模块
*掌握数据库的使用。

# 网络知识  
了解基本的网络原理。
HTTP协议
TCP协议
七层网络模型与TCP/IP协议族

# 框架、工具
对应开发语言常用的框架
了解常用的web服务器如apache、nginx等的基本配置;
使用版本管理工具,如SVN,GIT;
了解Linux常用命令。

# 安全知识
具备基本的安全意识,能做基础的过滤、校验与加密等
# 工程实践
理解单元测试、性能测试等手段


# 设计能力  
了解
* 面向对象的编程
* uml的表示法
* 理解高内聚、低耦合的思想,并在程序上有体现

# 性能    
了解
* 衡量性能基本指标 (QPS, 等)

# 可维护性  
了解:
* 有关键的注释
* 有关键路径和便于查错的日志 
* 有单元测试

# 可用性 
了解日常可用性的目的与哪些实现方式

第二阶段:中级开发工程师

  • 适用人群: 两年以上工作经验
  • 技能目标: 能独立完成编码工作,开发让人放心项目
  • 技术掌握:
开发语言    
精通

*精通一门编程语言,理解该语言的运行机制与原理
*代码可读性强、优雅。没有重复代码;
背景知识:
*熟练使用Unix操作系统。熟练掌握多线程与多进程程序开发
*熟练掌握数据库使用

网络知识    
应用
* 熟悉REST 接口规范
* 熟悉服务端主动推送技术,包含SSE,WEBSCOKET等协议
* 熟悉HTTP 2.0协议

能够分析网络协议,掌握
tcpdump、wireshark等抓包工具

*能对某一个工作中用到的网络协议有比较全面的了解,能够定位和解决各种协议问题,如: tcp状态变迁、ip粘包、tcp加速等

框架、工具   
精通
* 深入理解所使用的开发框架,特性,及其优缺点,能快速定位问题;
* 对于使用WEB服务器,理解其结构、原理和设计思想;
* 可以使用桩、Mock技术,构建测试用例
熟练使用消息队列,能够构建异步应用



安全知识    理解针对 Web 应用常见攻击方法(如 XSS、CSRF、SQL 注入、绕过校验、畸形数据等)及其原理,能有针对性地加以防御。
工程实践    
*理解工作流的概念,能够至少运用git/github/gitlab flow其中一个或多个工作流

*掌握常用单元测试框架,能够为自己的代码提供覆盖率合格的单元测试

*理解各种产品交付组织形式的原理和差异,并能正确选择合理的交付方式,如tar/rpm/docker等

理解瀑布、迭代、螺旋、敏捷等开发模式的优劣,以及可能的问题
设计能力    
应用:
* 掌握面向对象设计原则
* 分层设计思想
* 熟练使用设计模式。
完善的技术文档编写能力
熟练满足常规数据存储,查询需求,满足性能要求

*理解流量、延迟、错误率、负载等监控指标

*了解docker容器的原理及用途,熟悉至少一种容器编排框架,如k8s/swarm等

*了解虚拟机的基本原理及用途

性能  
应用
* 能使用性能测试工具获得数据(例 siege)。
* 能使用性能分析工具,找到瓶颈并解决(例 Xhprof);

可维护性    
应用:
* 有关键环节的监控告警方案
* 建立系统统一的日志规范

可用性 
应用:系统稳定,没出故障
* 有系统过载时,容错,降级服务的设计方案
* 升级向下兼容方案

第三阶段:高级开发工程师

  • 适用人群:五年以上工作经验
  • 技能目标: 能领导中大型系统的设计,推到项目的有序开展
  • 技术掌握:
开发语言    
应用并改进:
*掌握非阻塞程序设计与开发
*深刻理解多种开发语言特点,合理选用语言
*能扩展动态语言,改进其不足,
*可多语言混合编程



网络知识    
掌握网络高并发模型,如epoll ,select, poll

能够合理设计业务的分层协议,并形成合理的通信架构

框架、工具   
能够快速修复,开发框架BUG,规避框架缺点带来问题
* 能改进、扩展所使用的应用框架
* 可以编写Web服务扩展,或使用其扩展技术



安全知识    具有比较全面的 Web 应用安全防御经验,能部署和执行系统级的抗攻击方案
工程实践    *理解好的软件在于设计,在于好的模型,能对负责的模块进行中短期的规划,做到有效减少迭代和重构

*有强烈的效率意识,能通过合理手段,有效减少重复劳动,减少时间人力开销

*能够总结经验,并转换成自动化工具和业务支撑平台,提升团队效率
设计能力    
精通:

* 采用恰当设计,且不过度;
* 能合适在系统使用同步、异步机制
* 可以清晰表达系统的静态结构和动态行为、部署结构
* 能通过可扩展的架构设计提升性能
* 可以进行分布式中大系统的设计。
大数据下有完善的数据存储,查询方案

*优秀的分层和抽象能力,设计具有一定弹性的架构

*注重灾备,能够设计有效的数据容灾方案

性能  
精通
* 能合理使用cache、异步化、异构等优化系统性能
* 能合理使用多种软硬件特性,提升整体性能

综合运用性能调优工具,解决复杂的性能问题,如:内存分配、io调度、指令缓存命中率、CPU亲和性等
*从多个层面分析负载变化趋势,优化性能调优策略

可维护性    
精通:
* 完善的预警体系,可早期发现局部问题

可用性 
了解:
* 多机房部署高可用性的方案

你可能感兴趣的:(开发工程师技能提升规划)