2018-2019-1 20189206 《构建之法》第三章 学习笔记
第三章 软件工程师的成长
个人能力的衡量与发展
软件开发团队与个人
软件开发流程不光光指团队的流程,还包括个人开发流程,软件团队也是由个人组成的。在团队的大流程中,也是每一个具体的人在负责开发、测试、用户界面设计、管理、交流等工作。
把每个人的工作有序地组织起来,就是团队的流程。
一个好的团队流程能把冲突的积极方面释放出来,而避免消极方面。
individual contributor (IC)
软件团队中,软件系统的大部分模块都是由个人开发或者维护,这些成员称作IC。
IC在团队中的流程:
通过交流、实验、快速原型等方法,理解问题、需求和任务
提出多种解决方法并估计工作量,其中包括寻找以前的解决方案,因为很多工作是重复性的
与相关角色交流解决问题的提案,决定一个可行的方案
执行,把想法变成实际中能工作的代码,同时验证方案的可行性其他特性
和团队的其他角色合作,在测试环境中测试实现方案,修复BUG。如果方案有严重的问题,就考虑其他方案。
在解决方案发布出去之后,对结果负责
软件工程师的成长
- 积累相关开发的知识,提升技术技能
- 积累问题领域的知识和经验
- 对通用软件设计思想和软件工程思想的理解
- 提升职业技能(区别于技术技能)
- 其中包括了自我管理能力、表达交流能力、与人合作能力、按质量完成任务的执行能力
- 实际成果
- 你的工作成果用户评价如何?是想占有率如何?对用户多大价值?你在其中起到了什么作用?
软件开发的工作量和质量的衡量
- 项目/任务大小
- 一般用代码量来衡量;或者用功能点衡量。
- 花了多少时间
- 质量如何
- 交付有两个概念,一个是代码完成时交给测试人员;另一个是软件最终发布时交给顾客。
- 是否按时交付
- 在工作团队中,稳定、一致的交付时间是衡量一个员工能力的重要方面
团队对个人的期望
TSP团队软件流程,对团队成员也有所要求:
- 交流:能够有效地与其他队员交流,从大的技术方向到看似微小的问题。
- 说到做到
- 接受团队赋予的角色并按角色要求工作
- 全力投入团队的活动
- 按照团队流程要求工作
- 团队有自己的流程,能力再强,也要按照团队指定的流程工作
- 准备
- 准备工作很重要!
- 理性地工作
软件工程师的思维误区
- 分析麻痹
- 极端情况就是想弄清所有细节、依赖关系之后再动手,不想修复问题,出了问题都赖在相关问题上。
- 不分主次,想解决所有依赖问题
- 这种极端情况是过于积极,想马上修复所有的主要和次要的依赖问题,而不是根据现有条件找到一个“足够好”的方案
- 过早优化
- 一个工程师在写程序时,经常容易在某一个局部问题上陷进去,花大量时间对其进行优化,无视这个模块对全局的重要性,甚至不知道“全局”是怎样的。
- 过早扩大化/泛化
解决大问题固然美好,但是所有的大问题都是从解决了无数的小问题上积累来的
软件工程师的职业发展
读完这一小节的内容,其实是很有感受的,学习也好工作也好,爱好是推动着我们不断前进的主要动力。比如在读书的时候,真的喜欢的内容读起来是十分有乐趣的,一方面想理解其中的逻辑,另一方面不断深究阅读。如果未来目标确定为软件工程师,那么就要发自内心地热爱和了解这份职业并向着职业的要求成长、学习。
职业成长
就像上一小节所说,规划自己的职业发展可以分为以下几个方面
考级之路
- 计算机等级考试 全国计算机技术与软件专业技术资格考试
- IEEE提供了一系列职业认证服务
Steve McConnell版本
首先一个软件工程师需要具备一定的知识和能力:
- 知识:将软件知识分为十大领域
- 能力
- 入门Intoductory
- 熟练Competency
- 带头人Leadership
- 大师Mastery
工程师需要做到以下几点:
- 阅读:4-6篇经典文献的深入分析和阅读
- 工作经验:参与并完成6个具体的项目
- 课程:参加3个专门的课程
技能的反面
当时在写简历的时候,知道在写技能的时候,会有精通-熟练-了解这些等级。
如何提高技能——通过不断的练习,把低层次的问题都解决里,变成不用大脑的自动操作,才有脑力来解决较高层级的问题。