【构建之法】第3章-软件工程师的成长

本章重点:

  • 评价软件工程师水平的主要方法
  • 技能的反面
  • 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]. 人民邮电出版社.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值