3.1 个人能力的衡量与发展
1.软件开发流程不光指团队的流程,还包括个人开发流程。把每个人的工作有序地组织起来,就是团队的流程。“有序”,并不是“无争论”。每个人的工作质量直接影响最终软件的质量。
2.初级软件工程师成长阶段
- 积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)
- 积累问题领域的知识和经验(例如:对医疗或金融行业的了解)
- 对通用的软件设计思想和软件工程思想的理解 (较虚)
- 提升职业技能(区别于技术技能):职业技能包括:自我管理的能力,表达和交流的能力,与人合作的能力,按质按量完成任务的执行力。
- 实际成果:绝大部分软件工程师的工作成果都是可以公开的,所参与的产品用户评价如何,市场占有率如何,对用户有多大价值?在其中起了什么作用?
3.软件开发的工作量和质量的衡量标准
- 项目/任务有多大?
- 花了多少时间?
- 质量如何?(可以用缺陷的数量来除以项目的大小,如 5 Bugs / KLOC 意味着每千行程序有5个缺陷)
- 是否按时交付?
软件领域可以分为两个方面:一方面是技艺创新的大爆发;而另一方面是坚持不懈的工程工作,包括软件的改善、维护和测试等,这一方面占了90%-95%的比例。对于这些任务,一个成熟的软件工程师应该能够降低任务交付的时间的标准差。在团队工作中,稳定、一致的交付时间是衡量一个员工能力的重要方面。
3.2 软件工程师的思维误区
软件工程师在开发过程中会走很多弯路,对软件的模块之间的依赖关系的极端态度都会导致延迟交付。
- 分析麻痹:想弄清所有细节、所有依赖关系之后再动手,心理上过于悲观
- 不分主次,想解决所有依赖问题
- 过早优化:在局部问题上陷进去,无视此模块对全局的重要性
- 过早扩大化/泛化
3.3 软件工程师的职业发展
1.如果我们对职业有认真的态度,就可以发现很多证明个人能力的方式。
2.需要有一些核心技术和许多扩展的知识,并在实际工作中不断学习和不断成长:
3.“不精通”者会把时间花在解决低层次问题上,所以要通过不断的练习,把那些低层次的问题变成不用经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。有了工程基础,再去谈高层次的“科研”。