第四周读书笔记
第一章 概论
本章主要介绍了软件工程是什么?软件工程的目标是什么?为了解决前一个问题,作者首先提出了两个等式:
程序 = 数据结构 + 算法
软件 = 程序 + 软件工程
为了解释软件行业赖以生存的“软件”,程序员安身立命的“程序”是什么?作者举了移山公司程序员编写一个自动生成加减法题目的软件的故事,生动形象地阐述了程序就是指源程序,就是一行行的代码,是建立在数据结构上的一些算法。若是扩充功能,就转变成了一个应用软件。在此基础上,若能保证维修,则转变成软件服务。作者还提到了软件的商业模式,于是得到一个推广的公式:
软件企业 = 软件 + 商业模式
紧接着,作者谈到了软件开发的过程,过程包括玩具阶段、业余爱好阶段、探索阶段、成熟的产业阶段。在讨论商业软件和爱好者的程序时,作者举了一个有趣的例子,如果有一个航班没有配置安全设备,你会去乘坐吗?我比较喜欢旅游,每年都坐飞机,虽然在航行过程中确实没有用到任何安全设备,但是这样的飞机我不敢乘坐,上面这个例子说明了,爱好者开发的软件,很少会考虑给软件加上“安全功能”。从而在软件高速运行的过程中,如果出现异常,不能保证安全退出,并且不破坏用户数据。由此可见,对于真正的软件开发我还有很长的一段路要走,
接下作者谈到了本章的一个重点,软件工程究竟是什么?这和计算机科学有什么区别?看了作者的论述,再结合自己的理解我觉得计算机理论的进展会帮助软件工程(例如对程序正确性的分析),软件工程的进展(包括更好的工具,更广的应用领域)会帮助计算机科学家更有效的进行试验和探索。
最后作者提到了软件工程的目标是什么?软件工程的目标是创造“足够好”的软件,好的软件指没有“bug”的软件,bug的多少可以直接衡量一个软件开发的效率,用户满意度,可靠性,可维护性。但这也不是绝对的,例如买车,玛莎拉蒂从各个角度上讲都是优于五菱宏光的,然而仍然有不少人会买五菱宏光,为什么呢?这是因为五菱宏光已经满足了他们的需求,没有必要买玛莎拉蒂。况且有实际用处,且无bug的软件是不存在的,我们要做的仅仅是满足客户的需求,在客户规定的时间内,完成开发,bug要尽可能的少,同时这个程序要有可靠性和可维护性。
第二章 个人技术和流程
本章主要讲了单元测试、回归测试、效能分析、PSP。由于我没有用vsts写单元测试,更不要说建立在单元测试上的回归测试,页没有用performance进行过效能分析,所以对本章内容理解不深。但从总体上讲,单元测试的目的是为了确保我们所写的模块能被他人调用,并且代码清晰易懂,不影响其他模块。回归测试是指程序出错时能回退到正常运行的状态。效能分析为了发现程序性能瓶颈,提高程序运行的速度。在将效能分析的过程中,作者举例一个例子说明在for循环中的判断不要调用函数,因为这个函数在每轮循环结束之后都会被调用一次。如 for(int i = 0; i < num.count(); i++)在这行代码中没轮循环结束之后都会调用一次num.count()浪费了很多时间。
第三章 软件工程师的成长
本章主要讲了软件工程师的个人能力的衡量与发展、职业发展着两个方面,对于一个软件工程师,个人能力尤为重要,如果个人能力不足,何谈团队协作,以及项目开发呢?个人能力包括,软件开发的相关知识、经验,软件工程思想,职业技能和实际成果。在谈职业发展时,说明了考级,公司以及自我评估三个大方向的发展。其中让我比较在意的是微软软件工程师的职业等级,从表格中可以看出从低级工程师到高级工程师不仅仅是个人能力的提高,更要注重身份的转变,即从执行者转变成决策者,低级工程师仅仅是完成上级布置下来的任务,而高级工程师要参与到项目的决策中。