本章重点:
- 评价软件工程师水平的主要方法
- 技能的反面
- TSP对个人的要求
- 软件工程师的思维误区
1 个人能力的衡量与发展
软件工程包括了开发、运营、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营、维护的效率,以及提升用户满意度、软件的可靠性和可维护性。
软件开发流程不光指团队的流程,还包括个人开发流程。
1.1 初级软件工程师如何成长
- 积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力);
- 积累问题领域的知识和经验(例如:对游戏、医疗或金融行业的了解);
- 对通用的软件设计思想和软件工程思想的理解;
- 提升职业技能(区别于技术技能):包括自我管理能力、表达和交流能力、与人合作的能力、按质按量完成任务的能力等;
- 实际成果。
1.2 软件开发的工作量和质量衡量
- 项目/任务有多大?:说明项目的大小,一般用代码行数(Line Of Code,LOC)来表示,也可以用功能点(Function Point)来表示;
- 花了多少时间?:可用人月来表示,例如某项目花费了10个人×月;
- 质量如何?:交付的代码中缺陷数量,可以用缺陷的数量除以项目大小来表示,例如5 Bugs/KLOC,意味着每千行程序有5个缺陷。这里***交付***有两层含义,即在代码完成(Code Complete)时交付给测试人员,以及在软件最终发布时,交付给顾客;
- 是否按时交付?。
1.3 团队对个人的期望
- 能有效与其他团队成员交流;
- 说到做到(按时交付);
- 接受团队赋予的角色并按角色要求工作;
- 全力投入团队的活动;
- 按照团队流程的要求工作;
- 开始做事(开会讨论、一个新功能、一个新项目等)前做好准备工作;
- 理性地工作:不要被个人的感情等因素驱动;
2 软件工程师的思维误区
2.1 分析麻痹(Analysis Paralysis)
一种极端情况是想弄清楚所有细节、所有依赖关系之后再动手,心理上过于悲观,不想修复问题,出了问题都赖在相关问题上。分析太多,没法起步前进。
2.2 不分主次,想解决所有依赖问题
另一种极端是过于积极,想马上动手修复所有主要和次要的依赖问题,然后就可以“完美地”达成最初设定的目标,而不是根据现有条件找到一个“足够好”的方案。
2.3 过早优化
既然软件是“软”的,那它就有很大的可塑性,可以不断改进。要避免在某一个局部的问题上陷进去,要考虑这个模块对于全局的重要性,从“全局”考虑问题。
2.4 过早扩大化/泛化(Premature Generalization)
软件的“软”还表现在它可以扩展。
3 软件工程师的职业发展
为何而工作?
- 临时的寄托或工作(Temporary Work):这类人往往处于低动力、低技能的状态;
- 工作(Job):养家糊口;
- 职业(Profession):对于自己的未来职业都有一定的打算;
- 投身的事业(Commitment/vocation):将其作为长期承诺,遇到困难不退缩,直到完成任务;
- 理想的呼唤(Calling):通过软件改变世界。
理解“专”和“精”的区别
3.1 职业发展-考级之路
职业资格考试:
- 计算机等级考试
- 全国计算机技术与软件专业技术资格考试
公司提供的针对自己产品的职业认证项目(Certified Program):
- 微软公司:微软认证专家(Microsoft Certified Professional,MCP)
- 甲骨文公司:Oracle认证项目(Oracle Certification Program,OCP)
行业协会认证:
- IEEE(电气电子协会):一系列的职业认证服务
- 中国计算机学会:计算机职业资格认证考试
- 以浙江大学计算机学院为首开发的:计算机程序设计能力考试
3.2 职业成长-Steve McConnell版本
认为软件工程师需要具备一定的知识和能力。
知识 | 能力 |
---|---|
把相关的软件知识分为十大知识领域 | 一个工程师对这些知识的掌握分为如下四个阶段 |
/ | 入门(Introductory) 熟练(Competency) 带头人(Leadership) 大师(Mastery) |
3.3 职业成长-大公司版本
微软公司的软件工程师职业等级:
等级 | 要求 |
---|---|
SDE(初级软件开发工程师) | 入门。在学校里学到了一些技能,尚未在实践中得到充分锻炼 |
SDE Ⅱ(中级软件开发工程师) | 独立。可以写别人交给你的任何东西,不明白时指导去问谁 |
Senior SD()高级软件开发工程师) | 小组领导。影响着3-12名工程师,或者是他们的行政领导;或者是它们的技术带头人 |
Principal SDE(首席软件开发工程师) | 团队领导。影响着10人以上的一个大团队,成为影响团队成败的关键人物 |
更高的职位有:Partner SDE、Distinguished Engineer、Technical Fellow | 影响力扩大到整个机构,甚至工业界 |
3.4 职业成长-自我评估
详见:https://www.cnblogs.com/xinz/p/3852177.html
4 技能的反面
5 参考
[1]邹欣. 构建之法:现代软件工程(第三版)[M]. 人民邮电出版社.