软件开发的升级打怪攻略:从新手到高级工程师
通过对软件开发中的工作事务与微技能进行评估和分级,可以清晰地理解工作构成、评估当前水平、定位下一步发展的方向和思路。
核心技能: 技术、编程、交流、合作、公众表达、规划、执行。
两个维度: 开拓新的领域; 分享已完成的成果。
难度系数 *** 1 (新手上路)
1. 完成页面测试;
2. 编写简明的文档;
3. 能够理解基本业务;
4. 日常普通的交流;
5. 下载所需要的软件和工具;
6. 完成简单的脚本实现临时需求;
难度系数 *** 2 (亦步亦趋)
1. 完成一个带命令行参数的实用脚本小工具;
2. 完成一个函数或方法的单测;
3. 完成一个服务接口的测试用例;
4. 使用函数来结构化程序的组织;
5. 使用数组、集合、列表、映射等容器来组织程序的数据;
6. 使用系统API或库函数来操作文件与目录;
7. 学会使用工作中需要用到的软件与工具;
8. 搭建软件开发环境,解决其中遇到的困难;
9. 编译和运行应用,部署应用运行的服务器环境;
难度系数 *** 3 (初出茅庐)
1. 自己动手实现基本数据结构(数组、链表、栈、队列、二叉树、位图)的基本操作;
2. 自己动手实现基本算法(排序、查找、选择、分治、递归、映射、过滤、聚合、动态规划);
3. 完成一个小改动需求,小的 bugfix 或功能优化,含测试;
4. 编写脚本实现软件开发环境的自动化搭建;
5. 学习和理解业务并梳理成文档;
6. 绘制业务流程图、思维导图等;
7. 理解小组成员的想法和构思,比较顺畅与小组成员交流;
8. 聆听和理解产品需求并能和产品同学好好说话;
9. 参加分享时预先准备, 会上做个发言或提问;
难度系数 *** 4 (初露锋芒 - 初级工程师)
1. 权衡优先级,进行一天的工作内容规划;
2. 总结业务、项目与学习实践心得,博客分享赢得读者;
3. 实现有难度的数据结构的算法,比如B+树编程;
4. 能够排查普通或略偏难度的问题或BUG;
5. 能够编写实用而健壮的监控脚本或数据订正脚本;
6. 学习和使用设计模式来改善面向对象程序的结构;
7. 编写实用而得当的业务文档、项目文档;
8. 有能力与团队成员就技术工程议题进行交流讨论并发表见解;
9. 能够理解比较复杂的业务并将其分解为可以规划和实施的子业务;
10. 理解项目管理方法并能适当调节个人活动与项目总体进度保持同步;
11. 理解产品设计与开发要点并能有效实现;
12. 理解和完成前后端组件的交互、前后端团队的协作;
13. 适宜地发送私人邮件和公众邮件表达个人意见;
14. 使用通讯工具简洁地私人答复和公开表达想法;
15. 组织团建、预定会议室并主持团队周会;
难度系数 *** 5 (风雨兼程 - 中级工程师)
1. 实现复杂结构的编程, 复杂结构可能是List, Map 嵌套的复合结构,或者图结构;
2. 实现含算法的综合编程, 比如迷宫回溯(含GUI);
3. 实现并发异步的编程, 比如 Ajax 编程, 并发实现词典的单词统计计数;
4. 实现针对特定需求的可扩展的微框架的设计与实现;
5. 编写测试框架和测试用例,实现可重复自动化测试;
6. 理解分布式系统的整体架构设计,并完成普通业务开发;
7. 对代码质量有比较深入的理解,能够坚持良好的编程风格;
8. 完成一项需求的概要设计和详细设计(含数据库设计);
9. 绘制子系统或子模块的整体框架图或架构设计图;
10. 完成一项之前没有做过的技术工程工作,比如线上大流量服务分流;
11. 能够排查比较深层次的业务方面的问题和BUG并进行修复;
12. 确保负责的子系统的发布平滑完成;
13. 参与和完成跨团队中型项目的开发,并参与第一次凌晨发布;
14. 研究一个模块的源代码实现;
15. 快速学习和应用一门新技术,比如HBase ;
16. 能够说服和邀请团队成员加入自己开展的项目;
17. 理解、研究和讨论一项重要议题,并在会议上做出适当的发言;
18. 能够在较小范围公众场合镇定地演示自己的工作成果;
19. 完成一次良好的晋升面试;
20. 对一个业务主题做仔细的调研,并完成项目立项工作;
21. 对一个中型需求做仔细的设计,并邀请团队成员进行设计评审;
22. 在团队中分享在学习工作中掌握的新思想、新技术、新成果;
23. 规划个人的季度总体目标及实施计划;
24. 执行个人的季度总体目标及实施计划;
难度系数 *** 6 (激流勇进 - 高级工程师)
1. 主导完成一个中型需求的开发,涉及需求理解、详细设计与实现、联调沟通、测试部署、线上运维等综合技能;
2. 实现分布式系统下的复杂业务开发,涉及事务、并发控制等;
3. 完成中大型跨团队项目的开发与合作;
4. 独立负责一个中小系统的日常开发与维护工作;
5. 深入到系统底层或框架内部细节排查细微的问题或BUG;
6. 评估多个子应用或服务之间的依赖关系并保证无故障同步升级发布;
7. 对系统的业务与模型进行抽象和解耦,实现可扩展和可维护的设计;
8. 绘制应用的整体框架图或架构设计图,从整体上思考问题的解决;
9. 理解和把握公司、部门、团队的总体目标及方向;
10. 规划个人的年总体目标及实施计划;
11. 执行个人的年总体目标及实施计划;
12. 规划小组的整体图景和方向;
13. 执行小组的整体图景和方向;
14. 指导初级工程师完成日常技术工作创造贡献;
15. 创造性地使用新方法解决问题改善工作效率;
16. 完成普通项目的技术选型;
17. 推进跨团队事务的如期完成;
18. 流畅地与团队成员、TL、管理层进行交流和汇报;
----------------------------------- 分割线: 以下纯属 YY ------------------------------
难度系数 *** 7 ( 劈波斩浪 - 专家,基层管理 )
1. 主导完成一个独立子业务的服务化迁移;
2. 主导完成一个独立子系统的重构;
3. 有影响力地演示团队的工作成果与公司的品牌形象;
4. 善于从整体上思考问题的解决方案并形成考虑周全的开放方案;
5. 组建精悍团队来做有意义的项目或产品;
6. 规划跨业务团队的总体目标及实施计划;
7. 带领小组成员实现季度、年规划目标;
8. 为重大项目做技术选型、架构设计或技术咨询;
9. 指导中高级工程师做出优秀的工作成果和贡献;
10. 在某个专业技术领域发挥着突出的技能和贡献;
11. 综合运用知识、技能、经验、直觉等完成技术难题的攻克,比如交易引擎的设计与开发;
12. 综合运用知识、技能、经验、直觉等创造性地改善团队生产效率,比如自动化生成测试;