《构建之法》开文提出一个观点 “软件 = 程序 + 软件工程 ”,而我们又知道 “程序 = 数据结构 + 算法” ,所以一个软件的开发就会包含到这几点,其中数据结构与算法是一个软件开发的基本,但是我们在开发软件的过程中要按照一个怎样的流程去设计,去编写,这就是软件工程所需要做的工作,在书中提到软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护的一个过程,它主要包括以下几点:
- 软件需求分析
- 软件设计
- 软件构建
- 软件测试
- 软件维护
软件工程确定了我们开发软件系统的步骤及其后续的维护工作,通过以往的对软件系统开发的理解,结合本书对软件工程的概述,我们可以清楚的认识到软件工程的重要性,它与我们所学习的计算机学科是相辅相成的,计算机理论的进展可以帮助软件工程更好的发展与评估,而软件工程的进展又可以帮助计算机学科做出更多的探索。
1、软件工程的目标——创作 ”足够好“的软件:
书中提到部分人认为 ”好软件“ 就是没有Bug的软件,软件工程就是解决软件中的Bug的过程,但是还需考虑的一点就是客户需求,所以软件工程就是尽可能的去解决Bug且要满足客户需求,所以我产生一个疑问:
在软件系统开发中,如何才能最有效的、最迅捷的设计研发出 “好软件” ,满足客户的需求?
2、软件工程师的成长及个人技术
多人合作完成一个软件的研发,不同人员的工作相互有依赖关系,此时就需要新建单元测试去解决代码模块的耦合度,单元测试的特点是可以准确、快速的保证程序基本模块的正确性。在开始软件系统研发时,必须进行需求分析,之后则是模块的划分,人员的分配,但是很多程序员是无法对自己的能力进行一个比较全面的系统的衡量,所以这直接关系到了软件的质量与研发的时长,所以在研发软件的过程中,就会产生这样一个问题:
如何对一个程序员的能力在最短的时间内做一个全面的衡量及如何制定一个合适的职业发展计划?
3、敏捷的流程
“敏捷流程” 是一系列价值观和方法论的集合,它摒弃了许多现阶段软件开发的方式,最大化的去加快软件开发的时间,它的步骤主要有三步:
- 找出完成产品需要做的事情——Product Backlog
- 决定当前的冲刺需要解决的事情
- 冲刺(每日例会)
- 得到软件的一个增量的版本,发布给用户
敏捷流程在执行中也会遇到如下问题:
- 如何在计划中体现依赖关系?
- 如何合理化的分配任务?
- 如何提高冲刺是每日例会的价值?
而且,敏捷流程中需要业务人员和开发人员每天进行实时的交流,所以在研发过程中需求是可能会发生很多改变的,由此,产生一个疑问:
如何去有效的调节需求的改变对当前已完成开发内容的影响,及如何降低各个开发人员之间开发模块的耦合度?
4、软件的设计及实现
一个开发人员在拿到一份需求文档,它会对其进行一个全面的分析,书写设计文档,估计研发时间,确定开发流程等,所以,就会存在一个问题:
如何通过一份需求文档确定设计文档,及进行合理的规划及制定开发流程?
5、IT行业的创新及绩效管理
IT行业的迅速发展与IT界的创新是密不可分的,当今世界,仿佛只有有创新的点才能在最短的时间内迅速的成长与发展,我们也知道,其实创新的思维也许就在灵光一闪之间,当然只是拥有一个好的想法是不能成功的,在有创新的点之后,重要的是如何去实现它,只有专注与它,你才可能获得成功。
每一个大型的软件系统都需要一个团队去紧密的合作去完成,所以作为一个工程师,如何才能衡量个人在团队中的绩效是一个重中之重,书中提到为了更好的客观反映员工绩效的不同因素,很多公司实施过二维的评价体系:
- 完成任务的维度
- 团队贡献维度
在看完这些之后,我有以下疑问:
在拥有一个好的创新点后,如何去有效的实施它?如何最公平的去衡量一个程序员在团队中的绩效?