首页 > 技术文章 > 2018-2019-1 20189206 《构建之法》第三章学习笔记

zz-1226 2018-12-02 21:15 原文

2018-2019-1 20189206 《构建之法》第三章 学习笔记

第三章 软件工程师的成长

个人能力的衡量与发展

软件开发团队与个人

软件开发流程不光光指团队的流程,还包括个人开发流程,软件团队也是由个人组成的。在团队的大流程中,也是每一个具体的人在负责开发、测试、用户界面设计、管理、交流等工作。

把每个人的工作有序地组织起来,就是团队的流程。

一个好的团队流程能把冲突的积极方面释放出来,而避免消极方面。

individual contributor (IC)

软件团队中,软件系统的大部分模块都是由个人开发或者维护,这些成员称作IC。

 IC在团队中的流程:

通过交流、实验、快速原型等方法,理解问题、需求和任务

提出多种解决方法并估计工作量,其中包括寻找以前的解决方案,因为很多工作是重复性的

与相关角色交流解决问题的提案,决定一个可行的方案

执行,把想法变成实际中能工作的代码,同时验证方案的可行性其他特性

和团队的其他角色合作,在测试环境中测试实现方案,修复BUG。如果方案有严重的问题,就考虑其他方案。

在解决方案发布出去之后,对结果负责

软件工程师的成长

  • 积累相关开发的知识,提升技术技能
  • 积累问题领域的知识和经验
  • 对通用软件设计思想和软件工程思想的理解
  • 提升职业技能(区别于技术技能
    • 其中包括了自我管理能力、表达交流能力、与人合作能力、按质量完成任务的执行能力
  • 实际成果
    • 你的工作成果用户评价如何?是想占有率如何?对用户多大价值?你在其中起到了什么作用?

软件开发的工作量和质量的衡量

  • 项目/任务大小
    • 一般用代码量来衡量;或者用功能点衡量。
  • 花了多少时间
  • 质量如何
    • 交付有两个概念,一个是代码完成时交给测试人员;另一个是软件最终发布时交给顾客。
  • 是否按时交付
    • 在工作团队中,稳定、一致的交付时间是衡量一个员工能力的重要方面

团队对个人的期望

TSP团队软件流程,对团队成员也有所要求:

  • 交流:能够有效地与其他队员交流,从大的技术方向到看似微小的问题。
  • 说到做到
  • 接受团队赋予的角色并按角色要求工作
  • 全力投入团队的活动
  • 按照团队流程要求工作
    • 团队有自己的流程,能力再强,也要按照团队指定的流程工作
  • 准备
    • 准备工作很重要!
  • 理性地工作

软件工程师的思维误区

  • 分析麻痹
    • 极端情况就是想弄清所有细节、依赖关系之后再动手,不想修复问题,出了问题都赖在相关问题上。
  • 不分主次,想解决所有依赖问题
    • 这种极端情况是过于积极,想马上修复所有的主要和次要的依赖问题,而不是根据现有条件找到一个“足够好”的方案
  • 过早优化
    • 一个工程师在写程序时,经常容易在某一个局部问题上陷进去,花大量时间对其进行优化,无视这个模块对全局的重要性,甚至不知道“全局”是怎样的。
  • 过早扩大化/泛化

解决大问题固然美好,但是所有的大问题都是从解决了无数的小问题上积累来的

软件工程师的职业发展

读完这一小节的内容,其实是很有感受的,学习也好工作也好,爱好是推动着我们不断前进的主要动力。比如在读书的时候,真的喜欢的内容读起来是十分有乐趣的,一方面想理解其中的逻辑,另一方面不断深究阅读。如果未来目标确定为软件工程师,那么就要发自内心地热爱和了解这份职业并向着职业的要求成长、学习。

职业成长

就像上一小节所说,规划自己的职业发展可以分为以下几个方面

考级之路

  • 计算机等级考试 全国计算机技术与软件专业技术资格考试
  • IEEE提供了一系列职业认证服务

Steve McConnell版本

首先一个软件工程师需要具备一定的知识和能力:

  • 知识:将软件知识分为十大领域
  • 能力
    • 入门Intoductory
    • 熟练Competency
    • 带头人Leadership
    • 大师Mastery

工程师需要做到以下几点:

  • 阅读:4-6篇经典文献的深入分析和阅读
  • 工作经验:参与并完成6个具体的项目
  • 课程:参加3个专门的课程

技能的反面

当时在写简历的时候,知道在写技能的时候,会有精通-熟练-了解这些等级。

如何提高技能——通过不断的练习,把低层次的问题都解决里,变成不用大脑的自动操作,才有脑力来解决较高层级的问题。

推荐阅读